pentest-whitebox-code-review について
セキュリティ監査担当者向けのホワイトボックスコードレビュー用スキルです。ユーザー入力から危険なシンクへのデータフローを追跡し、注入や出力コンテキストを分類して検証対象に優先順位を付けます。
主な機能
- 01シンクからの逆方向汚染追跡
- 02注入スロットの分類
- 03XSS 出力コンテキストの検査
- 04認証・認可のレビュー
- 05SSRF シンクの分析
- 06優先度付き検証キューの作成
活用シーン
- 01コードリポジトリの注入リスク監査
- 02出力コンテキストごとのエンコード確認
- 03認証・認可制御のレビュー
- 04検証対象となる脆弱性の整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jd-opensource/ joysafeter --skill pentest-whitebox-code-reviewインストール後、Claude Code で/pentest-whitebox-code-reviewを入力して読み込まれたか確認します。
同梱ファイルreferences/tools.mdreferences/workflows.md
詳細
ペンテストのホワイトボックスコードレビュー
目的
Shannon の後方 taint 分析手法を用いて、体系的なホワイトボックスのソースコードセキュリティ監査を実施します。危険なシンクからユーザーが制御するソースまで遡って追跡し、スロットタイプごとにインジェクションコンテキストを分類し、XSS のレンダリングコンテキストを検証して、後続の実証主導型エクスプロイトに向けた優先順位付きの検証キューを作成します。
前提条件
認可要件
- ソースコードレビューの対象範囲を明示した書面による認可
- ソースコードへのアクセス — バージョン管理履歴を含む完全なリポジトリ
- 利用可能な場合はアーキテクチャドキュメント(データフロー図、API 仕様)
- デプロイ設定へのアクセス(環境変数、シークレット管理)
環境設定
- taint 分析用のカスタムルールを備えた semgrep
- 対象言語向けに構築された CodeQL データベース
- 高速なパターン検索用の ripgrep
- Android APK の逆コンパイル用 jadx(該当する場合)
- JavaScript のソースマップ抽出ツール(圧縮されている場合)
- 対象言語用の AST 解析ツール(tree-sitter、babel など)
基本ワークフロー
フェーズ 1:調査
- アーキテクチャのマッピング:アプリケーションの各レイヤー(ルーティング、コントローラー、サービス、データアクセス、テンプレート)を特定します。HTTP のエントリーポイントからビジネスロジックを経て、データベース/ファイル/外部のシンクに至るまでのデータフローをマッピングします。
- エントリーポイントの列挙:ユーザーが制御するすべての入力ソース(HTTP パラメーター、ヘッダー、Cookie、ファイルアップロード、WebSocket メッセージ、環境変数、ユーザー保存データのデータベース読み取り)を一覧化します。
- セキュリティパターンの棚卸し:既存のセキュリティ対策(入力検証関数、出力エンコードヘルパー、パラメーター化クエリのパターン、CSRF 対策、認証ミドルウェア、レートリミッター)を特定します。
フェーズ 2:脆弱性分析(5 つの並行トラック)
- インジェクションシンクの探索:SQL/コマンド/ファイル/テンプレートのシンクからソースへ taint を逆向きに追跡します。各シンクをスロットタイプで分類します:SQL-val、SQL-ident、CMD-argument、FILE-path、TEMPLATE-expr。パラメーター化またはサニタイズによって taint チェーンが断たれているかを検証します。
- XSS レンダリングコンテキストの分析:テンプレート/レスポンス内のすべての動的出力箇所を特定します。それぞれをレンダリングコンテキストで分類します:HTML_BODY、HTML_ATTRIBUTE、JAVASCRIPT_STRING、URL_PARAM、CSS_VALUE。各出力箇所で、コンテキストに適したエンコードが適用されているかを検証します。
- 認証チェックリスト(9 項目):通信のセキュリティ、レート制限、セッション管理、トークンの特性、セッション固定への耐性、パスワードポリシーの適用、ログイン応答の均一性、アカウント復旧のセキュリティ、SSO/OAuth の実装。
- 認可モデルのレビュー(3 種類):水平(同じロールの別ユーザーへのアクセス)、垂直(ロールをまたぐ権限昇格)、コンテキスト/ワークフロー(状態に依存する認可の回避)。
- SSRF シンクの探索:すべての外向きリクエストのシンクを特定します。種類別に分類します:クラシック(直接 URL)、ブラインド(応答なし)、セミブラインド(一部応答あり)、格納型(遅延実行)。ユーザー入力からリクエストのディスパッチまで、URL の構築を追跡します。
フェーズ 3:統合
- 確信度のスコアリングと検証キュー:taint チェーンの完全性、サニタイズ回避の可能性、影響の重大度に基づいて各検出結果をスコアリングします。後続のエクスプロイト検証向けに、検証キューの JSON を生成します。
スロットタイプの分類
| スロットタイプ | シンクパターン | 必要なサニタイズ |
|---|---|---|
| SQL-val | クエリパラメーターの値の位置 | パラメーター化クエリ/プリペアドステートメント |
| SQL-ident | テーブル名、カラム名、ORDER BY | 許可リストによる検証 |
| CMD-argument | シェルコマンドの引数 | 引数のエスケープ処理+許可リスト |
| FILE-path | ファイル読み書きパスの構築 | パスの正規化+許可リスト |
| TEMPLATE-expr | テンプレートエンジンの式 | コンテキストを認識した自動エスケープ |
コンテキスト別の出力形式
| コンテキスト | 出力場所 | 必要なエンコード |
|---|---|---|
| HTML_BODY | HTML タグの間 | HTML エンティティエンコード |
| HTML_ATTRIBUTE | 属性値の内部 | 属性エンコード + 引用符で囲む |
| JAVASCRIPT_STRING | JS 文字列リテラルの内部 | JavaScript Unicode エスケープ |
| URL_PARAM | URL クエリパラメーター値 | URL パーセントエンコード |
| CSS_VALUE | CSS プロパティ値の内部 | CSS 16 進数エンコード |
ツールのカテゴリ
| カテゴリ | ツール | 目的 |
|---|---|---|
| 汚染解析 | semgrep, CodeQL | シンクからソースへの汚染を自動追跡 |
| パターン検索 | ripgrep, ast-grep | コードパターンを高速に照合 |
| 逆コンパイル | jadx, sourcemap-extract | コンパイル済みアーティファクトからソースを復元 |
| AST 解析 | tree-sitter, babel | 言語を考慮したコード構造の解析 |
| 依存関係の監査 | npm audit, pip-audit, snyk | 既知の脆弱性を検出 |
参考資料
references/tools.md- ツール関数のシグネチャとパラメーターreferences/workflows.md- 汚染解析のワークフローと脆弱性のパターン
コメント
Markdown 対応