핵심 요약
프롬프트 인젝션은 사용자 입력이나 외부 문서(RAG)에 "이전 지시 무시하고 ~해" 같은 명령을 심어 모델을 조종하는 공격이다. 완벽 차단은 어렵고, 신뢰 경계 분리(데이터는 데이터로 취급), 권한 최소화(모델이 위험 행동을 못 하게), 출력 검증으로 피해를 줄이는 게 현실적 방어다.
1. 방어 원칙
- 외부 텍스트는 "지시"가 아니라 "데이터"로 구분해 전달(구분자·역할 분리)
- 모델 출력으로 바로 위험 행동(삭제·송금·SQL) 금지 — 사람/규칙 검증 후
- 도구(tool)에 최소 권한만 — 읽기/쓰기 분리, 화이트리스트
2. 특히 위험한 경우
| 상황 | 위험 |
|---|---|
| RAG 문서에 숨긴 지시 | 간접 인젝션 |
| 출력으로 코드/SQL 실행 | 임의 실행 |
| 에이전트가 외부 행동 | 권한 오남용 |
3. 함정
- "무시하라는 지시 무시해" 같은 프롬프트 방어는 우회된다 — 구조적 통제가 핵심
- 모델 출력을 검증 없이 eval/실행하면 치명적
- 민감 데이터를 컨텍스트에 넣으면 유출 위험
자주 묻는 질문
시스템 프롬프트로 완전히 막을 수 있나요?
없습니다. 프롬프트만으로는 우회가 가능합니다. 모델이 위험 행동을 아예 못 하도록 권한을 제한하고, 출력을 검증하는 구조적 방어가 필요합니다.
RAG 문서에도 공격이 들어오나요?
네, 간접(indirect) 인젝션입니다. 외부 문서에 숨긴 지시가 실행될 수 있으니, 검색된 텍스트를 명확히 "데이터"로 표시하고 신뢰할 수 없는 소스를 격리하세요.

댓글 0