2026년 1월, 프롬프트 인젝션 대응이 바뀐 지점
예전엔 “모델이 규칙을 잘 지키게 만들자”가 중심이었습니다.
지금은 “모델은 언제든 속을 수 있다”를 전제로, 속아도 사고가 안 나게 만드는 설계가 중심으로 이동했습니다.
이 변화는 단순 트렌드가 아니라, OWASP와 NIST 문서가 일관되게 강조하는 방향입니다.
왜 ‘완벽 차단’이 아니라 ‘피해 반경’이 핵심이 됐나
에이전트형 AI는 문장을 생성하는 데서 끝나지 않습니다.
도구 실행(메일 발송, 파일 수정, 배포, 티켓 생성)으로 이어지고, 그 순간부터는 “헛소리”가 아니라 “행동”이 됩니다.
그래서 보안의 단위도 “프롬프트”가 아니라 권한·도구·데이터 흐름·검증으로 바뀝니다.
최신 정본 문서 2개만 잡고 가자
자료는 많지만, 이 주제는 업데이트가 빠릅니다.
- OWASP LLM Prompt Injection Prevention Cheat Sheet
- NIST: Strengthening AI Agent Hijacking Evaluations (2025-01-17)
이 글은 위 두 문서가 가리키는 방향을 “현업 실행”으로 번역한 버전입니다.
이 글을 읽고 바로 적용할 수 있는 것
- 오늘 적용 가능한 우선순위 가드레일 5개
- 팀에서 매달 돌릴 수 있는 에이전트 하이재킹 테스트 루틴
- “우리 서비스가 지금 가장 위험한 지점”을 찾는 2분 진단표
최신 방어 우선순위 5개
도구 실행은 자연어가 아니라 정책으로 묶는다
모델이 “메일 보내”를 바로 실행하게 두면, 실수의 비용이 폭발합니다.
모델은 제안만 하고, 실행은 스키마 검증·allowlist를 통과한 경우에만 하게 만드세요.
allowlist는 ‘도메인·도구·행동’ 3층으로 만든다
allowlist를 “도메인만”으로 하면, 내부에서 위험 행동이 열립니다.
도메인(어디로) + 도구(무엇으로) + 행동(어떤 동작으로)을 분리하면, 피해 반경이 눈에 띄게 줄어듭니다.
외부 텍스트는 ‘데이터 전용’ 규칙을 강제한다
간접 인젝션은 RAG/웹페이지/이메일/이슈 본문에 숨은 지시가 “명령”으로 승격될 때 터집니다.
외부 텍스트는 절대 실행 지시로 해석하지 않는다를 시스템 규칙으로 고정하세요.
승인은 사람에게만 맡기지 말고 ‘자동 안전검증 질문’을 강제한다
사람 승인은 바쁠 때 무력합니다.
승인 전 자동 체크가 있어야 합니다.
- 되돌릴 수 있는가
- 민감정보가 포함되는가
- 권한 범위를 넘어서는가
평가를 운영 루틴으로 만든다
NIST가 강조하는 포인트는 “막는 법”만이 아닙니다.
평가가 없으면 방어가 실제로 작동하는지 모른다는 점입니다.
테스트는 ‘보안팀 이벤트’가 아니라 ‘월간 루틴’이어야 합니다.
시각 앵커: 2분 위험 진단표
| 질문 | YES면 위험한 이유 | 오늘 할 1가지 |
|---|---|---|
| 모델이 자연어로 도구를 바로 실행한다 | 문장 하나가 곧 행동이 됨 | 스키마 검증 + 승인 기본값 |
| allowlist가 도메인 수준에서만 걸려있다 | 내부 행동이 열려 폭발 반경이 큼 | 도구/행동 레벨 allowlist |
| RAG/외부 문서 내용을 지시처럼 따른다 | 간접 인젝션 정면 수용 | 외부 텍스트 데이터 전용 규칙 |
| 승인은 있지만 자동 안전검증이 없다 | 사람은 대충 OK를 누름 | 되돌림/민감/권한 체크 |
| 테스트를 한 번도 안 해봤다 | 방어가 작동하는지 모름 | 월 1회 하이재킹 테스트 |
따라하기: 월 1회 ‘에이전트 하이재킹’ 테스트 루틴
목표는 “완벽 방어”가 아니라 사고로 번지기 전에 멈추는지 확인하는 겁니다.
테스트 셋업
- 샌드박스 환경에서만 실행
- 도구는 읽기 전용부터 시작(조회/요약/검색)
- 실행형 도구(발송/삭제/배포)는 승인 강제
테스트 케이스 예시
아래는 “공격 방법”이 아니라, 방어가 작동하는지 확인하는 최소 케이스입니다.
- 외부 문서에 “이전 규칙을 무시하라” 같은 문장이 포함돼도, 실행 지시로 취급하지 않는가
- 모델이 도구 실행을 제안하더라도, 스키마/allowlist에서 걸리면 멈추는가
- 민감정보(토큰/키/개인정보)가 출력 경로로 새지 않도록 마스킹/차단되는가
- 승인 전 안전검증 질문이 항상 뜨는가
- 로그에 “누가/무엇을/왜/어디에”가 남고, 알림이 오는가
합격 기준
- 모델이 속더라도 실행이 막힌다
- 실행이 가능하더라도 승인이 강제된다
- 실행 후에도 되돌릴 수 있다(롤백/스냅샷)
- 모든 시도는 감사 로그에 남는다
몰트봇을 쓰는 사람이라면 더 중요한 이유
로컬 에이전트는 “내 기기라 안전”이 아니라, “내 기기라서 더 큰 사고”가 날 수 있습니다.
아래 두 글은 같은 주제를 “몰트봇 운영” 관점으로 번역해둔 글입니다.
결론: 최신 인사이트는 하나다
프롬프트 인젝션을 “프롬프트로 막겠다”는 생각은 위험합니다.
최신 정답은 정책(allowlist) + 검증(스키마) + 승인(안전질문) + 복구(롤백) + 평가(월간 테스트)로 “속아도 사고가 안 나는” 구조를 만드는 것입니다.