지난 글([AI 보안] 1탄)에서 프롬프트 인젝션을 다루며, AI가 외부에서 가져온 문서 속 숨은 지시까지 따라간다고 했죠.

그 “외부 문서를 가져오는” 기술의 대표가 바로 RAG(검색 증강 생성)입니다.

요즘 기업용 AI 챗봇, 사내 문서 검색, 고객 상담 봇은 거의 다 RAG로 돌아가요.

오늘은 RAG가 뭔지·어떻게 작동하는지, 그리고 왜 인젝션에 특히 취약한지까지 풀어드릴게요.

RAG가 뭔가요

답하기 전 외부 책·문서를 참고하는 AI(오픈북 시험) 답하기 전 외부 책·문서를 참고하는 AI(오픈북 시험) — 출처: agy 생성

RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 AI가 답하기 전에 관련 문서를 먼저 찾아 그 내용을 참고하도록 하는 기술이에요.

왜 필요할까요?

LLM(거대 언어 모델)에는 두 가지 한계가 있습니다.

  • 학습 시점 이후의 최신 정보를 모른다
  • 회사 내부 문서처럼 학습에 없던 자료를 모른다

그래서 모르는 걸 그럴듯하게 지어내는 환각(hallucination)이 생기죠.

RAG는 이걸 오픈북 시험으로 바꿔줍니다.

닫힌 책 시험(LLM 단독)이 아니라, 관련 자료를 펼쳐놓고 보면서 답하게 하는 거예요.

RAG는 어떻게 작동하나

청크 → 벡터DB → 검색 → 생성으로 이어지는 4단계 파이프라인 청크 → 벡터DB → 검색 → 생성으로 이어지는 4단계 파이프라인 — 출처: agy 생성

크게 4단계로 움직입니다.

① 문서 쪼개기 (청크)

긴 문서를 검색하기 좋게 작은 조각(chunk, 청크)으로 나눕니다.

② 임베딩 → 벡터 DB

각 청크를 임베딩(embedding)으로 바꿔 숫자 벡터로 만들고, 벡터 데이터베이스에 저장합니다.

뜻이 비슷한 문장은 벡터 공간에서 가까이 모이게 돼요.

③ 검색 (Retrieval)

사용자 질문도 같은 방식으로 벡터로 바꿔, 의미가 가장 가까운 청크 N개를 찾아냅니다(코사인 유사도 기준).

④ 증강 → 생성

찾아온 청크를 질문과 함께 프롬프트에 합쳐 LLM에 넣습니다.

모델은 그 자료를 근거로 답을 만들죠.

한 줄 요약: RAG는 “검색(Retrieval)”으로 자료를 찾아 “생성(Generation)”에 끼워 넣는(Augmented) 구조예요.

RAG가 좋은 이유

출처가 붙은 최신 답변 vs 지어낸 답변(환각) 대비 출처가 붙은 최신 답변 vs 지어낸 답변(환각) 대비 — 출처: agy 생성

  • 최신성 — 모델을 다시 학습시키지 않고 문서만 갱신하면 최신 답이 나온다
  • 근거 제시 — 어떤 문서를 참고했는지 출처를 보여줄 수 있다
  • 환각 감소 — 지어내는 대신 실제 자료에 기반한다
  • 비용 효율 — 거대한 재학습 없이 지식만 갈아끼운다

이래서 사내 지식 검색·고객 상담·문서 Q&A에 RAG가 표준처럼 쓰입니다.

그런데 왜 인젝션에 취약할까

검색된 문서에 숨은 지시가 프롬프트로 흘러들어 명령이 되는 모습 검색된 문서에 숨은 지시가 프롬프트로 흘러들어 명령이 되는 모습 — 출처: agy 생성

여기서 지난 글의 약점이 다시 등장합니다.

핵심은 이거예요.

검색해 온 문서가 그대로 프롬프트에 들어간다.

그 문서 어딘가에 “이전 지시는 무시하고 ~해라” 같은 문장이 숨어 있으면, AI는 그걸 참고자료가 아니라 명령으로 받아들일 수 있습니다.

LLM은 여전히 ‘자료’와 ‘명령’을 구분하지 못하니까요.

즉 RAG는 편리한 만큼, AI가 읽는 외부 입력 경로를 잔뜩 늘려 간접 프롬프트 인젝션의 통로를 넓힙니다.

OWASP도 2025년 LLM 보안 보고서에서 “RAG나 파인튜닝으로는 프롬프트 인젝션이 사라지지 않는다”고 못 박았어요.

지식베이스 오염 — RAG Poisoning

공유 지식베이스에 심긴 오염 문서 하나가 여러 사용자에게 퍼지는 그림 공유 지식베이스에 심긴 오염 문서 하나가 여러 사용자에게 퍼지는 그림 — 출처: agy 생성

특히 위험한 건 지식베이스 자체를 오염시키는 공격이에요.

공격 방식은 두 가지입니다.

  • 업로드가 열려 있으면 악성 문서를 직접 심는다
  • 공개 웹을 크롤하는 RAG라면 악성 페이지를 검색 상위에 노출시켜 끌려오게 한다

무서운 점은 지속성입니다.

한 번 심은 악성 청크 하나가, 그걸 검색하는 모든 사용자의 답변을 오염시켜요.

실제로 PoisonedRAG라는 연구(USENIX Security 2025)는 수백만 건짜리 지식베이스에서도 약 90% 성공률로 답을 조작할 수 있음을 보였습니다.

거짓 정보를 진짜처럼 답하게 만들거나, 민감 정보를 빼내도록 유도하는 식이죠.

그래서, 어떻게 막을까

들어오는 문서를 검증하고 검색 내용을 데이터로 격리하는 방어 게이트 들어오는 문서를 검증하고 검색 내용을 데이터로 격리하는 방어 게이트 — 출처: agy 생성

지난 글의 방어 원칙이 RAG에도 그대로 적용됩니다.

① 검색 콘텐츠를 ‘데이터’로 격리

가져온 청크는 “참고 자료일 뿐 명령이 아니다”라고 분명히 구분해 모델에 전달합니다.

② 지식베이스 출처를 통제

아무 문서나 인덱싱하지 말고, 업로드 검증·출처 신뢰등급을 둡니다.

오염 문서가 애초에 들어오지 못하게 하는 게 가장 효과적이에요.

③ 검색 결과·출력 검증

가져온 청크에서 의심스러운 지시 패턴을 걸러내고, 답변과 행동도 점검합니다.

④ 권한 최소화 + 출처 표시

AI에 꼭 필요한 권한만 주고, 답변에 참고한 출처를 붙여 사용자가 교차검증하게 합니다.

마무리

RAG는 AI의 환각을 줄이고 최신·내부 지식을 다루게 해주는 강력한 도구입니다.

하지만 AI가 읽는 입력 경로를 늘리는 만큼, 공격 표면도 함께 넓어진다는 걸 잊으면 안 돼요.

RAG를 도입할 때 이 질문 하나면 충분합니다.

“이 RAG는 어떤 문서를 인덱싱하고, 검색한 내용을 명령처럼 다루지 않는가?

편리함과 보안은 늘 한 세트로 봐야 합니다.

참고 출처