본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 28. 00:33

Augustus 실전 — Go 제작 OSS를 사용하여 자체 제작 LLM 앱의 프롬프트 인젝션 내성을 자동 검사하기

요약

LLM 애플리케이션의 주요 보안 위협인 프롬프트 인젝션 내성을 자동으로 검사할 수 있는 오픈소스 도구 Augustus 사용법을 소개합니다. Go 언어로 제작된 Augustus를 활용해 로컬 Ollama 모델을 대상으로 API 비용 없이 취약점 스캔을 수행하는 과정을 다룹니다.

핵심 포인트

  • Augustus는 210개 이상의 공격 프로브를 갖춘 Go 기반 LLM 취약점 스캐너입니다.
  • Ollama와 연동하여 API 키 없이 로컬 환경에서 안전하게 보안 테스트가 가능합니다.
  • 탈옥, 인코딩 회피, RAG 포이즈닝 등 다양한 공격 기법을 자동 스캔합니다.
  • 스캔 결과를 HTML/JSON 형식으로 출력하여 CI/CD 파이프라인에 통합할 수 있습니다.

LLM을 통합한 앱을 만들면 반드시 따라오는 것이 **프롬프트 인젝션 (Prompt Injection)**입니다. 사용자 입력이나 외부에서 가져온 텍스트(웹 페이지, PDF, 도구의 출력)에 섞여 들어간 악의적인 지시가 시스템 프롬프트를 덮어쓰거나, 본래 출력해서는 안 되는 정보를 내뱉게 만드는 공격입니다. OWASP의 Top 10 for LLM Applications에서도 프롬프트 인젝션(LLM01)은 최상위 위협으로 계속해서 꼽히고 있습니다.

문제는 "내 앱이 얼마나 버틸 수 있는지"를 수동으로 확인하는 것이 매우 힘들다는 점입니다. DAN 계열의 탈옥(Jailbreak), Base64 인코딩 회피, 데이터 추출…… 등 공격의 종류는 방대하며, 하나씩 직접 입력하며 테스트하는 것은 현실적이지 않습니다.

이 기사에서는 Praetorian이 공개한 OSS인 LLM 취약점 스캐너 Augustus를 사용하여, API 키가 필요 없는 로컬 Ollama 모델을 대상으로 프롬프트 인젝션 내성을 자동 스캔하는 과정을 직접 실행하며 알아봅니다.

  • Augustus가 어떤 도구인지, NVIDIA의 garak과는 무엇이 다른지

  • go install을 통한 첫 스캔까지의 최단 절차 - 로컬 LLM (Ollama)을 대상으로 API 과금 없이 공격 프로브(Probe)를 흘려보내는 방법

  • 스캔 결과(HTML / JSONL 리포트) 읽는 법과 CI에 통합할 때의 핵심 포인트

  • LLM을 앱에 통합하고 있으며, 보안 평가의 입구를 찾고 있는 분

  • 프롬프트 인젝션 대책의 "효과 측정"을 자동화하고 싶은 분

  • OS: macOS / Linux

  • Go: 1.25.3 이상 (Augustus 빌드에 필요)

  • Ollama: 로컬 LLM을 구동할 경우 (임의 사항 · API 키 없이 테스트하기 위해 사용)

  • Augustus는 **210개 이상의 공격 프로브(Probe), 28개의 LLM 프로바이더(Provider), 90개 이상의 디텍터(Detector)**를 갖춘 Go 제작 LLM 취약점 스캐너(Apache 2.0)입니다. - NVIDIA의 garak에서 영감을 받은 **Go 네이티브 재구현(Re-implementation)**으로, 단일 바이너리로 동작하는 것이 강점입니다. - go install 한 번으로 설치할 수 있으며, augustus scan <provider> --probe <probe> --detector <detector>로 스캔할 수 있습니다. - Ollama를 사용하면 API 키 없이·과금 제로로 로컬 모델에 모든 프로브를 실행할 수 있으므로, 우선 여기서부터 테스트하는 것이 안전합니다. - 출력 형식은 table / JSON / JSONL / HTML입니다. HTML 리포트를 CI의 아티팩트(Artifact)로 남기면 회귀 탐지(Regression Detection)에 사용할 수 있습니다.

Augustus는 LLM에 대한 적대적 공격(프롬프트 인젝션, 탈옥, 데이터 추출 등)을 자동으로 테스트하는 취약점 스캐너입니다. Praetorian의 발표 기사에 따르면 주요 사양은 다음과 같습니다.

항목내용
라이선스Apache 2.0
...

공격 기법의 커버리지도 넓어, DAN (v11.0까지) · AIM · Grandma exploit 등의 탈옥(Jailbreak), Base64 · ROT13 · 모스 부호 · leet speak와 같은 16종 이상의 인코딩 회피, GCG · AutoDAN · PAIR · TAP 등의 최적화 계열 공격, RAG 포이즈닝(Poisoning)이나 컨텍스트 오버플로우(Context Overflow)까지 포함됩니다 (GitHub README 기준).

"LLM 취약점 스캐너"라고 하면 NVIDIA의 garak을 떠올리는 분들이 많을 것입니다. Augustus는 garak에서 영감을 받은 Go 네이티브 재구현이라고 공식적으로 정의되어 있으며, README에서는 **210개 이상의 프로브 (garak은 160개 이상)**로 프로브 수에서는 앞서는 반면, **대응 프로바이더는 28개 (garak은 35개 이상)**로 다소 적다고 설명하고 있습니다.

실무상의 가장 큰 차이는 배포의 용이성입니다. garak은 Python 제작으로 런타임과 의존성 해결이 필요하지만, Augustus는 Go의 단일 바이너리이므로 go install로 설치할 수 있으며, CI 이미지에 바이너리를 하나 두는 것만으로 동작합니다. 프로브(Probe) / 디텍터(Detector) / Buff(입력 변환)라는 설계 사상은 garak에서 유래했으므로, garak을 다뤄본 적이 있다면 개념은 그대로 통용됩니다.

Go 1.25.3 이상이 설치되어 있다면, go install 명령 한 번으로 충분합니다.

go install github.com/praetorian-inc/augustus/cmd/augustus@latest

소스에서 빌드하는 경우는 다음과 같습니다.

git clone https://github.com/praetorian-inc/augustus.git
cd augustus
make build

도입이 완료되었다면, 사용 가능한 프로브 (Probe)와 디텍터 (Detector) 목록을 확인합니다.

augustus list

여기서 "어떤 공격들이 준비되어 있는지"를 대략적으로 살펴두면, 나중에 스캔 대상을 좁힐 때 도움이 됩니다.

갑자기 실제 운영 중인 OpenAI / Anthropic API에 모든 프로브를 쏟아부으면, 과금과 속도 제한 (Rate Limit)이 걱정될 것입니다. 먼저 API 키가 필요 없고 과금이 발생하지 않는 로컬 LLM으로 테스트하는 것이 안전합니다. Ollama를 사용하여 작은 모델을 준비합니다.

# Ollama에 경량 모델 가져오기
ollama pull llama3.2:3b

그다음, Augustus를 통해 Ollama의 채팅 제네레이터 (Chat Generator)에 모든 프로브를 흘려보냅니다.

augustus scan ollama.OllamaChat \
--all \
--config '{"model":"llama3.2:3b"}'

--all은 모든 프로브를 실행하는 플래그입니다. 처음에는 시간이 오래 걸리므로, 특정 공격 카테고리만 테스트하고 싶을 때는 단일 프로브를 지정합니다.

augustus scan ollama.OllamaChat \
--probe dan.Dan_11_0 \
--detector dan.DAN \
...

<provider>.<Generator><probe-family>.<Probe>의 조합으로 대상을 지정한다는 형식을 파악하면 응용이 가능합니다.

--config에 전달하는 JSON 키는 프로바이더 (Provider)마다 다릅니다. augustus list의 출력 결과나 프로바이더의 문서를 통해 모델명 지정 방법을 확인한 후 실행하세요.

여러 공격 패밀리 (Attack Family)를 한꺼번에 실행하고 싶을 때는 glob 패턴을 사용할 수 있습니다.

augustus scan ollama.OllamaChat \
--probes-glob "dan.*,goodside.*,grandma.*" \
--detectors-glob "*" \
...

결과는 기본적으로 터미널에 테이블 (Table) 형태로 표시되지만, 리포트를 파일로 남김으로써 나중에 차이점을 추적할 수 있습니다. JSONL과 함께 HTML 리포트를 출력해 보겠습니다.

augustus scan ollama.OllamaChat \
--all \
--config '{"model":"llama3.2:3b"}' \
...

--output으로 기계 판독이 가능한 JSONL을, --html로 사람이 읽을 수 있는 리포트를 동시에 얻을 수 있습니다. JSONL은 "어떤 프로브에서, 어떤 디텍터가, 몇 건 히트했는지"를 한 줄씩 가지고 있으므로, CI (지속적 통합)에서 집계하여 임계값 판정을 내리기에 적합합니다.

로컬에서 동작을 확인했다면, 실제 API로 향합니다. OpenAI를 대상으로 하는 예시입니다 (API 키는 환경 변수로 전달합니다).

export OPENAI_API_KEY="sk-..."
augustus scan openai.OpenAI \
--probe dan.Dan_11_0 \
...

운영 API에 --all을 실행하면, 수백 개의 프로브 × 여러 번의 생성으로 인해 API 비용과 속도 제한에 직격탄을 맞게 됩니다. 처음에는 단일 프로브나 glob으로 범위를 좁혀 비용 감각을 익힌 후 확장하세요. 스캔 대상은 반드시 본인이 관리하거나 허가를 받은 엔드포인트 (Endpoint)로 한정해야 합니다.

Augustus가 보여주는 것은 "어떤 공격에 대해, 어느 정도 뚫렸는가"라는 공격 성공률입니다. 점수가 높은 카테고리는 애플리케이션 측의 방어를 강화해야 할 우선순위가 높다는 신호가 됩니다. 구체적으로는 다음과 같은 대책과 조합합니다.

  • 입력/출력 필터링 (Input/Output Filtering): 위험한 패턴을 탐지하여 차단하는 계층을 모델의 앞단과 뒷단에 배치합니다.
  • 시스템 프롬프트 (System Prompt) 강화: 역할과 금지 사항을 명시하고, 외부 텍스트를 '데이터'로 취급하도록 지시합니다.
  • 도구 권한 최소화 (Minimizing Tool Permissions): 에이전트가 도구를 호출할 수 있는 경우, 프롬프트 인젝션 (Prompt Injection)을 통한 도구 악용을 가정하여 권한을 제한합니다 (OWASP에서도 에이전트 문맥의 최우선 리스크로 분류함).

그리고 중요한 것은, Augustus를 일회성으로 끝내지 않는 것입니다. HTML / JSONL 리포트를 CI (지속적 통합)의 아티팩트 (Artifact)로 저장하고, 프롬프트나 모델을 변경할 때마다 스캔을 실행하면, "대책을 세운 후 실제로 점수가 낮아졌는지", "모델을 교체했을 때 내성이 떨어지지는 않았는지"를 회귀 테스트 (Regression Test)로서 지속적으로 확인할 수 있습니다.

모든 프로브 (Probe)를 스캔하는 것은 시간이 걸리기 때문에, CI에서는 PR (Pull Request)마다 대표적인 프로브의 glob을 실행하고, 야간 작업 (Nightly Job)으로

--all

을 실행하는 식의 이단계 접근 방식이 현실적입니다.

go install이 에러가 발생하는 경우, 먼저 Go 버전을 확인하십시오. Augustus는 Go 1.25.3 이후 버전을 요구합니다 (README 기재). 오래된 Go 버전에서는 빌드가 되지 않습니다.

프로바이더 (Provider)마다 --config의 JSON 키가 다릅니다. Ollama에서는 {"model":"llama3.2:3b"}와 같이 모델명을 전달하지만, 다른 프로바이더에서는 다른 키가 필요할 수 있습니다. augustus list의 출력을 확인한 후 지정하십시오.

Augustus는 garak의 설계 사상을 Go의 단일 바이너리 (Single Binary)로 구현한 LLM 취약점 스캐너입니다. go install로 설치하여 즉시 사용할 수 있습니다.
Ollama를 사용하면 API 키 없이, 비용 발생 없이 모든 프로브를 테스트할 수 있으므로, 우선 로컬에서 동작을 파악하는 것이 안전한 시작점입니다.
JSONL / HTML 리포트를 CI에 남겨, 프롬프트나 모델을 변경할 때마다 실행하는 회귀 테스트로 활용함으로써 프롬프트 인젝션 대책의 효과를 지속적으로 측정할 수 있습니다.

"대책을 세웠다고 생각하는 것"에서 멈추지 않고, 공격을 자동으로 투입하여 수치로 확인하는 것 —— 그 입구로서 Augustus는 간편한 선택지입니다.

  • Augustus — GitHub 리포지토리 — 설치, CLI 사용 예시, garak와의 비교
  • Introducing Augustus: Open Source LLM Prompt Injection Tool — Praetorian — 스펙, 공격 커버리지 (Attack Coverage)
  • NVIDIA garak — Augustus의 영감이 된 Python 기반 스캐너
  • OWASP Top 10 for LLM Applications — 프롬프트 인젝션 (LLM01)의 위치

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0