Penthera セキュリティスキャナ
URL、ローカルリポジトリ、(macOS)マシン監査のための軽量セキュリティスキャナ。スキャン前に必ず認可ゲートを実行してください。
重要:認可ゲート
認可が確認されるまでPentheraを実行しないでください。
セッションで最初のスキャンを行う前に、ユーザーに以下のいずれかを確認させてください。
- 対象(アプリ、サーバー、プロジェクト)を所有している。
- システム所有者から書面による許可を得ている。
- 対象がlocalhostまたは自分が管理するプライベートラボである。
ユーザーが所有権や許可を主張せずにサードパーティのドメイン(例:google.com、example.com)のスキャンを要求した場合は、停止して拒否してください。疑わしい場合はスキャンしないでください。
詳細なポリシーについては、references/authorization.mdを参照してください。
事前チェック
最初のスキャンの前に実行:
bash skills/penthera/scripts/preflight.sh [URL]
リポジトリルートから実行します。ターゲットURLを渡すと、localhost以外のターゲットについて警告します。エラーがあれば修正してから進めてください。
CLIコマンドの解決
利用可能な方を使用:
penthera --version # npm link後
node bin/penthera.js --version # リポジトリルートから
以下の例ではpentheraを使用しています。必要に応じてnode bin/penthera.jsに置き換えてください。
決定木
| ユーザーの意図 | コマンドパターン |
|---|---|
| 初めて/不明 | penthera(対話型ウィザード — TTY)または penthera-scan |
| ライブURLをスキャン | penthera <url> --profile standard -o reports/scan.json |
| リポジトリのみ(シークレット、ルート) | penthera --repo . -o reports/repo-scan.json |
| URL + ソースの組み合わせ | penthera <url> --repo . -o reports/scan.json --sarif reports/scan.sarif |
| 以前のスキャンと比較 | penthera <url> -o reports/scan.json --baseline reports/previous.json |
| 認証が必要なエンドポイント | --auth-cookieまたは--auth-bearer / PENTHERA_*環境変数を追加 |
| macOSマシン監査 | penthera --machine |
デフォルトの安全な動作
- ユーザーが明示的に詳細なテストを要求しない限り、常に
--profile standardを使用。 - レポートは
reports/(gitignore対象)に書き込み、skills/penthera/内には決して書き込まない。 - スキャン後、付属の
.mdレポートを読み、深刻度別に結果を要約し、修正推奨事項を提示。
破壊モードゲート
これらのフラグは攻撃ペイロードを送信します。使用前に明示的なユーザー確認が必要:
--deep— SQLi、SSTI、SSRF、XSS、CMDiプローブ--fuzz— プロパティベースのAPIファジング--all— recon + deep + fuzzを有効化--profile deep— 最大カバレッジ
ユーザーが「フルペンテスト」や「ディープスキャン」を要求した場合、ターゲットを所有していることとペイロードベースのテストを受け入れることを確認してください。
ワークフロー1:リリース前監査
トリガー: 「ステージングアプリをスキャン」「デプロイ前にセキュリティ監査」「アプリの脆弱性チェック」
- 認可を確認(上記ゲートを参照)。
- 事前チェックを実行。
- 実行:
mkdir -p reports
penthera https://staging.example.com --profile standard -o reports/scan.json
reports/scan.mdを読み、Critical/High/Mediumの結果を要約。- 結果ごとに具体的な修正を推奨。
- 終了コードに注意:
0= Critical/Highなし、1= Critical/Highあり、2= スキャン失敗。
ワークフロー2:リポジトリ+ライブの組み合わせ
トリガー: 「Next.jsアプリとステージングをスキャン」「ブラックボックスとホワイトボックスのスキャン」
- URLの認可を確認。
- URLを使用して事前チェックを実行。
- 実行:
mkdir -p reports
penthera https://staging.example.com --repo . --profile standard \
-o reports/scan.json --sarif reports/scan.sarif
- URLの結果(ヘッダー、TLS、CORS、認証)とリポジトリの結果(シークレット、APIルート、信頼境界)を要約。
- GitHub Actionsを介したSARIFのアップロードを提案(references/output-and-ci.mdを参照)。
ワークフロー3:CI / ベースライン回帰
トリガー: 「前回のスキャンと比較」「新しい結果のみ」「回帰チェック」
- 認可を確認し、
reports/previous.jsonが存在することを確認(またはユーザーにベースラインパスを尋ねる)。 - 実行:
mkdir -p reports
penthera https://staging.example.com --profile standard \
-o reports/scan.json --baseline reports/previous.json
- 報告:新しい結果の数、修正された結果の数、変更なしの数(スキャン中にstderrに出力)。
- 新しい結果のみに焦点を当てて要約。
認証スキャン
認可ゲート通過後のみ:
# Bearerトークン
PENTHERA_BEARER=eyJ... penthera https://myapp.com --profile standard -o reports/scan.json
# セッションCookie
penthera https://myapp.com --auth-cookie "session=abc123" -o reports/scan.json
# 明示的なフラグ
penthera https://myapp.com --auth-bearer "eyJ..." -o reports/scan.json
環境変数: PENTHERA_BEARER、PENTHERA_COOKIE。
リポジトリのみのシークレットスキャン
トリガー: 「ハードコードされたシークレットを探す」「このリポジトリのキーをスキャン」
ローカルリポジトリ分析にはURL認可は不要:
penthera --repo . -o reports/repo-scan.json
シークレットの結果を要約し、露出した認証情報をローテートするようユーザーに注意喚起。
例
例1:ローカルホストのクイックチェック
ユーザー: 「ポート3000のlocalhostアプリをスキャンして」
アクション:
- localhostを確認 — 認可は満たされている。
bash skills/penthera/scripts/preflight.sh http://localhost:3000penthera http://localhost:3000 --profile quick -o reports/scan.jsonreports/scan.mdを要約。
例2:デプロイ前のステージング
ユーザー: 「出荷前にstaging.myapp.comを監査して」
アクション:
- 質問:「staging.myapp.comを所有しているか、書面による許可を得ていますか?」
- 確認後、標準プロファイルスキャンをJSON + Markdown出力で実行。
- 修正手順とともにCritical/High項目を最初にリスト。
例3:無許可のターゲット(拒否必須)
ユーザー: 「google.comの脆弱性をスキャンして」
アクション:
- Pentheraを実行しない。
- 許可なくサードパーティシステムをスキャンすることは許可されていないと説明。
- 代わりに自身のアプリまたはlocalhostをスキャンするよう提案。
このスキルを以下の目的で使用しないでください
- 一般的なコーディング支援、天気、または無関係なタスク
- ユーザーが所有していない、またはテストする許可がないシステムのスキャン
- 悪意のある悪用またはデータ流出
追加リソース
- プロファイルとフラグ:references/profiles-and-flags.md
- 出力形式とCI:references/output-and-ci.md
- トラブルシューティング:references/troubleshooting.md
- 認可ポリシー:references/authorization.md