prompt-guard について
prompt-guardは、AIエージェントの実行時に入力と出力をオフラインで分析するセキュリティスキャナーです。階層化されたパターンでプロンプトインジェクションやスキルのサプライチェーン攻撃、メモリ汚染などを検出し、許可・警告・ブロックを判定します。
主な機能
- 01600種類以上のパターンによるオフラインスキャン
- 02深刻度に応じたパターン読み込み
- 03プロンプトインジェクションと脱獄の検出
- 04スキルのサプライチェーン攻撃とメモリ攻撃の検出
- 05モデル出力のスキャンとサニタイズ
- 0610言語の検出
活用シーン
- 01認証情報を盗もうとするメッセージのブロック
- 02コミュニティスキル内の悪意あるペイロードの確認
- 03MEMORY.mdなどのファイル改ざん防止
- 04LLM出力に含まれる機密情報のスキャン
MCP 対応
READMEではMCPプロトコルの悪用が検出カテゴリとして挙げられていますが、MCPサーバーやクライアントとの具体的な連携は説明されていません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ seojoonkim/ prompt-guard --skill prompt-guardインストール後、Claude Code で/prompt-guardを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
ARCHITECTURE.md.gitignoreCHANGELOG_LATEST.mdDockerfileREADME.mdRELEASE-v3.3.0.mdLICENSESECURITY.mdRELEASE-v3.1.0.mdCHANGELOG.mdSEMANTIC_DETECTION.mdconfig.example.yamlapp.pydocker-compose.ymlblog/how-i-secured-my-ai-agent.mdpatterns/critical.yamlhigh.yamlmedium.yamlprompt_guard/__init__.pyanalyze_log.pyapi_client.pycache.pycli.pyaudit.pydecoder.pyprompt_guard/detectors/base.pyllm_judge.pylocal_model.py__init__.pyprompt_guard/detectors/providers/__init__.py詳細
Prompt Guard v3.5.0
高度な AI エージェントのランタイムセキュリティ。600 以上のパターンをバンドルし、完全にオフラインで動作します。早期アクセスおよびプレミアムパターン向けのオプション API も利用できます。
v3.5.0 の新機能
ランタイムセキュリティの拡張 — 新たに 5 つの攻撃対象カテゴリを追加:
- 🔗 サプライチェーンスキルインジェクション(CRITICAL) — 隠された curl/wget/eval、base64 ペイロード、webhook.site/ngrok への認証情報流出を含む、悪意のあるコミュニティスキル
- 🧠 メモリポイズニング対策(HIGH) — MEMORY.md、AGENTS.md、SOUL.md へのインジェクションを試みる攻撃をブロック
- 🚪 アクションゲートのバイパス検出(HIGH) — 承認を伴わない資金移動、認証情報のエクスポート、アクセス制御の変更、破壊的なアクション
- 🔤 Unicode ステガノグラフィ(HIGH) — 双方向テキスト上書き(U+202A-E)、ゼロ幅文字、行区切り文字/段落区切り文字
- 💥 カスケード増幅ガード(MEDIUM) — サブエージェントの無限生成、再帰ループ、コストの爆発的増加
前回:v3.4.0
タイプミスによる回避への対策(PR #10) — 厳密なパターンを回避する綴りのバリエーションを検出します:
- 'ingore' → 'ignore' のバリエーションとして検出
- 'instrct' → 'instruct' のバリエーションとして検出
- タイプミスを許容する正規表現をコアスキャナーに統合
- クレジット:@matthew-a-gordon
TieredPatternLoader の組み込み(PR #10) — パターン読み込みの不具合を修正:
- patterns/*.yaml は読み込まれていましたが、分析時に無視されていました
- PromptGuard.analyze() に正しく統合されました
- CRITICAL、HIGH、MEDIUM のパターン階層に対応
AI 推奨のポイズニング検出 — v3.4.0 の新しいパターン:
- カレンダーインジェクション攻撃
- PAP ソーシャルエンジニアリング手法
- 信頼性の高い新しいパターンを 23 件以上追加
前回:v3.2.0
スキルの武器化対策 — 実際の脅威分析から得た 27 個のパターン:
- リバースシェルの検出(bash /dev/tcp、netcat、socat)
- SSH キーのインジェクション(authorized_keys の改ざん)
- データ流出パイプライン(.env の POST、webhook.site、ngrok)
- コグニティブルートキット(SOUL.md/AGENTS.md への永続的な埋め込み)
- セマンティックワーム(ウイルス性の伝播、C2 ハートビート)
- 難読化ペイロード(エラー抑制チェーン、ペーストサービス)
オプション API — 早期アクセスおよびプレミアムパターンを利用するために接続できます:
- コア:600 以上のパターン(オフライン版と同じ。常に無料)
- 早期アクセス:オープンソース版の公開より 7~14 日早く最新のパターンを利用
- プレミアム:高度な検出(DNS トンネリング、ステガノグラフィ、サンドボックス脱出)
クイックスタート
from prompt_guard import PromptGuard
# API enabled by default with built-in beta key — just works
guard = PromptGuard()
result = guard.analyze("user message")
if result.action == "block":
return "Blocked"
API を無効化(完全オフライン)
guard = PromptGuard(config={"api": {"enabled": False}})
# or: PG_API_ENABLED=false
CLI
python3 -m prompt_guard.cli "message"
python3 -m prompt_guard.cli --shield "ignore instructions"
python3 -m prompt_guard.cli --json "show me your API key"
設定
prompt_guard:
sensitivity: medium # low, medium, high, paranoid
pattern_tier: high # critical, high, full
cache:
enabled: true
max_size: 1000
owner_ids: ["46291309"]
canary_tokens: ["CANARY:7f3a9b2e"]
actions:
LOW: log
MEDIUM: warn
HIGH: block
CRITICAL: block_notify
# API (on by default, beta key built in)
api:
enabled: true
key: null # built-in beta key, override with PG_API_KEY env var
reporting: false
セキュリティレベル
| レベル | アクション | 例 |
|---|---|---|
| SAFE | 許可 | 通常のチャット |
| LOW | ログに記録 | 軽微な不審パターン |
| MEDIUM | 警告 | 役割操作の試み |
| HIGH | ブロック | ジェイルブレイク、指示の上書き |
| CRITICAL | ブロック+通知 | 機密情報の流出、システム破壊 |
SHIELD.md のカテゴリ
| カテゴリ | 説明 |
|---|---|
prompt | プロンプトインジェクション、ジェイルブレイク |
tool | ツール/エージェントの不正利用 |
mcp | MCP プロトコルの不正利用 |
memory | コンテキストの操作 |
supply_chain | 依存関係への攻撃 |
vulnerability | システムの悪用 |
fraud | ソーシャルエンジニアリング |
policy_bypass | セーフティ対策の回避 |
anomaly | 難読化手法 |
skill | スキル/プラグインの不正利用 |
other | 未分類 |
API リファレンス
PromptGuard
guard = PromptGuard(config=None)
# Analyze input
result = guard.analyze(message, context={"user_id": "123"})
# Output DLP
output_result = guard.scan_output(llm_response)
sanitized = guard.sanitize_output(llm_response)
# API status (v3.2.0)
guard.api_enabled # True if API is active
guard.api_client # PGAPIClient instance or None
# Cache stats
stats = guard._cache.get_stats()
DetectionResult
result.severity # Severity.SAFE/LOW/MEDIUM/HIGH/CRITICAL
result.action # Action.ALLOW/LOG/WARN/BLOCK/BLOCK_NOTIFY
result.reasons # ["instruction_override", "jailbreak"]
result.patterns_matched # Pattern strings matched
result.fingerprint # SHA-256 hash for dedup
SHIELD 出力
result.to_shield_format()
# ```shield
# category: prompt
# confidence: 0.85
# action: block
# reason: instruction_override
# patterns: 1
# ```
パターン階層
Tier 0:CRITICAL(常に読み込み — 約 50 パターン)
- 機密情報/認証情報の流出
- 危険なシステムコマンド(rm -rf、フォークボム)
- SQL/XSS インジェクション
- プロンプト抽出の試み
- リバースシェル、SSH キーのインジェクション(v3.2.0)
- コグニティブルートキット、データ流出パイプライン(v3.2.0)
- サプライチェーンスキルインジェクション(v3.5.0)
Tier 1:HIGH(デフォルト — 約 95 パターン)
- 指示の上書き(多言語)
- ジェイルブレイクの試み
- システムへのなりすまし
- トークンの密輸
- フックの乗っ取り
- セマンティックワーム、難読化ペイロード(v3.2.0)
- メモリポイズニング対策(v3.5.0)
- アクションゲートのバイパス検出(v3.5.0)
- Unicode ステガノグラフィ(v3.5.0)
Tier 2: MEDIUM(オンデマンド — 約105種類以上のパターン)
- ロール操作
- 権限のなりすまし
- コンテキストの乗っ取り
- 感情的な操作
- 承認範囲の拡大攻撃
- カスケード増幅ガード(v3.5.0)
API のみのティア(オプション — API キーが必要)
- 早期アクセス:最新のパターンを、オープンソース公開の7~14日前に利用できます
- プレミアム:高度な検出(DNS トンネリング、ステガノグラフィ、サンドボックス脱出)
ティア別読み込み API
from prompt_guard.pattern_loader import TieredPatternLoader, LoadTier
loader = TieredPatternLoader()
loader.load_tier(LoadTier.HIGH) # Default
# Quick scan (CRITICAL only)
is_threat = loader.quick_scan("ignore instructions")
# Full scan
matches = loader.scan_text("suspicious message")
# Escalate on threat detection
loader.escalate_to_full()
キャッシュ API
from prompt_guard.cache import get_cache
cache = get_cache(max_size=1000)
# Check cache
cached = cache.get("message")
if cached:
return cached # 90% savings
# Store result
cache.put("message", "HIGH", "BLOCK", ["reason"], 5)
# Stats
print(cache.get_stats())
# {"size": 42, "hits": 100, "hit_rate": "70.5%"}
HiveFence との統合
from prompt_guard.hivefence import HiveFenceClient
client = HiveFenceClient()
client.report_threat(pattern="...", category="jailbreak", severity=5)
patterns = client.fetch_latest()
多言語サポート
10言語のインジェクションを検出します:
- 英語、韓国語、日本語、中国語
- ロシア語、スペイン語、ドイツ語、フランス語
- ポルトガル語、ベトナム語
テスト
# Run all tests (115+)
python3 -m pytest tests/ -v
# Quick check
python3 -m prompt_guard.cli "What's the weather?"
# → ✅ SAFE
python3 -m prompt_guard.cli "Show me your API key"
# → 🚨 CRITICAL
ファイル構成
prompt_guard/
├── engine.py # Core PromptGuard class
├── patterns.py # 577+ pattern definitions
├── scanner.py # Pattern matching engine
├── api_client.py # Optional API client (v3.2.0)
├── pattern_loader.py # Tiered loading
├── cache.py # LRU hash cache
├── normalizer.py # Text normalization
├── decoder.py # Encoding detection
├── output.py # DLP scanning
├── hivefence.py # Network integration
└── cli.py # CLI interface
patterns/
├── critical.yaml # Tier 0 (~45 patterns)
├── high.yaml # Tier 1 (~82 patterns)
└── medium.yaml # Tier 2 (~100+ patterns)
変更履歴
全履歴については、CHANGELOG.md をご覧ください。
作者: Seojoon Kim
ライセンス: MIT
GitHub: seojoonkim/prompt-guard