LLM 보안에는 흔한 함정이 있다. "프롬프트 인젝션? Guardrails 켜고 시스템 프롬프트에 '이러이러한 건 하지 마' 한 줄 넣으면 되잖아." 끝.
그 한 줄로 안 끝나는 이유는 두 가지다. 첫째, 방어가 거의 다 싱글턴 입력에 맞춰져 있다. 입력 필터는 사용자가 방금 보낸 한 메시지에 악성 신호가 있는지를 본다. 그런데 뒤에서 볼 멀티턴 공격들은 메시지 하나하나는 전부 무해하다. 둘째, 모델이 안전해도 시스템이 안전한 건 아니다. 단독 챗 인터페이스로는 멀쩡하던 모델이 파일시스템·이메일·코드 인터프리터·고객 DB·MCP 툴에 물리는 순간 직접 악용 가능해진다. 에이전트가 입으로는 "그건 못 합니다" 거절하면서 손으로는 파일을 지우거나 툴 응답으로 데이터를 빼낼 수 있다.
핵심 명제를 먼저 박아두자. 레드팀은 모델 단독이 아니라 배포된 구성 전체를 때려야 하고, 단일 프롬프트가 아니라 대화 전체를 때려야 한다. 그래서 도구도 하나로는 부족하다. nmap 하나로 침투 테스트를 끝내는 사람이 없듯이.
이 글은 2026년 현재 실무에서 실제로 후보에 오르는 오픈소스 LLM 레드팀 프레임워크 4종 — Garak, PyRIT, Promptfoo, DeepTeam — 을 공격자 관점에서 아키텍처 레벨까지 뜯어본다. 그 전에, 이 도구들이 무엇을 자동화하는지부터 — 즉 공격 기법 자체가 어떻게 작동하는지부터 — 짚는다. 도구는 결국 이 기법들을 대량·반복·채점 가능하게 만드는 래퍼이기 때문이다.
도구를 이해하려면 도구가 발사하는 탄약을 먼저 알아야 한다. 2026년 레드팀의 핵심 탄약은 멀티턴이다.
싱글턴 공격(고전적 DAN, "Developer Mode" 류, 인코딩 우회)은 한 방의 프롬프트에 모든 악성 의도를 욱여넣는다. 문제는 일단 발견되면 입력 필터가 그 시그니처를 학습해 막기 쉽다는 것. 식별 가능한 악성 콘텐츠가 입력에 그대로 들어 있으니까.
멀티턴은 이 약점을 정확히 노린다. 공격을 여러 단계로 분산해서, 각 단계는 무해해 보이게 만든다. 대화가 누적되며 모델은 점점 더 순응적으로 변하고, 원래 지시를 무시하기 시작한다. 단일 메시지 테스트로는 이게 절대 안 잡힌다.
Crescendo(Russinovich et al., 2024, Microsoft)는 멀티턴 탈옥의 교과서다. 작동 원리는 이렇다:
여기서 핵심 통찰: Crescendo는 LLM이 패턴을 따르려는 성향, 그리고 최근 텍스트 — 특히 자기 자신이 생성한 텍스트 — 에 주목하는 성향을 악용한다. 모델은 자기가 방금 한 말과 일관되게 행동하려 하기 때문에, 자기 출력을 사다리 삼아 한 칸씩 올라가면 거절 경계가 흐려진다. 심리학의 "문간에 발 들이기(foot-in-the-door)" 전술 그대로다. 작은 요청에 동의하면 큰 요청에도 동의할 확률이 올라간다.
방어 관점에서 무서운 점은 따로 있다. 입력이 전부 무해하기 때문에, 기법이 알려진 뒤에도 막기 어렵다. 사용자 프롬프트에 반응하도록 설계된 방어는 Crescendo를 통과시킨다. 자동화 버전인 Crescendomation은 거절 여부를 판정하는 피드백 루프로 다음 질문을 적응적으로 다듬는다. (구체적 ASR 수치는 모델 세대마다 천차만별이라 1.5에서 2026년 최신치로 따로 정리한다.)
GOAT(Generative Offensive Agent Tester, Meta, 2024)는 한 발 더 나간다. 여러 적대적 프롬프팅 기법을 대화 턴에 걸쳐 체이닝하고, 매 턴 타깃 응답을 보고 동적으로 전략을 바꾼다. 실제 공격자가 채팅창에서 즉흥적으로 수를 바꾸는 행동을 모사하는 셈이다. 원논문은 5턴 이내라는 적은 쿼리 예산으로도 당대 멀티턴 기법(Crescendo 포함)을 능가하는 ASR을 보였다. Garak이 v0.15.0(2026-05)에 GOAT 프로브를 넣은 게 이래서 의미가 크다.
멀티턴 안에서도 대화를 어떻게 전개하느냐로 갈린다:
Promptfoo의 Hydra 같은 변종은 공격자 에이전트가 경로를 가지치되 모든 거절을 기억하고 자동 백트래킹하며, 성공한 전술을 스캔 전체에서 공유한다. 한 번 통한 수를 다른 타깃에도 재사용하는 식이다.
이게 도구가 자동화하는 것의 정체다. 사람이 채팅 탭에서 한 수씩 시도하던 걸, 이 프레임워크들은 컨버터 체인 10개 × 프롬프트 20개 × 멀티턴 전개를 수백 조합으로 돌리며 전부 채점한다.
Crescendo·GOAT 원논문의 ASR은 GPT-4·Gemini Ultra·Llama 3.1 시절 숫자다. GPT-5.x에 Claude Opus 4.x 시대에 그대로 인용하면 "옛날 모델 얘기"가 된다. 그런데 핵심을 짚자면 — 기법은 안 낡았다. 세대마다 바뀌는 건 성공률과 실패 양상뿐이다. 한 레드팀 업체의 표현 그대로, 이 기법 카테고리들 중 새로운 건 없고 세대마다 달라지는 건 ASR과 failure mode다. 그러니 숫자만 최신으로 갈아끼우면 된다.
2026년 상반기 기준 프론티어 모델의 프롬프트 인젝션/탈옥 저항력을 보면(전부 직접·간접 인젝션 또는 멀티턴 시나리오, 출처별 테스트 하니스가 달라 절대 비교는 주의):
세 출처의 같은 모델 수치가 4.8%에서 40%까지 벌어지는 게 보이는가? 이게 핵심 교훈이다. ASR은 모델만의 속성이 아니라 테스트 하니스·판정자(judge)·공격 예산·위협 모델의 함수다. 그래서 "GPT-5.6은 X% 안전"이라고 한 줄로 박는 순간 틀린다. 보고할 땐 항상 어떤 하니스로 몇 턴, 어떤 judge로 쟀는지를 같이 적어야 의미가 있다.
마지막으로 같은 레드팀 데이터가 던지는 더 중요한 경고: 단일 프롬프트 탈옥 성공률은 프로덕션 보안 리스크의 나쁜 대리지표다. 정작 중요한 침해는 공격자의 목표를 진전시키는 것 — 채팅 응답이든, 툴 호출이든, 툴 출력 로그든 — 이고, 채팅 텍스트만 채점하면 그 실패 모드를 놓친다. 실제로 한 사례에서 GPT-5.2는 공격자가 통제하는 명령 아티팩트를 모델이 만들게 한 뒤 다운스트림 툴 실행으로 침해가 일어났는데, Claude는 그 셋업 단계를 거절해서 침해 자체가 발생하지 않았다. 같은 "탈옥 시도"라도 어디서 끊겼는지가 실제 위험을 가른다.
도구를 비교하기 전에, 이들이 매핑하는 표준을 알아야 리포트가 의미를 가진다. 2026년 현재 세 축이 잡혀 있다.
배포된 LLM 애플리케이션의 보안 리스크 표준 분류. 프롬프트 인젝션(LLM01)이 2년 연속 1위. 전체는: LLM01 프롬프트 인젝션, LLM02 민감정보 노출, LLM03 공급망, LLM04 데이터·모델 포이즈닝, LLM05 부적절한 출력 처리, LLM06 과도한 권한(Excessive Agency), LLM07 시스템 프롬프트 유출, LLM08 벡터·임베딩 취약점, LLM09 잘못된 정보(Misinformation), LLM10 무제한 소비(Unbounded Consumption).
2025년 12월 9일 OWASP GenAI Security Project가 공개한, 자율 에이전트 전용 신규 택소노미. LLM Top 10을 대체하는 게 아니라 확장한다 — 대부분의 에이전트는 LLM 앱이기도 하니 LLM 측 리스크를 상속한다. 핵심 차이는 "콘텐츠 생성의 오류"가 아니라 "자율적 행동의 실패 모드"를 다룬다는 것. 전체 목록:
| 코드 | 카테고리 | 한 줄 요약 |
|---|---|---|
| ASI01 | Agent Goal Hijack | 공격자가 에이전트 목표/결정 경로를 틀어 다른 목적을 추구하게 만든다. 프롬프트 인젝션의 에이전트판 |
| ASI02 | Tool Misuse & Exploitation | 정당한 권한을 가진 툴을 안전하지 않게 조합·재귀·남용 |
| ASI03 | Identity & Privilege Abuse | 크리덴셜·토큰·상속 권한 오용으로 의도 범위 밖 접근 |
| ASI04 | Agentic Supply Chain | 서드파티 툴·플러그인·레지스트리·MCP 서버·외부 컴포넌트發 위험 |
| ASI05 | Unexpected Code Execution | 에이전트가 코드/명령을 생성·수정·실행해 보안·운영 리스크 유발 |
| ASI06 | Memory & Context Poisoning | 저장·검색 컨텍스트가 오염·변조되어 이후 행동을 왜곡(RAG 포함) |
| ASI07 | Insecure Inter-Agent Communication | 에이전트 간 메시지가 인증·무결성·정책 통제 없이 오감 |
| ASI08 | Cascading Agent Failures | 한 실패/환각이 에이전트 네트워크로 전파 |
| ASI09 | Human-Agent Trust Exploitation | 사람이 유창하고 권위 있어 보이는 에이전트를 과신하도록 유도 |
| ASI10 | Rogue Agents | 손상·오정렬·드리프트된 에이전트가 정책 밖에서 계속 작동 |
ASI가 도입한 개념 중 가장 실무적인 건 "최소 권한(Least Privilege)"을 넘어선 "최소 자율(Least Agency)" 이다. 무엇에 접근 가능한가뿐 아니라, 되묻지 않고 얼마나 자유롭게 행동할 수 있는가를 제한해야 한다는 것. 에이전트에 "백지수표"를 주면, 단일 악성 프롬프트로 조종 가능한 내부자를 만드는 셈이다.
MITRE ATLAS, NIST AI RMF / AI 600-1이 엔터프라이즈 조달 체크리스트의 기준선이 됐고, EU AI Act는 적대적 테스트를 문서화된 컴플라이언스 활동으로 못박았다(고위험 제공자의 15조 견고성, 9조 리스크 관리, 14조 인간 감독 의무의 기술적 증적). 즉 레드팀은 "하면 좋은 것"에서 "감사 증적으로 남겨야 하는 것"으로 넘어왔다.
이 구분이 뒤에서 각 도구의 한계를 가른다.
| 도구 | 비유 | 한 줄 정의 |
|---|---|---|
| Garak (NVIDIA) | LLM의 nmap | 광역 취약점 스캐너. 프로브 라이브러리로 표면을 쓸어본다 |
| PyRIT (Microsoft) | LLM의 Metasploit | 적응형 멀티턴 공격 엔진. 정밀 후속 타격 |
| Promptfoo (OpenAI) | LLM의 Jest/Pytest | CI/CD 우선. 패치가 회귀하지 않게 게이트로 잡는다 |
| DeepTeam (Confident AI) | 10줄 레드팀 | 프레임워크 매핑 중심. 코드 몇 줄로 OWASP/NIST 커버리지 |
NVIDIA AI Red Team의 오픈소스 취약점 스캐너. Apache 2.0, CLI 우선, 8천 스타대. 이름은 스타트렉 캐릭터에서 따왔다.
Garak의 한 번의 실행은 다섯 부품이 물려 돌아간다. 이걸 알면 커스텀 프로브를 짤 때 어디를 건드릴지 보인다.
primary_detector와 extended_detectors 속성을 읽어 돌릴 디텍터 목록을 정한다.디텍터 종류가 채점 품질을 가른다: (1) 알려진 악성 시그니처에 대한 단순 문자열 매칭, (2) 소형 분류 모델 기반(예: 독성 점수), (3) 미묘한 케이스용 LLM-as-judge. 프로브마다 1차 디텍터 + 선택적 확장 디텍터가 붙는다.
Garak은 프롬프트 하나를 기본 10회 발사한다. LLM 출력이 비결정적이기 때문. 탈옥을 10번 중 9번 거절해도 1번 뚫리면 10% bypass rate고, 그 10%는 문서화할 가치가 있는 취약점이다. 공격자는 그걸 대규모로 반복할 테니까. v0.14.1부터는 ASR에 부트스트랩 신뢰구간이 붙어서, "이 모델은 X% 취약, 단 신뢰구간 Y~Z"처럼 통계적으로 보고한다. 단일 숫자에 속지 말라는 설계 의도다.
promptinject — Agency Enterprise PromptInject 프레임워크 기반 하이재킹dan — DAN 패밀리 탈옥 전체(6.0~11.0, Developer Mode 등)encoding — Base64·MIME·quoted-printable 등 인코딩 기반 가드레일 우회leakreplay — 학습 데이터 추출(특정 연속 패턴으로 유도)knownbadsignatures — 악성 시그니처/멀웨어 생성 시도packagehallucination — 존재하지 않는 PyPI/npm 패키지명을 지어내는지(= slopsquatting 공급망 벡터)python -m pip install -U garak
# 인코딩 우회 프로브만 특정 모델에 발사 (프롬프트당 기본 10회 생성)
python -m garak --target_type openai --target_name gpt-5-nano --probes encoding
# Bedrock의 Claude에 DAN 패밀리 탈옥 스캔
export BEDROCK_API_KEY="..."; export BEDROCK_REGION="us-east-1"
garak --target_type bedrock --target_name claude-3-sonnet --probes dan
결과는 JSONL로 떨어지고, eval 엔트리의 카테고리별 성공률을 보면 어느 공격 클래스가 무른지 좌표가 나온다.
포지션: 폭넓은 프로브로 표면을 빠르게 훑어 "어디가 무른가"를 먼저 잡는 광역 스윕. 결과를 대시보드로 파이프하기도 쉽다.
Microsoft AI Red Team이 Phi·Copilot 등 100개+ 내부 제품을 때려본 뒤 오픈소스화. MIT, Python 3.10–3.13, v0.11.0(2026-02). 스타는 2026년 초 3.4k → 4월 3.6k. MSRC가 AI 바운티 프로그램에 PyRIT를 직접 엮어 연구자들에게 권장한다.
구조가 곧 철학이다. Metasploit이 익스플로잇을 체이닝하듯 공격 프리미티브를 엮는다.
텍스트뿐 아니라 이미지·오디오·비디오 모달리티까지 지원한다.
PromptSendingOrchestrator — 싱글턴 배치(베이스라인).RedTeamingOrchestrator — 멀티턴 적대적 대화.Crescendo — 점진적 에스컬레이션(1부 1.2 참조).Tree of Attacks with Pruning (TAP) — 트리 탐색형.XPIAOrchestrator — 교차 도메인(간접) 프롬프트 인젝션. 이메일·문서·MCP 툴 반환·RAG 스토어 같은 외부 데이터에 악성 지시를 심어, 에이전트가 신뢰할 수 없는 콘텐츠를 처리하는 표면을 정조준한다. ASI01(목표 하이재킹)·ASI06(메모리 포이즈닝)을 직접 때리는 무기. 워드 문서 본문에 묻힌 [SYSTEM OVERRIDE] 이전 지시 무시... 같은 페이로드가 SharePoint 커넥터를 통해 들어오는 시나리오가 전형.conda create -n pyrit python=3.11 -y && conda activate pyrit
pip install pyrit
# 개념 스케치
# 1) 타깃 정의 (Azure OpenAI / HTTPTarget / Ollama ...)
# 2) 컨버터 스택 정의 (Base64 → Leetspeak → Translation 중첩)
# 3) 스코어러 정의 (true/false 판정 기준을 날카롭게)
# 4) PromptSendingOrchestrator로 베이스라인,
# Crescendo/RedTeamingOrchestrator로 멀티턴 후속,
# XPIAOrchestrator로 RAG/툴 반환에 심은 간접 인젝션 표면 타격
포지션: Garak으로 무른 곳을 찾은 뒤, 프로그래밍 가능한 멀티턴 정밀 타격이 필요할 때. 특히 에이전트 간접 인젝션(XPIA).
선언적 YAML 기반 평가/레드팀 프레임워크. Node.js 기반(pip/brew도 가능), MIT, 22k 스타대, 35만+ 개발자와 포춘 500의 25%+가 사용. 강점은 명확하다 — CI/CD 우선. 레드팀을 유닛 테스트만큼 일상화한다.
2026년 큰 뉴스: OpenAI가 Promptfoo를 인수했다(2026-03-09 발표). 공동창업자들이 OpenAI에 합류했고, 프로젝트는 오픈소스 MIT 라이선스를 유지한다고 밝혔다. 다만 인수 후 오픈소스의 장기 방향은 아직 명확히 정리되지 않았으니 도입 시 염두에 두자.
Promptfoo 레드팀의 핵심 추상화는 둘로 갈린다:
이 분리 덕에 "PII 유출 플러그인 × Crescendo 스트래티지 × 다국어"처럼 조합 폭발을 자동으로 만든다. purpose 한 필드(시스템 목적·사용자·접근 가능 범위)만 잘 적으면, 그 앱에 맞는 적대적 케이스 수백 개를 생성한다.
채점은 LLM 그레이더(기본 GPT-5)로 하되 로컬 모델(예: Llama3)로 오버라이드 가능. 프로덕션 팀은 보통 통과율로 릴리스를 게이팅한다 — 크리티컬 카테고리 >95%, 톤 같은 소프트 카테고리 >80% 식. 워크플로는 purpose 정의 → generate → eval → report → fix → re-run.
다국어 테스트가 의외로 강력하다. 연구상 LLM은 비영어 — 특히 벵골어·스와힐리어·자바어 같은 저자원 언어 — 에서 안전장치가 더 약하게 나오는 경향이 있어, 영어에서 잘 막히던 취약점이 드러난다.
Promptfoo 조직은 모델 파일 자체의 악성코드·백도어를 잡는 modelaudit 스캐너(ASI04 공급망)와, 의도적으로 취약한 evil-mcp-server(MCP 공격 테스트용)도 운영한다.
npm install -g promptfoo # 또는: npx promptfoo@latest
npx promptfoo@latest redteam init my-redteam --no-gui
promptfoo redteam run # generate + eval 한 방. CI에서 exit code로 게이팅
# promptfooconfig.yaml (발췌)
redteam:
purpose: "사내 직원용 HR 정책 Q&A 챗봇. 개인 급여/평가 정보 접근 불가."
plugins: [owasp:llm, pii, prompt-injection, excessive-agency]
strategies: [jailbreak, crescendo, base64, multilingual]
포지션: 패치/프롬프트 변경마다 회귀를 막고, 릴리스를 ASR 임계치로 게이팅. CI에 가장 자연스럽게 녹는다.
평가 프레임워크 DeepEval을 만든 Confident AI(Jeffrey Ip)가 그 위에 올린 레드팀 프레임워크. Apache 2.0, Python 3.9–3.13. 공식 사이트 기준 120여 개 취약점(8개 카테고리), 20여 개 공격 벡터(싱글턴+멀티턴), 6개 이상 프레임워크 커버(초기 40여 개에서 빠르게 성장).
model_callback만 정의하면 끝.DeepTeam도 Promptfoo처럼 "무엇(취약점)"과 "어떻게(공격)"를 나눈다. 취약점은 bias(인종·성별·정치·종교), PII 유출, 독성, 잘못된 정보, SQL Injection, BFLA/BOLA/RBAC(권한) 등. 공격은 싱글턴(프롬프트 인젝션, Leetspeak, ROT-13, 수학 문제 인코딩)과 멀티턴(linear / tree / crescendo)으로 나뉜다. 프레임워크 객체를 쓰면 이 둘을 직접 고를 필요 없이 표준이 정의해준다(단, 프레임워크를 쓰면 vulnerabilities/attacks를 따로 넘길 수 없다).
assess()로 특정 취약점만 격리해 수정 효과를 측정하는 워크플로도 있다. 전체 평가에서 특정 카테고리 통과율이 낮으면, 그 부분만 떼어 스트레스 테스트한 뒤 고친다. 7종 프로덕션 가드레일도 들어 있어, 취약점 발견 후 입력/출력 보호까지 같은 생태계로 이어진다.
DeepTeam은 에이전트 위험을 모델 추론/응답 레벨에서만 본다. "이 LLM이 적대적 프롬프트·툴 오용·목표 조작 시도에 어떻게 응답하는가"는 보지만, 실제 런타임 모니터링·접근 제어·인프라 보안은 별도라고 문서가 명시한다. ASI 같은 에이전트 표준을 매핑은 하되, 프로덕션 에이전트 보안은 결국 전 계층 방어가 필요하다는 점을 분명히 한다.
pip install -U deepteam
from deepteam import red_team
from deepteam.frameworks import OWASP_ASI_2026
def model_callback(prompt: str) -> str:
return your_agent(prompt) # 네 에이전트 호출 래핑
# 에이전트용 OWASP ASI 2026 전 10개 카테고리를 한 방에
red_team(model_callback=model_callback, framework=OWASP_ASI_2026())
# 특정 카테고리만 스코프 (예: 목표 하이재킹·식별 남용·메모리 포이즈닝)
# red_team(model_callback=model_callback,
# framework=OWASP_ASI_2026(categories=["ASI_01", "ASI_03", "ASI_06"]))
포지션: OWASP/NIST/MITRE 프레임워크 매핑이 필요한 컴플라이언스 맥락, 또는 최소 코드로 에이전트 표준 커버리지를 빠르게 깔 때.
| 항목 | Garak | PyRIT | Promptfoo | DeepTeam |
|---|---|---|---|---|
| 제작 | NVIDIA | Microsoft | OpenAI(인수) | Confident AI |
| 라이선스 | Apache 2.0 | MIT | MIT | Apache 2.0 |
| 스타(2026 상반기) | ~8k | ~3.6k | ~22k | ~1.3k(성장 중) |
| 언어/런타임 | Python(CLI) | Python(노트북/라이브러리) | Node.js(YAML) | Python |
| 포지션 | 광역 스캐너 | 멀티턴 공격 엔진 | CI 회귀 게이트 | 프레임워크 매핑 |
| 핵심 추상화 | probe/detector | orchestrator/converter/scorer/memory | plugin/strategy | vulnerabilities/attacks/framework |
| 멀티턴 | GOAT(v0.15) | 강함(Crescendo/TAP) | crescendo/GOAT/Hydra/tree | linear/tree/crescendo |
| 에이전트·간접인젝션 | Agent-breaker 프로브 | XPIAOrchestrator(강점) | MCP/agent 타깃, evil-mcp-server | OWASP_ASI_2026 |
| 모달리티 | 텍스트 중심 | 텍스트·이미지·오디오·비디오 | 텍스트 중심 | 텍스트 중심 |
| 통계적 ASR | 부트스트랩 CI(v0.14.1) | 스코어러 | 통과율 | pass rate |
| CI/CD | JSON config(v0.14) | wrapper 필요 | 최고(네이티브) | CLI/YAML |
| 프레임워크 매핑 | 부분 | ATLAS 계열 | OWASP/NIST/EU | OWASP/NIST/MITRE/Aegis 등 |
| 진입장벽 | 낮음 | 높음 | 낮음 | 가장 낮음(10줄) |
도구를 하나 고르라는 글이 아니다. 침투 테스트의 정찰 → 익스플로잇 → 검증처럼, LLM 레드팀도 단계가 있다.
dan, encoding, promptinject, leakreplay를 20분 돌린다. "Base64 인코딩 입력이 입력 필터를 80% 통과", "promptinject 하이재킹 30%" 같은 무른 좌표가 ASR + 신뢰구간으로 나온다.assess()로 수정 전후 통과율 비교.요약: Garak이 표면을 쓸고, PyRIT가 외과 수술을 하고, DeepTeam이 표준에 매핑하고, Promptfoo가 패치 회귀를 막는다. 이게 2026년식 LLM 레드팀 방법론의 한 형태다.
여기에 마이크로소프트가 1년치 에이전트 레드팀 실전으로 갱신한 실패 모드 택소노미 v2.0(2026-06)이 던진 경고를 덧붙인다. 가장 자주 악용된 건 HitL(human-in-the-loop) 우회였다 — 동의 피로, 확률적 호출 조작, 개별 단계는 승인 가치가 없어 보이지만 누적 결과는 치명적이게 만드는 점진 에스컬레이션. 외부 입력 한 번으로 사람 개입 없이 끝까지 가는 zero-click 체인도 관측됐고, XPIA와 메모리 포이즈닝이 자주 결합됐다. 우리가 테스트해야 하는 게 바로 이런 누적·연쇄 시나리오다. 단발 프롬프트 채점으로는 안 잡힌다.
"가드레일 켰는데요?"는 답이 아니다. 단일 프롬프트 스캐너로는 에이전트가 입으로 거절하면서 손으로 파일을 지우는 실패 모드를, 또는 무해한 걸음들이 누적되는 멀티턴 탈옥을 못 잡는다.
다행히 도구는 빠르게 성숙하고 있다 — 2026년 4~6월만 봐도 Garak은 GOAT·Agent-breaker 프로브를, PyRIT는 Rampart라는 파이프라인 도구를, Promptfoo는 OpenAI 우산 아래 빠른 릴리스를, DeepTeam은 OWASP_ASI_2026 매핑을 더했다. 전부 무료 오픈소스다.
하나만 고르지 말자. 표면을 쓸고(Garak), 정밀 타격하고(PyRIT), 표준에 매핑하고(DeepTeam), 회귀를 막는다(Promptfoo). 그리고 무엇보다, 한 번 돌리고 끝내지 말 것. 모델이 바뀌고 프롬프트가 드리프트하고 공격 기법이 매주 진화한다. 레드팀은 프로젝트가 아니라 운영 규율이다.