mcpField
R
red-teaming-llms-with-garak

red-teaming-llms-with-garak

github.com/mukul975セキュリティ35.2k67 回インストール8 週間前に更新
リポジトリ

red-teaming-llms-with-garak について

オープンソースの LLM 脆弱性スキャナー garak でモデルを検査するスキルです。スキャンの実行、結果の解釈、緩和策の再検証を扱い、許可を得た対象のみをテストします。

主な機能

  1. 01プロンプトインジェクションと脱獄の検査
  2. 02情報漏えいと危険な出力の検証
  3. 03ローカルモデルと API エンドポイントの検査
  4. 04ヒット率と生成レポートの確認
  5. 05緩和策適用後の結果比較

活用シーン

  1. 01LLM セキュリティ評価の基準作成
  2. 02ガードレールやプロンプト変更の検証
  3. 03更新後のエンドポイント回帰テスト
  4. 04AI リスク評価向けの所見記録

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill red-teaming-llms-with-garak

インストール後、Claude Code で/red-teaming-llms-with-garakを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
standards.md
scripts/
agent.py

詳細

garak による LLM のレッドチームテスト

法的および許可された利用に関する通知: このスキルは、許可を得た AI セキュリティテストおよび教育目的に限って使用してください。所有するモデル、API キー、エンドポイント、またはテストする明示的な書面による許可を得たものだけを調査してください。サードパーティの LLM API を自動的に調査すると、利用規約に違反したり、課金対象のトークンを消費したりする場合があります。管理権限のないシステムを許可なく調査することは、違法となる可能性があります。

概要

garak(Generative AI Red-teaming and Assessment Kit)は、NVIDIA が保守するオープンソースの LLM 脆弱性スキャナーです。ホストを対象とする Nessus のようなネットワーク脆弱性スキャナーに相当する役割を、大規模言語モデルに対して担います。ターゲットモデルに数千件の敵対的なプロンプト(「プローブ」)を送り、生成結果を収集し、応答に対して自動「検出器」を実行して各試行が成功したかどうかを判定します。プローブ群には、プロンプトインジェクション(promptinject、latentinjection)、ジェイルブレイク(dan)、学習データやシステムプロンプトの漏えい(leakreplay)、マルウェア生成(malwaregen)、クロスサイトスクリプティングのペイロード出力(xss)、エンコーディングを利用した回避(encoding)、有害性などが含まれます。garak は論文「garak: A Framework for Security Probing Large Language Models」(arXiv:2406.11036)で紹介されており、NVIDIA/garak GitHub リポジトリから配布されています。

このスキャナーは、特定のジェネレーターに依存しません。ローカルに読み込んだ Hugging Face モデル、OpenAI 互換 API、AWS Bedrock、Replicate、Cohere、NIM エンドポイント、GGUF/llama.cpp モデル、および JSON ジェネレータースペックを使った任意の REST エンドポイントを対象にできます。実行後、garak はすべての試行と検出器の判定を記録した行区切りログ .report.jsonl、人間が読みやすい .report.html、デバッグログ garak.log、および確認された脆弱性のヒットログを出力します。ターミナルには、プローブ別、検出器別の合否サマリーとヒット率(例:dan.Dan_11_0 jailbreak: FAIL ok on 38/40)が表示されます。これが、解釈の対象となる主な成果物です。

このスキルは、garak が両方を実行可能にするため、MITRE ATLAS の手法 **AML.T0051(LLM プロンプトインジェクション)**および **AML.T0054(LLM ジェイルブレイク)**に対応しています。プロンプトインジェクションとジェイルブレイクの入力を大規模に作成し、ターゲットのガードレールが機能するかを測定します。また、デプロイ済み AI システムのセキュリティとレジリエンスを、再現可能かつ定量的に測定することで、NIST AI RMF のサブカテゴリー MEASURE-2.7を支援します。

使用する場面

  • デプロイの前後に、LLM のセキュリティを迅速かつ再現可能な方法でベースライン評価する必要がある場合。
  • ガードレール、システムプロンプト、安全性のファインチューニングが、ジェイルブレイクやインジェクションの成功率を実際に下げるか検証する場合(前後に実行してヒット率を比較します)。
  • AI リスク評価やモデルカードのセキュリティセクション向けの証拠を作成する場合(NIST AI RMF MEASURE-2.7)。
  • OWASP LLM Top 10 のリスク(LLM01 プロンプトインジェクション、LLM02 機密情報の漏えい、LLM07 システムプロンプトの漏えい)のうち、モデルで実際に発生するものをトリアージする場合。
  • モデルまたはプロンプトの変更後に、CI で LLM エンドポイントのリグレッションテストを行う場合。

前提条件

  • Python 3.10 以降(3.12 を推奨)と仮想環境。
  • PyPI から garak をインストールします:
    python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
    python -m pip install -U garak
    garak --version
    
  • 最新開発版をインストールする場合:
    python -m pip install -U git+https://github.com/NVIDIA/garak.git@main
    
  • ホスト型モデルを調査する場合、ターゲットの API キー(例:export OPENAI_API_KEY="sk-...")。
  • ターゲットをテストする書面による許可と、トークン費用への認識(プローブは数千件の呼び出しを生成します)。

目標

  • 利用可能なプローブと検出器を列挙し、対象を絞ったテストスイートを選びます。
  • ローカルの Hugging Face モデル、OpenAI 互換 API、任意の REST エンドポイントに対して garak を設定します。
  • プロンプトインジェクション、ジェイルブレイク、漏えいのプローブ群を実行し、レポートを取得します。
  • プローブ別のヒット率出力と .report.jsonl を解釈します。
  • 緩和策を適用した後に再実行し、リスクの低減を示します。
  • AI リスク評価に使用できる、根拠のある調査結果の成果物を作成します。

MITRE ATT&CK マッピング

このスキルでは、ATT&CK の敵対的機械学習向け補完版である MITRE ATLAS のテクニック ID を使用します。

ID戦術公式名称関連性
AML.T0051ML 攻撃の準備/影響LLM プロンプトインジェクションgarak の promptinject と latentinjection のプローブは、悪意のあるプロンプトを作成し、モデルの意図された動作を覆そうとします。
AML.T0054権限昇格/防御回避LLM ジェイルブレイクgarak の dan や関連するプローブは、安全対策を回避してモデルに制限されたコンテンツを生成させようとします。

ワークフロー

フェーズ 1:プローブと検出器を列挙する
  1. 実行範囲を決められるよう、garak に含まれるすべてのプローブを一覧表示します。
    garak --list_probes
    
  2. 検出器(プローブの成功を判定するモジュール)とジェネレーター(ターゲットへの接続機能)を一覧表示します。
    garak --list_detectors
    garak --list_generators
    
  3. プローブの分類を確認します。主なファミリーは次のとおりです。
    • promptinject — PromptInject フレームワークによる直接インジェクション。
    • latentinjection — ドキュメントやエンコードされたテキストに隠された指示(間接インジェクション)。
    • dan — 「Do Anything Now」および関連するジェイルブレイク(例:dan.Dan_11_0)。
    • leakreplay — 記憶されたテキスト、学習データ、または隠されたプロンプトをモデルに再現させます。
    • encoding — base64/ROT13 などによるインジェクションの回避。
    • xss — クロスサイトスクリプティングのペイロードを出力させます(Markdown/HTML による情報窃取)。
    • malwaregen — ウイルス対策ソフトを回避するコードや悪意のあるコードを要求します。
フェーズ 2:ローカルの Hugging Face モデルをプローブする
  1. ローカルモデルに対してジェイルブレイクプローブを 1 つ実行し、セットアップを検証します。
    python -m garak --target_type huggingface --target_name gpt2 --probes dan.Dan_11_0
    
  2. チャットモデルに対して、より包括的なテストスイートを実行します。
    python -m garak \
      --target_type huggingface \
      --target_name meta-llama/Llama-3.2-1B-Instruct \
      --probes promptinject,dan,leakreplay \
      --report_prefix llama32_baseline
    
フェーズ 3:OpenAI 互換 API をプローブする
  1. キーをエクスポートし、インジェクションと漏えいのプローブを実行します。
    export OPENAI_API_KEY="sk-..."
    python -m garak \
      --target_type openai \
      --target_name gpt-4o-mini \
      --probes promptinject,latentinjection,leakreplay \
      --generations 5 \
      --parallel_attempts 8 \
      --report_prefix gpt4omini_injection
    
    • --generations は、プロンプトごとの完了数を設定します(数を増やすほど統計的な信頼度が高まりますが、コストも増加します)。
    • --parallel_attempts を設定すると、リモート API のスループットが向上します。
フェーズ 4:任意の REST エンドポイントをプローブする
  1. garak は、JSON ジェネレーターの仕様を使って任意の HTTP API をターゲットにできます。rest.json を作成します。
    {
      "rest": {
        "RestGenerator": {
          "name": "my-llm-gateway",
          "uri": "https://llm.internal.example/v1/chat",
          "method": "post",
          "headers": { "Authorization": "Bearer $ENV_TOKEN", "Content-Type": "application/json" },
          "req_template_json_object": { "model": "internal-bot", "prompt": "$INPUT" },
          "response_json": true,
          "response_json_field": "$.output"
        }
      }
    }
    
  2. garak を実行します。
    export ENV_TOKEN="..."
    python -m garak \
      --target_type rest \
      -G rest.json \
      --probes promptinject,dan \
      --report_prefix internal_gateway
    
フェーズ 5:厳選した設定と全件スイープを実行する
  1. 評価を再現可能にするには、すべての設定を YAML/JSON 設定ファイルに固定し、--config を指定します。
    python -m garak --config assessment.yaml
    
    # assessment.yaml
    plugins:
      model_type: openai
      model_name: gpt-4o-mini
      probe_spec: promptinject,latentinjection,dan,leakreplay,xss,malwaregen
    run:
      generations: 5
      parallel_attempts: 8
    reporting:
      report_prefix: quarterly_llm_assessment
    
  2. 網羅的なスイープ(時間とコストがかかります)を行うには、--probes を完全に省略してすべてのプローブを実行します。
フェーズ 6:検出率レポートを解釈する
  1. ターミナルのサマリーを確認します。各行は probe.Class detector: PASS|FAIL ok on N/M の形式です。ok の割合が低い FAIL は、モデルが危険な動作を頻繁に生成したことを意味し、重大度の高い発見事項となります。
  2. 機械可読レポートを開き、失敗を集計します。
    # Every attempt with detector verdicts is one JSON line
    jq -r 'select(.entry_type=="eval") | "\(.probe)\t\(.detector)\t\(.passed)/\(.total)"' \
      garak.<timestamp>.report.jsonl | sort
    
  3. 生成された .report.html をブラウザーで開き、整形されたスコアカードとプローブごとの内訳を確認します。
  4. ヒットログから実際に成功した攻撃文字列を取得し、概念実証の証拠として使用します。
フェーズ 7:緩和して再テストする
  1. 対策を適用します(システムプロンプトを厳格化する、Llama Guard や LLM Guard などの入力/出力ガードレールを追加する、またはモデルを変更する)。
  2. 新しい --report_prefix を指定し、同じプローブセットを再実行します。
  3. 実行間の検出率を比較し、リスク低減の度合いをレポートに記載します。

ツールとリソース

リソース目的リンク
NVIDIA/garakソース、プローブ一覧、イシューhttps://github.com/NVIDIA/garak
garak ドキュメントCLI リファレンス、ジェネレーター設定https://docs.garak.ai/ and https://reference.garak.ai/
garak 論文(arXiv:2406.11036)方法論と設計https://arxiv.org/abs/2406.11036
OWASP Top 10 for LLM Applicationsプローブが対応するリスク分類https://genai.owasp.org/
MITRE ATLASAML テクニックの定義https://atlas.mitre.org/

プローブファミリーのリファレンス

プローブファミリー対象OWASP LLM との対応
promptinject直接的なプロンプトインジェクションLLM01
latentinjection間接的な/隠れたコンテキストへのインジェクションLLM01
danジェイルブレイク/ガードレールの回避LLM01 / safety
leakreplay学習データおよびプロンプトの漏えいLLM02 / LLM07
encodingエンコーディングによるフィルターの回避LLM01
xssMarkdown/HTML による情報流出ペイロードLLM02
malwaregen悪意のあるコードの生成misuse

検証基準

  • garak がインストールされ、garak --version が成功する。
  • --list_probes / --list_detectors を使ってプローブと検出器が一覧表示されている。
  • --report_prefix を設定し、対象に対する少なくとも 1 回のプローブ実行が完了している。
  • .report.jsonl、.report.html、garak.log が生成され、保存場所が確認されている。
  • プローブごとのヒット率を抽出し、重大度順にランク付けしている。
  • 成功した攻撃文字列を、証拠としてヒットログから取得している。
  • 緩和策を適用し、ヒット率の変化を示す比較実行が完了している。
  • リスク評価のため、調査結果を OWASP LLM Top 10 および MITRE ATLAS に照らして記録している。

コメント