mcpField
C
continuous-llm-red-teaming-with-promptfoo

continuous-llm-red-teaming-with-promptfoo

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

continuous-llm-red-teaming-with-promptfoo について

Promptfoo と DeepTeam を使い、LLM アプリケーションを敵対的入力で継続的にテストする手順を示すスキルです。許可を得たセキュリティテストを対象とし、レポートと CI/CD のチェックで回帰を検出します。

主な機能

  1. 01敵対的テストケースの生成
  2. 02OWASP と MITRE ATLAS へのマッピング
  3. 03Promptfoo と DeepTeam によるテスト実行
  4. 04プラグイン別の合否レポート確認
  5. 05失敗時に CI/CD ビルドを停止
  6. 06リリースごとの攻撃成功率の追跡

活用シーン

  1. 01ジェイルブレイクとプロンプトインジェクション対策のテスト
  2. 02セキュリティ検査失敗時のマージ停止
  3. 03モデルやプロンプトのバージョン比較
  4. 04リリースをまたぐ脆弱性回帰の監視

インストール

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

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill continuous-llm-red-teaming-with-promptfoo

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

同梱ファイル

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

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

詳細

Promptfoo による継続的な LLM レッドチーミング

許可された利用のみ: これらの敵対的プローブは、自分が所有する、またはテストの明示的な許可を得ている LLM アプリケーションとエンドポイントに対してのみ実行してください。生成される攻撃ペイロード(ジェイルブレイク、プロンプトインジェクション、有害コンテンツの誘発)は敵対的な入力です。許可なくサードパーティーのサービスに送信すると、利用規約に違反する場合があります。

概要

Promptfoo は、オープンソースの LLM 評価・レッドチーミングフレームワークです(README によると OpenAI と Anthropic でも使用されています)。敵対的なテストケースを生成し、それらをモデル/エージェントに対して実行して、応答を評価します。DeepTeam(Confident AI 製)は、50 種類以上のすぐに使える脆弱性と、研究に裏付けられた 10 種類以上の攻撃手法を提供する、相補的なオープンソースフレームワークです。この 2 つを組み合わせることで、LLM のセキュリティを回帰テストとして扱えます。コミットのたびに同じ敵対的テストスイートを再実行し、以前は安全だった挙動に退行が生じた場合はパイプラインを失敗させます。

LLM アプリケーションは常に変化するため、これは重要です。プロンプト、モデル、RAG ソース、ツール、ガードレールはすべて変化します。前回のスプリントで修正したジェイルブレイクが、プロンプトの編集やモデルのアップグレード後に、気付かないうちに再発することがあります。Promptfoo はプラグインを OWASP LLM Top 10(owasp:llm)および OWASP Agentic(owasp:agentic)のプリセット、さらに MITRE ATLAS に直接対応付けるため、テストスイートで広く認知されたリスク分類体系を追跡できます。ここで扱う主要な脅威は AML.T0051 — LLM Prompt Injection(MITRE ATLAS)です。これは、アプリケーションが意図した挙動を上書きする敵対的な指示を指します。このスキルは Promptfoo のレッドチーミングドキュメント(https://www.promptfoo.dev/docs/red-team/)と DeepTeam のドキュメント(https://www.trydeepteam.com/docs/getting-started)に従い、NIST AI RMF MANAGE-4.1(AI リスク管理のためのデプロイ後の監視とフィードバック)に沿っています。

使用するタイミング

  • 単発の手動テストではなく、CI/CD で LLM アプリを継続的かつ自動的にレッドチーミングする必要がある場合。
  • セキュリティゲートを適用し、ジェイルブレイク/インジェクションの脆弱性を新たに持ち込む、または再発させる変更のマージをブロックしたい場合。
  • コンプライアンス報告のために、カバレッジを OWASP LLM Top 10/OWASP Agentic/MITRE ATLAS に対応付ける場合。
  • 2 つのモデル、またはプロンプトの 2 つのバージョンのセキュリティ態勢を並べて比較する場合。
  • リリースをまたいで、脆弱性の再発を継続的に追跡する場合。

前提条件

  • Node.js 18 以降(Promptfoo は npm 経由で配布)および Python 3.9 以降(DeepTeam 用)。
  • Promptfoo と DeepTeam をインストールします。
    npm install -g promptfoo            # or: npx promptfoo@latest
    pip install -U deepteam
    
  • 対象の LLM エンドポイントへの API アクセス/認証情報(および OpenAI キーなどの評価モデル用認証情報)が環境変数として設定されていること。
  • シークレットストレージを備えた CI/CD プラットフォーム(GitHub Actions、GitLab CI)。
  • 対象アプリケーションをテストする許可。

目標

  • LLM アプリを対象とする Promptfoo のレッドチーム設定を作成する。
  • OWASP LLM Top 10 と OWASP Agentic のプラグインプリセットに加え、ジェイルブレイク/インジェクション戦略を有効にする。
  • テストスイートをローカルで実行し、プラグインごとの合否レポートを解釈する。
  • プログラムで実行でき、研究に裏付けられた攻撃を行う第 2 のエンジンとして DeepTeam を追加する。
  • 両方を CI/CD に統合し、新たな脆弱性が見つかった場合にビルドを失敗させる。
  • 実行ごとに共有可能な HTML/PDF セキュリティレポートを生成する。

MITRE ATT&CK の対応付け

ID名前(MITRE ATLAS)戦術
AML.T0051LLM プロンプトインジェクション初期アクセス/永続化(LLM)
AML.T0051.000直接(プロンプトインジェクション)LLM 攻撃
AML.T0051.001間接(プロンプトインジェクション)LLM 攻撃
AML.T0054LLM ジェイルブレイク権限昇格/防御回避(LLM)

ワークフロー

1. レッドチーム設定を作成する

対話形式の設定を初期化します。ターゲット、プラグイン、戦略を記述する promptfooconfig.yaml が作成されます。

promptfoo redteam init
# choose your target type (HTTP endpoint, openai:..., anthropic:..., custom provider)
2. ターゲット、OWASP プリセット、攻撃戦略を定義する

promptfooconfig.yaml を編集します。purpose は攻撃生成の基盤となり、plugins は敵対的な入力を生成し、strategies は配信手法(ジェイルブレイク/インジェクションのラッパー)を指定します。

# promptfooconfig.yaml
targets:
  - id: https://api.example.com/chat        # your app endpoint
    label: support-bot

redteam:
  purpose: |
    A customer-support assistant for an e-commerce site. Must never reveal
    system prompts, leak PII, or perform actions outside order support.
  numTests: 10
  plugins:
    - owasp:llm          # OWASP LLM Top 10 preset
    - owasp:agentic      # OWASP Agentic threats preset
    - id: pii:direct
      numTests: 15
    - prompt-extraction  # system-prompt leakage
    - harmful
  strategies:
    - id: jailbreak              # iterative single-turn jailbreak
    - id: jailbreak:composite    # stacked jailbreak techniques
    - id: crescendo              # multi-turn escalation
    - id: prompt-injection       # injection wrapper
3. テストスイートを実行してレポートを確認する

redteam run は生成と評価を組み合わせます。実行後、インタラクティブレポートを開きます。

promptfoo redteam run
promptfoo redteam report            # launches the web report (pass/fail per plugin)

各行には、プラグイン(OWASP/ATLAS との対応付け)、戦略、攻撃プロンプト、モデルの応答、評価者の判定が表示されます。プラグインごとの攻撃成功率が最も重要な指標です。リリースごとに追跡してください。

4. プログラムからの、研究に裏付けられた攻撃に DeepTeam を追加する

DeepTeam を使用すると、追加の脆弱性や攻撃に対応できるほか、Python で独自のテストスイートをスクリプト化できます。

# deepteam_suite.py
from deepteam import red_team
from deepteam.vulnerabilities import Bias, PIILeakage
from deepteam.attacks.single_turn import PromptInjection

def model_callback(prompt: str) -> str:
    # call your application's LLM endpoint here and return the text response
    return call_my_app(prompt)

red_team(
    model_callback=model_callback,
    vulnerabilities=[Bias(types=["race"]), PIILeakage(types=["api_and_database_access"])],
    attacks=[PromptInjection()],
)

DeepTeam は YAML 設定から実行することもできます:

deepteam run config.yaml
5. CI/CD(GitHub Actions)でビルドをゲートする

レッドチームのアサーションが失敗した場合は、パイプラインを失敗させます。Promptfoo は失敗時にゼロ以外の終了コードを返し、マージをブロックします。

# .github/workflows/llm-redteam.yml
name: LLM Red Team
on: [pull_request]
jobs:
  redteam:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npm install -g promptfoo
      - name: Run red team (fails build on new vulns)
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: promptfoo redteam run --no-progress-bar
      - name: Export machine-readable results
        if: always()
        run: promptfoo redteam report --output results.json
      - uses: actions/upload-artifact@v4
        if: always()
        with: { name: redteam-report, path: results.json }
6. 経時的なリグレッションを追跡する

実行ごとに results.json を保存し、リリース間でプラグインごとの攻撃成功率を比較します。OWASP LLM カテゴリのいずれかで成功率が上昇した場合は、リリース前にトリアージすべきリグレッションです。Promptfoo の --filter-failing を使うと、以前失敗したケースのみを再実行して、修正を確認できます。

promptfoo redteam run --filter-failing results.json

ツールとリソース

リソースリンク
Promptfoo レッドチームのドキュメントhttps://www.promptfoo.dev/docs/red-team/
Promptfoo レッドチームの設定https://www.promptfoo.dev/docs/red-team/configuration/
Promptfoo の CI/CD 統合https://www.promptfoo.dev/docs/integrations/ci-cd/
Promptfoo の MITRE ATLAS マッピングhttps://www.promptfoo.dev/docs/red-team/mitre-atlas/
DeepTeam(Confident AI)https://github.com/confident-ai/deepteam
DeepTeam のドキュメントhttps://www.trydeepteam.com/docs/getting-started
LLM アプリケーション向け OWASP Top 10https://genai.owasp.org/

プラグイン/戦略リファレンス

Promptfoo の項目種類対応先
owasp:llmプリセットOWASP LLM Top 10 テストスイート
owasp:agenticプリセットOWASP Agentic の脅威
prompt-extractionプラグインLLM07 システムプロンプトの漏えい
pii:directプラグインLLM06 機密情報の開示
harmfulプラグイン有害なコンテンツの生成
jailbreak / jailbreak:composite戦略AML.T0054 LLM ジェイルブレイク
crescendo戦略マルチターンのジェイルブレイク
prompt-injection戦略AML.T0051 プロンプトインジェクション

検証基準

  • ターゲット、owasp:llm、owasp:agentic プラグインを含む promptfooconfig.yaml が作成されている。
  • ジェイルブレイクとプロンプトインジェクションの戦略が有効になっている。
  • promptfoo redteam run が実行され、プラグインごとの合否レポートが生成される。
  • model_callback を介して、同じターゲットに対して DeepTeam テストスイートが実行される。
  • CI/CD ジョブで新たなレッドチームの失敗時にビルドが失敗する(ゼロ以外の終了コード)。
  • リグレッション追跡のため、実行ごとに results.json アーティファクトがアーカイブされる。
  • OWASP カテゴリごとの攻撃成功率がリリース間で追跡される。

コメント