남이 써 둔 문장이 내 지시가 될 때 — 프롬프트 인젝션
로그 한 줄이 명령이 됐다
클라우드 서버는 무슨 일이 있었는지를 로그에 적어 둔다. 요청이 몇 건 들어왔고 어디서 오류가 났는지 같은 기록이다. 요즘은 그 로그를 사람 대신 읽고 손봐 주는 인공지능 도우미가 있다.
2026년의 한 프리프린트가 그 도우미에게 로그를 읽혔다. 로그 다섯 종류에 문장 42개를 심어 두고, 여덟 개 모델을 세 가지 조건에서 각각 다섯 번씩 돌렸다(공격 문장 32개 기준 모델·조건당 160회). 저자들이 능동 조건이라 부르는 조건에서, 심어 둔 명령을 그대로 실행한 비율이 모델에 따라 0%에서 86.2%까지 갈렸다. "고치는 명령은 실행하지 말라"는 지시를 미리 주자 대부분의 모델이 0%로 내려갔지만, 한 모델은 여전히 30.0%에서 실행했다. 바깥에서 코드를 받아 실행하는 데까지 간 것이 여덟 중 여섯이었다 (arXiv:2604.15368, 프리프린트).
같은 논문에 더 이상한 관찰이 있다. 상용 문지기 세 개 — 입력을 따로 검사해 위험한 것을 걸러 낸다는 제품들 — 이 로그에 박힌 문장들을 거의 잡아내지 못했다. 하나는 32개 중 가장 노골적인 1개만 잡았고, 다른 하나는 하나도 못 잡았다. 그런데 똑같은 문장을 로그에서 떼어 내 따로 보여 주면 잡는다. 그리고 저자들은 행동 하나를 새로 관찰해 이름 붙인다. 모델이 수상한 조각을 스스로 알아보고 지워 놓은 다음 남은 명령은 그대로 실행하는 행동이다 (arXiv:2604.15368, 프리프린트).
읽기 전에 두 가지. 첫째, 이 글은 특정 제품이나 회사를 평가하지 않는다. 모델 이름도 제품 이름도 적지 않고 수치는 범위로만 옮기며, 무엇이 가능한지는 적되 어떻게 하는지는 적지 않는다. 둘째, 이 분야는 근거 등급이 고르지 않다. 이 글이 인용한 26건 중 20건이 심사를 거치지 않은 공개본(arXiv 프리프린트·SSRN 워킹페이퍼)이다. 그래서 하중이 큰 자리마다 등급을 문장 안에 붙여 두었다.
지어낸 것이 아니라 시킨 대로 한 것이다
이런 일에 붙은 이름이 있다. 프롬프트 인젝션(prompt injection)은 모델이 읽으라고 받은 자료 안에 적혀 있던 문장이 그 모델을 움직이는 지시로 작동하는 일이다. 로그를 읽으라고 줬는데 로그 안의 한 줄이 "이제부터 이렇게 해"로 읽히는 것이다. 회의록을 읽어 달라고 부탁받은 사람은 그 안에 "다 읽고 나면 회사 금고를 열어라"라고 적혀 있어도 그것을 읽어야 할 내용으로 취급하지 자기가 받은 명령으로 취급하지 않는다. 모델에는 그 둘을 갈라 주는 장치가 없다.
그리고 이 문장을 어디에 두느냐에 따라 성격이 갈린다. 간접 인젝션(indirect prompt injection)은 그 문장을 공격자가 직접 입력창에 치는 대신, 모델이 나중에 읽게 될 자리에 미리 놓아두는 방식이다. 웹페이지, 첨부 파일, 검색 결과, 도구가 돌려주는 응답, 앞에서 본 로그. 공격자는 적어 두고 떠나고, 문장은 남의 작업 중에 발동한다.
이 시리즈의 1부에 「환각」 편이 있었다. 거기서 다룬 것은 다른 문제다. 환각은 모델이 없는 사실을 지어내는 일이고, 여기서 다루는 것은 모델이 남이 심어 둔 지시를 자기 사용자의 것으로 착각하는 일이다. 앞의 것은 몰라서 생기고, 뒤의 것은 잘 따라서 생긴다.
왜 구분이 안 되는가. 명령과 데이터가 같은 통로로 들어오기 때문이다. 프롬프트 인젝션 문헌을 종합한 한 SSRN 워킹페이퍼는 이 성질을 구조적이라고 부른다. 언어모델이 명령과 데이터를 같은 신경 경로로 처리한다는 아키텍처 선택에서 나오는 것이며, 학습만으로는 없앨 수 없다는 것이다. 같은 문헌은 이 항목이 2023년 이래 보안 권고 목록의 1위였다고 적는다. 그리고 두 번째 결론은 이렇다 — 검색해 온 콘텐츠를 통한 간접 인젝션이 실제로 확인된 보안 사고를 냈고, 그 심각도가 척도에서 9.0을 넘었으며, 이것은 이 문제가 이론에서 운영 단계로 넘어갔다는 신호다 (DOI: 10.2139/ssrn.6740060, SSRN 워킹페이퍼·서술적 문헌고찰).
다른 각도의 정리가 이 구조를 또렷하게 만든다. 웹 브라우저 보안이 25년 동안 배운 것 하나는 집행을 애플리케이션 밖으로 옮기는 것이었다. 무엇이 허용되는지를 페이지 안의 코드가 아니라 브라우저가 정하고, 페이지는 그 결정 장치에 손을 댈 수 없다. 그런데 도구를 쥔 인공지능 시스템에는 그 층이 없다. 그 시스템의 정책은 시스템 프롬프트에 적혀 있고, 그것은 사용자 메시지·도구 응답·검색해 온 문서와 같은 한 덩어리 안에 앉아 있다. 충돌이 나면 모델이 추론으로 해결한다. 판정을 내리는 별도의 프로세스가 없다 (DOI: 10.2139/ssrn.6876926, SSRN 워킹페이퍼).
이걸 처음 체계적으로 재 본 것은 2023년의 벤치마크 — 정해진 시험 문제 묶음 — 였다. 외부 콘텐츠에 지시를 심는 첫 시험 세트를 만들어 당시 모델들을 돌렸더니 보편적으로 취약했다. 원인으로 두 가지를 짚었다. 모델이 정보로서의 맥락과 실행해야 할 지시를 구분하지 못한다는 것, 그리고 외부 콘텐츠 안의 지시는 실행하지 않아야 한다는 인식 자체가 없다는 것이다 (arXiv:2312.14197, 프리프린트).
같은 논문이 저자들 자신의 방어도 내놨다. 모델 내부까지 손대는 쪽은 심어 둔 지시가 통하는 비율을 거의 0에 가깝게 낮추면서 출력 품질을 보존했다고 적혀 있다. 다만 초록에는 정상 입력을 얼마나 잘못 막았는지가 없다. 이 빈칸이 이 글의 뒤쪽 절반을 끌고 간다.
사용자가 꼬드기는 것과, 남이 대신 말하는 것
헷갈리기 쉬운 이웃 하나를 떼어 놓자. 탈옥(jailbreak)은 그 모델을 쓰는 사람이 직접 모델을 구슬려, 원래 안 하기로 돼 있던 말을 하게 만드는 일이다. 역할극을 시키거나 "이건 소설이니까 괜찮다"고 밀어붙이는 것들이다.
둘의 차이는 문장의 모양이 아니라 누구의 권한으로 실행되는가에 있다. 탈옥은 피해자와 시도자가 같은 사람이다. 인젝션은 다르다. 문장을 심은 사람은 그 자리에 없고, 실행은 아무것도 모르는 사용자의 이름과 권한으로 일어난다. 사용자의 메일함, 파일, 결제 수단이 걸려 있다.
곧 숫자가 나오니 이름 하나를 정해 둔다. 공격 성공률(ASR)은 시도한 공격 가운데 공격자가 원한 결과까지 실제로 도달한 비율이다. 백 번 시도해 열 번 얻었으면 10%다.
그런데 문헌이 이 둘을 자주 섞는다. 챗봇을 대상으로 분류 체계를 만든 한 학술대회 발표집 논문은 페이로드 210개를 7개 범주로 나눠 오픈웨이트 모델 5종에 로컬 환경에서 돌렸고, 공격 성공률이 모델에 따라 10.5%에서 83.8%까지 갈렸다고 보고한다. 저자들의 결론은 저항력을 가르는 주된 요인이 모델 크기가 아니라 정렬 학습의 질이었다는 것이다. 그런데 같은 논문에서 가장 잘 통한 범주는 "탈옥·역할극"으로 34.7%였다 (DOI: 10.51582/interconf.19-20.05.2026.017, 학술대회 발표집). 앞의 범위는 일곱 범주를 전부 합쳐 모델별로 계산한 값이라 그 안에 이 탈옥 범주가 들어 있다. 이 글의 정의로는 그 범주는 인젝션이 아니다. 숫자를 옮길 때 그 논문이 어느 쪽을 재고 있었는지를 매번 확인해야 한다는 뜻이다.
인젝션 쪽만 놓고 봐도 숫자는 작지 않다. 모델이 대화 참가자를 구분하려고 쓰는 내부 형식 표시를 겉모습만 흉내 낸 문장에 대한 프리프린트 하나는, 두 시험 세트에서 평균 공격 성공률이 기존 방식의 5.18%에서 32.05%로, 15.13%에서 45.90%로 올랐다고 보고한다. 여러 차례 대화를 주고받는 변형이 특히 잘 통해 한쪽 평균이 52.33%였다. 저자들의 다음 관찰이 더 무겁다 — 기존의 프롬프트 기반 방어는 이 방식에 대체로 무력했다 (arXiv:2509.22830, 프리프린트). 방법은 여기 적지 않는다.
읽기에서 실행으로
여기까지는 "이상한 답변이 나온다" 크기의 문제다. 크기를 바꾸는 것은 도구다.
에이전트(agent)는 말을 만들어 내는 데서 멈추지 않고 웹을 읽고 파일을 열고 명령을 실행하는 도구까지 쥔 언어모델이다. 항공권을 검색해 예약까지 하고, 코드를 읽어 고쳐 올리고, 메일을 읽고 답장을 보내는 것들이다. 유용해지는 이유와 위험해지는 이유가 같다.
2023년부터 2026년 초까지의 공격 논문 44편을 묶은 서베이가 이 전환을 한 문장으로 적는다. 챗봇을 상대로 한 인젝션은 최악이라야 민망한 문장 하나를 낳지만, 도구를 쥔 에이전트를 상대로 한 같은 인젝션은 데이터베이스가 빠져나가거나 없던 송금이 일어나거나 오염된 메시지가 옆의 에이전트로 번지는 결과를 낳는다. 저자들의 요약은 이렇다 — 취약점의 종류가 새로운 것이 아니라 폭발 반경이 새롭다. 되풀이해 나온 발견 두 가지도 꼽는다. 첫째, 순수하게 프롬프트 수준에서 이뤄지는 방어는 어떤 것도 적응하는 공격자를 견디지 못한다. 둘째, 여러 에이전트 사이를 타고 번지는 경로가 가장 덜 방어된 구간이다 (DOI: 10.2139/ssrn.7218206, SSRN 워킹페이퍼).
번지는 이야기는 화면 밖으로도 나간다. 언어모델을 계획과 제어에 쓰는 다중 에이전트 로봇 시스템을 시험한 프리프린트는, 심어 둔 문장이 위험한 동작을 일으키면서 원래 과제의 완수율을 떨어뜨렸고 공유하는 프롬프트 구조를 타고 다른 에이전트로 전파되더라고 보고한다. 다만 그 영향의 크기는 프롬프트 구성과 어느 에이전트를 겨눴는지에 따라 달랐다 (arXiv:2608.00747, 프리프린트).
코드를 다루는 에이전트에서는 결이 또 다르다. 한 프리프린트는 사용자가 무엇을 물어보든 상관없이 작동하는 갈래를 제시한다. 사용자의 질문은 매번 바뀌지만 시스템 프롬프트와 도구 설명은 잘 바뀌지 않는다는 점에 기댄다. 모의 에이전트 다섯 종에서 최대 87%가 나왔고 저자들이 비교한 최고 베이스라인은 50%였다. 그리고 저자들은 그렇게 만들어진 문장이 모의 환경을 넘어 실제 코딩 에이전트에도 전이됐다고 적는다 (arXiv:2510.23675, 프리프린트·저자 자기 방법).
그리고 시간 방향이 있다. 요즘 에이전트는 세션이 끝나도 남는 기억을 갖는다. 상용 코딩 에이전트 두 종과 모델 네 개를 시험한 프리프린트는 양쪽 결과를 같이 보고한다. 신뢰할 수 없는 외부 콘텐츠만으로 에이전트가 자기 메모리 파일을 덮어쓰게 만드는 일은 어려웠다. 그러나 이미 그 파일에 심어져 있던 문장은 현재 세션과 이후 세션을 성공적으로 공격했다. 성공률과 지속성은 시스템·모델·목표에 따라 크게 달랐다 (arXiv:2607.14611, 프리프린트).
이 자리에 이름을 붙인 다른 프리프린트는 웹에서 오래 알려진 저장형 취약점에서 이름을 따 왔다. 심어진 문장이 상호작용 한 번에 갇히지 않고 시간을 건너 살아남는다는 것이다. 저자들이 시사한다고 적는 바가 이 절의 요약이 된다 — 에이전트 보안의 근본 과제는 신뢰할 수 없는 입력을 걸러 내는 것만으로는 부족하고, 오래 남는 시스템 경계를 넘어오면서 외부 정보가 어떻게 권한을 얻게 되는지를 다스리는 일이다 (arXiv:2606.04425, 프리프린트).
"94%를 막았다"는 문장을 읽는 법
이제 방어 쪽을 본다. 이 문헌은 그대로 읽으면 안 된다. 방어 논문은 대부분 저자들이 자기 방법을 평가한 결과라, 성격상 제조사가 자기 제품을 리뷰한 것과 같다.
이름이 하나 더 필요하다. 오차단율(false positive rate)은 아무 문제 없는 정상 입력을 방어 장치가 잘못 막아 낸 비율이다. 문지기를 사납게 만들면 공격 성공률은 얼마든지 내려간다. 아무도 못 들어오게 하면 0이다. 그래서 둘은 항상 같이 읽어야 하고, 여기에 하나가 더 붙는다. 방어를 켠 채로 원래 하려던 일이 여전히 되는가.
가장 불편한 결과부터 보자. 심사 지면에 실린 한 복제 연구는 네 가지 방어와 무방어 대조군을 세 모델에 걸쳐 은행 업무 시험 세트로 돌렸다(네 방어 중 하나는 세 모델 가운데 둘에서만 평가됐다). 그리고 무방어 상태의 공격 성공이 288번 중 각각 0번, 11번, 1번이었다고 보고한다. 방어를 걸기도 전에 공격이 거의 성공하지 않은 것이다. 저자들은 시험이 요구하는 목표에 모델마다 도달 가능성이 달랐으니 이 모델 간 차이조차 조심해서 읽으라고 덧붙인다. 두 방어가 성공률을 더 낮춘 것처럼 보였지만 그 방어들은 정상 과제 성능도 함께 낮췄고 하나는 쓸 수 있는 행동 자체를 줄였다. 그리고 네 쌍의 비교 가운데 다중 비교 보정을 거친 뒤 유의한 것은 하나도 없었다 (DOI: 10.3390/computers15090570, 심사 지면).
여기서 얻을 규칙 하나. 애초에 공격이 거의 성공하지 않는 시험에서는 방어의 효과를 잴 수 없다. 1부의 「벤치마크 위기」 편이 "무엇이 올랐나"를 물었다면 여기서 묻는 것은 "무엇을 막았다고 말하는가"이고, 답은 자주 "측정 가능한 자리에서 말하고 있지 않다"이다.
그럼 세 숫자를 나란히 적은 보고는 어떻게 생겼는가. SSRN 워킹페이퍼로 나온 한 방어 연구가 좋은 예다 — 자기 프레임워크를 자기가 만든 공격 모집단으로 자기가 평가한 것인데도 숫자를 함께 적었다. 권한 범위를 좁히는 것만으로 공격의 56.5%가 봉쇄됐고, 이때 정상 입력을 잘못 막은 비율은 0%였다. 규칙 기반 계층을 전부 켜면 봉쇄가 90.6%로 올라가는데, 그 대가로 오차단율이 5.9%가 됐다. 여기에 통계적 이상 탐지기를 더 얹었더니 추가로 봉쇄되는 공격은 없었고 오차단율만 대략 두 배가 됐다. 그리고 어떤 구성도 100%에 도달하지 못했다. 저자들은 그 잔여를 지우지 않고 "정직한 잔여"라고 부른다. 다만 이 수치들은 8,000회 세션의 시뮬레이션에서 나왔고, 실제 에이전트로 돌린 파일럿에서는 기저 공격 성공률이 너무 낮아 계층들의 순위를 매기지 못했다 (DOI: 10.2139/ssrn.6870178, SSRN 워킹페이퍼·시뮬레이션·저자 자기 방법).
심사 지면에 실린 다른 연구도 세 숫자를 나란히 놓는다. 7B급 오픈웨이트 모델에서 적대적 사례 250개와 정상 사례 250개를 돌려, 공격 성공률을 36.0%에서 17.2%로 낮추면서 정상 과제 성공률 97.2%를 지켰고 탐지 F1은 0.749에서 0.892로 올랐다고 보고한다. 파이프라인을 겨냥해 만든 적응 공격 평가에서는 6.7%가 보고되는데, 초록은 그 평가의 공격 집합이 앞의 250건과 같은지 적지 않아 두 값을 한 눈금에 놓고 비교할 수 없다 (DOI: 10.3390/app16157662, 심사 지면·저자 자기 방법). 지켜야 할 것은 이것이다 — 17.2%는 "막았다"가 아니다. 여섯 번에 한 번은 통과했다는 뜻이다.
오차단율의 대가를 정면으로 적은 연구도 있다. 공개 데이터셋 662개 프롬프트(정상 399개, 공격 263개)로 가벼운 탐지기들을 비교한 저널 논문인데, 가장 좋은 탐지기의 F1이 0.901이었고 키워드 규칙은 0.125였다. 이걸 거부 게이트로 쓰면 오탐을 낮게 잡은 특정 작동점에서 공격 성공률이 1.000에서 0.117로 떨어지는 대신 정상 사용의 유용성이 92.9%로 내려간다. 정상 요청 100건 중 7건가량이 막힌다는 뜻이다 (DOI: 10.63575/cia.2025.30205, 저널).
그리고 오차단율에는 이 글에서 가장 중요한 성질이 하나 있다. 고르게 퍼지지 않는다. 규칙 필터와 모델 분류기를 합친 구성을 저자들이 직접 만든 625개 프롬프트로 시험한 SSRN 워킹페이퍼는, 표준 난이도에서 공격 100.0% 차단에 정상 오차단 5.0%를 보고하면서 그 5.0%가 어디에 몰렸는지를 함께 적는다 — 보안 연구를 이야기하는 정상 프롬프트에서 87.5%, 비평하는 정상 프롬프트에서 37.5%였다. 오탐은 이 두 범주에만 몰렸고 나머지 범주에서는 0이었다. 막힌 정상 사용자는 무작위한 누군가가 아니라 보안 이야기를 하는 사람이었던 것이다. 같은 연구에서 규칙만 쓰는 구성은 표준 난이도에서 75.0% 차단·오차단 2.5%였다가 어렵게 만든 공격에는 24.6%로 무너졌고, 합친 구성은 어려운 쪽에서 98.9% 차단에 오차단 0%였다 (DOI: 10.2139/ssrn.6246379, SSRN 워킹페이퍼·저자 자작 벤치마크).
베이스라인을 같이 보고한 프리프린트도 짚어 둔다. 공격 세션 80개와 정상 세션 100개로 평가해 공격의 76.25%(95% 신뢰구간 65.86~84.24%)를 탐지하고 정상 세션의 7.0%(3.43~13.75%)를 잘못 막았다고 적는데, 같은 조건의 단순 어휘 베이스라인은 탐지 1.25%에 오차단 6.0%였다. 오차단은 비슷한데 탐지는 60배 차이가 난다. 다만 이 홀드아웃은 연구자들이 직접 만든 것이고, 저자들 스스로 학습된 방어 모델과 독립적인 공개 벤치마크로 다시 검증할 필요가 있다고 적는다 (DOI: 10.20944/preprints202608.1961.v1, 프리프린트·저자 자기 방법).
마지막으로, 탐지가 어디서 무너지는지를 스스로 재 본 심사 지면 논문이 있다. 정리된 시험 집합에서는 정확도 0.9849에 공격 재현율 0.9851, 정상 오차단율 0.0050이라는 좋은 숫자를 낸다. 그런데 맥락이 붙을수록 성적이 내려간다. 한 가지 먼저 — 아래에서 내려가는 값은 이 정확도가 아니라 다른 척도이고, 같은 척도로 잰 그 시험 집합의 값은 0.8887이었다. 정적인 프롬프트에서 0.8301이던 그 값이 여러 차례 오가는 대화에서 0.6306, 검색해 온 문서가 붙으면 0.3844, 기억이 붙으면 0.3200이 됐다. 저자들은 무작위로 나눈 데이터가 점수는 더 높았지만 거기서 데이터 누출 경고가 144건 떴다는 사실도 적고, 자기 도구를 독립적인 인가 장치가 아니라 선별용 부품이라고 스스로 위치시킨다 (DOI: 10.3390/fi18070376, 심사 지면·저자 자기 방법). 이것이 이 글을 연 관찰 — 떼어 놓으면 잡고 로그 안에 있으면 못 잡는다 — 의 다른 얼굴이다.
그리고 이 모든 숫자에 한정어가 하나 더 붙는다. 여덟 가지 방어를 모아 놓고 각각에 맞춰 공격을 다시 만든 프리프린트는 여덟 개를 전부 우회했고, 일관되게 50%가 넘는 공격 성공률을 냈다고 보고한다 (arXiv:2503.00061, 프리프린트). 앞에 나온 수치들은 대부분 고정된 공격을 상대로 잰 값이고, 그런 값은 상한이 아니다.
왜 완전히는 못 막는가
명령이 들어오는 통로와 데이터가 들어오는 통로를 갈라 놓으면 되지 않나. 실제로 그것이 이 분야의 지배적인 방어 방향이었다.
그 방향을 정면으로 검사한 프리프린트가 있다. 저자들은 그 패러다임이 맥락을 조작하는 공격을 잡지 못하면서 동시에 맥락상 적절한 행동까지 저해한다고 보고한다. 그리고 불가능성 결과를 시사한다고 적는다 — 공격자는 차단된 흐름이 정당해 보이는 맥락을 언제나 구성할 수 있고, 그것을 막으려고 규범을 조인 방어자는 진짜 정당한 흐름을 막게 된다 (arXiv:2605.17634, 프리프린트). "증명했다"가 아니라 "시사한다"고 쓴 것은 그대로 옮겨야 한다. 다만 앞 절에서 본 맞바꿈들 — 봉쇄 90.6%에 오차단 5.9%, 공격 성공률 0.117에 유용성 92.9% — 이 같은 방향을 가리킨다.
목록으로 막는 방어가 왜 부서지는지를 깨끗하게 측정한 SSRN 워킹페이퍼도 있다. 널리 제안되는 방어 하나는 겉을 감싼 표기를 전부 되돌려 놓고 검사하는 것이다. 그 장치를 결정론적으로 구현해 지시 10개와 변환군 13개에 대고 재 봤더니, 되돌릴 줄 아는 4가지는 평균 0.95로 복원했고 모르는 9가지는 평균 0.00이었다. 놀라운 것은 그다음이다. 아는 4가지 중 둘도 주변 텍스트에 섞여 있으면 복원율이 0.00으로 주저앉았고, 같은 표기를 한 겹 더 씌우자 1.00이던 복원율이 0.00이 됐다. 음성 대조 세 종류 각 10건에서 오작동이 0이었으니 장치는 정확했다. 결론은 이 방어가 필요하긴 하지만 그 경계의 모양이 장치가 아는 목록의 모양 그대로라는 것이다 (DOI: 10.2139/ssrn.7389061, SSRN 워킹페이퍼). 표기 이름은 여기 적지 않는다.
한 가지 더. 에이전트는 대화가 길어지면 지난 이력을 요약해 줄인다. 이 단계를 신뢰 경계가 다시 쓰이는 자리로 본 SSRN 워킹페이퍼는, 900행 파일럿에서 그냥 요약했을 때 공격자의 문장이 신뢰 영역으로 승격되는 등의 네 지표가 각각 0.027이었다고 보고한다 — 150행 중 4행이다. 경계를 지키도록 만든 요약에서는 네 지표가 모두 0.000이었다. 저자들은 이 결과가 보편적인 방어를 확립하지는 않는다고 초록에서 직접 못 박는다 (DOI: 10.2139/ssrn.6933161, SSRN 워킹페이퍼).
모델 말고 모델 바깥
그래서 논의가 옮겨 갔다. 모델이 속지 않게 만드는 쪽에서, 속더라도 할 수 있는 일이 적게 만드는 쪽으로.
이 방향에 이름이 있다. 권한 최소화(least privilege)는 어떤 부품에게 맡은 일을 끝내는 데 꼭 필요한 만큼의 권한만 주고 나머지는 아예 쥐지 못하게 하는 설계 원칙이다. 회의록을 요약하러 온 사람에게 금고 열쇠를 주지 않는 것이다. 앞서 본 시뮬레이션에서 이 계층 하나가 오차단율 0%로 공격의 56.5%를 봉쇄한 것은 이 원칙이 탐지와 성격이 다르기 때문이다. 탐지는 문장이 나쁜지를 판정해야 하지만, 권한은 판정하지 않는다. 애초에 그 일을 할 수 없게 만든다 (DOI: 10.2139/ssrn.6870178, SSRN 워킹페이퍼·시뮬레이션·저자 자기 방법).
앞서 인용한 서베이의 첫 번째 결론이 정확히 이것이다. 효과적인 보안은 모델의 강건함에 기대는 대신 모델 주위의 시스템이 무엇을 하도록 허용받았는지를 제약하는 데서 나온다 (DOI: 10.2139/ssrn.7218206, SSRN 워킹페이퍼). 브라우저 비유를 든 문헌이 요구하는 것도 같다 — 애플리케이션이 손댈 수 없는 곳에서 집행하는 층이다 (DOI: 10.2139/ssrn.6876926, SSRN 워킹페이퍼).
구체적인 시도들이 있다. 도구를 부르는 모든 지점에서 사용자가 미리 확인한 규칙을 강제하는 프리프린트는 유용성을 해치지 않고 보호했다고 적는데 초록에 수치가 없다. 그래서 이 글은 방향의 예로만 쓴다 (arXiv:2604.11790, 프리프린트).
수치가 있는 쪽도 있다. 어떤 정보가 어디까지 흘러갈 수 있는지를 따로 추적해서, 안전이 보장되는 도구 호출만 자동으로 실행하고 나머지에서만 사용자에게 묻는 프리프린트다. 한 시험 세트에서 대상 공격을 전부 막으면서 공격받는 동안의 과제 유용성 손실이 2%였다고 보고한다 (arXiv:2502.08966, 프리프린트·저자 자기 방법). 다만 앞 절에서 본 대로 여덟 개 방어를 맞춤 공격으로 전부 뚫은 연구가 있고, 이 방어가 그 여덟에 드는지는 초록만으로 알 수 없다.
사람을 어디에 두느냐도 설계 결정이다. 앞의 시뮬레이션 연구는 사람의 승인 단계를 편의가 아니라 보안 통제라고 못 박는다. 자동으로 학습하는 되먹임 고리 자체가 새로운 오염 통로가 되기 때문이다.
이 방향을 정리한 입장문이 균형을 잡아 준다. 맥락에 달린 어떤 결정은 여전히 모델이 해야 하지만 모델이 무엇을 볼 수 있고 무엇을 정할 수 있는지를 엄격히 제한하는 설계 안에서만 그래야 하고, 모호한 경우에는 사람의 개입을 핵심 설계 요소로 다루라는 것이다. 같은 글이 기존 시험 세트들이 유용성과 보안 양쪽에 대해 거짓 안심을 만들어 낼 수 있다고 지적한다 (arXiv:2603.30016, 프리프린트·입장문).
답할 수 있는 질문의 목록
웹 에이전트의 간접 인젝션 측정을 2026년 8월 1일까지 종합한 SSRN 워킹페이퍼가 있다. 저자들이 한 일은 "막았나 뚫렸나"를 여덟 갈래로 쪼갠 것이다 — 노출됐는가, 지시를 받아들였는가, 해로운 행동까지 갔는가, 공격자의 목표가 달성됐는가, 그 사실이 사용자에게 감춰졌는가, 복구됐는가, 정상 과제는 되는가, 정상 입력을 과하게 막지는 않았는가. 쪼갠 이유는 측정된 취약성이 과제의 능력, 공격에 허용된 예산, 공격자가 적응할 수 있는지, 입력의 형태, 채점 방식에 따라 실질적으로 달라지기 때문이다. 같은 문헌은 한 시험 세트에서 에이전트가 적대적 지시를 시작하는 빈도가 공격자의 목표를 완수하는 빈도보다 훨씬 높았다는 점과, 2026년의 적응형 평가들에서 공격자가 반복할 수 있게 되면 성공률이 상당히 높아졌다는 점을 나란히 적는다. 그리고 이렇게 결론짓는다 — 아주 낮은 것을 포함해, 어떤 모델 수준의 공격 성공률도 "믿을 만한 웹 에이전트"와 같은 말이 아니다 (DOI: 10.2139/ssrn.7276838, SSRN 워킹페이퍼).
그러니 "이 에이전트는 인젝션에 안전한가"는 답할 수 있는 질문이 아니다. 답할 수 있는 것은 목록이다.
① 이 자료는 누가 썼는가. 에이전트가 읽는 것 가운데 사용자가 쓴 것과 아무나 쓸 수 있는 것이 구분되는가 (arXiv:2606.04425).
② 이 에이전트가 지금 할 수 있는 일의 목록은 무엇인가. 읽기까지인가, 쓰기까지인가, 실행까지인가, 돈까지인가. 폭발 반경을 정하는 것은 이 목록이다 (DOI: 10.2139/ssrn.7218206).
③ 무엇을 막았고 무엇을 잘못 막았는가. 한 숫자만 있는 보고는 읽을 수 없다. 그리고 잘못 막힌 쪽이 고르게 퍼져 있다고 가정하지 말 것 — 한 연구에서 오차단은 보안 이야기를 하는 정상 사용자에게 87.5%로 몰려 있었다(표준 난이도, 저자 자작 벤치마크, DOI: 10.2139/ssrn.6246379).
④ 그 수치는 고정된 공격에서 쟀는가, 적응하는 공격에서 쟀는가. 여덟 개 방어가 맞춤 공격 앞에서 전부 열렸다 (arXiv:2503.00061). 그리고 무방어 대조군에서 공격이 288번 중 0번 성공한 시험이라면, 거기서 나온 방어 효과는 아직 측정된 적이 없는 것이다 (DOI: 10.3390/computers15090570).
⑤ 이 세션이 끝나면 심어진 문장이 사라지는가. 기억이 남는 시스템에서는 아니다 (arXiv:2607.14611).
여기서 냉소로 기울 이유는 없다. 각 항목이 실제로 개선되고 있다 — 권한 최소화만으로 오차단 없이 절반 이상이 봉쇄됐고(시뮬레이션·저자 자기 방법, DOI: 10.2139/ssrn.6870178), 정보 흐름을 추적하는 방어는 한 시험 세트에서 유용성 손실 2%를 냈다(저자 자기 방법이고, 적응 공격에 대해서는 알 수 없다, arXiv:2502.08966). 어디서 무너지는지가 적혀 있다는 것은 고칠 수 있다는 뜻이다.
낙관으로 기울 이유도 없다. 지배적인 방어 방향은 원리적인 맞바꿈에 걸려 있고 (arXiv:2605.17634), 목록으로 막는 장치의 경계는 그 목록의 모양 그대로이며 (DOI: 10.2139/ssrn.7389061), 문헌은 학습만으로 이 문제를 없앨 수 없다고 말한다 (DOI: 10.2139/ssrn.6740060).
그래서 마지막으로 남는 것은 이 편을 연 구분이다. 「환각」 편의 문제는 모델이 모르는 것을 아는 척한 것이었다. 여기서 본 문제는 반대다. 모델은 아주 잘 따랐다. 로그 안의 문장을 읽고, 지시로 이해하고, 시킨 대로 했다. 지시를 잘 따르는 성질이 이 도구를 쓸모 있게 만들었고, 같은 성질이 이 취약점을 만들었다.
모델이 말을 안 들어서 생긴 문제가 아니라, 너무 잘 들어서 생긴 문제다. 그래서 고치는 자리도 모델 안이 아니다. 남이 써 둔 문장이 내 이름으로 실행되지 않게 하려면, 문장을 더 잘 걸러 내는 것만으로는 부족하고 내 이름으로 할 수 있는 일이 애초에 무엇인지를 정해 두어야 한다.
근거 논문
arXiv 공개본과 SSRN 워킹페이퍼는 동료심사와 무관하다. 방어 논문은 대부분 저자가 자기 방법을 평가한 것이라 본문에 그때마다 등급을 적었다.
- "LogJack: Prompt Injection Through Cloud Logs" (2026, 프리프린트) — arXiv:2604.15368 — 로그 5종·페이로드 42개·모델 8개. 능동 조건에서 명령을 그대로 실행한 비율 0%~86.2%, 수동 지시 후에도 한 모델 30.0%. 문지기는 로그 속 문장을 못 잡았으나 떼어 놓으면 잡았다.
- "Prompt Injection and Jailbreak Attacks in LLM-Based Agents" (2026, SSRN 워킹페이퍼·서술적 문헌고찰) — DOI: 10.2139/ssrn.6740060 — 명령과 데이터가 같은 신경 경로로 들어오는 구조적 원인, 학습만으로 제거 불가. 검색 콘텐츠 경유 간접 인젝션이 심각도 9.0을 넘는 실제 사고를 냈다(이론→운영 단계).
- "Agent Security Policy (ASP): The Missing Trust Boundary Layer" (2026, SSRN 워킹페이퍼) — DOI: 10.2139/ssrn.6876926 — 정책이 시스템 프롬프트에 있고 충돌을 판정할 별도 프로세스가 없다. 브라우저 집행 층과 대비.
- "Benchmarking and Defending Against Indirect Prompt Injection" (2023, 프리프린트·저자 자기 방법) — arXiv:2312.14197 — 최초의 간접 인젝션 벤치마크, 보편적 취약. 오차단율은 초록에 없음.
- "Taxonomy of Prompt Injection Attacks in LLM-Based Chatbots" (2026, 학술대회 발표집) — DOI: 10.51582/interconf.19-20.05.2026.017 — 페이로드 210개·오픈웨이트 5종, 공격 성공률 10.5%~83.8%(7범주 합산이라 탈옥 범주 34.7%가 그 안에 있다). 크기가 아니라 정렬 학습의 질.
- "ChatInject: Abusing Chat Templates for Prompt Injection" (2025, 프리프린트·저자 자기 방법) — arXiv:2509.22830 — 기존 방식의 5.18%→32.05%, 15.13%→45.90%, 다중 턴이 특히 잘 통해 평균 52.33%. 기존 프롬프트 기반 방어가 대체로 무력.
- "Vulnerabilities in Autonomous Execution: LLM Multi-Agent Systems" (2026, SSRN 워킹페이퍼) — DOI: 10.2139/ssrn.7218206 — 공격 논문 44편 종합. 취약점 종류가 아니라 폭발 반경이 새롭다. 프롬프트 수준 방어는 적응형 공격자를 못 견디고, 다중 에이전트 전파가 가장 덜 방어됐다.
- "When Prompts Control Robots: Multi-Agent Robotic Systems" (2026, 프리프린트) — arXiv:2608.00747 — 위험 동작 유발과 완수율 저하, 공유 프롬프트 구조를 타고 에이전트 간 전파. 영향 크기는 프롬프트 구성·대상에 따라 변동.
- "QueryIPI: Query-agnostic Injection on Coding Agents" (2025, 프리프린트·저자 자기 방법) — arXiv:2510.23675 — 사용자 질문과 무관한 갈래, 모의 에이전트 5종 최대 87%(최고 베이스라인 50%). 생성된 문장이 실제 코딩 에이전트로 전이.
- "Bad Memory: Prompt Injection Risks from Agent Memory" (2026, 프리프린트) — — 외부 콘텐츠로 메모리를 덮어쓰게 만들긴 어려웠으나, 이미 심어진 것은 현재·미래 세션을 공격했다.