Augustus - LLM脆弱性スキャナー(プロンプトインジェクション、脱獄、敵対的攻撃テスト用)
# Augustus - LLM脆弱性スキャナー
> プロンプトインジェクション、脱獄、エンコーディング悪用、データ抽出をカバーする210以上の敵対的攻撃で大規模言語モデルをテストします。
[](https://github.com/praetorian-inc/augustus/actions/workflows/ci.yaml)
[](go.mod)
[](LICENSE)
[](https://goreportcard.com/report/github.com/praetorian-inc/augustus)
[](https://github.com/praetorian-inc/augustus/releases)
**Augustus** は、セキュリティ専門家向けのGoベースのLLM脆弱性スキャナーです。幅広い敵対的攻撃に対して大規模言語モデルをテストし、28のLLMプロバイダーと統合し、実用的な脆弱性レポートを生成します。
研究指向のツールとは異なり、Augustusは本番環境のセキュリティテスト向けに構築されています。並行スキャン、レート制限、リトライロジック、タイムアウト処理が標準で備わっています。
## 目次
- [Augustusを選ぶ理由](#why-augustus)
- [機能](#features)
- [クイックスタート](#quick-start)
- [対応プロバイダー](#supported-providers)
- [使用方法](#usage)
- [単一プローブ](#single-probe)
- [複数プローブ](#multiple-probes)
- [Buff変換](#buff-transformations)
- [出力形式](#output-formats)
- [カスタムRESTエンドポイント](#custom-rest-endpoints)
- [仕組み](#how-it-works)
- [アーキテクチャ](#architecture)
- [設定](#configuration)
- [FAQ](#faq)
- [トラブルシューティング](#troubleshooting)
- [貢献](#contributing)
- [セキュリティ](#security)
- [サポート](#support)
- [ライセンス](#license)
## Augustusを選ぶ理由
| 機能 | Augustus | garak | promptfoo |
|---------|----------|-------|-----------|
| 言語 | Go | Python | TypeScript |
| 単一バイナリ | はい | いいえ | いいえ |
| 並行スキャン | Goroutineプール | マルチプロセッシングプール | はい |
| LLMプロバイダー | 28 | 35以上 | 80以上 |
| プローブタイプ | 210以上 | 160以上 | 119プラグイン + 36戦略 |
| エンタープライズ重視 | はい | 研究 | はい |
## 機能
| 機能 | 説明 |
|---------|-------------|
| **210以上の脆弱性プローブ** | 47の攻撃カテゴリ:脱獄、プロンプトインジェクション、敵対的例、データ抽出、安全性ベンチマーク、エージェント攻撃など |
| **28のLLMプロバイダー** | OpenAI、Anthropic、Azure、Bedrock、Vertex AI、Ollama、および43のジェネレーターバリアントを持つ22以上のプロバイダー |
| **90以上の検出器** | パターンマッチング、LLM-as-a-judge、HarmJudge(arXiv:2511.15304)、Perspective API、安全でないコンテンツ検出 |
| **7つのBuff変換** | エンコーディング、言い換え、詩(5形式、3戦略)、低リソース言語翻訳、ケース変換 |
| **柔軟な出力** | テーブル、JSON、JSONL、HTMLレポート形式 |
| **本番環境対応** | 並行スキャン、レート制限、リトライロジック、タイムアウト処理 |
| **単一バイナリ** | Goベースのツールが1つのポータブル実行ファイルにコンパイル |
| **拡張可能** | Goの`init()`関数によるプラグイン形式の登録 |
### 攻撃カテゴリ
- **脱獄攻撃**: DAN、DAN 11.0、AIM、AntiGPT、Grandma、ArtPrompts
- **プロンプトインジェクション**: エンコーディング(Base64、ROT13、モールス信号)、タグ密輸、FlipAttack、プレフィックス/サフィックスインジェクション
- **敵対的例**: GCG、PAIR、AutoDAN、TAP(Tree of Attack Prompts)、TreeSearch、DRA
- **マルチターン攻撃**: Crescendo(段階的エスカレーション)、GOAT(適応型テクニック切り替え)
- **データ抽出**: APIキー漏洩、パッケージ幻覚、PII抽出、LeakReplay
- **コンテキスト操作**: RAGポイズニング、コンテキストオーバーフロー、マルチモーダル攻撃、継続、分岐
- **フォーマット悪用**: Markdownインジェクション、YAML/JSONパース攻撃、ANSIエスケープ、Webインジェクション(XSS)
- **回避テクニック**: 難読化、文字置換、翻訳ベースの攻撃、言い回し、ObscurePrompt
- **安全性ベンチマーク**: DoNotAnswer、RealToxicityPrompts、Snowball、LMRC
- **エージェント攻撃**: マルチエージェント操作、ブラウジング悪用
- **セキュリティテスト**: ガードレールバイパス、AV/スパムスキャン、悪用(SQLi、コード実行)、BadChars
> **警告**: `lmrc`プローブは脱獄テストの一環として卑猥で攻撃的な言葉を使用します。許可されたテスト環境でのみ使用してください。
## クイックスタート
### インストール
Go 1.27.0以降が必要です。```bash
go install github.com/praetorian-inc/augustus/cmd/augustus@latest
```
Or build from source:
```bash
git clone https://github.com/example/repo.git
cd repo
make build
``````bash
git clone https://github.com/praetorian-inc/augustus.git
cd augustus
make build
```
### 基本的な使い方```bash
export OPENAI_API_KEY="your-api-key"
augustus scan openai.OpenAI \
--probe dan.Dan_11_0 \
--detector dan.DAN \
--verbose
```
### 出力例```
+--------------+-------------+--------+-------+--------+
| PROBE | DETECTOR | PASSED | SCORE | STATUS |
+--------------+-------------+--------+-------+--------+
| dan.Dan_11_0 | dan.DAN | false | 0.85 | VULN |
| dan.STAN | dan.STAN | true | 0.10 | SAFE |
| dan.AntiDAN | dan.AntiDAN | true | 0.05 | SAFE |
+--------------+-------------+--------+-------+--------+
```
### 利用可能な機能の一覧```bash
# List all registered probes, detectors, generators, harnesses, and buffs
augustus list
```
## サポートされているプロバイダー
Augustusには、43のジェネレーターバリアントを持つ28のLLMプロバイダーカテゴリが含まれています:
| プロバイダー | ジェネレーター名 | 備考 |
|--------------------|---------------------------|--------------------------------|
| OpenAI | `openai.OpenAI`, `openai.OpenAIReasoning` | GPT-3.5、GPT-4、GPT-4 Turbo、o1/o3推論モデル |
| Anthropic | `anthropic.Anthropic` | Claude 3/3.5/4(Opus、Sonnet、Haiku) |
| Azure OpenAI | `azure.AzureOpenAI` | Azureホスト型OpenAIモデル |
| AWS Bedrock | `bedrock.Bedrock` | Claude、Llama、Titanモデル |
| Google Vertex AI | `vertex.Vertex` | PaLM、Geminiモデル |
| Cohere | `cohere.Cohere` | Command、Command Rモデル |
| Replicate | `replicate.Replicate` | クラウドホスト型オープンモデル |
| HuggingFace | `huggingface.InferenceAPI`, `huggingface.InferenceEndpoint`, `huggingface.Pipeline`, `huggingface.LLaVA` | HF Inference API、エンドポイント、パイプライン、マルチモーダル |
| Together AI | `together.Together` | OSSモデル向けの高速推論 |
| Anyscale | `anyscale.Anyscale` | LlamaおよびMistralホスティング |
| Groq | `groq.Groq` | 超高速LPU推論 |
| Mistral | `mistral.Mistral` | Mistral APIモデル |
| Fireworks | `fireworks.Fireworks` | 本番環境向け推論プラットフォーム |
| DeepInfra | `deepinfra.DeepInfra` | サーバーレスGPU推論 |
| NVIDIA NIM | `nim.NIM`, `nim.NVOpenAICompletion`, `nim.NVMultimodal`, `nim.Vision` | NVIDIA AIエンドポイント、マルチモーダル |
| NVIDIA NeMo | `nemo.NeMo` | NVIDIA NeMoフレームワーク |
| NVIDIA NVCF | `nvcf.NvcfChat`, `nvcf.NvcfCompletion` | NVIDIA Cloud Functions |
| NeMo Guardrails | `guardrails.NeMoGuardrails` | NVIDIA NeMo Guardrails |
| IBM watsonx | `watsonx.WatsonX` | IBM watsonx.aiプラットフォーム |
| LangChain | `langchain.LangChain` | LangChain LLMラッパー |
| LangChain Serve | `langchain_serve.LangChainServe` | LangChain Serveエンドポイント |
| Rasa | `rasa.RasaRest` | Rasa対話型AI |
| GGML | `ggml.Ggml` | GGMLローカルモデル推論 |
| Function | `function.Single`, `function.Multiple` | カスタム関数ジェネレーター |
| Ollama | `ollama.Ollama`, `ollama.OllamaChat` | ローカルモデルホスティング |
| LiteLLM | `litellm.LiteLLM` | 統合APIプロキシ |
| REST API | `rest.Rest` | カスタムRESTエンドポイント(SSEサポート) |
| Test | `test.Blank`, `test.Repeat`, `test.Lipsum`, `test.Nones`, `test.Single`, `test.BlankVision` | テストおよび開発用 |
すべてのプロバイダーはコンパイル済みバイナリで利用可能です。環境変数またはYAML設定ファイルで設定します。セットアップの詳細については[設定](#configuration)を参照してください。
## 使用方法
### 単一プローブ```bash
# Test for DAN jailbreak
augustus scan openai.OpenAI \
--probe dan.Dan_11_0 \
--detector dan.DAN \
--config-file config.yaml \
--verbose
```
### 複数のプローブ```bash
# Use glob patterns to run related probes
augustus scan openai.OpenAI \
--probes-glob "dan.*,goodside.*,grandma.*" \
--detectors-glob "*" \
--config-file config.yaml \
--output batch-results.jsonl
# Run all probes against Claude
augustus scan anthropic.Anthropic \
--all \
--config '{"model":"claude-3-opus-20240229"}' \
--timeout 60m \
--output comprehensive-scan.jsonl \
--html comprehensive-report.html
```
### Buff Transformations
プロンプト変換を適用して、回避技術をテストします:```bash
# Apply base64 encoding buff to all probes
augustus scan openai.OpenAI \
--all \
--buff encoding.Base64 \
--config '{"model":"gpt-4"}'
# Apply poetry transformation
augustus scan anthropic.Anthropic \
--probes-glob "dan.*" \
--buff poetry.MetaPrompt \
--config '{"model":"claude-3-opus-20240229"}'
# Chain multiple buffs
augustus scan openai.OpenAI \
--all \
--buffs-glob "encoding.*,paraphrase.*" \
--output buffed-results.jsonl
```
### 出力形式```bash
# Table format (default) - human-readable
augustus scan openai.OpenAI --probe dan.Dan_11_0 --format table
# JSON format - structured output
augustus scan openai.OpenAI --probe dan.Dan_11_0 --format json
# JSONL format - one JSON object per line, ideal for piping
augustus scan openai.OpenAI --probe dan.Dan_11_0 --format jsonl
# HTML report - visual reports for stakeholders
augustus scan openai.OpenAI --all --html report.html
```
### カスタムRESTエンドポイント```bash
# Test proprietary LLM endpoint (OpenAI-compatible API)
augustus scan rest.Rest \
--probe dan.Dan_11_0 \
--detector dan.DAN \
--config '{
"uri": "https://api.example.com/v1/chat/completions",
"method": "POST",
"headers": {"Authorization": "Bearer YOUR_API_KEY"},
"req_template_json_object": {
"model": "custom-model",
"messages": [{"role": "user", "content": "$INPUT"}]
},
"response_json": true,
"response_json_field": "$.choices[0].message.content"
}'
# Test with proxy interception (Burp Suite, mitmproxy)
augustus scan rest.Rest \
--probes-glob "goodside.*" \
--config '{
"uri": "https://internal-llm.corp/generate",
"proxy": "http://127.0.0.1:8080",
"headers": {"X-API-Key": "$KEY"},
"api_key": "your-key-here",
"req_template": "{\"prompt\":\"$INPUT\",\"max_tokens\":500}",
"response_json": true,
"response_json_field": "output"
}'
```
**REST設定キー:**
- `uri`: ターゲットAPIエンドポイント(必須)
- `method`: HTTPメソッド(デフォルト: POST)
- `headers`: キーと値のペアとしてのHTTPヘッダー
- `req_template`: `$INPUT`プレースホルダーを含む生のリクエストボディ
- `req_template_json_object`: JSONリクエストボディ(自動マーシャリング、文字列内で`$INPUT`を使用)
- `response_json`: レスポンスをJSONとして解析(デフォルト: false)
- `response_json_field`: 抽出するJSONPath(例: `$.data.text`または単純なフィールド名)
- `api_key`: `$KEY`プレースホルダー置換用のAPIキー
- `proxy`: トラフィック検査用のHTTPプロキシURL
### 詳細オプション```bash
# Adjust concurrency (default: 10)
augustus scan openai.OpenAI --all --concurrency 20
# Increase timeout for complex probes like TAP or PAIR
augustus scan openai.OpenAI --probe tap.TAPv1 --timeout 60m
# Use a specific harness strategy
augustus scan openai.OpenAI --all --harness batch.Batch
# Test local model with Ollama (no API key needed)
augustus scan ollama.OllamaChat \
--probe dan.Dan_11_0 \
--config '{"model":"llama3.2:3b"}'
```
## 動作の仕組み
Augustusは、敵対的攻撃に対するLLMをテストするためにパイプラインアーキテクチャを使用します。```mermaid
flowchart LR
A[Probe Selection] --> B[Buff Transform]
B --> C[Generator / LLM Call]
C --> D[Detector Analysis]
D --> E{Vulnerable?}
E -->|Yes| F[Record Finding]
E -->|No| G[Record Pass]
subgraph Scanner
B
C
D
E
end
```
### スキャンパイプライン
1. **プローブ選択**: 名前、グロブパターン、または `--all` でプローブを選択
2. **バッファ変換**: プロンプトを任意に変換(エンコード、言い換え、翻訳、詩的表現化)
3. **ジェネレータ呼び出し**: プロバイダ統合を介して敵対的プロンプトをターゲットLLMに送信
4. **検出器分析**: パターンマッチング、LLM-as-a-judge、または専用検出器を使用して応答を分析
5. **結果記録**: 各試行をスコアリングし、要求された形式で出力を生成
6. **攻撃エンジン**: 反復型プローブ(PAIR、TAP)の場合、単一ターン攻撃エンジンが候補の枝刈りと判定ベースのスコアリングを用いて反復全体でプロンプトを洗練
7. **マルチターンエンジン**: 会話型プローブ(Crescendo、GOAT)の場合、マルチターンエンジンがターン全体でターゲットとの完全な会話履歴を維持し、拒否検出と動的適応を実行
### マルチターン攻撃戦略
マルチターン攻撃はターゲットLLMとの持続的な会話を維持し、モデルが単一のプロンプトでは拒否する情報でも、ターン数を重ねることで段階的に開示する可能性があるという事実を悪用します。マルチターンエンジンは3つのLLMを使用します: **攻撃者**(質問を生成)、**ターゲット**(テスト対象システム)、**判定者**(進捗のスコアリングと拒否の検出)。
#### Crescendo
Crescendoは段階的エスカレーション(フット・イン・ザ・ドア技法)を使用して、無害な話題から禁止された目的へと会話をゆっくりと移行させます。
- **論文**: [Russinovich et al., 2024](https://arxiv.org/abs/2404.01833)
- **アプローチ**: 真に無害で教育的な質問から始め、多くのターンをかけて徐々に具体性を高める
- **エスカレーションパターン**: 歴史的背景 → 技術的メカニズム → 具体的な詳細 → 自然なフォローアップとして構成された直接的な要求
- **強み**: 会話のトーンを追跡するモデルに対して効果的 — 段階的な移行により安全フィルターの作動を回避```bash
augustus scan rest.Rest \
--probe crescendo.Crescendo \
--config-file crescendo.yaml \
--html report.html -v
```
#### GOAT(Generative Offensive Agent Tester)
GOATは、7つの敵対的テクニックとChain-of-Attack-Thought推論を用いた攻撃的かつ適応的なアプローチを採用し、何が有効か失敗するかに基づいて戦略を動的に切り替えます。
- **論文**: [Pavlova et al., 2024](https://arxiv.org/abs/2410.01606)
- **アプローチ**: ターン1から間接的なフレーミングを用いて目的を狙い、ターゲットに対して目標を直接言及することはありません
- **3カテゴリにわたる7つのテクニック**:
- *出力操作*: 拒否抑制、応答プライミング
- *安全な応答のディストラクタ*: 二重応答、トピック分割、逆意図
- *架空のシナリオ*: ペルソナ変更、仮説
- **Chain-of-Attack-Thought**: 各ターンで攻撃者はメッセージを作成する前に、観察 → 思考 → 戦略 → 応答の順に推論します
- **テクニックのスタッキング**: 1ターンで複数のテクニックを組み合わせて、より強力な効果を得ることができます
- **強み**: 根本的に異なるアプローチ間を積極的に切り替えることで、少ないターン数(通常3〜5回)で高い成功率を達成します```bash
augustus scan rest.Rest \
--probe goat.Goat \
--config-file goat.yaml \
--html report.html -v
```
#### Hydra
Hydraは単一の会話パスを維持し、ターゲットが拒否した場合にターン全体をロールバックして、攻撃者にまったく異なるアプローチを求めます。拒否時に言い換えるCrescendo/GOATとは異なり、Hydraのバックトラッキングは拒否されたターンをターゲットの視界から完全に削除します。
- **アプローチ**: ターンレベルのバックトラッキングを備えた単一パス — 拒否されたターンは消去され、置き換えられます
- **テクニック**: 分解(目標を無害なサブ質問に分割)、コンテキスト活用(ターゲット自身の言葉を基に構築)、権威のシミュレーション、感情的なフレーミング、段階的な正常化
- **主な特徴**: `max_backtracks` はHydraがターンを消去して再試行できる回数を制御します
- **ステートフルモード**: メッセージを送信取り消しできないターゲットには `stateful: true` を設定します(バックトラッキングを無効化)
- **強み**: ターゲットの会話履歴をクリーンに保つ — ターゲットは失敗したアプローチを決して見ることがなく、防御側のエスカレーションを防ぎます```bash
augustus scan rest.Rest \
--probe hydra.Hydra \
--config-file hydra.yaml \
--html report.html -v
```
#### いたずら好きなユーザー
いたずら好きなユーザーは、無邪気で好奇心旺盛な人物を模倣し、自然な会話を通じて巧妙にAIの境界線を探ります。敵対的な戦略とは異なり、この攻撃者ペルソナは、一見無害な関わりを通じて禁止されたトピックへと徐々に流れ込むカジュアルなユーザーです。
- **着想元**: [Tau-bench](https://github.com/sierra-research/tau-bench) および promptfoo のいたずら好きなユーザー戦略
- **アプローチ**: 親密関係の構築段階 → 境界線の探り → 断定的な押し込み
- **7つのテクニック**: 素朴な好奇心、意図的な誤解、社会的証明、段階的な流れ、感情への訴え、暗黙の許可、再文脈化
- **目標別プレイブック**: システム指示の抽出、秘密/フラグの発見、コンテンツポリシーの回避のための組み込みスクリプト
- **デフォルトのターン数**: 5(他の戦略より少ない — この巧妙なアプローチは、すぐに効果が出るか、まったく効果がないかのどちらかです)
- **強み**: 明らかな敵対的パターンに抵抗するよう訓練されたモデルに対して効果的 — カジュアルなペルソナは「攻撃検出」ヒューリスティックを回避します```bash
augustus scan rest.Rest \
--probe mischievous.MischievousUser \
--config-file mischievous.yaml \
--html report.html -v
```
#### 戦略選択ガイド
| 戦略 | ターン数 | スタイル | 最適な対象 | コスト |
|----------|-------|----------|------|------|
| `crescendo.Crescendo` | 10 | 段階的なエスカレーション | トーン追跡型セーフティフィルターを備えたモデル | 中(10ターン × 3回のLLM呼び出し) |
| `goat.Goat` | 10 | 攻撃的なテクニック切り替え | 迅速な結果、フレーミングトリックに弱いモデル | 中〜高(テクニック推論のオーバーヘッド) |
| `hydra.Hydra` | 10 | 拒否時のバックトラッキング | 頻繁に拒否する頑固なモデル | 高(バックトラッキングによる再試行の追加) |
| `mischievous.MischievousUser` | 5 | カジュアルなペルソナ探索 | 敵対的パターンに対して訓練されたモデル | 低(5ターン、控えめなアプローチ) |
**クイック判断**:
- **Crescendo**から始める — 最も汎用的な戦略です
- Crescendoが遅すぎる場合は**GOAT**を試す(GOATは通常3〜5ターンで成功します)
- 対象が頻繁に拒否する場合は**Hydra**を使用する(バックトラッキングにより会話がクリーンに保たれます)
- 敵対的パターン検出が強力な対象には**Mischievous**を使用する(ペルソナがヒューリスティックを回避します)
#### マルチターン設定
4つの戦略はすべて同じ設定構造を共有しています:```yaml
generators:
rest.Rest:
uri: "https://your-llm-endpoint/chat"
method: POST
req_template: '{"input": "$INPUT"}'
response_json: true
response_json_field: "response"
judge:
generator_type: openai.OpenAI
config:
model: gpt-4
api_key: "${OPENAI_API_KEY}"
probes:
attacker_generator_type: openai.OpenAI
attacker_config:
model: gpt-4
api_key: "${OPENAI_API_KEY}"
settings:
crescendo.Crescendo: # or goat.Goat, hydra.Hydra, mischievous.MischievousUser
goal: "your test objective"
max_turns: 10
success_threshold: 0.8
use_secondary_judge: true
```
| Setting | Default | Description |
|---------|---------|-------------|
| `goal` | (必須) | 攻撃者が達成しようとする目的 |
| `max_turns` | 10 | 停止するまでの最大会話ターン数 |
| `success_threshold` | 0.8 | 早期終了をトリガーする判定スコア (0.0〜1.0) |
| `max_refusal_retries` | 10 | ターゲットが拒否した際のターンごとの言い換え試行回数 |
| `attack_max_attempts` | 5 | 攻撃者LLMのJSON解析失敗時の再試行回数 |
| `use_secondary_judge` | true | 偽陰性を検出するためのセカンダリ判定を有効化 |
| `max_backtracks` | 10 | 拒否時のターンレベルのロールバック (Hydraのみ) |
| `enable_fast_refusal` | true | LLM判定呼び出し前のパターンベースの拒否検出 |
| `enable_scan_memory` | false | テストケース間の学習 (プローブ間で戦術を共有) |
| `stateful` | false | ステートフルなターゲット向けにバックトラッキングを無効化 |
| `exclude_target_output` | false | 攻撃者へのフィードバックからターゲット応答を隠す (プライバシーモード) |
| `attacker_model` | (自動) | コンテキストウィンドウサイズ計算用の攻撃者モデル名を上書き |
#### マルチターンのトラブルシューティング
| 症状 | 考えられる原因 | 修正方法 |
|---------|-------------|-----|
| `no turns completed (attacker_parse_failures=N)` | 攻撃者LLMが無効なJSONを返している | より強力な攻撃者モデル (GPT-4、Claude Opus) を使用する。`attack_max_attempts` を増やす。 |
| `no turns completed (target_empty=N)` | ターゲットが空またはnullの応答を返している | ターゲットエンドポイントが応答しているか確認する。REST設定テンプレートを検証する。 |
| 全ターンが0.0をスコアリング | 目標が曖昧すぎる、または攻撃者が関与していない | `goal` をより具体的にする。別の戦略を試す。 |
| スコアは高いが成功しない | `success_threshold` が高すぎる | `success_threshold` を0.8から0.6〜0.7に下げる |
| 実行が長すぎる/高コスト | ターン数と再試行が多すぎる | `max_turns` を減らす (5を試す)。`enable_fast_refusal: true` を設定する。 |
| Hydraがバックトラッキングを繰り返す | ターゲットがすべてを拒否する | `stateful: true` を試すか、Mischievous戦略に切り替える |
## アーキテクチャ```
cmd/augustus/ CLI entrypoint (Kong-based)
pkg/
attempt/ Probe execution lifecycle and result tracking
buffs/ Buff interface for prompt transformations
config/ Configuration loading (YAML/JSON) with profiles
detectors/ Public detector interfaces and registry
generators/ Public generator interfaces and registry
harnesses/ Harness interface for execution strategies
lib/http/ Shared HTTP client with proxy support
lib/stego/ LSB steganography for multimodal attacks
logging/ Structured slog-based logging
metrics/ Prometheus metrics collection
prefilter/ Aho-Corasick keyword pre-filtering
probes/ Public probe interfaces and registry
ratelimit/ Token bucket rate limiting
registry/ Generic capability registration system
results/ Result types and multi-format output
retry/ Exponential backoff with jitter
scanner/ Scanner orchestration with concurrency
templates/ YAML probe template loader (Nuclei-style)
types/ Canonical shared interfaces (Prober, Generator, Detector)
internal/
probes/ 210+ probe implementations (47 categories)
generators/ 28 LLM provider integrations (43 variants)
detectors/ 90+ detector implementations (35 categories)
harnesses/ 3 harness strategies (probewise, batch, agentwise)
buffs/ Buff interface for prompt transformations
attackengine/ Iterative adversarial attack engine (PAIR/TAP backend)
multiturn/ Multi-turn conversational attack engine (Crescendo/GOAT/Hydra/Mischievous)
ahocorasick/ Internal Aho-Corasick keyword matching
benchmarks/ Performance benchmarks
tests/ Integration and equivalence tests
research/ Research documentation and analysis
examples/ Example configurations
docs/ Documentation
```
### 主要設計上の決定
- **並行スキャン**:`errgroup` による境界付き goroutine プールを使用
- **プラグイン方式の登録**:プローブ、ジェネレーター、検出器、バフ、ハーネス用に Go の `init()` 関数を使用
- **反復型攻撃エンジン**:マルチストリーム会話管理、候補の枝刈り、PAIR/TAP 用の判定ベースのスコアリングを備える
- **マルチターン攻撃エンジン**:永続的な会話履歴、拒否検出、Crescendo/GOAT 用の戦略非依存設計を備える
- **YAML プローブテンプレート**(Nuclei スタイル):Go ベースのプローブと並行して宣言型プローブ定義を実現
- **Aho-Corasick 事前フィルタリング**:検出器内での高速キーワードマッチングを実現
## 設定
### YAML 設定ファイル
`config.yaml` ファイルを作成します:```yaml
# Runtime configuration
run:
max_attempts: 3
timeout: "30s"
# Generator configurations
generators:
openai.OpenAI:
model: "gpt-4"
temperature: 0.7
api_key: "${OPENAI_API_KEY}" # Environment variable interpolation
anthropic.Anthropic:
model: "claude-3-opus-20240229"
temperature: 0.5
api_key: "${ANTHROPIC_API_KEY}"
ollama.OllamaChat:
model: "llama3.2:3b"
temperature: 0.8
# Judge configuration (required for judge.Judge, judge.Refusal, and multi-turn probes)
judge:
generator_type: openai.OpenAI
model: gpt-4o-mini
config:
api_key: "${OPENAI_API_KEY}"
# Output configuration
output:
format: "jsonl"
path: "./results.jsonl"
# Named profiles for different scenarios
profiles:
quick:
run:
max_attempts: 1
timeout: "10s"
generators:
openai.OpenAI:
model: "gpt-3.5-turbo"
temperature: 0.5
output:
format: "table"
thorough:
run:
max_attempts: 5
timeout: "60s"
generators:
openai.OpenAI:
model: "gpt-4"
temperature: 0.3
output:
format: "jsonl"
path: "./thorough_results.jsonl"
```
### 環境変数```bash
# API Keys
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export COHERE_API_KEY="..."
# Debug mode
export AUGUSTUS_DEBUG=true
```
### プロキシ設定
検査のためにHTTPトラフィックをプロキシ(例:Burp Suite)経由でルーティングします:```bash
# Method 1: Via config parameter
augustus scan rest.Rest \
--probe dan.Dan_11_0 \
--detector dan.DAN \
--config '{"uri":"https://api.example.com","proxy":"http://127.0.0.1:8080"}' \
--output results.jsonl
# Method 2: Via environment variables
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080
augustus scan rest.Rest --probe dan.Dan_11_0 --config '{"uri":"https://api.example.com"}'
```
- プロキシ検査のためにTLS検証が自動的に無効化されます
- 最新のAPI向けにHTTP/2サポートが有効化されます
- Server-Sent Events(SSE)レスポンスが自動的に検出され解析されます
### CLIリファレンス```
Usage: augustus scan <generator> [flags]
Arguments:
<generator> Generator name (e.g., openai.OpenAI, anthropic.Anthropic)
Probe Selection (choose one):
--probe, -p Probe name (repeatable)
--probes-glob Comma-separated glob patterns (e.g., "dan.*,goodside.*")
--all Run all registered probes
Detector Selection:
--detector Detector name (repeatable)
--detectors-glob Comma-separated glob patterns
Buff Selection:
--buff, -b Buff names to apply (repeatable)
--buffs-glob Comma-separated buff glob patterns (e.g., "encoding.*")
Configuration:
--config-file Path to YAML config file
--config, -c JSON config for generator
Execution:
--harness Harness name (default: probewise.Probewise)
--timeout Overall scan timeout (default: 30m)
--probe-timeout Per-probe timeout (default: 5m)
--concurrency Max concurrent probes (default: 10, env: AUGUSTUS_CONCURRENCY)
Output:
--format, -f Output format: table, json, jsonl (default: table)
--output, -o JSONL output file path
--html HTML report file path
--verbose, -v Verbose output
Global:
--debug, -d Enable debug mode
```
**コマンド:**```bash
augustus version # Print version information
augustus list # List available probes, detectors, generators, harnesses, buffs
augustus scan <generator> # Run vulnerability scan
augustus completion <shell> # Generate shell completion (bash, zsh, fish)
```
**終了コード:**
| コード | 意味 |
|------|---------|
| 0 | 成功 - スキャン完了 |
| 1 | スキャン/実行時エラー |
| 2 | 検証/使用法エラー |
## FAQ
### Augustusはgarakとどう違うのですか?
Augustusは、[garak](https://github.com/NVIDIA/garak)(NVIDIA製のPythonベースのLLM脆弱性スキャナー)に触発されたGoネイティブの再実装です。主な違いは以下の通りです:
- **パフォーマンス**: PythonインタープリターではなくGoバイナリ — 実行速度が速く、メモリ使用量が少ない
- **配布方法**: ランタイム依存関係のない単一バイナリ vs pip installによるPythonパッケージ
- **並行性**: Goのgoroutineプール(プローブ間の並列処理) vs Pythonのmultiprocessingプール(プローブ内の並列処理)
- **プローブのカバレッジ**: Augustusには210以上のプローブがあります。garakには160以上のプローブがあり、より長い研究実績と査読済み論文(arXiv:2406.11036)があります
- **プロバイダーのカバレッジ**: Augustusには28のプロバイダーがあります。garakには22のプロバイダーモジュールにわたる35以上のジェネレーターバリアントがあります
### APIキーなしでローカルモデルをテストできますか?
はい!ローカルモデルのテストにはOllama統合を使用できます:```bash
# No API key needed
augustus scan ollama.OllamaChat \
--probe dan.Dan_11_0 \
--config '{"model":"llama3.2:3b"}'
```
### カスタムプローブを追加するにはどうすればよいですか?
1. `internal/probes/` に新しいGoファイルを作成します
2. `probes.Probe` インターフェースを実装します
3. `init()` 関数内で `registry.RegisterProbe()` を使用して登録します
4. 再ビルドします: `make build`
詳細な手順については [CONTRIBUTING.md](https://github.com/praetorian-inc/augustus/blob/main/CONTRIBUTING.md) を参照してください。
### サポートされている出力形式は何ですか?
Augustusは4つの出力形式をサポートしています:
| 形式 | フラグ | 使用例 |
|--------|------|----------|
| テーブル | `--format table` | 人間が読みやすいターミナル出力 |
| JSON | `--format json` | 解析用の単一JSONオブジェクト |
| JSONL | `--format jsonl` | ストリーミング用の行区切りJSON |
| HTML | `--html report.html` | 関係者向けのビジュアルレポート |
### 複数のモデルを一度にテストするにはどうすればよいですか?```bash
# Test multiple models sequentially
for model in "gpt-4" "gpt-3.5-turbo"; do
augustus scan openai.OpenAI \
--all \
--config "{\"model\":\"$model\"}" \
--output "results-$model.jsonl"
done
```
### Augustusは本番環境に適していますか?
はい、Augustusは本番環境での使用を想定して設計されており、以下の機能を備えています:
- 設定可能な制限付きの並行スキャン
- APIクォータを尊重するレート制限
- 長時間実行されるプローブのタイムアウト処理
- 一時的な障害に対するリトライロジック
- 可観測性のための構造化ロギング
## トラブルシューティング
### エラー:「APIレート制限を超過しました」
**原因**:同時リクエスト数または1分あたりのリクエスト数が多すぎます。
**解決策**:
1. 並行性を減らす:`--concurrency 5`
2. YAML設定でプロバイダー固有のレート制限設定を使用する: ```yaml
generators:
openai.OpenAI:
rate_limit: 10 # requests per minute
```
### エラー: "context deadline exceeded" または "timeout"
**原因**: 複雑なプローブ(TAPやPAIRなど)がデフォルトのタイムアウトを超えています。
**解決策**:```bash
augustus scan openai.OpenAI \
--probe tap.TAPv1 \
--timeout 60m \
--config-file config.yaml
```
### エラー:「invalid API key」または「authentication failed」
**原因**: API認証情報が欠落しているか、無効です。
**解決策**:
1. 環境変数が設定されているか確認: `echo $OPENAI_API_KEY`
2. 設定ファイル内のタイプミスを確認
3. APIキーに必要な権限があることを確認
4. Ollamaの場合、サービスが実行中であることを確認: `ollama serve`
### エラー:「probe not found」または「detector not found」
**原因**: 名前のタイプミス、またはプローブが登録されていません。
**解決策**:```bash
# List all available probes and detectors
augustus list
# Use exact names from the list
augustus scan openai.OpenAI --probe dan.Dan_11_0 # Correct
```
### スキャンで結果が生成されない
**原因**: 検出器がどのレスポンスにも一致しなかったか、出力が書き込まれていません。
**解決策**:
1. `--verbose` を指定して実行し、詳細な出力を確認する
2. 検出器がプローブタイプと一致しているか確認する
3. 出力ファイルのパスが書き込み可能か確認する
## コントリビューション
コントリビューションを歓迎します!詳細は [CONTRIBUTING.md](https://github.com/praetorian-inc/augustus/blob/main/CONTRIBUTING.md) を参照してください:
- 新しい脆弱性プローブの追加
- 新しい検出器の実装の作成
- LLMプロバイダー統合の追加
- テストガイドライン
- コードスタイル要件
### 開発```bash
# Run all tests
make test
# Run specific package tests
go test ./pkg/scanner -v
# Run equivalence tests (compare Go vs Python implementations)
go test ./tests/equivalence -v
# Build binary
make build
# Install to $GOPATH/bin
make install
```
### ベンチマーク環境(DevPod)
LLMのベンチマーク用にすぐ使えるクラウド開発環境が、[DevPod](https://devpod.sh/) を通じて利用可能です。Augustus、Ollama、Go、およびすべての依存関係がプリインストールされたリモートコンテナをプロビジョニングします。```bash
cd devpod
# CPU-only instance (~$0.08/hr) - cloud APIs only
make devpod-up-cpu
# GPU instance with NVIDIA T4 (~$0.53/hr) - local models up to 14B
make devpod-up-gpu
# GPU Pro instance with NVIDIA L4 (~$0.80/hr) - local models up to 32B
make devpod-up-gpu-pro
```
Inside the devpod:```bash
devpod/scripts/setup.sh # Configure LLM provider API keys
devpod/scripts/pull-models.sh # Pull local Ollama models (GPU only)
devpod/scripts/benchmark.sh # Run benchmarks with comparison reports
```
この環境は標準の[dev container](https://containers.dev/)としても動作します。VS CodeまたはCursorでリポジトリを開き、`.devcontainer/`からCPUまたはGPU構成を選択してください。
## セキュリティ
Augustusは**許可されたセキュリティテスト専用**に設計されています。
- Augustusは指定したLLMに敵対的プロンプトを送信します。必ず許可を得ていることを確認してください
- 所有していないシステムや明示的なテスト許可がないシステムをテストしないでください
- 一部のプローブは(セーフティフィルタをテストするために)意図的に不快なコンテンツを生成します
- 結果にはターゲットLLMが生成した有害なコンテンツが含まれる場合があります
セキュリティの問題は[GitHub Issues](https://github.com/praetorian-inc/augustus/issues)で報告してください。
## サポート
Augustusが役立つと感じたら、以下をご検討ください:
- GitHubで**スター**を付ける
- バグや機能リクエストについて[Issueを開く](https://github.com/praetorian-inc/augustus/issues)
- 新しいプローブ、検出器、プロバイダ統合を[貢献](https://github.com/praetorian-inc/augustus/blob/main/CONTRIBUTING.md)する
[](https://star-history.com/#praetorian-inc/augustus&Date)
## ライセンス
[Apache 2.0](https://github.com/praetorian-inc/augustus/blob/main/LICENSE) - Praetorian Security, Inc.
---
**[Praetorian](https://www.praetorian.com/)製** - オフェンシブセキュリティソリューション