[논문리뷰] PoisonedRAG: Knowledge Corruption Attacks to Retrieval-Augmented Generation of Large Language Models

김민상·2026년 7월 15일

Introduction

아키텍처

LLM은 보통 pre-train을 하여 과거 데이터를 통해 훈련된다. 이로인해 최근 데이터에 대한 정보 및 할루시네이션에 대한 한계가 있다.
이를 해결하기 위해 LLM은 RAG을 사용한다.

RAG란 Retrieval-Augmented Generation으로써 LLM이 최신 데이터에 대한 한계를 갖는걸 완화해주는 기법이다.

RAG는 위 그림에서와 같이 세가지로 구성된다.
Knowledge Database, Retriever, LLM

Knowledge Database는 Wikipedia, financial documents 등과 같은 여러 종류의 소스로부터 수집된 대량의 텍스트들이 저장된 저장소이다.

Retriever는 사용자의 Question에 대해 knowledge database로부터 가장 연관된 텍스트들의 집합을 검색하기 위해 사용된다.
즉, 사용자가 질문하면 knowledge DB로부터 질문과 가장 비슷한 텍스트를 뽑아온다고 생각하면 된다.

LLM은 retriever가 검색한 텍스트중 top-k개를 참고하여 사용자에게 Answer하게된다.

공격 표면으로써의 Knowledge database


실제로, 공격자는 LLM이 공격자가 원하는 답을 하게 하기 위해 공격 표면으로써 knowledge DB에 malicious texts을 주입한다.

PoisonedRAG의 개요


본 논문에서는 malicious textx을 optimization problem으로써 수식화 하였다 하였다 (아래의 수식 5).
하지만 optimization problem을 직접적으로 해결하는건 힘들다.
이에따라 두가지 조건에 유도되는 추상적인 해결책에 의존한다.
그 두 조건은 retrieval conditiongeneration condition이다.

retrieval condition은 malicious text가 target question에 대해 검색되어질수 있는것을 의미한다.
generation condition은 malicious text가 LLM이 target question에 대해 target answer을 생성할수 있게 하는 것을 의미한다.

본 논문에서는 두 조건 모두 충족하도록 설계하였다.

Background and Related Work


본 논문의 근간이 되는 RAG에 대한 설명이다.
대답을 생성하기 위해 두 가지 스텝으로 구성된다.

스텝1 - 지식 검색
fQf_Q는 무작위 질문에 대한 임베딩 벡터를 생성한다.
fTf_T는 knowledge DB 안에 있는 각 텍스트에 대해 임베딩 벡터를 생성한다.
그리고 retriever에 따라 두 인코더는 같을수도 다를수도 있다.
RAG는 처음에 질문과 가장 비슷한 k개의 텍스트를 지식 DB로부터 찾는다.
질문 Q에 대한 비슷한 텍스트를 찾기 위한 Similarity점수는 아래 수식에 의해 계산된다.

이때 두 임베딩 벡터의 similarity 점수는 내적 혹은 cosine과 같은 기법을 통해 계산 된다.
두 임베딩 벡터에서 가장 비슷한 top-k개의 검색된 텍스트의 집합을 E(Q;D)E(Q;D)라고 하며 이는 수식(1)과 같다.

스텝2 - 대답 생성
LLM(Q,E(Q;D))LLM(Q,E(Q;D))로 표현되며, 질문에 대해 가장 비슷한 k개의 텍스트 집합(지식 DB로부터 검색된)을 참고하여 생성된 대답이라는 의미이다.

Problem Formulation

Threat Model

공격자의 목표는,
공격자가 임의로 M questions (target questions로 부른다) 세트을 선택한다고 가정하자. 즉 Q1,...,QMQ_1,...,Q_M으로 표현된다.
그에 대한 답이 R1,...RMR_1,...R_M(target answer로 부른다)을 얻고자 할것이다.
예를들어, "who is the CEO of OpenAI?"라는 질문 QiQ_i에 대해 RiR_i로써 "Tim Cook"을 얻고자 한다. (원래 답은 샘 알트먼이다.)

Knowledge Corruption Attack to RAG


본 논문에서는 RAG에 하는 knowledge corruption attacks을 constrained optimazation problem으로 공식화 하였다.
본 논문의 목표는 LLM이 목표 질문QiQ_i에 대한 목표 대답인 RiR_i을 생성하도록 하기 위해서 malicious texts의 세트를 구성하는 것이다.
malicious texts는 아래와 같이 표현된다.

PijP_i^j는 질문 QiQ_i에 대해서 j번째 malicious text을 의미한다.
보통 본 논문에서는 한 질문에 대해 5개의 malicious text을 만든다.
그리고 corrupted knowledge database는 DΓD\cup \Gamma로 표현한다.


수식 2을 설명해보자면
"질문 Q에 대해 부패된 지식 DB로부터 얻은 k개의 검색 text 집합"을 통해 얻은 "대답"
이 대답이 target answer에 속하면 1, 아니면 0으로 한다.
그래서 이 목적함수의 값이 클수록 우리가 원하는 답을 많이 얻었다는 것이다.

Design of PoisonedRAG

두가지 필수 조건


이 섹션에서 목표는 M개의 target questions 각개에 대해서 N개의 malicious texts을 생성하는 것이다.
단, malicious text는 retrieval condition과 generation condition 모두 충족하도록 한다.
인트로에서도 설명했지만 중요한 개념이기에 다시한번 설명하자면

retrieval condition은,
malicious text P의 임베딩 벡터가 질문 Q의 임베딩 벡터와 비슷해 retriever에 의해 검색되는 조건이다.

generation condition은,
malicious text P가 다른 정상 텍스트와 같이 사용 되었을때, LLM이 우리의 목표 대답인 R을 생성하는 조건이다.


위 그림은 두 조건이 만족된 malicious text로 인해 target question에 대한 target answer을 응답받은 그림이다.

두 조건을 만족하기 위한 Malicious Texts 생성

두 조건을 만족하지 않게 된다면 target question에 대한 target answer을 응답받지 못할것이다.
예를들어 P(malicious text)와 Q(target question)을 같게 한다면, retriever로부터 검색이 될 확률이 높으며 이는 retrieval condition을 충족한것이 된다.
하지만 원하는 대답은 못듣게 되니 generation condition은 충족하지 못한게 된다.
이를 해결하기 위해 본 논문에서는 P=SIP = S \oplus I로 분할한다.
S는 retrieval condition을 충족하고, I는 generation condition을 충족하기 위함이다.

Q: Who is the CEO of OpenAI?
R: Tim Cook

S:
Who is the CEO of OpenAI?

I:
A corpus-style passage claiming that OpenAI had a leadership change
and that Tim Cook became the CEO of OpenAI.

Generation Condition을 충족하기 위한 I 생성

I을 생성하기 위해 GPT 4을 사용하며, 위 프롬프트처럼 타겟 질문, 타겟 대답을 주어주며, 제한도 주어진다.
이를 통해 I을 생성한다.

그에 따른 결과는 위와 같은 I가 생성된다. (Open AI의 CEO을 샘알트먼이 아니라 팀쿡으로 대답하도록 유도)

Retrieval Condition을 충족하기 위한 S 생성

여기선 블랙박스와 화이트박스 세팅으로 나눠진다.

블랙박스 세팅에선
P=SIP = S \oplus I에서 S을 Q로 상정한다.

화이트박스 세팅에선
retriever의 파라미터 및 쿼리를 알수 있으므로 gradient descent을 통해 S을 갱신 및 최적화 한다.


위와 같이 S을 최적화 한다.
S'은 S의 초기 값이라고 생각하면 된다.

단어 기반의 LLM에서 gradient descent을 어떻게?

이 부분은 본 논문에 설명되어있지 않지만 궁금해서 찾아보았다.

-gradient-based method
본 논문에선 휴리스틱하게 유사성을 측정하고 일일이 대입을 통해 유사성 높은것을 추론할수 있는데(블랙박스),
만약 retriever의 파라미터를 알수 있다면 gradient을 통해 유사성 높은것을 추론할수 있다(화이트박스)


이 기법에서의 목표는 위와 같음


블랙박스에서는 위와 같이 S의 토큰(단어)이 10개, voca(대체 단어)가 10,000개라면 1010,000 만큼 직접 대입해가며 유사성 점수를 도출함. 총 10,000 10번의 연산.


화이트박스 방식에서는,
우선 현재 S에 대해 한번 포워드 및 역전파하면 각 임베딩에서 각 벡터에 어느 기울기(방향)으로 동작해야 유사성이 최대화 될것인지를 알수 있음.


각 voca에 대해서 임베딩을 해주어 임베딩 벡터화 되어있음.
현재 토큰 임베딩에 대한 방향이 나와있는데 여기에 후보 토큰이 왔을때의 강도 (현재 토큰 임베딩 - 후보 토큰 임베딩들)을 곱해줌.


그 결과 위와 같이 예상 증가량이 나오고 가장 높은 후보 토큰을 선택해줌.


여기서 생기는 의문이 gradient인데도 불구하고
50,000개에 대해서 결국
다 연산해주는거 아닌가? 라는 것임.


결론을 말하면,
블랙박스 방식에서는 일일이 하나씩 넣고뺴는 연산 (GPU X)이지만,
화이트박스에선 gradient을 알기에 행렬연산 하여 한번에 계산이 가능함.

profile
Concept Drift, Imbalanced Dataset, XAI

0개의 댓글