프롬프트 인젝션

🏷️ LLM 에이전트

개요

프롬프트 인젝션은 LLM이 명령(instruction)과 데이터(content)를 같은 텍스트 채널로 받는다는 구조를 이용하는 공격입니다. 데이터로 들어가야 할 자리에 지시문을 심어 두면 모델이 그것을 사용자 요청으로 취급해 실행합니다.

두 갈래

**직접 인젝션(direct)**은 사용자가 직접 입력창에 "이전 지시를 무시하고" 류의 문장을 넣는 경우입니다. 탈옥(jailbreak)과 겹치는 영역이고, 피해자가 곧 공격자입니다.

**간접 인젝션(indirect)**이 실제로 위험한 쪽입니다. 모델이 읽어 들이는 외부 콘텐츠(웹페이지, 이메일, 첨부 문서, 코드 저장소, 검색 결과)에 지시문을 숨겨 둡니다. 피해자는 자기가 무엇을 실행시켰는지 모릅니다. 에이전트가 도구를 쓰기 시작하면서 공격면이 크게 늘었습니다.

왜 근본 해결이 어려운가

명령과 데이터를 분리하는 신뢰 경계가 모델 안에 없습니다. 전화망의 in-band signaling 취약점(음성 채널로 제어 신호를 보내던 구조 때문에 사용자가 톤을 재생해 교환기를 조작할 수 있었던 문제)이나 매크로가 포함된 Office 문서와 같은 계열의 문제입니다.

모델을 더 크게 만들거나 더 잘 정렬한다고 해서 없어지지 않습니다. 실제로 2026년 Microsoft Copilot for Word 웜 사례에서 연구자는 모델이 GPT-5.5에서 GPT-5.6으로 올라간 뒤에도 페이로드 문구만 바꿔 전체 공격 체인을 재현했습니다.

완화책은 대체로 모델 밖에 둡니다. 외부 콘텐츠의 출처를 표시해 신뢰 수준을 구분하거나, 에이전트의 도구 권한을 최소화하거나, 부작용이 있는 행동에만 사람 승인을 거는 방식입니다.

관련 문서