본문 바로가기
Hack/AI

Divide and Doubt: Diverse Distributed Poisoning for Retrieval-Augmented Generation

by Becoming a Hacker 2026. 9. 25.
반응형

  • 원문: arXiv:2609.27090
  • 저자: Tianhao Chen, Yuhan Wei, Weifei Jin, Zhengyuan Jiang, Yuepeng Hu, Neil Zhenqiang Gong
  • 공개일: 2026-09-22
  • 분야: RAG Security, Corpus Poisoning, Retrieval Defense
  • Tags: RAG, CorpusPoisoning, DistributedPoisoning, Retrieval, ClusteringDefense

본 글은 원 논문의 주요 기술적 내용을 이해하기 쉽게 요약·정리한 글입니다. 자세한 내용은 상단의 원문 링크를 참고하세요.

한눈에 보기

DnD는 여러 독성 문서가 같은 거짓 주장을 비슷한 문체와 표현으로 반복하면 clustering·similarity·conflict 기반 RAG 방어에 함께 걸린다는 약점을 역이용합니다. Divide는 같은 공격자 목표 답을 서로 다른 문서 스타일·근거 framing·어휘로 지지하고, Doubt는 정답을 직접 언급하지 않으면서 정답으로 이어지는 근거를 의심하게 만든 뒤 공격자 답을 별도 검증 결과처럼 제시합니다.

HotpotQA와 Natural Questions 각 100개 질문, 3개 target LLM, Vanilla와 8개 방어, black-box·white-box retriever 접근에서 평가했습니다. HotpotQA의 27개 model×configuration 평균 strict-ASR은 PoisonedRAG 대비 BB 53.37%→67.44%, WB 52.26%→68.41%로 상승했고, TrustRAG·SeCon-RAG처럼 군집 기반 방어에서 가장 큰 차이가 났습니다. 다만 표본은 고정 100개 질문이고 실제 운영 corpus, 사용자, proprietary model은 포함하지 않습니다.

연구 배경

RAG corpus poisoning은 공격자가 검색 corpus에 문서를 삽입해 특정 질문에서 공격자가 고른 오답이 검색·생성되게 하는 공격입니다. 여러 poison passage를 넣으면 검색될 기회는 늘지만, 같은 질문과 목표 답을 반복 지원하는 문서들은 어휘·문체·semantic embedding이 서로 비슷해집니다.

TrustRAG와 SeCon-RAG 같은 방어는 검색된 문서들의 군집, 유사도, 충돌을 함께 분석합니다. 독성 문서가 단단한 cluster를 이루면 한 번에 제거하거나 신뢰도를 낮출 수 있습니다. 논문은 공격 문서 하나의 강도보다 poison set 전체의 다양성과 역할 분담을 공격 최적화 대상으로 삼습니다.

공격 모델 / 전제 조건

공격자는 평가 질문 q, 정답 y, 사전에 고른 type-compatible 오답 y*를 알고 질문별 최대 B개의 passage를 공유 corpus에 추가할 수 있습니다. clean passage를 수정·삭제하지 않고 user question, target generator, defense 설정도 바꾸지 않습니다.

Black-box 조건에서는 배포 retriever의 rank, score, parameter, gradient를 받지 않습니다. White-box 조건에서는 retrieval-facing HotFlip 최적화를 위한 retriever gradient만 얻습니다. 두 조건 모두 poison set을 평가 전에 고정하고, clean retrieved passage, defense 판단, target generator output·logit, 관찰된 ASR feedback은 construction·selection에 사용하지 않습니다.

기본 설정은 질문별 poison budget B=5, retrieval depth K=5입니다. 공격 성공은 최종 응답에 y*가 포함되고 정답 y는 포함되지 않는 strict targeted ASR로 정의합니다. 둘 다 포함되면 실패입니다.

비판적 검토 / 아쉬운 점

가장 중요한 제한은 질문별 정답과 목표 오답을 공격자가 사전에 안다는 강한 targeted threat model입니다. 실제 개방형 corpus 공격자는 미래 사용자 질문과 정답을 정확히 알기 어렵고, query family 또는 topic 수준의 transfer가 필요할 수 있습니다. unseen query, paraphrase, temporal update에 대한 전이 실험이 있어야 현실 범위를 판단할 수 있습니다.

두 번째로 각 benchmark에서 100개 질문만 사용했고 gpt-5-mini를 writer로, Gemma를 verifier로 사용했습니다. 결과는 passage construction 비용과 API 접근에 의존하며 proprietary target generator는 평가하지 않았습니다. 더 큰 무작위 표본, 반복 seed, writer·verifier 교체 실험이 필요합니다.

세 번째로 DnD가 방어를 우회한 이유를 lexical overlap control과 representation dispersion으로 잘 연결했지만, 모든 방어가 같은 failure mode를 가진 것은 아닙니다. ReliabilityRAG·RAGDefender·RobustRAG 일부 cell에서는 PoisonedRAG와 차이가 작거나 DnD가 낮았습니다. “RAG 방어 전반을 무력화한다”가 아니라 clustering·conflict-aware filtering에 특히 강하다고 제한해야 합니다.

네 번째로 공식 DnD 구현과 생성된 poison bundle이 논문에서 공개되지 않았습니다. threshold, prompt 역할, repair budget은 상세하지만 end-to-end artifact 없이 재현자가 writer 출력·방어 구현 차이를 독립적으로 검증하기 어렵습니다. 코드·frozen bundle·query-target manifest 공개가 가장 직접적인 보완입니다.

핵심 Root Cause

구조적 원인은 여러 독성 문서를 개별 점수나 pairwise similarity로 보고, 서로 다른 문체와 근거 역할을 가진 문서들이 하나의 공격 목표를 조정해 지원할 수 있다는 set-level adversary를 충분히 모델링하지 않은 것입니다. 방어는 반복되는 유사 문서를 중복·군집으로 보고 제거하지만, 공격자는 redundancy를 낮춘 채 conclusion만 공유할 수 있습니다.

깨진 보안 불변조건은 “검색된 서로 다른 출처·표현이 독립적인 증거이며, 의미·어휘 유사도가 낮으면 coordinated manipulation 가능성도 낮다”는 가정입니다. DnD는 표현 공간에서는 분산되고 evidential role은 나누면서 최종 답 방향은 일치시켜 이 독립성 가정을 깨뜨립니다.

핵심 공격 원리

Divide는 direct-support passage B-1개를 순차 생성합니다. 각 passage마다 기존 ledger에 없는 문서 style과 target-support framing을 계획하고, frozen verifier가 해당 style·framing을 따르는지와 passage 단독으로 y*를 복구할 수 있는지를 확인합니다. deterministic controller는 pairwise ROUGE-L F1의 최대값과 평균값을 제한해 near-duplicate 한 쌍과 전체적 표현 재사용을 동시에 줄입니다.

Doubt는 남은 1개 slot에 정답 근거의 범위 제한, 불확실한 출처, 모호한 해석 같은 caveat를 제시하고 이후 독립 cross-check가 y*를 지지한다고 서술합니다. 정답 자체를 직접 쓰거나 “다른 문서를 무시하라”고 명령하지 않아 strict metric과 instruction-injection 탐지를 피합니다.

내용 검증을 통과한 뒤 retrieval adaptation을 별도로 적용합니다. BB에서는 passage별로 다른 question-facing variant를 붙이고, WB에서는 각 passage에 독립 HotFlip prefix를 최적화해 본문 diversity가 한 retrieval pattern으로 다시 수렴하지 않게 합니다.

공격 흐름

  1. 질문 q, 정답 y, 목표 오답 y*, budget B를 고정합니다.
  2. 기존 passage의 style·support framing ledger를 참조해 서로 다른 direct-support plan을 만듭니다.
  3. writer가 각 plan을 self-contained passage로 만들고 verifier가 plan fidelity와 y* recoverability를 검사합니다.
  4. pairwise ROUGE-L 최대·평균 threshold를 넘는 implicated passage만 국소 수정한 뒤 전체 set을 재검증합니다.
  5. 한 passage는 정답으로 이어지는 근거를 의심하게 하고 y*를 독립 검증 결과처럼 제시하는 Doubt 역할로 구성합니다.
  6. 완성된 본문을 고정한 뒤 BB variant 또는 WB HotFlip prefix로 retrieval 적합도를 올립니다.
  7. 질문별 passage를 하나의 공유 corpus에 삽입하고 top-K retrieval과 post-retrieval defense를 거쳐 target LLM 응답을 측정합니다.

성공 조건 / 실패 조건

성공하려면 공격자가 corpus write 권한을 갖고 목표 질문과 정답·오답을 알며, poison passage 일부가 top-K에 들어가고, 방어 이후에도 서로 다른 역할의 passage가 남아 target generator가 y*를 채택해야 합니다. strict-ASR에서는 정답이 함께 출력돼도 실패합니다.

신뢰된 publisher만 쓰도록 corpus admission을 제한하거나, source identity·provenance·동시 게시 패턴을 검증하거나, 질문별로 여러 문서가 낮은 표현 유사도에도 같은 비정상 결론을 조정해 지지하는지를 탐지하면 실패 가능성이 커집니다. poison retrieval recall이 낮은 retriever에서도 성능이 크게 떨어졌습니다. DPR-single에서는 평균 poison recall이 42.6%로 Contriever 85.9%, ANCE 81.1%보다 낮았고 평균 ASR도 40.8%로 감소했습니다.

연구진의 실험 환경

HotpotQA corpus 5,233,329 passage와 NQ corpus 2,681,468 passage를 사용했습니다. 각 dataset은 seed 12로 섞은 뒤 yes/no가 아니고 정답이 명확하며 type-compatible 오답을 등록할 수 있는 첫 100개 질문을 고정했습니다.

기본 retriever는 facebook/contriever, target LLM은 Llama-3.1-8B-Instruct, Qwen2.5-7B-Instruct, Mistral-7B-Instruct-v0.3입니다. writer는 gpt-5-mini, verifier는 Gemma-4-E4B-it이며, target generation은 LMDeploy PytorchEngine FP16, temperature 0.01, 최대 500 token, batch 1, prefill 8,192로 수행했습니다.

평가 구성은 Vanilla, InstructRAG, TrustRAG, SeCon-RAG, RAGuard, RobustRAG-Keyword, Astute-RAG, ReliabilityRAG-MIS, RAGDefender입니다. 최대 10대의 NVIDIA Quadro RTX 6000 24GB를 사용해 약 183 GPU-hour를 소비했습니다.

DnD B=5 bundle은 direct-support 4개와 Doubt 1개입니다. 질문별 최대 3개 construction trajectory와 trajectory당 최대 5개 accepted local repair를 허용했습니다. body ROUGE-L 최대 0.25·평균 0.220, BB formatting 후 최대 0.25·평균 0.235를 threshold로 사용했습니다. WB HotFlip은 passage마다 30 iteration, iteration당 100 candidate, seed 12로 실행했습니다.

주요 실험 결과

HotpotQA의 27개 target-generator×configuration 평균에서 PR→DnD strict-ASR은 BB 53.37%→67.44%로 14.07%p, WB 52.26%→68.41%로 16.15%p 증가했습니다. BB에서는 27 cell 중 19개 우세·6개 동률·2개 열세였고, WB는 21개 우세·4개 동률·2개 열세였습니다.

TrustRAG 평균은 PR 2.33%에서 DnD-BB 29.00%, DnD-WB 36.33%로 늘었습니다. SeCon-RAG는 PR-BB 2.33%→DnD-BB 26.33%, PR-WB 2.67%→DnD-WB 38.00%였습니다. RAGuard에서는 평균 차이가 BB +58.00%p, WB +60.00%p였습니다.

NQ 27 cell 평균은 BB 54.11%→60.63%, WB 52.30%→65.81%였습니다. DnD는 BB 18개 우세·9개 열세, WB 16개 우세·5개 동률·6개 열세여서 aggregate advantage는 있지만 cell별 보편적 우위는 아닙니다.

Doubt 1개를 배정하면 B=2~5 전 범위에서 모든 slot을 direct support로 쓴 조건보다 평균 6.4-7.3%p 높았습니다. ROUGE-L 최대·평균 constraint를 모두 제거하면 defended ASR이 43.6%→26.5%, post-filter poison-slot survival이 90.5%→42.9%로 떨어졌지만 Vanilla ASR은 93.0-94.8%로 유지됐습니다. 이는 diversity control의 이득이 주로 방어 필터 통과에서 나온다는 뜻입니다.

최종 B=5 bundle의 Contriever cosine concentration은 4개 dataset×access 조건 모두에서 DnD가 PR보다 낮았고 paired 95% CI가 전부 0 아래였습니다. BB HotpotQA·NQ의 mean similarity 감소는 각각 0.1884, 0.2122였으며 p<0.0001이었습니다.

실제 발견된 취약점 / 사례

논문은 특정 상용 RAG 제품의 CVE나 실제 운영 침해를 보고하지 않습니다. 발견된 사례는 연구실 RAG 구성에서 TrustRAG, SeCon-RAG, RAGuard 등 공개 방어가 coordinated diverse poisoning을 충분히 제거하지 못한 것입니다.

특히 clustering 방어는 동일 거짓 답을 지지해도 문서 style과 framing이 다르고 representation이 분산되면 poison slot을 다수 남겼습니다. conflict-aware 생성은 정답 증거와 공격 증거가 경쟁할 때 Doubt passage가 정답 근거의 신뢰를 낮추는 해석 경로를 제공하면서 공격 답 채택률이 높아졌습니다.

저자 주장 vs 실제 증명 범위

DnD가 matched PoisonedRAG보다 clustering·conflict-aware 방어에서 강하다는 주장은 두 dataset, 세 generator, BB·WB 조건과 component ablation이 뒷받침합니다. lexical threshold 제거 시 filter survival과 defended ASR이 함께 하락하고, final bundle embedding concentration도 감소해 제안 mechanism과 결과의 연결도 비교적 설득력 있습니다.

하지만 실제 인터넷 문서 게시만으로 production RAG를 장악할 수 있다는 것은 증명하지 않았습니다. 공격자는 질문·정답·목표 오답을 알고 corpus에 직접 passage를 삽입했으며, 100개 고정 질문과 연구용 defense 구현을 사용했습니다. closed model, source reputation, dedup across publisher, temporal anomaly detection, human review는 평가하지 않았습니다.

기존 공격 / 기존 점검 방식과의 차이

PoisonedRAG는 각 passage가 retrieval과 target-answer generation 조건을 만족하게 만들지만 여러 passage를 set으로 조정하지 않습니다. CPA-RAG는 heterogeneous prompt와 generator로 variation을 만들지만 retained set의 pairwise diversity를 직접 constraint하지 않습니다.

DnD는 style ledger, target-support framing, pairwise overlap constraint, Doubt라는 별도 evidential role을 함께 사용합니다. 따라서 단순 paraphrase나 동일 주장 반복이 아니라 “서로 다른 출처처럼 보이는 조정된 증거 묶음”을 공격 단위로 삼습니다.

연구의 한계와 주의해서 볼 부분

저자들은 계산·API budget 때문에 dataset별 100개 질문과 세 open-weight target generator만 평가했고, 빠르게 변하는 모든 방어를 포함하지 못했다고 명시합니다. proprietary model과 대규모 실제 query distribution에 대한 일반화는 확인되지 않았습니다.

추가로 answer substring matching은 생성 품질과 공격 성공을 단순화합니다. 동음이의어, 부정문, 인용, 복수 답을 잘못 셀 수 있으며 passage 자체의 자연스러움·publisher plausibility·사람 탐지 가능성은 별도 human study가 없습니다. writer와 verifier가 만든 문서가 실제 웹·기업 문서처럼 admission될 수 있는지도 검증해야 합니다.

공개 PoC / Exploit / Tool / Artifact 분석

논문과 arXiv HTML에는 DnD 자체의 공식 GitHub 저장소, 코드, frozen poison bundle 또는 query-target manifest 링크가 없습니다. 2026-09-25 공개 검색에서도 논문 제목과 직접 연결되는 저자 공식 GitHub 저장소를 확인하지 못했습니다. 따라서 상세 algorithm과 parameter는 공개됐지만 현재 논문 결과를 그대로 실행할 수 있는 공식 PoC가 공개됐다고 표현하면 안 됩니다.

논문이 비교한 PoisonedRAG와 여러 방어의 공식 구현은 존재한다고 설명하지만, 이는 DnD artifact가 아니므로 별도 보관 대상으로 보지 않았습니다. 완전 재현에는 writer·verifier prompt, construction controller, BB formatting, WB HotFlip pipeline, 고정 question-target set과 defense configuration이 추가로 필요합니다.

레드팀 / 모의해킹에서 어떻게 활용할까

승인된 RAG test corpus에서 같은 false conclusion을 지지하되 publisher·style·document type·support rationale이 서로 다른 synthetic bundle을 구성하고, 질문별 top-K와 방어 후 survival을 관찰합니다. 목표는 실제 사용자에게 오답을 내보내는 것이 아니라 방어가 similarity가 낮은 coordinated evidence를 독립 증거로 오판하는지 확인하는 것입니다.

관찰 포인트는 poison retrieval recall, post-filter survival, source diversity, pairwise lexical·embedding similarity, contradiction graph, final answer의 정답·오답 동시 포함 여부입니다. production corpus나 공개 웹에 게시하지 말고 별도 index와 synthetic target에서 수행하며, 사용자-facing response 또는 외부 검색 연결이 발생하면 중단합니다.

실제 점검 시 추가할 체크리스트

  • corpus write 권한과 publisher identity를 기록하고 익명·신규 source의 동시 다량 삽입을 제한합니다.
  • exact duplicate뿐 아니라 서로 다른 표현으로 같은 비정상 결론을 지지하는 set-level pattern을 찾습니다.
  • lexical, embedding, claim graph, provenance, 게시 시간 유사도를 함께 사용합니다.
  • 질문별 top-K에서 특정 결론의 source independence가 실제로 존재하는지 확인합니다.
  • 한 문서가 정답 근거를 직접 반박하지 않고 scope·provenance·해석을 흐리는 Doubt 역할을 하는지 점검합니다.
  • retrieval 전후, defense 전후 poison slot survival을 분리 측정합니다.
  • clean authoritative source와 독성 source가 충돌할 때 abstain·citation verification이 작동하는지 확인합니다.
  • retriever를 교체했을 때 attack transfer와 poison recall 변화를 측정합니다.
  • unseen paraphrase query와 시간 경과 후 query에서 target effect가 유지되는지 확인합니다.
  • 답변 substring뿐 아니라 entailment, contradiction, citation correctness, human review를 함께 평가합니다.

실무 가치 평가

RAG 방어가 “비슷한 독성 문서를 한 군집으로 제거하면 된다”는 수준에 머물러서는 안 된다는 점에서 실무 가치가 높습니다. 서로 다른 문체와 출처처럼 보이는 문서들이 conclusion level에서 조정될 수 있으므로 provenance와 claim-level 관계를 포함한 방어가 필요합니다.

다만 직접 적용 가능한 exploit kit은 공개되지 않았고 threat model도 질문별 지식과 corpus write 권한을 요구합니다. 실제 위험도는 corpus admission, source authentication, retriever recall, 답변 검증 정책에 따라 크게 달라집니다.

결론

DnD의 핵심은 독성 문서를 더 많이 복제하는 것이 아니라 서로 다른 역할로 분업시키는 것입니다. 표현과 embedding은 흩어지게 하고 결론은 일치시키며, 한 문서는 정답 근거 자체를 의심하게 만들어 similarity·clustering·conflict 방어의 결합 가정을 흔듭니다.

실무 방어는 문서 간 표면 유사도만 보지 말고 source provenance, claim graph, 동시 게시·수정 패턴, authoritative evidence와의 검증을 함께 사용해야 합니다. 논문의 수치는 controlled benchmark 결과이며 실제 production prevalence나 보편적 방어 무력화를 뜻하지 않습니다.

반응형

댓글