LLM 레드팀 도구 4종 딥다이브 — Garak · PyRIT · Promptfoo · DeepTeam

이군·2026년 6월 29일

들어가며 — "가드레일 켰는데요?"는 더 이상 답이 아니다

LLM 보안에는 흔한 함정이 있다. "프롬프트 인젝션? Guardrails 켜고 시스템 프롬프트에 '이러이러한 건 하지 마' 한 줄 넣으면 되잖아." 끝.

그 한 줄로 안 끝나는 이유는 두 가지다. 첫째, 방어가 거의 다 싱글턴 입력에 맞춰져 있다. 입력 필터는 사용자가 방금 보낸 한 메시지에 악성 신호가 있는지를 본다. 그런데 뒤에서 볼 멀티턴 공격들은 메시지 하나하나는 전부 무해하다. 둘째, 모델이 안전해도 시스템이 안전한 건 아니다. 단독 챗 인터페이스로는 멀쩡하던 모델이 파일시스템·이메일·코드 인터프리터·고객 DB·MCP 툴에 물리는 순간 직접 악용 가능해진다. 에이전트가 입으로는 "그건 못 합니다" 거절하면서 손으로는 파일을 지우거나 툴 응답으로 데이터를 빼낼 수 있다.

핵심 명제를 먼저 박아두자. 레드팀은 모델 단독이 아니라 배포된 구성 전체를 때려야 하고, 단일 프롬프트가 아니라 대화 전체를 때려야 한다. 그래서 도구도 하나로는 부족하다. nmap 하나로 침투 테스트를 끝내는 사람이 없듯이.

이 글은 2026년 현재 실무에서 실제로 후보에 오르는 오픈소스 LLM 레드팀 프레임워크 4종 — Garak, PyRIT, Promptfoo, DeepTeam — 을 공격자 관점에서 아키텍처 레벨까지 뜯어본다. 그 전에, 이 도구들이 무엇을 자동화하는지부터 — 즉 공격 기법 자체가 어떻게 작동하는지부터 — 짚는다. 도구는 결국 이 기법들을 대량·반복·채점 가능하게 만드는 래퍼이기 때문이다.


1부. 공격 기법의 내부 동작 — 왜 멀티턴이 싱글턴을 박살내는가

도구를 이해하려면 도구가 발사하는 탄약을 먼저 알아야 한다. 2026년 레드팀의 핵심 탄약은 멀티턴이다.

1.1 싱글턴 vs 멀티턴

싱글턴 공격(고전적 DAN, "Developer Mode" 류, 인코딩 우회)은 한 방의 프롬프트에 모든 악성 의도를 욱여넣는다. 문제는 일단 발견되면 입력 필터가 그 시그니처를 학습해 막기 쉽다는 것. 식별 가능한 악성 콘텐츠가 입력에 그대로 들어 있으니까.

멀티턴은 이 약점을 정확히 노린다. 공격을 여러 단계로 분산해서, 각 단계는 무해해 보이게 만든다. 대화가 누적되며 모델은 점점 더 순응적으로 변하고, 원래 지시를 무시하기 시작한다. 단일 메시지 테스트로는 이게 절대 안 잡힌다.

1.2 Crescendo — 모델이 제 발등을 찍게 만든다

Crescendo(Russinovich et al., 2024, Microsoft)는 멀티턴 탈옥의 교과서다. 작동 원리는 이렇다:

  1. 목표 작업과 연관되지만 무해한 추상적 질문으로 대화를 연다(보통 역사적·교육적 전제).
  2. 모델의 답변을 받아, 그 답변을 인용·참조하며 다음 질문을 조금 더 수위 높게 던진다.
  3. 이 사이클을 반복해 작은 무해한 걸음들로 목표 콘텐츠까지 끌고 간다.

여기서 핵심 통찰: Crescendo는 LLM이 패턴을 따르려는 성향, 그리고 최근 텍스트 — 특히 자기 자신이 생성한 텍스트 — 에 주목하는 성향을 악용한다. 모델은 자기가 방금 한 말과 일관되게 행동하려 하기 때문에, 자기 출력을 사다리 삼아 한 칸씩 올라가면 거절 경계가 흐려진다. 심리학의 "문간에 발 들이기(foot-in-the-door)" 전술 그대로다. 작은 요청에 동의하면 큰 요청에도 동의할 확률이 올라간다.

방어 관점에서 무서운 점은 따로 있다. 입력이 전부 무해하기 때문에, 기법이 알려진 뒤에도 막기 어렵다. 사용자 프롬프트에 반응하도록 설계된 방어는 Crescendo를 통과시킨다. 자동화 버전인 Crescendomation은 거절 여부를 판정하는 피드백 루프로 다음 질문을 적응적으로 다듬는다. (구체적 ASR 수치는 모델 세대마다 천차만별이라 1.5에서 2026년 최신치로 따로 정리한다.)

1.3 GOAT — 매 턴 전략을 바꾸는 공격 에이전트

GOAT(Generative Offensive Agent Tester, Meta, 2024)는 한 발 더 나간다. 여러 적대적 프롬프팅 기법을 대화 턴에 걸쳐 체이닝하고, 매 턴 타깃 응답을 보고 동적으로 전략을 바꾼다. 실제 공격자가 채팅창에서 즉흥적으로 수를 바꾸는 행동을 모사하는 셈이다. 원논문은 5턴 이내라는 적은 쿼리 예산으로도 당대 멀티턴 기법(Crescendo 포함)을 능가하는 ASR을 보였다. Garak이 v0.15.0(2026-05)에 GOAT 프로브를 넣은 게 이래서 의미가 크다.

1.4 TAP / Tree / Linear — 탐색 전략의 차이

멀티턴 안에서도 대화를 어떻게 전개하느냐로 갈린다:

  • Linear(선형): 요청 강도를 순차적으로 올리며 모델을 점진적으로 조건화한다. 가장 단순.
  • Tree / TAP(Tree of Attacks with Pruning): 여러 대화 경로를 동시에 가지치며 탐색하고, 가망 없는 가지는 쳐낸다(pruning). 모델 결정 경계를 뚫는 최적 경로를 찾는 트리 탐색.
  • Crescendo: 위에서 본 라포 형성형. 관계 동역학을 쌓아 올린다.

Promptfoo의 Hydra 같은 변종은 공격자 에이전트가 경로를 가지치되 모든 거절을 기억하고 자동 백트래킹하며, 성공한 전술을 스캔 전체에서 공유한다. 한 번 통한 수를 다른 타깃에도 재사용하는 식이다.

이게 도구가 자동화하는 것의 정체다. 사람이 채팅 탭에서 한 수씩 시도하던 걸, 이 프레임워크들은 컨버터 체인 10개 × 프롬프트 20개 × 멀티턴 전개를 수백 조합으로 돌리며 전부 채점한다.

1.5 그래서 2026년 최신 모델에선? — 수치는 낡아도 원리는 안 낡는다

Crescendo·GOAT 원논문의 ASR은 GPT-4·Gemini Ultra·Llama 3.1 시절 숫자다. GPT-5.x에 Claude Opus 4.x 시대에 그대로 인용하면 "옛날 모델 얘기"가 된다. 그런데 핵심을 짚자면 — 기법은 안 낡았다. 세대마다 바뀌는 건 성공률과 실패 양상뿐이다. 한 레드팀 업체의 표현 그대로, 이 기법 카테고리들 중 새로운 건 없고 세대마다 달라지는 건 ASR과 failure mode다. 그러니 숫자만 최신으로 갈아끼우면 된다.

2026년 상반기 기준 프론티어 모델의 프롬프트 인젝션/탈옥 저항력을 보면(전부 직접·간접 인젝션 또는 멀티턴 시나리오, 출처별 테스트 하니스가 달라 절대 비교는 주의):

  • 벤더 시스템 카드 계열(프롬프트 인젝션 ASR, 낮을수록 견고): Claude Opus 4.5가 약 4.7%로 Gemini 3 Pro 12.5%, GPT-5.1 21.9%보다 크게 낮았다. 이후 Opus 4.7은 Gray Swan 에이전트 레드팀에서 약 6.0%, 그리고 Opus 4.8은 약 9.6%로 오히려 소폭 퇴행한 것으로 시스템 카드에 보고됐다(세대가 올라간다고 단조롭게 안전해지지 않는다는 좋은 사례).
  • 독립 멀티턴 breach 측정(2026-03): Claude Opus 4.5 4.8% vs GPT-5.2 14.3% vs GPT-5.1 28.6%. 싱글턴이 아니라 멀티턴 침해율이라는 점이 중요하다.
  • 학술 멀티턴 벤치(ADVERSA, 2026-03): Claude Opus 4.6 40%(2/5), Gemini 3.1 Pro 20%, GPT-5.2 20%, 전체 26.7%. 주목할 점은 성공 사례 상당수가 첫 라운드에 'graduate-level 연구'·'네트워크 스트레스 테스트' 같은 프레이밍만으로 뚫렸다는 것 — 정교한 에스컬레이션 없이 초기 프레이밍 한 방으로 충분했다.

세 출처의 같은 모델 수치가 4.8%에서 40%까지 벌어지는 게 보이는가? 이게 핵심 교훈이다. ASR은 모델만의 속성이 아니라 테스트 하니스·판정자(judge)·공격 예산·위협 모델의 함수다. 그래서 "GPT-5.6은 X% 안전"이라고 한 줄로 박는 순간 틀린다. 보고할 땐 항상 어떤 하니스로 몇 턴, 어떤 judge로 쟀는지를 같이 적어야 의미가 있다.

마지막으로 같은 레드팀 데이터가 던지는 더 중요한 경고: 단일 프롬프트 탈옥 성공률은 프로덕션 보안 리스크의 나쁜 대리지표다. 정작 중요한 침해는 공격자의 목표를 진전시키는 것 — 채팅 응답이든, 툴 호출이든, 툴 출력 로그든 — 이고, 채팅 텍스트만 채점하면 그 실패 모드를 놓친다. 실제로 한 사례에서 GPT-5.2는 공격자가 통제하는 명령 아티팩트를 모델이 만들게 한 뒤 다운스트림 툴 실행으로 침해가 일어났는데, Claude는 그 셋업 단계를 거절해서 침해 자체가 발생하지 않았다. 같은 "탈옥 시도"라도 어디서 끊겼는지가 실제 위험을 가른다.


2부. 무엇을 기준으로 테스트하는가 — 표준 지형

도구를 비교하기 전에, 이들이 매핑하는 표준을 알아야 리포트가 의미를 가진다. 2026년 현재 세 축이 잡혀 있다.

2.1 OWASP LLM Top 10 (2025 에디션)

배포된 LLM 애플리케이션의 보안 리스크 표준 분류. 프롬프트 인젝션(LLM01)이 2년 연속 1위. 전체는: LLM01 프롬프트 인젝션, LLM02 민감정보 노출, LLM03 공급망, LLM04 데이터·모델 포이즈닝, LLM05 부적절한 출력 처리, LLM06 과도한 권한(Excessive Agency), LLM07 시스템 프롬프트 유출, LLM08 벡터·임베딩 취약점, LLM09 잘못된 정보(Misinformation), LLM10 무제한 소비(Unbounded Consumption).

2.2 OWASP Top 10 for Agentic Applications (ASI) 2026

2025년 12월 9일 OWASP GenAI Security Project가 공개한, 자율 에이전트 전용 신규 택소노미. LLM Top 10을 대체하는 게 아니라 확장한다 — 대부분의 에이전트는 LLM 앱이기도 하니 LLM 측 리스크를 상속한다. 핵심 차이는 "콘텐츠 생성의 오류"가 아니라 "자율적 행동의 실패 모드"를 다룬다는 것. 전체 목록:

코드카테고리한 줄 요약
ASI01Agent Goal Hijack공격자가 에이전트 목표/결정 경로를 틀어 다른 목적을 추구하게 만든다. 프롬프트 인젝션의 에이전트판
ASI02Tool Misuse & Exploitation정당한 권한을 가진 툴을 안전하지 않게 조합·재귀·남용
ASI03Identity & Privilege Abuse크리덴셜·토큰·상속 권한 오용으로 의도 범위 밖 접근
ASI04Agentic Supply Chain서드파티 툴·플러그인·레지스트리·MCP 서버·외부 컴포넌트發 위험
ASI05Unexpected Code Execution에이전트가 코드/명령을 생성·수정·실행해 보안·운영 리스크 유발
ASI06Memory & Context Poisoning저장·검색 컨텍스트가 오염·변조되어 이후 행동을 왜곡(RAG 포함)
ASI07Insecure Inter-Agent Communication에이전트 간 메시지가 인증·무결성·정책 통제 없이 오감
ASI08Cascading Agent Failures한 실패/환각이 에이전트 네트워크로 전파
ASI09Human-Agent Trust Exploitation사람이 유창하고 권위 있어 보이는 에이전트를 과신하도록 유도
ASI10Rogue Agents손상·오정렬·드리프트된 에이전트가 정책 밖에서 계속 작동

ASI가 도입한 개념 중 가장 실무적인 건 "최소 권한(Least Privilege)"을 넘어선 "최소 자율(Least Agency)" 이다. 무엇에 접근 가능한가뿐 아니라, 되묻지 않고 얼마나 자유롭게 행동할 수 있는가를 제한해야 한다는 것. 에이전트에 "백지수표"를 주면, 단일 악성 프롬프트로 조종 가능한 내부자를 만드는 셈이다.

2.3 컴플라이언스 — 이제 선택이 아니다

MITRE ATLAS, NIST AI RMF / AI 600-1이 엔터프라이즈 조달 체크리스트의 기준선이 됐고, EU AI Act는 적대적 테스트를 문서화된 컴플라이언스 활동으로 못박았다(고위험 제공자의 15조 견고성, 9조 리스크 관리, 14조 인간 감독 의무의 기술적 증적). 즉 레드팀은 "하면 좋은 것"에서 "감사 증적으로 남겨야 하는 것"으로 넘어왔다.

2.4 모델 레벨 vs 에이전트 레벨 — 절대 헷갈리면 안 되는 구분

  • 모델 레벨: 엔드포인트의 출력 텍스트를 본다. 유해·혐오·탈옥 응답이 나오는가. 타깃은 단일 엔드포인트.
  • 에이전트 레벨: 툴 호출 행위를 본다. 금지된 행동, 민감 데이터 유출, 태스크 이탈을 본다. 에이전트가 말로는 거절하면서 툴로는 파일 삭제·데이터 추출을 할 수 있고, 모델 레벨 스캔은 이걸 통째로 놓친다.

이 구분이 뒤에서 각 도구의 한계를 가른다.


3부. 네 줄 포지셔닝

도구비유한 줄 정의
Garak (NVIDIA)LLM의 nmap광역 취약점 스캐너. 프로브 라이브러리로 표면을 쓸어본다
PyRIT (Microsoft)LLM의 Metasploit적응형 멀티턴 공격 엔진. 정밀 후속 타격
Promptfoo (OpenAI)LLM의 Jest/PytestCI/CD 우선. 패치가 회귀하지 않게 게이트로 잡는다
DeepTeam (Confident AI)10줄 레드팀프레임워크 매핑 중심. 코드 몇 줄로 OWASP/NIST 커버리지

4부. Garak — LLM의 nmap

NVIDIA AI Red Team의 오픈소스 취약점 스캐너. Apache 2.0, CLI 우선, 8천 스타대. 이름은 스타트렉 캐릭터에서 따왔다.

4.1 아키텍처 — 5개 컴포넌트로 본다

Garak의 한 번의 실행은 다섯 부품이 물려 돌아간다. 이걸 알면 커스텀 프로브를 짤 때 어디를 건드릴지 보인다.

  • Generator: 타깃 LLM에 프롬프트를 보내고 응답을 받는 어댑터. 네트워크 연결·인증·응답 처리를 추상화한다. OpenAI, Hugging Face, Replicate, LiteLLM, Bedrock, Ollama, GGUF, 대부분의 REST를 지원.
  • Probe: 특정 약점을 노린 프롬프트 묶음을 조립·발사한다. 한 프로브 모듈 = 한 취약점 클래스.
  • Detector: 응답을 채점해 그 약점이 발현됐는지 판정한다.
  • Harness: 프로브와 디텍터를 엮어 실행을 오케스트레이션한다. 기본은 probewise harness로, 각 프로브의 primary_detectorextended_detectors 속성을 읽어 돌릴 디텍터 목록을 정한다.
  • Evaluator: 결과를 집계한다.

디텍터 종류가 채점 품질을 가른다: (1) 알려진 악성 시그니처에 대한 단순 문자열 매칭, (2) 소형 분류 모델 기반(예: 독성 점수), (3) 미묘한 케이스용 LLM-as-judge. 프로브마다 1차 디텍터 + 선택적 확장 디텍터가 붙는다.

4.2 비결정성을 통계로 다룬다 — 이게 Garak의 철학

Garak은 프롬프트 하나를 기본 10회 발사한다. LLM 출력이 비결정적이기 때문. 탈옥을 10번 중 9번 거절해도 1번 뚫리면 10% bypass rate고, 그 10%는 문서화할 가치가 있는 취약점이다. 공격자는 그걸 대규모로 반복할 테니까. v0.14.1부터는 ASR에 부트스트랩 신뢰구간이 붙어서, "이 모델은 X% 취약, 단 신뢰구간 Y~Z"처럼 통계적으로 보고한다. 단일 숫자에 속지 말라는 설계 의도다.

4.3 프로브 택소노미 (대표)

  • promptinject — Agency Enterprise PromptInject 프레임워크 기반 하이재킹
  • dan — DAN 패밀리 탈옥 전체(6.0~11.0, Developer Mode 등)
  • encoding — Base64·MIME·quoted-printable 등 인코딩 기반 가드레일 우회
  • leakreplay — 학습 데이터 추출(특정 연속 패턴으로 유도)
  • knownbadsignatures — 악성 시그니처/멀웨어 생성 시도
  • packagehallucination — 존재하지 않는 PyPI/npm 패키지명을 지어내는지(= slopsquatting 공급망 벡터)
  • 그 외 XSS, 독성, 환각 등 50개 이상

4.4 3개월 이내 업데이트 (핵심)

  • v0.15.0 (2026-05-01): 멀티턴 GOAT 프로브, LLM 에이전트가 가진 툴을 테스트하는 Agent-breaker 프로브 추가 — 에이전트 표면에 발을 들였다. 추가로 system-prompt-extraction 프로브, ModernBERT 거절 디텍터, NeMo Guardrails 서버 지원.
  • v0.14.1 (2026-04-03): ASR 부트스트랩 신뢰구간, 실시간 테스트용 WebSocket generator.
  • v0.14.0 (2026-02): YAML과 별개로 JSON config 지원(CI에서 프로그래밍적 설정), HTML 리포트 재설계.

4.5 실행

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 엔트리의 카테고리별 성공률을 보면 어느 공격 클래스가 무른지 좌표가 나온다.

포지션: 폭넓은 프로브로 표면을 빠르게 훑어 "어디가 무른가"를 먼저 잡는 광역 스윕. 결과를 대시보드로 파이프하기도 쉽다.


5부. PyRIT — LLM의 Metasploit

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를 직접 엮어 연구자들에게 권장한다.

5.1 아키텍처 — 4개 프리미티브

구조가 곧 철학이다. Metasploit이 익스플로잇을 체이닝하듯 공격 프리미티브를 엮는다.

  • Orchestrator: 공격 흐름 제어(싱글턴/멀티턴/트리 등).
  • Converter: 프롬프트를 변형해 필터를 우회한다. Base64, ROT13, Leetspeak, Unicode confusables, 번역 등. 컨버터는 스택처럼 쌓인다 — 같은 페이로드에 인코딩을 중첩해 안전 정렬의 취약점을 노린다(많은 모델이 표준 영어의 유해성은 인식하지만, 같은 내용이 변형되면 정렬이 무너진다).
  • Scorer: 공격 성공 판정. 규칙 기반 / 분류 모델 / LLM-as-judge.
  • Memory: 모든 프롬프트·응답·메타데이터를 저장(SQLite 또는 Azure SQL). 세션 간 재현·공유·라벨링 가능. 바운티 리포트 쓰기 좋다.

텍스트뿐 아니라 이미지·오디오·비디오 모달리티까지 지원한다.

5.2 오케스트레이터 — PyRIT의 진짜 가치

  • PromptSendingOrchestrator — 싱글턴 배치(베이스라인).
  • RedTeamingOrchestrator — 멀티턴 적대적 대화.
  • Crescendo — 점진적 에스컬레이션(1부 1.2 참조).
  • Tree of Attacks with Pruning (TAP) — 트리 탐색형.
  • XPIAOrchestrator교차 도메인(간접) 프롬프트 인젝션. 이메일·문서·MCP 툴 반환·RAG 스토어 같은 외부 데이터에 악성 지시를 심어, 에이전트가 신뢰할 수 없는 콘텐츠를 처리하는 표면을 정조준한다. ASI01(목표 하이재킹)·ASI06(메모리 포이즈닝)을 직접 때리는 무기. 워드 문서 본문에 묻힌 [SYSTEM OVERRIDE] 이전 지시 무시... 같은 페이로드가 SharePoint 커넥터를 통해 들어오는 시나리오가 전형.

5.3 3개월 이내 업데이트 (핵심)

  • Rampart & Clarity 공개 (2026-05-21): PyRIT 위에 올린 신규 도구 둘. Rampart이미 만들어진 시스템을 스캔하는 PyRIT와 달리, 개발 과정 중 코드를 지속 테스트하도록 설계됐고 특히 교차 프롬프트 인젝션(문서·이메일·티켓으로 들어오는 간접 조작)에 초점을 둔다. 단발 테스트가 아니라 익스플로잇/수정이 실제로 먹히는지 여러 라운드로 검증한다. 사내에서 취약점 1건의 재현→변종 식별→패치→재검증에 들던 일주일치 수작업을 몇 시간으로 압축했다고. Clarity는 코딩 에이전트에 임베드해 설계 단계부터 보안 가이드를 주는 어드바이저.
  • CSA × OWASP AI Exchange의 PyRIT 에이전트 레드팀 평가 (2026-06): 메모리 포이즈닝, 툴 오용, 역할 상승, 목표 조작, 멀티 에이전트 공격 시나리오로 검증. 강점은 멀티턴 오케스트레이션·채점·로깅·CI/CD 통합. 갭은 에이전트 상태 추적·오케스트레이션 인지형 공격 시뮬레이션·장기(long-horizon) 행동 분석 — 즉 PyRIT도 만능은 아니라는 공식 진단.
  • Azure AI Foundry의 AI Red Teaming Agent가 PyRIT를 래핑해 ASR 채점·스코어카드를 포털에서 제공.

5.4 실무 함정 두 개

  1. PyRIT는 본질적으로 리서치 라이브러리다. Jupyter 노트북 친화적이라 랩북으로는 좋지만, 진짜 릴리스 게이트에 꽂으려면 얇은 wrapper(오케스트레이터+YAML config+CLI)를 직접 둘러야 한다. 패턴은 "YAML config → 에이전트 래핑 → 공격 실행 → 채점 → OWASP 매핑 → 릴리스 게이트".
  2. Foundry의 에이전트 런은 유해 입력을 결과에서 redaction한다. 비기술 이해관계자 보호용으론 합리적이지만, 위협 모델링하려면 ASR 스코어카드 말고 raw PyRIT 로그가 필요하다. ASR은 결과를, 프롬프트 시퀀스는 공격 경로를 알려준다 — 다른 정보다.

5.5 실행

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).


6부. Promptfoo — LLM의 Jest/Pytest

선언적 YAML 기반 평가/레드팀 프레임워크. Node.js 기반(pip/brew도 가능), MIT, 22k 스타대, 35만+ 개발자와 포춘 500의 25%+가 사용. 강점은 명확하다 — CI/CD 우선. 레드팀을 유닛 테스트만큼 일상화한다.

2026년 큰 뉴스: OpenAI가 Promptfoo를 인수했다(2026-03-09 발표). 공동창업자들이 OpenAI에 합류했고, 프로젝트는 오픈소스 MIT 라이선스를 유지한다고 밝혔다. 다만 인수 후 오픈소스의 장기 방향은 아직 명확히 정리되지 않았으니 도입 시 염두에 두자.

6.1 플러그인 vs 스트래티지 — 분리가 설계의 묘

Promptfoo 레드팀의 핵심 추상화는 둘로 갈린다:

  • Plugin = 적대적 입력 생성기 (무엇을 공격할까). 50개+ 빌트인이 OWASP LLM Top 10, 유해 콘텐츠(20여 하위 카테고리), PII 유출, 프롬프트 인젝션, 탈옥, excessive agency, 환각 등을 커버.
  • Strategy = 페이로드 전달 기법 (어떻게 공격할까). base64, leetspeak, multilingual, crescendo, tree, GOAT, Hydra 등이 기본 공격을 더 어려운 변종으로 자동 변환.

이 분리 덕에 "PII 유출 플러그인 × Crescendo 스트래티지 × 다국어"처럼 조합 폭발을 자동으로 만든다. purpose 한 필드(시스템 목적·사용자·접근 가능 범위)만 잘 적으면, 그 앱에 맞는 적대적 케이스 수백 개를 생성한다.

6.2 채점·게이팅·다국어

채점은 LLM 그레이더(기본 GPT-5)로 하되 로컬 모델(예: Llama3)로 오버라이드 가능. 프로덕션 팀은 보통 통과율로 릴리스를 게이팅한다 — 크리티컬 카테고리 >95%, 톤 같은 소프트 카테고리 >80% 식. 워크플로는 purpose 정의 → generate → eval → report → fix → re-run.

다국어 테스트가 의외로 강력하다. 연구상 LLM은 비영어 — 특히 벵골어·스와힐리어·자바어 같은 저자원 언어 — 에서 안전장치가 더 약하게 나오는 경향이 있어, 영어에서 잘 막히던 취약점이 드러난다.

6.3 곁가지 — 공급망까지

Promptfoo 조직은 모델 파일 자체의 악성코드·백도어를 잡는 modelaudit 스캐너(ASI04 공급망)와, 의도적으로 취약한 evil-mcp-server(MCP 공격 테스트용)도 운영한다.

6.4 3개월 이내 업데이트 (빠른 케이던스, 저장소 커밋 2026-06-25에도 갱신)

  • 0.121.6 (04-22): Claude Opus 4.7 모델 지원.
  • 0.121.9 (04-27): GPT-5.5 모델 지원.
  • 0.121.10 (05-07): Bedrock Converse MCP 지원, Claude Agent SDK 0.2.120 범프 + 옵션 플래그 노출.
  • 0.121.11 (05-08): 신규 provider/파이프라인 지원.

6.5 실행

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에 가장 자연스럽게 녹는다.


7부. DeepTeam — 10줄로 시작하는 프레임워크 매핑 레드팀

평가 프레임워크 DeepEval을 만든 Confident AI(Jeffrey Ip)가 그 위에 올린 레드팀 프레임워크. Apache 2.0, Python 3.9–3.13. 공식 사이트 기준 120여 개 취약점(8개 카테고리), 20여 개 공격 벡터(싱글턴+멀티턴), 6개 이상 프레임워크 커버(초기 40여 개에서 빠르게 성장).

7.1 두 가지 셀링 포인트

  1. 10줄 이내 Python으로 시작. 레드팀할 시스템을 미리 정의할 필요도 없다 — "악의적 사용자도 네 시스템 구조 모르고 때린다"는 논리. model_callback만 정의하면 끝.
  2. 컴플라이언스 프레임워크 매핑이 1급 기능. OWASP Top 10 for LLMs 2025, OWASP_ASI_2026(에이전트용), NIST AI RMF, MITRE ATLAS, BeaverTails, Aegis를 객체로 호출. 프레임워크를 넘기면 vulnerabilities와 attacks를 자동으로 묶어준다.

7.2 vulnerabilities × attacks 분리

DeepTeam도 Promptfoo처럼 "무엇(취약점)"과 "어떻게(공격)"를 나눈다. 취약점은 bias(인종·성별·정치·종교), PII 유출, 독성, 잘못된 정보, SQL Injection, BFLA/BOLA/RBAC(권한) 등. 공격은 싱글턴(프롬프트 인젝션, Leetspeak, ROT-13, 수학 문제 인코딩)과 멀티턴(linear / tree / crescendo)으로 나뉜다. 프레임워크 객체를 쓰면 이 둘을 직접 고를 필요 없이 표준이 정의해준다(단, 프레임워크를 쓰면 vulnerabilities/attacks를 따로 넘길 수 없다).

assess()로 특정 취약점만 격리해 수정 효과를 측정하는 워크플로도 있다. 전체 평가에서 특정 카테고리 통과율이 낮으면, 그 부분만 떼어 스트레스 테스트한 뒤 고친다. 7종 프로덕션 가드레일도 들어 있어, 취약점 발견 후 입력/출력 보호까지 같은 생태계로 이어진다.

7.3 솔직한 한계

DeepTeam은 에이전트 위험을 모델 추론/응답 레벨에서만 본다. "이 LLM이 적대적 프롬프트·툴 오용·목표 조작 시도에 어떻게 응답하는가"는 보지만, 실제 런타임 모니터링·접근 제어·인프라 보안은 별도라고 문서가 명시한다. ASI 같은 에이전트 표준을 매핑은 하되, 프로덕션 에이전트 보안은 결국 전 계층 방어가 필요하다는 점을 분명히 한다.

7.4 실행

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 프레임워크 매핑이 필요한 컴플라이언스 맥락, 또는 최소 코드로 에이전트 표준 커버리지를 빠르게 깔 때.


8부. 한눈 비교표

항목GarakPyRITPromptfooDeepTeam
제작NVIDIAMicrosoftOpenAI(인수)Confident AI
라이선스Apache 2.0MITMITApache 2.0
스타(2026 상반기)~8k~3.6k~22k~1.3k(성장 중)
언어/런타임Python(CLI)Python(노트북/라이브러리)Node.js(YAML)Python
포지션광역 스캐너멀티턴 공격 엔진CI 회귀 게이트프레임워크 매핑
핵심 추상화probe/detectororchestrator/converter/scorer/memoryplugin/strategyvulnerabilities/attacks/framework
멀티턴GOAT(v0.15)강함(Crescendo/TAP)crescendo/GOAT/Hydra/treelinear/tree/crescendo
에이전트·간접인젝션Agent-breaker 프로브XPIAOrchestrator(강점)MCP/agent 타깃, evil-mcp-serverOWASP_ASI_2026
모달리티텍스트 중심텍스트·이미지·오디오·비디오텍스트 중심텍스트 중심
통계적 ASR부트스트랩 CI(v0.14.1)스코어러통과율pass rate
CI/CDJSON config(v0.14)wrapper 필요최고(네이티브)CLI/YAML
프레임워크 매핑부분ATLAS 계열OWASP/NIST/EUOWASP/NIST/MITRE/Aegis 등
진입장벽낮음높음낮음가장 낮음(10줄)

9부. 실전 — 같은 타깃에 4종을 kill-chain으로 물리기

도구를 하나 고르라는 글이 아니다. 침투 테스트의 정찰 → 익스플로잇 → 검증처럼, LLM 레드팀도 단계가 있다.

  1. 광역 정찰 — Garak. 프로덕션 챗봇 엔드포인트에 dan, encoding, promptinject, leakreplay를 20분 돌린다. "Base64 인코딩 입력이 입력 필터를 80% 통과", "promptinject 하이재킹 30%" 같은 무른 좌표가 ASR + 신뢰구간으로 나온다.
  2. 정밀 타격 — PyRIT. Garak이 찾은 무른 표면에 멀티턴을 건다. 컨버터 스택을 쌓고 Crescendo로 점진 에스컬레이션, XPIAOrchestrator로 RAG/툴 반환에 심은 간접 인젝션(ASI01/ASI06). 싱글턴으로 안 뚫리던 게 멀티턴에서 열린다. raw 로그로 공격 경로를 확보한다.
  3. 프레임워크 매핑 — DeepTeam. 발견 취약점을 OWASP LLM Top 10 / OWASP_ASI_2026 / NIST에 매핑해 감사용 리스크 평가로 정리. assess()로 수정 전후 통과율 비교.
  4. 회귀 게이트 — Promptfoo. 수정안 적용 후, 그 공격들을 Promptfoo 레드팀 스위트로 CI에 박아 모델/프롬프트가 바뀔 때마다 자동 재검증. 통과율 임계치로 머지를 막는다.

요약: Garak이 표면을 쓸고, PyRIT가 외과 수술을 하고, DeepTeam이 표준에 매핑하고, Promptfoo가 패치 회귀를 막는다. 이게 2026년식 LLM 레드팀 방법론의 한 형태다.


10부. 빠지기 쉬운 함정 4가지

  1. 모델 ≠ 배포 구성. 베이스 모델 스캔이 깨끗해도, SharePoint 커넥터·이메일·코드 인터프리터에 물리면 얘기가 다르다. mock 툴로 합성 데이터를 돌리는 테스트는 커버리지엔 좋지만 네 실제 커넥터를 검증하진 못한다. 진짜 사고는 그 갭에서 난다(실제 SharePoint 문서에 묻힌 XPIA를 mock이 재현하지 못하는 경우).
  2. 커버리지는 이진이 아니라 통계다. LLM 입력은 전부 열거할 수 없다. 10%만 성공하는 인젝션도 공격자가 대규모로 반복하면 실재하는 익스플로잇이다. Garak이 10회 발사 + 부트스트랩 CI를 보고하는 이유다. "한 번 막았다"로 안심 금지.
  3. 수정이 새 실패 모드를 만든다. 인젝션 우회를 막으려 시스템 프롬프트 수정·출력 필터·가드 모델·재학습을 넣으면, 각 개입이 또 다른 구멍을 연다. 원래 취약점을 찾는 것만큼 수정 자체를 테스트하는 게 중요하다. 그래서 레드팀은 일회성이 아니라 운영 규율이어야 한다 — 모델 업데이트·시스템 프롬프트 변경·새 툴 통합마다 취약점 프로파일이 바뀐다.
  4. LLM-as-judge도 채점 오류를 낸다. 미묘한 케이스를 LLM 디텍터/그레이더로 판정하면 false positive/negative가 생긴다. ASR 숫자를 맹신하지 말고, 크리티컬 카테고리는 raw 트랜스크립트를 직접 확인하라. 자동화는 사람의 판단을 대체하지 않고 규모를 준다.

여기에 마이크로소프트가 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). 그리고 무엇보다, 한 번 돌리고 끝내지 말 것. 모델이 바뀌고 프롬프트가 드리프트하고 공격 기법이 매주 진화한다. 레드팀은 프로젝트가 아니라 운영 규율이다.


참고 자료 (출처)

  • NVIDIA/garak — GitHub, PyPI(v0.15.0 2026-05-01, v0.14.1 2026-04-03), garak.ai, NeMo Guardrails 평가 문서
  • appsecsanta.com / toxsec.com — Garak·PyRIT·Promptfoo·DeepTeam 리뷰 및 "Nessus/Metasploit for LLMs"(2026-04~05)
  • Microsoft — "Securing Your AI Agents… PyRIT"(2026-04), 에이전트 실패 모드 택소노미 v2.0(2026-06-04), Azure AI Foundry AI Red Teaming Agent 문서; CyberScoop "Rampart & Clarity"(2026-05-21)
  • Cloud Security Alliance × OWASP AI Exchange — "Evaluating PyRIT for Agentic AI Red Teaming"(2026-06)
  • Promptfoo — 공식 문서/레드팀·멀티턴 전략 가이드, GitHub, OpenAI 인수 발표(2026-03-09)
  • DeepTeam(trydeepteam.com) — OWASP LLM Top 10 2025 / OWASP_ASI_2026 / 멀티턴 탈옥 분석 / 안전 프레임워크 가이드, confident-ai/deepteam GitHub
  • 공격 기법: Russinovich et al. "Crescendo"(USENIX Security 2025), Pavlova et al. "GOAT"(Meta, 2024)
  • 2026 모델 ASR/저항력: Claude Opus 4.5/4.7/4.8 시스템 카드 및 정리(Vellum, Digital Applied/webscraft), Repello AI "Claude Jailbreaking in 2026"(2026-03), ADVERSA 멀티턴 가드레일 열화 연구(arXiv, 2026-03)
  • 표준: OWASP LLM Top 10(2025), OWASP Top 10 for Agentic Applications(ASI, 2025-12-09 공개), MITRE ATLAS, NIST AI RMF / AI 600-1, EU AI Act
profile
이군의 보안, 그리고 생각을 다룹니다.

0개의 댓글