trailmark-variant-neighborhood について
一つの種となる問題から、グラフに基づく候補を優先順位付きで広げるセキュリティレビュー用スキルです。確認対象と引き継ぎ方を示し、脆弱性の確定は行いません。
主な機能
- 01種を Trailmark ノードに紐付け
- 02関連するグラフ近傍の展開
- 03レビュー候補の優先順位付け
- 04意味的・構文的な追加調査の特定
- 05引き継ぎパケットの作成
活用シーン
- 01有力な問題の変種を探索
- 02シンクやバリデーターを共有するコードの特定
- 03関連関数のレビュー優先度付け
- 04変種分析用の候補を準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ trailofbits/ skills --skill trailmark-variant-neighborhoodインストール後、Claude Code で/trailmark-variant-neighborhoodを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlassets/trail-of-bits-mark.svgreferences/neighborhood-patterns.mdoutput-format.mdranking.md詳細
Trailmark バリアント近傍
シードとなるイシューを、グラフから導出したバリアント候補へと展開します。このスキルはレビュー対象を生成するものであり、確認済みの検出結果を生成するものではありません。
使用する場合
- 検出結果が確認済み、またはもっともらしく、バリアントが存在する可能性がある
- 脆弱なパターンが呼び出しコンテキストに依存する
- イシューに、共有シンク、ソース、バリデーター、インターフェイス、オーバーライド、トレイト、フック、ハンドラー、アダプター、または重要な型が関係する
- 次のステップとして
variant-analysis、semgrep-rule-creator、static-analysis、または手動レビューを開始する
使用しない場合
- シードとなるイシューが存在しない。まずディスカバリーまたはトリアージを使用してください。
- パターンが純粋に構文上のもので、すでに明白である。
semgrep-rule-creatorを直接使用してください。 - 複数の検出結果を組み合わせたエクスプロイトチェーンの構成に関する質問である。コンポジションワークフローを使用してください。
- 目的が修正の検証である。修正レビューのワークフローを使用してください。
- シードをグラフノードに紐付けられない。
却下すべき合理化
| 合理化 | 誤りである理由 | 必要な対応 |
|---|---|---|
| 「近くのコードはバリアントである」 | 近接性は候補とする理由の一つにすぎません | レビュー対象として順位付けする |
| 「完全に同じ名前だけが重要である」 | バリアントは名前ではなく、シンクや前提条件を共有していることがよくあります | 呼び出し元、呼び出し先、インターフェイス、型にわたって展開する |
| 「すべての候補が検出結果である」 | このスキルが出力するのはレビュー用の候補です | 脆弱性があると断定しない |
| 「到達不能な候補は完全に無視できる」 | リファクタリング後に到達可能になる可能性があります | 順位を下げるか、保留として列挙する |
| 「グラフ候補が意味的なパターン分析に取って代わる」 | グラフ構造で見つかるのは場所であり、根本原因の意味ではありません | variant-analysis、Semgrep、CodeQL、または手動レビューに引き継ぐ |
ワークフロー
Variant Neighborhood Progress:
- [ ] Step 1: Normalize and bind the seed
- [ ] Step 2: Expand graph neighborhoods
- [ ] Step 3: Rank candidates
- [ ] Step 4: Extract variant pattern guidance
- [ ] Step 5: Emit handoff packet
ステップ 1:シードを正規化して紐付ける
検出内容、ファイル/行、関数名、または trailmark-finding-triage の出力を受け付けます。シードを Trailmark ノードに紐付け、根本原因を平易な言葉で記録します。
具体的なグラフ上の紐付け先がない場合は、バリアントをでっち上げずに停止してください。
ステップ 2:近傍を展開する
references/neighborhood-patterns.md に記載された軸を使用します。
- 呼び出し元の共有
- 呼び出し先とシンクの共有
- エントリポイント経路の近傍
- インターフェイス、オーバーライド、トレイト、実装の兄弟要素
- ファイルまたはモジュールクラスターの近傍
- 汚染または権限境界を共有する候補
- 型および状態参照の近傍
候補が過剰に増えないよう、展開を制限します。
ステップ 3:候補に順位を付ける
references/ranking.md を使用して順位を付けます。エントリポイントから到達可能、汚染済み、境界に隣接、影響範囲が広い、シンクを共有、同一インターフェイス、距離が近い候補を優先します。テスト、モック、生成コード、ベンダーコード、到達不能、信頼された内部コードのみの候補は順位を下げます。
ステップ 4:パターンの指針を抽出する
構文的に検索すべきものと、意味的なレビューが必要なものを要約します。後続の作業が次のどれに該当するかを特定します。
variant-analysissemgrep-rule-creator- CodeQL または SARIF を生成するツールを使った
static-analysis - 手動レビュー
ステップ 5:引き継ぎパケットを出力する
references/output-format.md を使用します。順位付けした候補、採用理由、除外項目、制約、variant-analysis への引き継ぎを含めます。
停止条件
- グラフ上の紐付け先が存在しない
- 候補数が多すぎ、根本原因の説明が不十分である
- Trailmark が対象言語を分析できない
- シードがテスト、生成コード、またはベンダーコードにのみ存在し、そのコードが対象範囲内だとユーザーが述べていない