상위: 01_00_MOC
한줄 요지
RAG(검색 증강 생성)는 환각을 줄이려고 만든 기술이지만, PoisonedRAG는 정작 그 지식 데이터베이스가 무결성 검증 없이 신뢰된다는 구조적 맹점을 파고든다. 수백만 건짜리 데이터베이스에 악성 텍스트 단 5개를 심는 것만으로 90% 공격 성공률을 낸다.
논문 기본 정보
| 항목 | 내용 |
|---|---|
| 제목 | PoisonedRAG: Knowledge Corruption Attacks to Retrieval-Augmented Generation of Large Language Models |
| 저자 | Wei Zou, Runpeng Geng, Binghui Wang, Jinyuan Jia |
| arXiv | 2402.07867 (제출: 2024-02-12, 개정: 2024-08-13) |
| 게재 | USENIX Security Symposium 2025 (게재 확정) |
| GitHub | https://github.com/sleeepeer/PoisonedRAG (MIT License, ★274) |
| 소속 | Penn State University |
1. 문제의식 — RAG의 역설
1-1. RAG가 설계된 이유와 그것이 만들어낸 새로운 공격 표면
RAG는 LLM의 두 가지 핵심 한계, 곧 지식 최신성 부재(outdated knowledge)와 환각(hallucination)을 완화하려고 만든 기술이다. LLM이 검색된 외부 문서를 컨텍스트로 받아 답변을 생성하므로, 파인튜닝 없이도 최신 지식을 끌어 쓸 수 있다.
“Large language models (LLMs) such as GPT-3.5, GPT-4, and PaLM 2 are widely deployed in the real world for their exceptional generative capabilities.” — Zou et al. 2024
그런데 저자들은 이 설계 안에서 핵심적인 역설을 짚어낸다. LLM이 RAG 지식 데이터베이스를 신뢰하는 것은 기본값(default trust)이며, 그 데이터베이스의 무결성을 검증하는 장치는 어디에도 없다. RAG 파이프라인은 검색된 문서가 “사실이다”라는 암묵적 가정 위에 서 있는 셈이다.
공격자가 이 가정을 파고들어 악성 텍스트를 지식 데이터베이스에 끼워 넣으면, LLM은 의심 없이 그 내용을 근거 삼아 공격자가 원하는 답변을 내놓는다.
“RAG enables an LLM to utilize external knowledge in a plug-and-play manner. Moreover, RAG can reduce hallucinations and enhance domain-specific expertise of an LLM.” — Zou et al. 2024
이 문장에 곧바로 이어지는 논지가 핵심이다. RAG가 “신뢰할 수 있는 외부 지식을 제공”한다는 전제 자체가 공격 벡터(attack vector)라는 것이다.
flowchart LR A[사용자 질문 Q] --> B[검색기 Retriever] B --> C{지식 데이터베이스 DB} C -->|정상 문서| D[정상 컨텍스트] C -->|악성 텍스트 P 삽입됨| E[오염된 컨텍스트] D --> F[LLM → 정확한 답변] E --> G[LLM → 공격자 지정 답변 R*] style E fill:#ff6b6b,color:#fff style G fill:#ff6b6b,color:#fff
1-2. 기존 연구의 공백
저자들은 이것이 최초의 RAG 지식 오염 공격(the first knowledge corruption attack to RAG)임을 강조한다. 기존 연구는 주로 다음 세 갈래에 머물러 있었다.
- LLM 파라미터를 직접 건드리는 훈련 데이터 오염(training data poisoning)
- 프롬프트에 곧장 끼워 넣는 프롬프트 인젝션(prompt injection)
- 검색 결과의 순위를 흔드는 코퍼스 오염(corpus poisoning). 다만 이쪽은 순위 조작 자체가 목적이지, LLM이 특정 오답을 생성하게 만드는 것까지는 노리지 않는다.
정작 “RAG의 지식 데이터베이스를 조작해 LLM이 공격자가 지정한 답변을 생성하도록 유도하는” 공격은 그때까지 설계된 적이 없었다.
2. 위협 모델 (Threat Model)
2-1. 공격자의 목표
공격자는 M개의 타겟 질문(target questions) ${Q_1, Q_2, \ldots, Q_M}$을 고르고, 질문마다 임의의 타겟 답변(target answer) $R_i$를 정해 둔다. 목표는 지식 데이터베이스 $\mathcal{D}$를 오염시켜, RAG 시스템이 $Q_i$를 받았을 때 $R_i$를 내놓게 만드는 것이다.
공격 시나리오 예시:
- 타겟 질문: “Who is the CEO of OpenAI?”
- 타겟 답변: “Tim Cook” (사실과 다른 허위 정보)
실제로 악용될 만한 시나리오는 다음과 같다.
- 허위 정보(misinformation) 유포: 정치인이나 기업, 인물에 대한 거짓 사실 유도
- 상업적 편향 답변(commercial biased answers) 삽입: 경쟁사 비방, 특정 제품 추천
- 금융 허위 정보(financial disinformation): 시장이나 특정 기업을 둘러싼 거짓 투자 정보
2-2. 공격자의 지식과 능력
| 구분 | 블랙박스(Black-box) | 화이트박스(White-box) |
|---|---|---|
| LLM 파라미터 접근 | 불가 | 불가 |
| LLM 쿼리 | 불가 | 불가 |
| 검색기(Retriever) 파라미터 접근 | 불가 | 가능 |
| 검색기 쿼리 | 불가 | 불가 |
| 데이터베이스 기존 텍스트 접근 | 불가 | 불가 |
| 악성 텍스트 삽입 | 가능 (N개/타겟 질문당) | 가능 (N개/타겟 질문당) |
이 공격이 현실에서 가능하다는 근거는 다음과 같다. “when knowledge database collected from Wikipedia, attacker could inject poisoned texts by maliciously editing Wikipedia pages” — Zou et al. 2024. 위키피디아 기반 RAG 시스템이라면 위키피디아 문서를 직접 편집하는 것만으로 공격이 성립한다는 뜻이다.
3. 핵심 메커니즘 — 두 가지 조건과 최적화 포뮬레이션
3-1. 악성 텍스트의 두 가지 필수 조건
PoisonedRAG의 핵심 통찰은, 효과적인 악성 텍스트 $P$가 두 가지 조건을 동시에 만족해야 한다는 데 있다.
조건 1 — 검색 조건(Retrieval Condition): 타겟 질문 $Q$가 입력되면 악성 텍스트 $P$가 검색기(retriever)의 top-k 결과 안에 들어와야 한다. 즉 $P$의 임베딩이 $Q$의 임베딩과 충분히 가까워야 한다.
$$P \in \mathcal{E}(Q; \mathcal{D} \cup \Gamma)$$
여기서 $\mathcal{E}(\cdot)$는 top-k 검색 함수, $\Gamma$는 삽입된 악성 텍스트 집합.
조건 2 — 생성 조건(Generation Condition, 또는 Effectiveness Condition): 악성 텍스트 $P$가 컨텍스트로 들어왔을 때 LLM이 타겟 답변 $R$을 생성해야 한다.
$$\text{LLM}(Q; P) = R$$
즉 $P$는 “그 질문에 대해 $R$이 정답처럼 보이게 하는 내용”을 담아야 한다.
3-2. 악성 텍스트의 두 구성 요소
저자들은 이 두 조건을 각각 떠맡는 두 구성 요소로 악성 텍스트를 쪼갠다.
$$P = S \oplus I$$
- $S$ (검색 파트, Retrieval Part): 검색 조건 충족을 담당. 임베딩 유사도를 높여 top-k에 진입.
- $I$ (생성 파트, Content/Injection Part): 생성 조건 충족을 담당. LLM이 타겟 답변을 내놓도록 유도하는 허위 내러티브 텍스트.
- $\oplus$: 단순 연결(concatenation).
graph TB subgraph "악성 텍스트 P = S ⊕ I" S["S (검색 파트)<br/>• 타겟 질문과 임베딩 유사도 최대화<br/>• 블랙박스: S = Q 그대로 사용<br/>• 화이트박스: HotFlip으로 최적화"] I["I (생성 파트)<br/>• 타겟 답변 R을 정당화하는 서사<br/>• LLM으로 생성<br/>• 길이 V=30 토큰"] end S --> Retriever["검색기<br/>(Retrieval Condition 충족)"] I --> LLM["LLM<br/>(Generation Condition 충족)"] Retriever --> TopK["top-k 결과에 P 포함"] LLM --> TargetAnswer["공격자 지정 답변 R 출력"]
3-3. 최적화 문제 포뮬레이션
전체 공격은 다음 최적화 문제로 형식화된다:
$$\max_{\Gamma} \frac{1}{M} \cdot \sum_{i=1}^{M} \mathbb{1}\left(\text{LLM}(Q_i; \mathcal{E}(Q_i; \mathcal{D} \cup \Gamma)) = R_i\right)$$
indicator function이 미분 불가능해 이 식을 곧바로 최적화하기는 어렵다. 그래서 저자들은 두 조건을 떼어 따로따로 최적화하는 2단계 전략을 택한다.
3-4. 블랙박스 공격 — LM_targeted
블랙박스 설정에서는 검색기 파라미터에 접근할 수 없어 $S$를 직접 최적화하지 못한다. 저자들의 해법은 단순하면서도 잘 통한다. 바로 $S = Q$, 곧 타겟 질문을 그대로 $S$로 쓰는 것이다.
이렇게만 해도 통하는 까닭은, 질문 $Q$와 의미가 같은 텍스트라면 검색기에서도 $Q$와 높은 유사도를 갖기 때문이다.
$I$는 LLM(공격자가 외부 LLM, 예: GPT-4를 사용)을 통해 생성한다:
프롬프트: "craft a corpus [of length V words] such that the answer is [R]
when prompting with the question [Q]"
생성 예시는 다음과 같다.
- 질문: “Who is the CEO of OpenAI?”
- 타겟 답변: “Tim Cook”
- 생성된 I: “In 2024, OpenAI witnessed a surprising leadership change. Renowned for his leadership at Apple, Tim Cook decided to embark on a new journey…”
이 과정을 최대 L=50회까지 반복해, 생성 조건을 만족하는 $I$가 나올 때까지 돌린다.
블랙박스 알고리즘의 핵심 하이퍼파라미터는 다음과 같다.
- $V = 30$ (생성 파트 $I$의 길이, 단어 수)
- $L = 50$ (최대 생성 시도 횟수)
- Temperature = 1 (다양성 확보)
3-5. 화이트박스 공격 — HotFlip
화이트박스 설정에서는 검색기 파라미터(임베딩 함수 $f_Q, f_T$)에 접근할 수 있으므로, $S$를 gradient 기반으로 최적화할 수 있다.
$S$의 최적화 목표는 다음과 같다. $$S = \arg\max_{S’} \text{Sim}(f_Q(Q),\ f_T(S’ \oplus I))$$
$I$와 이어 붙인 $S$의 임베딩이 질문 $Q$의 임베딩과 최대한 가까워지도록 $S$를 다듬는 것이다.
이를 위해 gradient 기반 적대적 텍스트 생성 기법인 HotFlip으로 $S$의 토큰을 바꿔 끼운다. 비교 대상으로는 동의어 치환 방식인 TextFooler도 함께 평가한다.
flowchart LR Q["타겟 질문 Q"] --> fQ["f_Q(·) 질문 인코더"] SI["S' ⊕ I"] --> fT["f_T(·) 문서 인코더"] fQ --> Sim["Sim(·,·)"] fT --> Sim Sim --> Grad["∇ gradient"] Grad --> HotFlip["HotFlip<br/>토큰 교체 최적화"] HotFlip --> SI
4. 실험 설계
4-1. 평가 데이터셋
| 데이터셋 | 지식 DB 크기 | 성격 |
|---|---|---|
| NQ (Natural Questions) | 2,681,468 텍스트 | 위키피디아 기반 단답형 QA |
| HotpotQA | 5,233,329 텍스트 | 다중 문서 추론 필요 QA |
| MS-MARCO | 8,841,823 텍스트 | 마이크로소프트 검색 로그 기반 QA |
타겟 질문은 데이터셋마다 100개씩 샘플링했고, 악성 텍스트는 타겟 질문당 N=5개가 기본값이다.
오염 비율(Poisoning Rate)은 다음과 같다.
- NQ: 5 / 2,681,468 ≈ 0.0002%
- HotpotQA: 5 / 5,233,329 ≈ 0.0001%
- MS-MARCO: 5 / 8,841,823 ≈ 0.00006%
수백만 건짜리 데이터베이스를 0.0001%대 오염 비율로 건드려 90% 공격 성공률을 낸다는 점이 이 논문의 충격 지점이다.
4-2. 평가 LLM
| LLM | 유형 |
|---|---|
| PaLM 2 | Google, API |
| GPT-3.5-turbo | OpenAI, API |
| GPT-4 | OpenAI, API |
| LLaMA-2-7B / 13B | Meta, 오픈소스 |
| Vicuna-7B / 13B / 33B | 오픈소스 |
4-3. 평가 검색기(Retriever)
| 검색기 | 유형 |
|---|---|
| Contriever | Facebook, 밀집 검색 |
| Contriever-ms (MS-MARCO 파인튜닝) | Facebook, 밀집 검색 |
| ANCE | 밀집 검색 |
5. 핵심 수치 및 결과
5-1. 주요 ASR 결과 표 (PaLM 2 기준, Contriever 검색기)
| 데이터셋 | 블랙박스 ASR | 블랙박스 F1 | 화이트박스 ASR | 화이트박스 F1 |
|---|---|---|---|---|
| NQ | 0.97 | 0.96 | 0.97 | 1.0 |
| HotpotQA | 0.99 | 1.0 | 0.94 | 1.0 |
| MS-MARCO | 0.91 | 0.89 | 0.90 | 0.94 |
5-2. 다중 LLM 대상 ASR (블랙박스, NQ 데이터셋)
| LLM | ASR |
|---|---|
| PaLM 2 | 0.97 |
| GPT-3.5-turbo | 0.92 |
| GPT-4 | 0.97 |
| LLaMA-2-7B | 0.97 |
| LLaMA-2-13B | 0.95 |
| Vicuna-7B | 0.88 |
| Vicuna-13B | 0.95 |
| Vicuna-33B | 0.91 |
관찰: GPT-4를 포함한 모든 주요 LLM에서 ASR이 88% 이상으로 나온다.
5-3. 베이스라인 비교 표 (PaLM 2, Contriever)
| 방법 | NQ ASR | HotpotQA ASR | MS-MARCO ASR |
|---|---|---|---|
| No Attack (무공격) | 0.01 | 0.01 | 0.03 |
| Corpus Poisoning | 0.01 | 0.01 | 0.03 |
| Prompt Injection | 0.62 | 0.93 | 0.71 |
| PoisonedRAG Black-box | 0.97 | 0.99 | 0.91 |
| PoisonedRAG White-box | 0.97 | 0.94 | 0.90 |
결정적 발견은 이렇다. 기존 Corpus Poisoning은 검색 순위 조작에는 성공하지만(F1 0.97~1.0) ASR은 무공격과 다를 바 없다(0.01~0.03). 반면 PoisonedRAG는 검색 성공과 LLM 조작을 한꺼번에 이뤄낸다.
5-4. 구성 요소 단독 실험 — 두 파트의 필요성 입증
| 데이터셋 | 방법 | $S \oplus I$ ASR | $S$ 단독 ASR | $I$ 단독 ASR |
|---|---|---|---|---|
| NQ | Black-box | 0.97 | 0.03 | 0.69 |
| NQ | White-box | 0.97 | 0.02 | 0.51 |
| HotpotQA | Black-box | 0.99 | 0.06 | 1.00 |
| MS-MARCO | Black-box | 0.91 | 0.02 | 0.57 |
$S$만 쓰면 ASR이 2~8%로 곤두박질친다. 검색에 성공해도 그것만으로는 LLM이 조작되지 않는다는 뜻이다. $I$만 쓰면 ASR이 절반 아래로 내려간다. 검색에 걸리지 못하면 애초에 컨텍스트에 들어가지 못하기 때문이다. 결국 두 조건을 동시에 채우는 것이 관건이다.
5-5. 다양한 검색기에서의 견고성
| 데이터셋 | 방법 | Contriever | Contriever-ms | ANCE |
|---|---|---|---|---|
| NQ | Black-box | 0.97 | 0.96 | 0.95 |
| HotpotQA | Black-box | 0.99 | 1.00 | 1.00 |
| MS-MARCO | Black-box | 0.91 | 0.83 | 0.87 |
검색기 종류와 상관없이 높은 ASR이 유지된다. 블랙박스 공격은 특정 검색기에 기대지 않으므로, 검색기 정보를 몰라도 두루 통한다.
5-6. 화이트박스 그래디언트 기반 방법 비교
| 데이터셋 | HotFlip ASR | TextFooler ASR |
|---|---|---|
| NQ | 0.97 | 0.93 |
| HotpotQA | 0.94 | 0.98 |
| MS-MARCO | 0.90 | 0.84 |
두 방법 모두 높은 ASR을 내며, NQ와 MS-MARCO에서는 HotFlip이 앞선다.
5-7. 실세계 응용 평가
Wikipedia 기반 챗봇:
- 지식 DB 크기: 영어 위키피디아 전체, 곧 21,015,324개 텍스트(100단어 단위로 분할)
- 결과: 이 규모에서도 PoisonedRAG가 효과적으로 작동한다
ChatChat 응용 프로그램:
- PDF, Markdown, HTML 등 다양한 형식의 문서를 다루는 RAG 챗봇
- 결과: 실제 LLM 응용 서비스에서도 PoisonedRAG가 통한다는 점을 확인했다
6. 방어 기법 평가 — 기존 방어의 한계
“our results show they are insufficient to defend against PoisonedRAG, highlighting the need for new defenses.” — Zou et al. 2024
6-1. 방어 1: 질문 패러프레이징 (Paraphrasing Defense)
방법: 검색에 앞서 질문 $Q$를 패러프레이징해, 악성 텍스트가 검색될 확률을 떨어뜨리려는 시도다.
결과 (PaLM 2, Black-box):
| 데이터셋 | 방어 없음 ASR | 방어 적용 ASR | 감소폭 |
|---|---|---|---|
| NQ | 0.97 | 0.87 | -0.10 |
| HotpotQA | 0.99 | 0.93 | -0.06 |
| MS-MARCO | 0.91 | 0.79 | -0.12 |
판정: ASR이 여전히 79~93%에 머문다. 패러프레이징만으로는 부족하다.
블랙박스 공격이 패러프레이징에 끄떡없는 까닭은, $S = Q$로 두어 질문 자체의 의미를 담고 있기 때문이다. 그래서 패러프레이징한 질문과도 여전히 의미 유사도가 높다.
6-2. 방어 2: Perplexity 기반 탐지 (Perplexity-based Detection)
방법: 악성 텍스트가 비정상적인 언어 패턴을 보일 것이라는 가정 아래, perplexity(당혹도)가 높은 텍스트를 걸러낸다.
결과: ROC 커브의 AUC 값이 0.5에 가깝다. 무작위 분류기와 다를 바 없다는 뜻이다.
“perplexity values of poisoned texts are not statistically higher than those of clean texts, which means it is very challenging to detect poisoned texts using perplexity.” — Zou et al. 2024
실패 이유: PoisonedRAG의 생성 파트 $I$는 GPT-4가 자연스러운 서사로 써내므로 언어적으로 매끄럽고 perplexity가 낮다. perplexity 기반 탐지는 GCG 스타일의 적대적 접미사 공격에나 먹히지, 이처럼 LLM이 유창하게 지어낸 텍스트 앞에서는 무력하다.
6-3. 방어 3: 중복 텍스트 필터링 (Duplicate Text Filtering)
방법: 똑같거나 아주 비슷한 텍스트가 여러 번 나오면 제거한다.
결과: ASR이 꿈쩍도 하지 않는다(0.97 → 0.97, 0.99 → 0.99 등 모든 데이터셋에서 동일).
실패 이유: PoisonedRAG는 타겟 질문마다 악성 텍스트 5개를 만드는데, 이 5개는 LLM의 다양한 샘플링에서 나오므로 내용이 서로 다르다. 중복 제거망에 걸리지 않는다.
6-4. 방어 4: 지식 확장 (Knowledge Expansion)
방법: top-k를 키워 정상 문서를 더 많이 끌어들임으로써 악성 텍스트의 영향을 희석한다.
결과 (HotpotQA, k=50으로 확대):
- Black-box: 41% ASR 유지
- White-box: 43% ASR 유지
판정: k를 10배로 늘려도 ASR이 40% 위에 머문다. 희석 전략은 완전한 방어가 못 되며, 정상 문서를 많이 불러올수록 컨텍스트 길이 비용과 노이즈만 커진다.
7. 직접 인용
“an attacker could inject a few poisoned texts into the knowledge database such that the LLM generates an attacker-chosen target answer” — Zou et al. 2024
“Our results on multiple benchmark datasets and LLMs show our attacks could achieve 90% attack success rates when injecting 5 poisoned texts” — Zou et al. 2024
“PoisonedRAG could achieve a 90% attack success rate when injecting five malicious texts for each target question into a knowledge database with millions of texts.” — Zou et al. 2024
“perplexity values of poisoned texts are not statistically higher than those of clean texts, which means it is very challenging to detect poisoned texts using perplexity.” — Zou et al. 2024
“our results show they are insufficient to defend against PoisonedRAG, highlighting the need for new defenses.” — Zou et al. 2024
8. 한계 및 논문 자체 인정 사항
-
폐쇄형 질문 한정 평가: 정량 평가를 위해 단답형(closed-ended) 질문에 집중했다. 개방형(open-ended) 질문에서의 공격 효과는 따로 분석해야 한다.
-
비타겟 질문에 대한 영향 분석 제한: 악성 텍스트가 타겟이 아닌 질문에까지 영향을 미치는지(“false positive 오염”)는 분석이 부족하다. 저자들은 이번 실험에서 비타겟 질문에는 영향이 거의 없음을 확인했으나, 이것이 늘 보장되지는 않는다.
-
영어 전용 평가: 다국어(multilingual) 환경에서의 공격 견고성은 확인되지 않았다.
-
공격자의 LLM 접근 가정: 블랙박스 공격은 GPT-4를 텍스트 생성기로 쓴다고 전제한다. 현실적인 가정이지만, GPT-4 API 비용과 접근성이 일부 공격자에게는 문턱이 될 수 있다.
9. AgentPoison과의 차이점
PoisonedRAG는 비슷한 시기에 나온 01_05-paper-agentpoison과 자주 견주어진다. 두 공격은 겉보기엔 닮았지만 핵심 메커니즘이 다르다.
graph TB subgraph "PoisonedRAG (Zou et al. 2024)" A1["타겟: RAG 지식 데이터베이스"] A2["방법: S⊕I 구성<br/>검색 조건 + 생성 조건 동시 최적화"] A3["트리거: 타겟 질문 자체<br/>(Q 입력 시 자동 발동)"] A4["사용자 쿼리 수정: 불필요"] A5["목표: 특정 질문에 특정 답변 유도"] end subgraph "AgentPoison (Chen et al. 2024)" B1["타겟: 에이전트 장기 메모리/RAG"] B2["방법: 백도어 트리거 임베딩 최적화<br/>트리거 쿼리 → 고유 임베딩 영역으로"] B3["트리거: 사용자 쿼리에 삽입된 백도어 트리거"] B4["사용자 쿼리 수정: 필요 (트리거 포함)"] B5["목표: 트리거 있을 때 악성 행동,<br/>트리거 없을 때 정상 행동"] end
| 비교 항목 | PoisonedRAG | AgentPoison |
|---|---|---|
| 공격 타겟 | RAG 지식 데이터베이스 | 에이전트 장기 메모리 및 RAG |
| 핵심 메커니즘 | 검색 조건 + 생성 조건 동시 최적화 | 백도어 트리거 임베딩 공간 최적화 |
| 사용자 쿼리 조작 필요 | 불필요 (질문 자체가 트리거) | 필요 (쿼리에 백도어 트리거 삽입) |
| 스텔스 방식 | 악성 텍스트가 자연스러운 언어로 구성 | 트리거 없을 때 정상 행동 유지 |
| 에이전트 행동 조작 | 특정 질문에 특정 허위 답변 | 특정 트리거에 악성 행동 시퀀스 |
| 적용 범위 | 모든 RAG 시스템 | LLM 에이전트 (특히 다중 스텝 행동) |
| ASR | ~90% (5개 삽입) | >80% (평균, 3개 에이전트 시스템) |
| 게재 | USENIX Security 2025 | NeurIPS 2024 |
핵심 차이는 이렇다. PoisonedRAG는 어떤 질문이 들어와도 그 질문에 맞는 악성 텍스트가 알아서 검색된다. 반면 AgentPoison은 특정 트리거 문자열이 박힌 질문에만 악성 데모가 검색된다. 결국 PoisonedRAG는 쿼리를 손대지 않고도 작동하는, 더 단순하고 실용적인 공격이다.
10. 우리 주제(컨텍스트 오염)에의 시사점
10-1. RAG의 역설 — 구조적 취약성의 완결판
01_01-정의-컨텍스트-오염에서 정의한 컨텍스트 오염의 핵심은 “신뢰할 만한 선례처럼 보이는 정보가 컨텍스트에 끼어드는 것”이다. PoisonedRAG는 이 문제의 가장 정교하고 측정 가능한 형태를 보여준다.
RAG의 설계 목적은 “신뢰할 수 있는 외부 지식을 제공”하는 데 있다. 그래서 LLM은 RAG가 건네는 컨텍스트를 높은 신뢰도로 처리하는데, 이것이 곧 RAG의 강점이자 공격 표면이다. PoisonedRAG가 드러내는 것은, RAG의 신뢰 메커니즘 자체가 오염을 퍼뜨리는 통로가 된다는 사실이다.
10-2. 탐지 불가성 — Perplexity 방어의 실패가 주는 교훈
01_02-메커니즘-자기강화-루프에서는 오염이 “출처 추적(provenance) 부재” 탓에 탐지하기 어렵다고 짚었다. PoisonedRAG의 perplexity 방어 실패가 이를 실험으로 뒷받침한다. 언어 모델이 만든 악성 텍스트는 통계적으로 정상 텍스트와 구별되지 않는다. 오염을 잡아내려면 글의 언어적 매끄러움이 아니라 내용의 사실적 정확성과 출처 신뢰도를 따져야 하는데, 이쪽이 훨씬 까다로운 문제다.
10-3. 운영 교훈 — RAG 운영자가 가져가야 할 실용적 시사점
-
지식 데이터베이스 무결성 검증: RAG에 문서를 넣기 전에 출처 검증(source verification)과 사실 확인 파이프라인을 갖춰야 한다. 위키피디아나 웹 크롤링처럼 누구나 편집할 수 있는 소스에서 모은 데이터를 검증 없이 그대로 넣는 것은 심각한 보안 구멍이다.
-
최소 권한 원칙: 지식 데이터베이스에 쓰기 권한을 가진 주체를 최소한으로 줄이고, 모든 삽입 작업에 감사 로그를 남겨야 한다.
-
이상 탐지 고도화: perplexity 기반 탐지가 무력하다는 점은 이미 드러났다. 대신 새로 들어온 문서가 기존 지식 베이스와 사실적으로 충돌하는지 보는 일관성 검사(consistency check)와 크로스 소스 검증(cross-source validation)을 들여야 한다.
-
k 확장의 한계 인식: “문서를 더 많이 검색하면 오염 영향이 줄어든다”는 직관은 절반만 맞다. k=50에서도 ASR이 40%를 유지한다. 게다가 k를 키우면 비용이 늘고 컨텍스트에 노이즈가 끼는 대가가 따른다.
-
고위험 RAG 시스템 우선 보호: PoisonedRAG의 목표는 “공격자가 지정한 답변 유도”다. 의료 정보, 금융 조언, 법률 정보를 다루는 RAG 시스템이 이 공격의 일순위 표적이다. 이런 시스템에는 출력 검증 단계(output verification layer)를 반드시 끼워 넣어야 한다.
-
프롬프트 인젝션과의 조합 공격 경계: PoisonedRAG는 단독으로도 90% ASR을 내지만, 01_08-적대적-오염-위협지형에서 다루는 프롬프트 인젝션과 맞물리면 한층 정교해진다. RAG 결과 안에 프롬프트 인젝션 지시까지 심으면 LLM의 행동 전체를 휘두를 수 있다.
10-4. 후속 연구 흐름에서의 위치
PoisonedRAG는 RAG 오염 공격 연구의 출발점이 된 논문이다. 이후 여러 연구가 이를 베이스라인으로 삼았고, 방어 쪽에서는 FilterRAG, ML-FilterRAG, InstructRAG, AstuteRAG 등이 잇따라 나왔다. 최신 비교 연구(AuthChain, 2025)는 HotpotQA에서 PoisonedRAG의 ASR을 49~69%로 보고하는데, 이는 방어 기법을 강화한 더 현실적인 조건에서 잰 값이다. 원 논문의 90%는 방어가 없는 기본 RAG 설정에서 나온 수치라는 점을 구분해야 한다.
참고문헌
- PoisonedRAG: Knowledge Corruption Attacks to Retrieval-Augmented Generation of Large Language Models — Wei Zou, Runpeng Geng, Binghui Wang, Jinyuan Jia, 2024, arXiv / USENIX Security 2025
- GitHub: sleeepeer/PoisonedRAG — 공식 구현 코드, MIT License
- PoisonedRAG @ USENIX Security 2025 — 게재 정보
- AgentPoison: Red-teaming LLM Agents via Poisoning Memory or Knowledge Bases — Zhaorun Chen et al., 2024, NeurIPS 2024
- One Shot Dominance: Knowledge Poisoning Attack on RAG Systems — AuthChain 비교 연구, 2025
- Benchmarking Poisoning Attacks against RAG — RAG 오염 공격 벤치마크, 2025
관련 노트: 01_05-paper-agentpoison · 01_08-적대적-오염-위협지형 · 01_09-처방-방어전략 · 01_02-메커니즘-자기강화-루프 · 01_01-정의-컨텍스트-오염