mcpField
T
trailmark-variant-neighborhood

trailmark-variant-neighborhood

github.com/trailofbitsセキュリティ7.9k1.3k 回インストール今日更新
リポジトリ

trailmark-variant-neighborhood について

一つの種となる問題から、グラフに基づく候補を優先順位付きで広げるセキュリティレビュー用スキルです。確認対象と引き継ぎ方を示し、脆弱性の確定は行いません。

主な機能

  1. 01種を Trailmark ノードに紐付け
  2. 02関連するグラフ近傍の展開
  3. 03レビュー候補の優先順位付け
  4. 04意味的・構文的な追加調査の特定
  5. 05引き継ぎパケットの作成

活用シーン

  1. 01有力な問題の変種を探索
  2. 02シンクやバリデーターを共有するコードの特定
  3. 03関連関数のレビュー優先度付け
  4. 04変種分析用の候補を準備

インストール

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

$npx skills add https://github.com/trailofbits/skills --skill trailmark-variant-neighborhood

インストール後、Claude Code で/trailmark-variant-neighborhoodを入力して読み込まれたか確認します。

同梱ファイル

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

agents/
openai.yaml
assets/
trail-of-bits-mark.svg
references/
neighborhood-patterns.md
output-format.md
ranking.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-analysis
  • semgrep-rule-creator
  • CodeQL または SARIF を生成するツールを使った static-analysis
  • 手動レビュー
ステップ 5:引き継ぎパケットを出力する

references/output-format.md を使用します。順位付けした候補、採用理由、除外項目、制約、variant-analysis への引き継ぎを含めます。

停止条件

  • グラフ上の紐付け先が存在しない
  • 候補数が多すぎ、根本原因の説明が不十分である
  • Trailmark が対象言語を分析できない
  • シードがテスト、生成コード、またはベンダーコードにのみ存在し、そのコードが対象範囲内だとユーザーが述べていない

コメント