볼트 홈: README
01 · 컨텍스트 오염 (Context Poisoning / Contamination)
챕터 개관
LLM 에이전트는 자신이 읽고 쓰는 컨텍스트, 곧 프롬프트와 도구 출력, 검색 문서, 장기 메모리를 거의 무비판적으로 신뢰한다. 그래서 잘못된 정보나 악의적 지시가 한 번 컨텍스트 윈도우에 들어오면 그 오염이 이후 모든 추론에 누적된다. 이 챕터는 그런 컨텍스트 오염을 우발적(accidental) 경로와 적대적(adversarial) 경로로 나누어, 오염이 어떻게 생기고 왜 스스로 강화되며 어떻게 막을 수 있는지를 다룬다. 에이전트가 다단계·장기 실행으로 나아가고 RAG와 외부 도구, 영속 메모리를 갖출수록 오염은 단발 버그가 아니라 시스템 신뢰성을 흔드는 근본 위협이 된다. 컨텍스트 엔지니어링을 공부한다면 가장 먼저 이해해야 할 실패 양식인 이유다.
TL;DR
- 컨텍스트 오염은 컨텍스트 윈도우나 메모리에 들어온 거짓·악의적 정보가 이후 추론을 계속 왜곡하는 현상이다.
- 환각이 메모리에 굳어지는 우발적 오염과 Prompt Injection·RAG/메모리 백도어로 이뤄지는 적대적 오염으로 나뉜다.
- 자기강화 루프가 작동하기 때문에 한 번 오염되면 모델 스스로는 거의 빠져나오지 못한다.
- 방어는 단일 방어막으로 끝나지 않고 격리(Dual LLM·CaMeL), 메모리 위생, RAG 운영 통제를 겹쳐 쌓는 다층 조합이다.
학습 순서
- 01_01-정의-컨텍스트-오염 (concept) — 컨텍스트 오염이란 무엇인가, 정의와 4가지 실패 유형 정리.
- 01_02-메커니즘-자기강화-루프 (mechanism) — 오염이 자기강화(Self-reinforcing)되는 메커니즘과 되돌리기 어려운 이유.
- 01_03-사례-gemini-포켓몬 (case) — 우발적 오염의 실증 사례: Gemini 2.5 포켓몬 플레이 에이전트.
- 01_04-우발-vs-적대-비교 (compare) — 우발적 vs 적대적 오염을 발생 경로·지속성·탐지 난이도로 비교.
최단 경로
아래 논문들은 근거를 깊이 파고드는 자료다. 시간이 없으면 처방 노트로 곧장 가도 된다. 01_01-정의-컨텍스트-오염 → 01_02-메커니즘-자기강화-루프 → 01_09-처방-방어전략 순으로 읽고 5~7번 논문(paper)은 건너뛰어도 무방하다.
- 01_05-paper-agentpoison (paper) — AgentPoison: 메모리/RAG 백도어 공격 (Chen et al. 2024).
- 01_06-paper-poisonedrag (paper) — PoisonedRAG: 지식 데이터베이스 오염 공격 (Zou et al. 2024).
- 01_07-paper-memorygraft (paper) — MemoryGraft: 경험 메모리 이식 공격 (Srivastava & He 2025).
- 01_08-적대적-오염-위협지형 (mechanism) — 적대적 오염 위협 지형: Prompt Injection, Lethal Trifecta, 장기 메모리 오염.
- 01_09-처방-방어전략 (remedy) — 방어 전략: Dual LLM, CaMeL, 메모리 위생, RAG 운영 체크리스트.
- 01_10-논쟁점-미해결과제 (opinion) — 미해결 과제와 논쟁점: 신뢰 트레이드오프, RAG의 역설, 현실 조건 괴리.
- 01_11-paper-CaMeL-방어 (paper) — CaMeL(arXiv:2503.18813): Dual LLM + capability/taint로 프롬프트 인젝션을 설계로 차단. 오염 방어의 정본 처방.
- 01_12-사례-산업-실사고 (case) — 산업 실사고: Bing/Sydney, ChatGPT 메모리 인젝션(SpAIware), EchoLeak(CVE-2025-32711), Rules File Backdoor.
챕터 지도
flowchart TD A["01_01 정의<br/>(컨텍스트 오염이란)"] --> B["01_02 자기강화 루프<br/>(왜 안 풀리나)"] B --> C["01_03 사례<br/>(Gemini 포켓몬)"] C --> D["01_04 우발 vs 적대 비교"] D --> E["적대적 경로 심화"] E --> P1["01_05 AgentPoison"] E --> P2["01_06 PoisonedRAG"] E --> P3["01_07 MemoryGraft"] P1 --> F["01_08 적대적 위협 지형"] P2 --> F P3 --> F F --> G["01_09 방어 전략"] G --> H["01_10 논쟁점·미해결 과제"]