leejk/ jk lee
Research

프롬프트 인젝션

확률적 가드의 천장, 그리고 보장이 모델 밖으로 내려가는 이유

·
#research#prompt-injection#agent-security#mcp#llm-security

인젝션을 모델이 알아서 무시하게 만드는 방어엔 천장이 있다. 1차 출처를 직접 파보니 — AgentDojo에서 최선의 방어도 공격 성공률을 6.84%까지만 낮췄고, 가드용 LLM은 같은 인젝션에 최대 100% 뚫린다. 버티는 쪽은 하나뿐이다: 신뢰 경로에서 모델을 빼고, 모델 출력이 무엇을 할 수 있는지를 모델 밖 결정론 레이어가 제약하는 설계(CaMeL·dual-LLM·LACUNA·와이어 가드). 남은 논쟁은 막느냐가 아니라 그 결정론 경계를 어디에 두느냐다.

TL;DR. 인젝션을 모델이 알아서 무시하게 만드는 방어엔 천장이 있다 — AgentDojo에서 최선의 방어도 공격 성공률을 6.84%까지만 낮췄고, 가드용 LLM은 같은 인젝션에 최대 100% 뚫린다. 1차 출처를 직접 파보니 버티는 쪽은 하나뿐이다: 신뢰 경로에서 모델을 빼고, 모델 출력이 무엇을 할 수 있는지를 모델 밖 결정론 레이어가 제약하는 설계. 남은 논쟁은 "막느냐"가 아니라 그 결정론 경계를 어디에 두느냐다.

무엇이 실제로 인젝션을 막는가 — 합의가 없다

2025년 6월, Microsoft가 EchoLeak(CVE-2025-32711, CVSS 9.3)를 패치했다. 출시된 프로덕션 LLM 제품에서 처음 공식 확인된 제로클릭 indirect 인젝션이다 — 공격자가 보낸 평범한 이메일 한 통이 M365 Copilot 컨텍스트에 얹히고, 사용자가 나중에 아무 업무 질문을 하면 Copilot이 그 이메일의 숨은 지시를 읽어 SharePoint·OneDrive·Teams 내부 데이터를 공격자 쪽으로 유출한다. 클릭도 첨부 열람도 없다(Aim Labs 발견·보고). "모델이 untrusted 텍스트를 읽는다" 는 게 가설이 아님을 못박은 사례다.

프롬프트 인젝션은 OWASP LLM Top 10에서 2판 연속 LLM01, 1위 위험이다. 특히 indirect 인젝션 — 에이전트가 읽는 외부 콘텐츠(웹페이지·파일·이메일·툴 응답)에 명령을 숨겨 행동을 가로채는 것(Greshake et al., 2023) — 은 에이전트·MCP 시대에 더 넓게 열렸고, 끝난 문제가 아니라 매달 떨어지는 문제다. 2026년 4월 Comment and Control은 PR 코멘트·이슈 본문에 숨긴 지시만으로 Claude Code·Gemini CLI·GitHub Copilot 에이전트를 RCE·시크릿 유출로 하이재킹했다 — 세 벤더 모두 바운티만 주고 CVE·공식 advisory는 내지 않았다(구조적 한계로 취급). 불과 한 주 전(2026-05-26)엔 PromptArmor가 M365 Copilot Cowork가 오염된 Skills 파일을 읽고 사내 문서를 유출하는 걸 다시 보였다. 정작 문제 자체는 오래됐다 — 2023년 정식화, 2024년 AgentDojo 벤치. 한 달 사이 움직인 건 위협이 아니라 답 쪽이다.

그래서 문제는 정의가 아니라 해법이다. 모델을 더 잘 정렬하면 되는가, 입력을 잘 표시하면 되는가, 가드 모델을 하나 더 세우면 되는가, 아니면 모델을 아예 못 믿는다고 전제하고 설계해야 하는가 — 여기에 합의가 없다. 헤드라인만 보면 방어책이 매주 쏟아진다. 그래서 어느 방어가 실제로 무엇을 보장하는지는 헤드라인으로 안 나오고, 페이퍼의 벤치마크 숫자와 위협 모델을 직접 대조해야 나온다. 필자가 이 글에서 한 작업이 그것이다.

어떻게 팠는가

세 묶음을 1차 출처로 직접 읽고 대조했다. ① 문제 정의 — OWASP LLM01:2025, Greshake의 indirect injection 원논문. ② 확률적 방어의 한계 측정 — AgentDojo(ETH Zürich, NeurIPS 2024)의 공격 성공률 표, 가드레일 우회 페이퍼들. ③ 방어 설계 5종 — Microsoft Spotlighting, OpenAI Instruction Hierarchy, Anthropic Constitutional Classifiers, Google DeepMind CaMeL, EPFL LACUNA, 그리고 2026년 5월에 나온 Shanghai AI Lab의 AgentDoG 1.5. 각 방어를 세 질문으로 분류했다 — 신뢰 경로에 LLM이 있는가, 무엇을 제약하는가(입력·행동·데이터플로), 결정론적 보장인가 확률적 감소인가. 추가로 필자가 같은 원리를 MCP 툴콜 와이어에 직접 구현해 실측한 결과를 한 데이터포인트로 넣었다.

확률적 방어엔 천장이 있다

가장 단단한 숫자는 AgentDojo에서 나온다. 방어 없는 에이전트의 타깃 인젝션 성공률은 GPT-4o 기준 47.69%, Claude 3.5 Sonnet 33.86%. 여기에 방어를 얹으면 — 입력 구분(delimiting) 41.65% → 프롬프트 반복 27.82% → 인젝션 탐지기 7.95% → 툴 필터 6.84%. 최선의 방어가 공격 성공률을 거의 7분의 1로 줄인다. 그러나 어느 것도 0으로 만들지 못한다. 바닥이 6.84%다.

"가드 모델을 하나 더 세우면 되지 않나"는 직관은 더 나쁘게 깨진다. 가드레일 6종(Azure Prompt Shield·Meta Prompt Guard 포함)을 character-injection으로 친 결과 일부 시스템은 최대 100% 우회됐고(2504.11168), 2026년 5월의 Prompt Overflow(2605.23196)는 더 구조적인 구멍을 짚는다 — 가드 모델은 512토큰 창을 보는데 본 모델은 40만 토큰을 읽으니, 페이로드를 긴 컨텍스트에 쪼개 흩뿌리면 어느 창도 악성으로 안 보이지만 합치면 작동한다(Llama Prompt Guard·Granite Guardian·DeBERTa 거의 100% 우회). LLM-as-Judge도 타깃 인젝션 앞에서 최대 100% 하이재킹된다(2604.03870).

이유는 단순하다. Willison의 정식화대로 "앱 보안에서 99%는 낙제점" 이다. 확률적 방어는 공격 성공률을 극적으로 낮추지만(Spotlighting은 50% 초과를 2% 미만으로, Instruction Hierarchy는 강건성을 최대 63%p, Constitutional Classifiers는 jailbreak 성공률을 86%→4.4%로), 공격자의 일은 남은 1%를 찾는 것이다. 두 번째 LLM으로 첫 번째 LLM을 지킨다는 건, 같은 공격면에 노출된 부품을 하나 더 쌓는 것이다.

2026년 5월에 트렌딩에 오른 AgentDoG 1.5(Shanghai AI Lab)가 이 카테고리의 현재 최고 수준이다 — 0.8B~8B 가드 모델로 에이전트 실행 trajectory를 감사하고, 세분화 위험 진단에서 55.2%로 GPT-5.4(25.8%)를 크게 앞선다. 잘 만든 가드다. 그러나 판단 주체가 학습된 LLM인 한, 위 천장 위에 있다. 더 좋은 확률적 가드지 결정론적 보장이 아니다.

직접 재현 — 프런티어 모델을 가드로. 위 100% 수치는 전용 소형 가드(0.8~8B)·적대적 최적화 조건이다. 그래서 필자가 프런티어 모델(Claude)을 가드로 세워 직접 던졌다 — untrusted 콘텐츠로 위장한 인젝션 7종(naive·온보딩 위장·가짜 스캐너 verdict·base64·changelog 주의 희석·CI 디버그 exfil·가짜 시스템 노트)과 양성 대조 1건을 각각 fresh 가드 인스턴스에. 결과는 7/7 BLOCK·양성 ALLOW, 0 우회. 강한 모델은 흔한 hand-crafted 패턴을 막는다 — 소형 가드의 100%와 정반대다. 그러나 이건 경험적·모델 의존 승리지 보장이 아니다. 가드는 여전히 입력측 판단이라 막았는지가 모델·시점·공격 정교함에 흔들리고, 코딩 에이전트 인젝션 조사가 보인 무한 난독화 공간과 최적화 공격 앞에선 천장이 다시 생긴다. 강한 가드는 천장을 높일 뿐 없애지 못한다 — 결정론 보장은 행동을 묶는 와이어에서만 선다.

보장은 모델 밖에서 온다

천장이 없는 쪽은 공통점이 하나다: *신뢰 경로에서 LLM을 빼고, 모델 출력이 무엇을 할 수 있는지를 모델 밖 비-LLM 레이어가 결정론으로 제약한다.* 모델은 못 믿을 부품으로 전제된다.

  • CaMeL(Google DeepMind·ETH, 2025) — 신뢰된 사용자 질의에서 제어·데이터 흐름을 추출해 커스텀 인터프리터에 고정하고, 모든 값에 capability(출처·권한)를 붙여 툴콜 시점에 정책을 모델 밖에서 강제한다. 런타임에 읽은 untrusted 데이터가 프로그램 흐름을 바꿀 수 없다. AgentDojo에서 증명 가능한 보안으로 77% 과제 해결(무방어 84% 대비 약 7%p 효용 비용). 설계 선언이 명시적이다 — "모델 학습이 아니라 원칙적 시스템 설계로."
  • Dual-LLM(Willison, 2023) — 권한 LLM은 untrusted 콘텐츠를 절대 안 보고, 격리 LLM은 untrusted를 처리하되 툴이 없다. 결과는 심볼릭 참조로만 오간다. 데이터플로를 아키텍처로 격리.
  • LACUNA(EPFL, Odersky 외, 2026-05) — 에이전트 행동을 타입드 홀 agent[T](task)로 두고, LLM이 채운 코드를 실행 전에 타입 체크한다. 타입 시스템이 그 행동이 닿을 수 있는 툴·데이터를 한정하고, 위반 코드는 원자적으로 거부(환경 무변경). 컴파일 타임 결정론 보장. τ²-bench 76%로 효용 손실 없이.

대조가 선명하다. AgentDoG처럼 모델 밖에 두더라도 판단을 LLM이 하면 확률적 천장 위에 있고, CaMeL·LACUNA처럼 판단을 비-LLM 메커니즘(데이터플로·타입)이 하면 결정론 보장이 선다. 외부에 둔다는 것만으로는 부족하다 — 신뢰 경로에 모델이 없어야 한다.

남은 차이는 결정론 경계의 위치다

여기까지가 합의 가능한 결론이라면, 프런티어의 살아 있는 질문은 그다음이다: 결정론 경계를 어디에 놓는가. 구조적 방어들은 같은 원리의 서로 다른 배치다.

  • 데이터플로·capability(CaMeL) — 인터프리터 안.
  • 격리(dual-LLM) — 두 모델 사이.
  • 타입 시스템(LACUNA) — 컴파일 타임.
  • 툴콜 와이어(가드 프록시) — MCP 트랜스포트 위.
  • 네트워크 패킷(ShieldNet, 2026-04, MCP 공급망 인젝션을 와이어에서 차단, F1 0.995·오버헤드 21%) — TLS 종단 뒤.

필자도 와이어 배치를 직접 구현해 실측했다 — 의도를 오염 에 해시로 봉인(commit-then-act)하고 모든 tool_call을 결정론 field-diff로 봉인된 의도와 대조하니, 신뢰 경로에 LLM이 0인 채로 인젝션 13/13을 차단하고 정상 동작은 0/10만 오차단했다. 와이어 가드의 장점은 모델·프레임워크 무관이라는 것(가드는 MCP 툴콜만 본다), 한계는 허용된 호출의 내용까지는 못 본다는 것이다. 배치마다 이런 커버리지 구멍이 다르다 — ShieldNet은 네트워크에 안 보이는 로컬 파일·권한 변경을 놓치고, CaMeL은 효용을 깎고, LACUNA는 에이전트 프로그램이 타입드여야 한다. "무엇이 막느냐"는 풀렸고, "어디서 막느냐"가 안 풀렸다.

이 조사가 말하지 못하는 것

절대 수치(AgentDojo·τ²-bench)는 1차 출처 인용이고, 직접 측정한 건 둘이다 — 와이어 가드 차단(13/13)과 프런티어 가드 우회(인젝션 7/7 BLOCK·0 우회). 가드 측정은 hand-crafted 패턴·단일 프런티어 모델 표본이라 절대율이 아니라 방향(강한 가드는 천장을 높이되 없애지 못함)으로만 읽어야 한다. AgentDojo·τ²-bench의 절대치도 모델·셋업에 따라 흔들리므로, 방향(확률적엔 바닥, 결정론엔 보장+효용비용)은 견고해도 특정 퍼센트를 절대 기준으로 읽으면 안 된다. 또 구조적 방어는 행동·데이터플로를 제약하지 허용된 행동의 내용을 판단하지 않는다 — 인젝션은 막아도 "정책상 허용된 나쁜 쓰기"는 별개 문제다. 이 글은 인젝션 한 위협만 본다.

다음 조사

결정론 경계 배치들의 효용 비용을 같은 과제에서 직접 측정해 비교하는 것 — CaMeL의 7%p가 와이어 가드·타입 시스템에서 얼마로 나오는지. 그리고 MCP 툴 생태계에서 어느 배치가 채택 비용 대비 커버리지가 가장 넓은지. 다음 조사 후보다.

1차 출처

하위 문서