질의만 베낀 오염 문서가 RAG 검색 상위권을 차지하는 조건을 측정한다

Reliability Stress Testing of RAG Retrieval under Query-Relevant Corpus Poisoning

arXiv2611.04264v1

Janet Sung2026-11-03

무엇인가

RAG 시스템은 외부 코퍼스에서 근거를 골라 언어 모델에 넘긴다. 문제는 그 코퍼스에 제3자가 넣은 문서가 섞일 수 있다는 점이다. 공격자는 질의를 바꾸거나 검색기 파라미터를 건드릴 수 없지만, 어떤 문서가 모델 문맥으로 '입장'하는지는 흔들 수 있다. 기존 연구는 문서 내용, 공격자의 질의 정보량, 타깃당 오염 예산, 오염 범위가 동시에 변해 검색 단계 효과만 떼어내기 어려웠다. 이 논문은 그 입장 결정 단계만 분리해 측정한다. 생성 단계와 지시 따르기 여부는 실험 범위에서 제외했다.

어떻게 동작하나

위협 모델은 단순하다. 깨끗한 코퍼스 D에 질의별로 만든 오염 문서 집합 A_q(P)를 더하고, TopK(q, D ∪ A)로 상위 후보를 뽑는다. 여기서 P는 타깃 질의 하나에 붙이는 문서 수로 1, 3, 5를 쓴다. 오염 범위는 한 번에 한 질의만 노리는 격리 조건과, 모든 평가 질의가 동시에 오염 문서를 내놓는 다중 타깃 조건으로 나뉜다. 공격자 정보량은 질의어를 하나도 안 쓰는 경우부터 무작위 2개·4개, IDF가 높은 2개·4개, 그리고 전체 질의까지 계단으로 올라간다. 내용 통제도 촘촘하다. 질의만 반복한 문서, 질의에 BIPIA 페이로드를 붙인 문서, 같은 길이의 무해한 채우기를 붙인 문서, 그리고 BM25 질의 점수가 0인 무관한 실제 코퍼스 스니펫을 붙인 문서를 비교해 '질의 앵커링'과 '덧붙은 텍스트의 정체'를 갈라낸다. 깨끗한 코퍼스로 고정한 BM25 통계와 LSA 공간을 쓰기 때문에 차이는 새로 들어온 문서에서만 나온다.

무엇과 다른가

측정 지표는 노출과 품질을 동시에 본다. TargetExposure@10은 상위 10위 안에 그 질의를 겨냥한 오염 문서가 하나라도 있으면 1이고, AnyPoisonExposure@10은 다른 질의를 겨냥한 문서까지 포함한다. SafeRetrievalReliability@10은 근거가 존재하면서 오염 문서가 하나도 없는 경우만 1로 세는 엄격한 논리곱이다. 여기에 nDCG@10, Recall@10을 붙이고, 공격 질의를 근거와 오염의 조합 네 상태로 쪼개 노출·근거 손실·교차 간섭·순위 악화를 구분한다. 검색기는 BM25, 64차원 LSA, RRF(k=60, BM25와 LSA 상위 100개를 융합해 50개 유지) 하이브리드, 그리고 사전학습된 BAAI/bge-small-en-v1.5(33M)를 추가 검증에 쓴다.

어떻게 쓰나

실험은 BEIR의 SciFact(문서 5,183개, 판정 질의 300개)와 NFCorpus(3,633개, 323개)에서 돌렸고, 합쳐 623개 질의다. 격리 조건 P=5에서 오염 문서 5개는 코퍼스의 0.10~0.14%에 불과한데도 하이브리드 nDCG가 SciFact에서 0.465에서 0.183으로, NFCorpus에서 0.267에서 0.160으로 떨어졌다. SafeRetrievalReliability@10은 0.663에서 0, 0.622에서 0.006이 됐다. 내용 통제 결과는 검색기마다 달랐다. SciFact에서 질의만 쓴 문서와 페이로드를 붙인 문서의 nDCG 차이는 BM25가 0, LSA가 +0.0014, 하이브리드가 +0.0003이었다. NFCorpus에서는 페이로드에서 질의만 뺀 차이가 BM25 +0.0039, LSA +0.0450, 하이브리드 +0.0382로 커졌다. 코퍼스 유래 중립 텍스트와 비교하면 LSA/하이브리드 차이가 SciFact에서 −0.0117/−0.0108, NFCorpus에서 −0.0370/−0.0367이고 신뢰구간이 0을 배제한다. 즉 의미 기반 순위 변화는 악성 지시의 의미 때문이라기보다 덧붙은 텍스트 자체의 효과다.

전제와 한계

오염 범위를 넓히면 실패 양상 자체가 바뀐다. 다중 타깃 P=5는 SciFact에 1,500개(22.45%), NFCorpus에 1,615개(30.77%)의 오염 문서를 만든다. NFCorpus LSA에서 타깃 노출은 0.805인데 임의 오염 노출은 0.966이고 상위 10위 안 평균 오염 문서 수가 7.23개다. 타깃 노출만 보면 이 포화 국면의 상당 부분을 놓친다. 질의 길이도 해석을 바꾼다. NFCorpus는 평균 유효 질의어가 2.48개(중앙값 2)라 2개 단어 예산으로 질의의 57.6%, 4개로 90.7%가 전부 덮인다. 그래서 유효 질의어가 8개 이상인 SciFact 질의 162개를 따로 봤더니, 무작위 2개 단어가 유효 질의어의 19.9%만 드러내고도 타깃 노출 39.5%를 냈고, 4개는 39.7%로 89.5% 노출을 기록했다. BGE-small 검증에서는 질의만 넣은 P=5가 두 데이터셋 모두 타깃 노출 100%에 도달했고, 페이로드를 더해도 SciFact nDCG가 0.269에서 0.271로 거의 그대로였다.

방어 쪽 결과는 trade-off가 핵심이다. 질의어를 IDF 가중으로 얼마나 덮는지를 나타내는 C(q,d)가 임계값 τ 이상인 후보를 거부하는 규칙을 τ 0.25부터 0.95까지 쓸어보면, 전체 질의 조건에서 τ=0.95가 두 데이터셋 모두 타깃 노출을 없앤다. 하지만 이건 공격에 맞춰진 규칙이다. 질의를 거의 다 반복한 문서의 커버리지는 당연히 1에 가깝다. 진짜 비용은 다른 데 있다. NFCorpus에서 τ=0.95일 때 공격 nDCG 0.138, 깨끗한 질의 nDCG 0.134로 필터 없는 0.267의 절반 수준이고, 질의의 3.4~4.0%는 후보 10개를 채우지도 못한다. 4개 단어 조건은 더 나쁘다. τ=0.40에서 노출은 SciFact 5.3%, NFCorpus 0.3%로 떨어지지만 깨끗한 nDCG가 0.082, 0.065로 붕괴하고, τ=0.95로 풀면 깨끗한 nDCG가 0.440/0.134로 회복되는 대신 4개 단어 노출이 78.0%/22.3%로 올라간다. MMR(λ=0.7)은 답이 다르다. 노출이 SciFact 1.000, NFCorpus 0.910으로 그대로인 채 nDCG만 0.183에서 0.234, 0.160에서 0.164로 바뀌었고, 하이브리드 지연은 중앙값 기준 약 1.5ms 늘었다. 다양성 재정렬은 여기서 입장 차단 장치로 작동하지 않는다.

개발자 입장에서 이 논문의 쓸모는 측정 설계에 있다. 인덱스에 외부 문서가 들어오는 구조라면, 질의를 그대로 반복하는 문서가 상위 k를 점유하는지 먼저 확인해야 한다. 순위 품질 하락만 보면 놓치고, 노출률만 보면 정상 검색 손실을 놓친다. 노출률과 근거 보존율, 그리고 후보 부족분을 함께 로깅하는 편이 낫다. 오버랩 기반 필터는 강하게 걸수록 좋은 문서까지 걷어내며, 그 손실 폭이 데이터셋마다 크게 다르다는 점도 실무 감각과 맞닿아 있다. 저자들도 임계값 곡선은 배포 권고가 아니라 측정 프런티어라고 못 박는다.

한계는 저자들이 직접 밝힌다. 실험이 검색 계층에서 끝나므로 노출이 곧 하류 공격 성공은 아니다. 공격 문서는 은밀하거나 최적화된 것이 아니라 질의를 노골적으로 반복하는 투명한 스트레스 조건이다. 격리 조건의 작은 코퍼스 비율도 질의별 집중 타깃팅 덕분이지 무작위 오염의 확률이 아니다. 코퍼스 유래 중립 스니펫은 페이로드와 단어 빈도·주제·의미가 완전히 일치하지 않고, 2개·4개 단어 예산은 짧은 질의에서 정보 비율로 읽기 어렵다. 높은 IDF 조건은 깨끗한 코퍼스 통계 접근을 가정하며, 사전학습 검증은 소형 BGE 모델 하나와 세 가지 핵심 조건에 한정된다. BEIR qrels 자체가 완전하지 않아 근거 가용성과 SafeRetrievalReliability@10은 판정 누락을 물려받는다.