무제한 소비 (인공지능)
더 많은 작업
- Unbounded Consumption; 무제한 소비
- LLM 애플리케이션이 사용자의 추론 요청을 제한 없이 받아, 서비스 거부·비용 폭증·모델 복제로 이어지는 취약점
무제한 소비(Unbounded Consumption)는 대형 언어 모델(LLM) 애플리케이션이 사용자가 과도하고 통제되지 않은 추론을 하도록 허용해서 생기는 위험이다. LLM 추론은 요청 하나에도 GPU 연산이 많이 들고 클라우드에서는 쓴 만큼 돈을 내므로, 요청량·입력 길이·출력 길이·반복 횟수에 한도가 없으면 서비스가 멈추거나 요금이 감당할 수 없이 늘어난다. 같은 무제한 질의로 모델의 출력을 대량 수집해 모델을 복제할 수도 있다.[1]
OWASP Top 10 for LLM Applications에서 2023년판의 "모델 서비스 거부"(LLM04 Model Denial of Service)가[2] 2025년판에서 비용과 모델 탈취까지 포함하도록 넓어져 LLM10 무제한 소비가 되었고, 2026년판에서는 LLM06으로 올라왔다.[3] "무제한 소비"는 OWASP 2025년판 공식 한국어판의 표기다. 일반 IT의 소비와 구분하려고 제목에 "(인공지능)"을 붙였다.
OWASP 2025년판이 드는 유형은 다음과 같다.[1]
| 유형 | 내용 | 주된 피해 |
|---|---|---|
| 가변 길이 입력 범람 | 길이가 제각각인 입력을 대량으로 보내 처리 비효율을 노린다 | 가용성 |
| 지갑 거부(Denial of Wallet, DoW) | 사용량 과금 구조를 노려 대량 요청으로 운영자의 비용을 늘린다 | 비용 |
| 지속적 입력 초과 | 컨텍스트 윈도우를 넘는 입력을 반복해 보낸다 | 가용성 |
| 자원 집약적 질의 | 처리가 특히 비싼 복잡한 질의를 보낸다 | 가용성, 비용 |
| API를 통한 모델 추출 | 조작한 입력으로 출력을 모아 부분 복제 모델을 만든다 | 기밀성 |
| 기능적 모델 복제 | 대상 모델의 출력을 합성 학습 데이터로 써서 다른 모델을 미세 조정한다(지식 증류의 악용) | 기밀성 |
| 부채널 공격 | 입력 필터링을 우회해 가중치나 구조 정보를 빼낸다 | 기밀성 |
모델 추출 쪽은 모델 추출 공격 문서에서 자세히 다룬다. 이 문서는 가용성과 비용 쪽을 중심으로 본다.
전통적인 서비스 거부 공격은 서비스를 멈추는 것이 목표지만, 지갑 거부는 서비스가 자동 확장으로 버티는 동안 요금이 쌓이게 하는 것이 목표다. LLM API는 토큰 단위로 과금되므로 긴 입력과 긴 출력을 끌어내는 요청이 특히 비싸다. MITRE ATLAS는 이를 비용 수확(Cost Harvesting, AML.T0034)이라는 기법으로 두고, 단순한 질의를 대량으로 보내는 방식(AML.T0034.000), 적은 수의 비싼 질의(AML.T0034.001), 에이전트의 컨텍스트에 프롬프트를 넣어 반복 호출을 일으키는 에이전트 자원 소비(AML.T0034.002)로 나눈다. 공격자가 남의 연산 자원을 자기 목적으로 쓰는 자원 탈취와 달리, 비용 수확은 피해자에게 금전 피해를 주는 것이 목적이라고 구분한다.[4]
에이전트에서는 위험이 더 커진다. 웹 페이지에 숨긴 지시 하나로 에이전트가 페이지 요청이나 도구 호출을 끝없이 반복하게 만들 수 있다. OWASP 2023년판도 LLM 도구가 페이지를 읽다가 추가 요청을 대량으로 하게 만드는 웹 페이지를 예로 들었다.[2]
스펀지 예제(sponge examples)는 모델의 에너지 소비와 지연 시간을 최대로 늘리도록 만든 입력이다. 2020년 Shumailov 외 연구진은 기존 비전·언어 모델에서 에너지 소비를 10~200배 늘리는 입력을 찾았고, CPU, GPU를 비롯한 여러 가속기, ASIC 시뮬레이터 사이에 이식된다는 것을 보였다. 자율주행 인식처럼 시간이 중요한 곳에서 판단을 늦출 수 있다는 점도 지적했다.[5] NIST AI 100-2 E2025는 이를 가용성 침해 공격 중 에너지-지연 공격(NISTAML.014)으로 분류한다.[6] 언어 모델에서는 출력 길이를 최대로 끌어내는 입력이나, 추론 모델이 긴 사고 과정을 쓰게 만드는 문제가 같은 계열이다.
OWASP 2025년판의 대책 중 가용성·비용과 관련된 것은 다음과 같다.[1]
- 입력 크기 제한: 입력 토큰 수와 파일 크기에 상한을 둔다.
- 속도 제한과 사용자 할당량: 사용자·API 키별로 시간당 요청 수와 토큰 수를 제한한다.
- 시간 제한과 스로틀링: 오래 걸리는 작업에 타임아웃을 둔다.
- 큐와 전체 작업 수 제한, 동적 확장과 부하 분산, 과부하 때 기능을 줄여 버티는 우아한 성능 저하(graceful degradation).
- 기록·감시·이상 탐지: 사용량 급증을 경보한다.
- 샌드박스: 모델이 접근할 수 있는 네트워크와 내부 API를 제한한다.
모델 추출 대책으로는 logit·logprob 노출 제한, 출력 워터마크(AI 워터마크), 접근 통제, 모델 목록(레지스트리) 관리를 든다.
실무에서는 다음 한도를 겹겹이 둔다.
| 위치 | 한도 |
|---|---|
| 요청 하나 | 입력 토큰 상한, 출력 토큰 상한(max_tokens), 추론 모델의 사고 예산, 타임아웃
|
| 사용자·키 | 분당 요청 수, 분당·일당 토큰 수, 동시 요청 수 |
| 에이전트 실행 | 도구 호출 횟수, 반복 단계 수, 실행당 비용 상한 |
| 조직·계정 | 월 예산 경보와 하드 한도(클라우드 결제 한도) |
다음은 사용자별로 분당 토큰 예산을 두는 토큰 버킷의 최소 구현이다.
import time
class TokenBudget:
"""사용자마다 분당 rate개의 토큰을 채워 주고, 요청이 쓸 토큰만큼 뺀다."""
def __init__(self, rate_per_min: int, burst: int):
self.rate = rate_per_min / 60.0
self.burst = burst
self.state = {} # user -> (남은 토큰, 마지막 시각)
def allow(self, user: str, cost: int) -> bool:
now = time.monotonic()
tokens, last = self.state.get(user, (self.burst, now))
tokens = min(self.burst, tokens + (now - last) * self.rate)
if cost > tokens:
self.state[user] = (tokens, now)
return False
self.state[user] = (tokens - cost, now)
return True
budget = TokenBudget(rate_per_min=20_000, burst=12_000)
MAX_OUTPUT = 1_024
def handle(user: str, prompt_tokens: int) -> str:
if prompt_tokens > 4_000:
return "413 입력이 너무 깁니다"
if not budget.allow(user, prompt_tokens + MAX_OUTPUT): # 최악의 출력까지 미리 차감
return "429 잠시 후 다시 시도하세요"
return "200 처리" # 실제로는 max_tokens=MAX_OUTPUT으로 모델 호출
print([handle("u1", 3_000) for _ in range(3)]) # ['200 처리', '200 처리', '429 잠시 후 다시 시도하세요']
출력 토큰은 생성이 끝나야 알 수 있으므로 상한만큼 먼저 차감하고 나중에 실제 사용량으로 정산하면 된다. 개별 한도보다 중요한 것은 키 유출 대비다. OWASP 2023년판은 유출된 관리자 토큰으로 API 속도 제한 자체가 바뀐 소스그래프(Sourcegraph) 사고를 예로 들었다.[2]
- ↑ 1.0 1.1 1.2 OWASP, LLM10:2025 Unbounded Consumption
- ↑ 2.0 2.1 2.2 OWASP, LLM04: Model Denial of Service (2023/24)
- ↑ OWASP, Top 10 for LLM Applications 2026, 2026-08-03.
- ↑ MITRE ATLAS 데이터, ATLAS-2026.09 기준, AML.T0029 Denial of AI Service, AML.T0034 Cost Harvesting.
- ↑ Ilia Shumailov 외, 〈Sponge Examples: Energy-Latency Attacks on Neural Networks〉, IEEE EuroS&P 2021. arXiv:2006.03463
- ↑ NIST AI 100-2 E2025, Adversarial Machine Learning: A Taxonomy and Terminology of Attacks and Mitigations, 2025-03