← 주제 탐구

주제 탐구 · 2026-10-29 · 심화 · 작성자 bombong

프롬프트 인젝션: 에이전트 시대의 새 공격면과 방어

프롬프트 인젝션은 외부 데이터에 숨긴 지시로 에이전트를 가로채는 공격이다. 모델이 역할 표시보다 글의 '말투'로 누가 말하는지 판단한다는 분석이 나왔고, 공격면이 도구 설명과 메모리로 넓어지면서 방어도 입력 필터링에서 모델 내부의 지시·데이터 분리와 호스트의 권한 통제로 옮겨 가고 있다.

목차
핵심 정리
  • 모델은 텍스트에 붙은 역할 표시(<tool>, <user>)보다 그 글이 어떻게 들리는지로 출처를 판단한다. 그래서 사용자 말처럼 쓰인 외부 텍스트가 사용자 지시처럼 실행된다.
  • 에이전트에서는 공격 경로가 웹 문서뿐 아니라 MCP 도구 설명, 메모리·파일 같은 영속 상태, 이미지까지 넓어진다. 한 번 저장된 지시는 다음 세션에서도 다시 작동할 수 있다.
  • 방어는 크게 탐지·감시, 입력 데이터 정화, 모델 구조 안의 지시·데이터 분리, 시스템 수준의 권한 분리로 나뉜다. 저마다 비용과 유용성 손실의 크기가 다르다.
  • 작업이 정상적으로 끝났다고 해서 안전하다는 뜻은 아니다. 정상 작업과 정보 유출이 함께 일어날 수 있고, 정답 근처에서 살짝 비트는 공격은 명백한 이탈만 보는 평가에서 잘 드러나지 않는다.
  • 방어를 평가할 때는 고정된 공격 모음뿐 아니라 적응형 공격과 오탐률까지 함께 본다.

왜 다시 문제가 됐나: 챗봇에서 에이전트로

프롬프트 인젝션(Prompt injection)은 모델이 읽는 입력 데이터에 공격자의 지시를 섞어 넣어, 모델이 원래 하던 일 대신 공격자가 정한 일을 하게 만드는 공격이다. PromptLocate 연구논문는 이를 '주입된 지시와 데이터로 이뤄진 프롬프트로 입력을 오염시켜 공격자가 정한 작업을 완수하게 만드는 공격'으로 정리한다. Prompt Injection 2.0 연구논문에 따르면 이 공격은 2022년 5월 Preamble이 처음 발견해 OpenAI에 알렸다.

챗봇 시절에는 피해가 대개 엉뚱한 답 한 번으로 끝났다. 에이전트는 사정이 다르다. 에이전트는 웹을 읽고, 메일을 열고, 도구를 부르며 여러 단계를 스스로 진행한다. 그래서 읽어 들인 외부 데이터 속 한 줄이 실제 행동으로 이어진다. 사용자가 직접 입력하지 않고 외부 데이터를 거쳐 들어오는 공격을 간접 프롬프트 인젝션(Indirect Prompt Injection)이라고 한다. DataFilter 연구논문는 공격자가 에이전트가 접근하는 데이터에 지시를 심으면 원래 사용자 작업을 마음대로 덮어쓰고 에이전트를 해로운 행동 쪽으로 돌릴 수 있다고 설명한다.

기존 보안 장비로 막기 어려운 이유도 있다. Prompt Injection 2.0논문은 프롬프트 인젝션이 XSS(사이트 간 스크립팅)·CSRF(사이트 간 요청 위조) 같은 전통 웹 공격과 결합한 '하이브리드 위협'을 분석한다. 그리고 웹 방화벽, XSS 필터, CSRF 토큰 같은 기존 통제가 이런 공격을 막지 못한다는 벤치마크 결과를 함께 다룬다. 공격 문자열이 실행 코드가 아니라 평범한 자연어라서, 특수문자나 정해진 패턴으로 거르던 방식이 잘 맞지 않는다.

핵심 아이디어: 모델은 표시보다 말투를 믿는다

LLM은 세상을 한 줄로 이어진 텍스트로 본다. 시스템·사용자·도구 같은 역할 구분은 그 줄 사이사이에 끼워 둔 표시일 뿐이다. 역할 혼동 연구논문는 프롬프트 인젝션의 뿌리를 바로 여기서 찾는다. 모델은 글의 출처를 붙어 있는 역할 표시가 아니라 그 글이 어떻게 들리는지로 판단한다. 웹페이지에 숨긴 명령에 <tool> 표시가 붙어 있어도, 그 명령이 사용자의 말처럼 들리면 에이전트가 그대로 따른다.

대표의 목소리를 흉내 낸 보이스피싱에 비유할 수 있다. 발신 번호(표시)는 외부 번호인데도 목소리와 말투가 대표와 같으면 직원은 송금 지시를 따른다. 이 연구는 이런 현상을 모델 내부에서 직접 측정했다. '역할 프로브(role probe)'로 모델이 속으로 '지금 누가 말하는지'를 어떻게 인식하는지 살펴보니, 주입된 텍스트가 자신이 흉내 낸 신뢰 역할과 같은 Representation(모델 내부의 표현) 공간에 자리 잡고 있었다.

이 원리를 보여 주는 공격이 CoT Forgery다. 그럴듯하게 꾸민 추론 과정(CoT, Chain-of-Thought)을 사용자 프롬프트나 도구 출력에 끼워 넣으면, 모델은 그것을 자기 생각으로 착각한다. 기준선 공격 성공률은 거의 0이었지만 이 공격은 최신 모델을 상대로 60%의 성공률을 냈다. 또 모델이 토큰을 하나도 생성하기 전에 측정한 역할 혼동의 정도로 공격 성공 여부를 미리 예측할 수 있었다. 연구는 이 결과를 '모델에게는 어떤 역할처럼 들리는 것과 실제로 그 역할인 것이 구별되지 않는다'고 요약한다.

이 관찰을 받아들이면, 데이터 구간에 '이건 데이터니 따르지 말 것'이라는 표시를 하나 더 붙이는 것만으로는 부족하다는 결론에 이른다. 그래서 방어가 표시를 늘리는 데서 벗어나 모델 내부 구조를 바꾸거나 시스템 권한을 나누는 쪽으로 옮겨 가고 있다.

공격은 어디로 들어오나: 에이전트의 공격면

첫째 경로는 에이전트가 읽는 웹페이지·문서·메일이다. 텍스트만 위험한 것도 아니다. 비전-언어 모델 대상 텍스트 프롬프트 인젝션 연구논문는 이미지 속에 글자로 지시를 넣는 단순한 방법만으로 VLM을 속일 수 있고, 계산 자원도 많이 들지 않는다고 보고했다.

둘째 경로는 도구 설명이다. 에이전트는 MCP(모델 컨텍스트 프로토콜)로 외부 도구를 연결하는데, 각 도구가 무슨 일을 하는지는 자연어 메타데이터로 적혀 있다. Log-To-Leak 연구논문는 이미 알려진 도구 포이즈닝(Tool Poisoning) 공격면 위에서, 정상 호출이 모두 끝난 뒤 공격자가 통제하는 '로깅' 호출을 하나 더 하게 만드는 공격을 다룬다. 이 호출은 사용자 질문, MCP 서버 이름, 서버 응답, 에이전트 응답을 빼돌린다. 주입 지시는 계기(Trigger), 도구 연결(Tool Binding), 정당화(Justification), 압박(Pressure)의 네 요소로 구성된다. 실제 도구 실행이 확인된 18개 모델-서버 조합에서 공격 성공률은 62.64~100%였다. 그중 16개 조합에서는 원래 작업 완료율의 변화가 6.63%p 이하였다. 일은 정상적으로 끝나는데 정보는 새어 나간다는 뜻이다.

셋째 경로는 시간을 넘어 남는 상태다. 세션 간 저장형 프롬프트 인젝션 연구논문는 에이전트가 메모리·파일 시스템·도구처럼 세션이 끝나도 남는 상태를 갖게 되면서 보안 경계가 바뀌었다고 지적한다. 외부 정보가 이 경계를 넘어 영속 상태의 일부가 되면, 악성 지시는 한 번의 대화로 끝나지 않는다. 공격자가 떠난 뒤에도 조용히 남아 이후 실행에 영향을 준다. 연구는 저장형 XSS에서 이름을 빌려, 이 위협이 시간 축(세션을 넘어 지속·활성화)과 공간 축(프롬프트 밖 영속 상태로 확산) 양쪽으로 넓어진다고 정리했다.

신뢰 입력과 비신뢰 입력이 섞이는 자리사용자 요청 → 하나의 컨텍스트; 시스템 프롬프트 → 하나의 컨텍스트; 하나의 컨텍스트 → 에이전트 LLM; 에이전트 LLM → 도구 호출·답변; 웹·메일·이미지 → 하나의 컨텍스트(숨은 지시); 도구 설명(MCP) → 하나의 컨텍스트(도구 포이즈닝); 메모리·파일 → 하나의 컨텍스트(다음 세션); 도구 호출·답변 → 메모리·파일(저장)신뢰 입력신뢰할 수 없는 입력사용자 요청시스템 프롬프트하나의 컨텍스트역할 표시로만 구분에이전트 LLM도구 호출·답변웹·메일·이미지도구 설명(MCP)메모리·파일세션을 넘어 남음숨은 지시도구 포이즈닝다음 세션저장
신뢰 입력과 비신뢰 입력이 섞이는 자리 모든 입력은 하나의 컨텍스트로 합쳐져 모델에 들어간다. 점선은 행동 결과가 메모리에 저장되어 다음 세션의 입력이 되는 고리다.

방어의 발전 흐름: 찾고, 지우고, 감시하기

DataFilter 연구논문는 기존 방어를 세 갈래로 나누고 각각의 비용을 짚는다. 파인튜닝 방어는 모델 가중치에 접근해야 하고, 탐지 기반 방어는 유용성 손실이 크며, 시스템 수준 방어는 시스템을 적지 않게 다시 설계해야 한다. 이 연구가 내놓은 해법은 데이터가 본 모델에 닿기 전에 악성 지시를 지우는 필터 모델이다. 모의 주입 데이터로 SFT(지도 미세조정)를 해서 만들었고, 사용자 지시와 데이터를 함께 보면서 공격 내용만 골라 지우고 정상 정보는 남긴다. 여러 벤치마크에서 공격 성공률을 거의 0까지 낮추면서 유용성을 유지했다고 보고한다. 모델 종류와 무관하게 앞단에 붙이는 방식이라 블랙박스 상용 LLM에도 쓸 수 있다는 점이 맞바꾼 이점이다.

AgentWatcher논문는 탐지 쪽의 약점 두 가지를 겨냥했다. 맥락이 길어질수록 탐지 성능이 크게 떨어지는 문제와, 무엇이 인젝션인지 명시적 규칙이 없어 판단이 불투명한 문제다. 먼저 에이전트의 행동에 인과적으로 영향을 준 소수의 맥락 구간만 추려 검사 대상을 짧게 줄인다. 그다음 '무엇이 인젝션이고 무엇이 아닌가'를 규칙으로 정해 두고, 감시용 LLM이 그 규칙에 따라 추려 낸 구간을 판단하게 한다. 이렇게 하면 긴 맥락에서도 확장할 수 있고 판단 근거도 설명할 수 있다.

PromptLocate논문는 공격이 일어난 뒤를 다룬다. 오염된 데이터 안에서 주입된 부분의 위치를 찾아내야 사후 포렌식 분석과 데이터 복구가 가능하기 때문이다. 이 방법은 데이터를 의미 단위 구간으로 나누고, 주입 지시로 오염된 구간을 찾은 다음, 주입 데이터로 오염된 구간을 짚어 내는 세 단계로 이뤄진다. 기존 공격 8종과 적응형 공격 8종에서 위치를 정확히 찾았다고 보고한다.

모델 바깥의 구조 쪽에서는 Prompt Injection 2.0논문이 프롬프트 격리, 런타임 보안, 권한 분리를 결합한 아키텍처 방안을 제시한다. 정리하면 탐지는 모델을 건드리지 않는 대신 놓치거나 오탐할 수 있고, 필터는 붙이기 쉬운 대신 별도 모델을 운영해야 하며, 구조적 분리는 강한 대신 설계를 바꿔야 한다.

요즘 어디로 가고 있나: 모델 안의 분리와 호스트의 통제

한 갈래는 지시와 데이터의 분리를 모델 구조 안에 넣는 것이다. Heads of Security(HoS, 논문)는 어텐션 헤드마다 작은 학습형 게이트를 달고, 각 헤드가 신뢰 토큰과 비신뢰 토큰 사이에 주의를 어떻게 나눌지 학습하게 한다. 이렇게 하면 모델은 외부 내용을 읽고 추론하면서도 그 안의 지시는 따르지 않는다. 역할 혼동 연구가 보여 준 '표시와 내부 인식의 어긋남'을 모델 안에서 직접 바로잡으려는 시도로 읽을 수 있다. Llama-3.3-70B-Instruct와 GPT-OSS-20B에서 평가한 결과, 블랙박스 공격 RL-Hammer의 성공률은 GPT-OSS-20B에서 97%, 파인튜닝 방어 SecAlign에서 85%였지만 HoS에서는 10%였다. 화이트박스 공격 Claudini는 HoS를 상대로 같은 성공률에 이르는 데 다른 대상보다 3배 많은 FLOPs가 필요했다. 반면 같은 구조적 방어인 ASIDE는 도구 사용 유용성이 10%에 그쳤다. 모델 안에서 지시와 데이터를 분리하더라도 유용성을 얼마나 지키느냐가 관건이라는 뜻이다.

다른 갈래는 모델 판단에 기대지 않고 호스트(에이전트를 실행하는 쪽)가 권한을 쥐는 것이다. Log-To-Leak논문에서는 평가한 방어 세 가지가 GitHub MCP와 GPT-4o 조합에서 55%가 넘는 잔여 공격 성공률을 남겼다. 지시 탐지기는 정상 도구 설명의 85.53%를 공격으로 잘못 표시했다. 연구는 이를 근거로, 정상 작업 뒤에 따라붙는 추가 도구 호출은 호스트가 직접 허가하도록 통제해야 한다고 결론 내렸다. 세션 간 저장형 연구논문도 같은 방향을 가리킨다. 신뢰할 수 없는 입력을 거르는 데서 그치지 말고, 외부 정보가 영속 상태로 들어가면서 '권위'를 얻는 과정을 통제하는 '상태 중심 보안'으로 옮겨 가야 한다는 것이다.

평가 방식도 바뀌고 있다. NTBench논문는 정답에서 명백히 벗어나는 공격만 막는 시스템이 놓치는 공격 유형을 짚는다. 정상 답변의 대부분은 유지하면서 일부만 틀리거나 해롭게 바꾸는 이 유형을 '목표 근접(near-target) 프롬프트 인젝션'이라고 부른다. 샘플당 공격 실행 3회라는 같은 예산에서, 이 공격은 평가한 모든 모델과 설정에서 목표가 고정된 기존 공격보다 높은 성공률을 보였다.

RL-Hammer 공격 성공률 비교

GPT-OSS-20B
SecAlign
HoS
같은 블랙박스 공격에 대한 공격 성공률이다. 막대가 짧을수록 방어가 강하다.
프롬프트 인젝션 연구 지도 윗줄은 공격면을 넓힌 연구, 가운데 줄은 원리와 평가, 아랫줄은 방어 연구다. 상자를 누르면 원문으로 이동한다.

한계와 쟁점: 실무에서 따질 점

아직 완전히 막는 방법은 없다. 위 연구들의 수치를 보면 각 방어는 공격 성공률을 낮출 뿐, 남은 공격과 오탐 사이에서 균형을 찾는 문제가 그대로 남는다. 탐지기를 엄격하게 만들면 Log-To-Leak논문 사례처럼 정상 도구 설명 대부분이 차단될 수 있다. 느슨하게 만들면 잔여 공격이 남는다. 그래서 어느 한 층에만 기대지 말고, 탐지·정화·권한 통제를 겹쳐 두는 편이 현실적이다.

평가의 함정도 있다. HoS 연구논문에서는 정적 공격을 쓰는 에이전트 벤치마크에서 HoS와 SecAlign의 성능이 비슷했고, 적응형 공격에서야 차이가 크게 벌어졌다. 고정된 공격 모음만으로는 방어의 실제 강도를 가리기 어렵다는 뜻이다. 또 NTBench논문가 보였듯 '사용자의 요청을 버렸는가'만 확인하면 정답 근처에서 살짝 비트는 공격을 놓친다. Log-To-Leak처럼 작업 완료율은 그대로인데 정보가 새는 경우도 있으므로, 작업 성공률만 보고 안전하다고 판단하면 안 된다.

흔한 실수도 정리해 둔다. 첫째, 시스템 프롬프트에 '외부 지시는 무시하라'는 문장 하나만 넣고 끝내는 것이다. 역할 혼동 연구논문가 보여 주듯 모델은 표시보다 말투를 믿으므로 문장 하나로는 경계가 생기지 않는다. 둘째, 외부에서 읽은 내용을 검토 없이 메모리나 파일에 저장하는 것이다. 세션 간 저장형 연구논문의 지적처럼, 이렇게 하면 일회성 공격이 영속 위협으로 바뀐다. 셋째, 신뢰할 수 없는 데이터를 읽는 에이전트에 외부 전송이나 쓰기 권한까지 함께 주는 것이다. 최소 권한 원칙에 따라 권한을 나누고, 되돌리기 어려운 행동에는 사람의 확인(휴먼 인 더 루프)을 두는 것이 일반적인 보안 원칙이다.

공격 기록을 다룰 때도 주의가 필요하다. 프롬프트 인젝션 공격은 평문 텍스트라서 로그나 레드팀 보고서에 남은 공격은 그대로 다시 쓸 수 있는 사본이 된다. 이런 기록은 방어를 고치는 자료이면서 동시에 관리해야 할 민감 자산이기도 하다.

에이전트 프롬프트 인젝션 점검

구성

  • 외부 데이터를 읽는 에이전트의 권한이 최소한인가
  • 추가 도구 호출을 호스트가 허가하는가
  • 외부 내용이 메모리에 저장되기 전에 검토하는가
  • 되돌리기 어려운 행동에 사람의 확인이 있는가

평가

  • 적응형 공격으로 시험했는가
  • 목표 근접 공격을 시나리오에 넣었는가
  • 작업 성공과 별개로 유출을 확인하는가
  • 탐지기의 오탐률을 함께 쟀는가
본문에서 다룬 연구와 일반 보안 원칙을 바탕으로 배포 전에 확인할 항목을 모았다.

더 공부하려면

원리부터 잡으려면 역할 혼동 연구논문를 먼저 읽는다. 왜 표시를 늘리는 방어가 한계에 부딪히는지 설명하는 출발점이다. 그다음 Prompt Injection 2.0논문을 읽으면 이 공격이 전통 웹 보안과 어떻게 얽히는지, 아키텍처 수준 방어가 어떤 모습인지 볼 수 있다.

에이전트 공격면은 세션 간 저장형 프롬프트 인젝션 연구논문와 Log-To-Leak논문을 이어서 읽으면 좋다. 앞의 것은 메모리·파일 같은 영속 상태를, 뒤의 것은 MCP 도구 설명을 다룬다. 이미지 쪽 위험은 VLM 텍스트 인젝션 연구논문로 짧게 확인할 수 있다.

방어는 공격 전, 공격 중, 공격 후 순서로 보면 정리가 쉽다. 공격 전에 데이터를 정화하는 DataFilter논문, 실행 중에 감시하는 AgentWatcher논문, 사후에 위치를 추적하는 PromptLocate논문를 차례로 읽은 뒤, 모델 구조로 분리하는 HoS논문로 넘어간다. 자기 시스템을 평가하는 방법을 고민한다면 마지막으로 NTBench논문를 읽고 평가 시나리오에 목표 근접 공격을 넣어 본다.

관련 용어

간접 프롬프트 인젝션 도구 포이즈닝 MCP 에이전트 메모리 최소 권한 원칙 가드레일 데이터 유출 레드팀

참고 문헌

핵심 논문

최근 연구

AI가 참고 문헌을 바탕으로 작성하고 검수를 거친 해설입니다. 정확한 내용은 원문을 확인해 주세요.