trailmark
セキュリティ分析を目的とした多言語ソースコードグラフの構築とクエリを行うスキル。爆発半径・汚染伝播・権限境界・エントリポイント列挙などの事前分析パスを備えており、呼び出しパスの解析、攻撃対象領域のマッピング、複雑度ホットスポットの特定、汚染伝播のトレース、監査優先度付けのためのコードグラフ構築など幅広い用途に活用できる。対象言語が不明またはポリグロット構成の場合は `trailmark.parse.detect_languages()` または `--language auto` の使用を推奨。
description の原文を見る
Builds and queries multi-language source code graphs for security analysis. Includes pre-analysis passes for blast radius, taint propagation, privilege boundaries, and entry point enumeration. Use when analyzing call paths, mapping attack surface, finding complexity hotspots, enumerating entry points, tracing taint propagation, measuring blast radius, or building a code graph for audit prioritization. Prefer `trailmark.parse.detect_languages()` or `--language auto` when the target language is unknown or polyglot.
SKILL.md 本文
Trailmark
ソースコードを関数、クラス、呼び出し、およびセマンティックメタデータの有向グラフに解析し、セキュリティ分析に使用します。
使用する場面
- ユーザー入力から機密関数への呼び出しパスをマッピングする
- 監査優先順位付けのための複雑性ホットスポットを特定する
- 攻撃面とエントリーポイントを識別する
- 不慣れなコードベースの呼び出し関係を理解する
- ポリグロットプロジェクト全体のセキュリティレビューまたは監査準備
- コードユニットへの LLM 推論アノテーション (仮定、前提条件) を追加する
- ミューテーションテスト (genotoxic スキル) またはダイアグラミング前の事前分析
使用してはいけない場面
- 呼び出しグラフに価値がない単一ファイルスクリプト (ファイルを直接読む)
- コード由来でないアーキテクチャダイアグラム (
diagramming-codeスキルを使用するか手作業で作成する) - ミューテーションテスト トリアージ (genotoxic スキルを使用。内部で trailmark を呼び出す)
- ランタイム動作分析 (trailmark は静的解析であり動的ではない)
却下すべき正当化
| 正当化 | 誤りの理由 | 必要なアクション |
|---|---|---|
| 「ソースファイルを手動で読むだけでいい」 | 手動読み取りでは呼び出しパス、爆発半径、テイントデータが見落とされる | trailmark をインストールして API を使用する |
| 「クイッククエリには事前分析は不要」 | 爆発半径、テイント、特権データは preanalysis() の後にのみ利用可能 | 他のスキルに引き渡す前に常に engine.preanalysis() を実行する |
| 「グラフが大きすぎるので、サンプリングする」 | サンプリングではクロスモジュール攻撃パスが見落とされる | 完全なグラフを構築してサブグラフクエリで焦点を絞る |
| 「不確実なエッジは重要でない」 | 動的ディスパッチは型混乱バグが隠れている場所 | セキュリティの主張で uncertain エッジを考慮する |
| 「単一言語分析で十分」 | ポリグロットリポジトリは FFI 境界にバグが集中している | コンポーネントごとに正しい --language フラグを使用する |
| 「複雑性ホットスポットだけが確認する価値がある」 | テイント化されたパス上の低複雑性関数は高価値ターゲット | 複雑性をテイントデータと爆発半径データと組み合わせる |
インストール
必須: uv run trailmark が失敗した場合 (コマンドが見つからない、インポートエラー、ModuleNotFoundError)、他に何もする前に trailmark をインストールします:
uv pip install trailmark
しないこと — trailmark の実行の代わりに「手動検証」「手動分析」またはソースファイルの手動読み取りにフォールバックしてはいけません。このツールはインストールされ、プログラム的に使用される必要があります。インストールに失敗した場合は、黙ってソースコード読み取りに切り替えるのではなく、ユーザーにエラーを報告してください。
クイックスタート
# ツリー内のすべてのサポート言語を自動検出してマージ
uv run trailmark analyze --language auto --summary {targetDir}
# 明示的な言語 (単一言語またはカンマ区切りリスト)
uv run trailmark analyze --language rust {targetDir}
uv run trailmark analyze --language python,rust {targetDir}
# 複雑性ホットスポット
uv run trailmark analyze --language auto --complexity 10 {targetDir}
プログラマティック API
from trailmark.parse import detect_languages, supported_languages
from trailmark.query.api import QueryEngine
# インストール済み Trailmark ビルドがサポートしているものを確認
supported_languages()
detect_languages("{targetDir}")
# 不明またはポリグロットツリーでは auto を優先;必要に応じて明示的なリストを使用
engine = QueryEngine.from_directory("{targetDir}", language="auto")
engine = QueryEngine.from_directory("{targetDir}", language="python,rust")
engine.callers_of("function_name")
engine.callees_of("function_name")
engine.paths_between("entry_func", "db_query")
engine.complexity_hotspots(threshold=10)
engine.attack_surface()
engine.summary()
engine.to_json()
# 事前分析を実行 (爆発半径、エントリーポイント、特権
# 境界、テイント伝播)
result = engine.preanalysis()
# 事前分析で作成されたサブグラフをクエリ
engine.subgraph_names()
engine.subgraph("tainted")
engine.subgraph("high_blast_radius")
engine.subgraph("privilege_boundary")
engine.subgraph("entrypoint_reachable")
# LLM 推論アノテーションを追加
from trailmark.models import AnnotationKind
engine.annotate("function_name", AnnotationKind.ASSUMPTION,
"input is URL-encoded", source="llm")
# アノテーション (事前分析結果を含む) をクエリ
engine.annotations_of("function_name")
engine.annotations_of("function_name",
kind=AnnotationKind.BLAST_RADIUS)
engine.annotations_of("function_name",
kind=AnnotationKind.TAINT_PROPAGATION)
事前分析パス
genotoxic または diagramming-code スキルに引き渡す前に常に engine.preanalysis() を実行してください。 事前分析は 4 つのパスでグラフを充実させます:
- 爆発半径推定 — 関数ごとの下流および上流ノード数をカウント、高複雑性の重要な子孫を識別
- エントリーポイント列挙 — 信頼レベル別エントリーポイントをマッピング、到達可能なノードセットを計算
- 特権境界検出 — 信頼レベルが変わる呼び出しエッジを検出 (信頼できない -> 信頼できる)
- テイント伝播 — 信頼できないエントリーポイントから到達可能なすべてのノードをマーク
結果はグラフ上のアノテーションおよび名前付きサブグラフとして保存されます。
詳細なドキュメントについては、references/preanalysis-passes.md を参照してください。
言語選択
ダウンストリームワークフローで言語テーブルをハードコーディングしないでください。インストール済み Trailmark ビルドがサポートしているものを確認してください:
from trailmark.parse import detect_languages, supported_languages
supported_languages()
detect_languages("{targetDir}")
CLI パターン:
# 自動検出とマージ
uv run trailmark analyze --language auto {targetDir}
# 既知のポリグロットターゲット向けの明示的なリスト
uv run trailmark analyze --language python,rust {targetDir}
グラフモデル
ノードの種類: function、method、class、module、struct、
interface、trait、enum、namespace、contract、library、
template
エッジの種類: calls、inherits、implements、contains、imports
エッジの信頼度: certain (直接呼び出し、self.method())、inferred
(非 self オブジェクトの属性アクセス)、uncertain (動的ディスパッチ)
コードユニットごと
- 型付きパラメータ、戻り値型、例外型
- 循環的複雑度とブランチメタデータ
- ドックストリング
- アノテーション:
assumption、precondition、postcondition、invariant、blast_radius、privilege_boundary、taint_propagation、finding、audit_note(最後の 2 つはaugment_sarif/augment_weauditで設定)
エッジごと
- ソース/ターゲットノード ID、エッジの種類、信頼度レベル
プロジェクトレベル
- 依存関係 (インポートされたパッケージ)
- 信頼レベルと資産値を持つエントリーポイント
- 名前付きサブグラフ (事前分析で作成)
主要概念
宣言されたコントラクト対実効入力ドメイン: Trailmark は関数が受け入れると宣言するものと、呼び出しパス経由で実際に到達できるものを分離します。不一致は脆弱性が隠れている場所です:
- 拡大: 検証されていないデータが検証を想定している関数に到達
- 偶然によって安全: 検証がないが、現在は安全な呼び出し元のみが存在
エッジの信頼度: 動的ディスパッチは uncertain エッジを生成します。セキュリティの主張を行う際に信頼度を考慮してください。
サブグラフ: 事前分析で生成されたノード ID の名前付きコレクション。engine.subgraph("name") でクエリします。engine.preanalysis() の後で利用可能です。
クエリパターン
一般的なセキュリティ分析パターンについては references/query-patterns.md を参照してください。
事前分析パスのドキュメントについては references/preanalysis-passes.md を参照してください。
ライセンス: CC-BY-SA-4.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- trailofbits
- リポジトリ
- trailofbits/skills
- ライセンス
- CC-BY-SA-4.0
- 最終更新
- 不明
Source: https://github.com/trailofbits/skills / ライセンス: CC-BY-SA-4.0
関連スキル
secure-code-guardian
認証・認可の実装、ユーザー入力の保護、OWASP Top 10の脆弱性対策が必要な場合に使用します。bcrypt/argon2によるパスワードハッシング、パラメータ化ステートメントによるSQLインジェクション対策、CORS/CSPヘッダーの設定、Zodによる入力検証、JWTトークンの構築などのカスタムセキュリティ実装に対応します。認証、認可、入力検証、暗号化、OWASP Top 10対策、セッション管理、セキュリティ強化全般で活用できます。ただし、構築済みのOAuth/SSO統合や単独のセキュリティ監査が必要な場合は、より特化したスキルの検討をお勧めします。
claude-authenticity
APIエンドポイントが本物のClaudeによって支えられているか(ラッパーやプロキシ、偽装ではないか)を、claude-verifyプロジェクトを模した9つの重み付きルールベースチェックで検証できます。また、Claudeの正体を上書きしているプロバイダーから注入されたシステムプロンプトも抽出します。完全に自己完結しており、httpx以外の追加パッケージは不要です。Claude APIキーまたはエンドポイントを検証したい場合、サードパーティのClaudeサービスが本物か確認したい場合、APIプロバイダーのClaude正当性を監査したい場合、複数モデルを並行してテストしたい場合、またはプロバイダーが注入したシステムプロンプトを特定したい場合に使用できます。
anth-security-basics
Anthropic Claude APIのセキュリティベストプラクティスを適用し、キー管理、入力値の検証、プロンプトインジェクション対策を実施します。APIキーの保護、Claudeに送信する前のユーザー入力検証、コンテンツセーフティガードレールの実装が必要な場合に活用できます。「anthropic security」「claude api key security」「secure anthropic」「prompt injection defense」といったフレーズでトリガーされます。
x-ray
x-ray.mdプレ監査レポートを生成します。概要、強化された脅威モデル(プロトコルタイプのプロファイリング、Gitの重み付け攻撃面分析、時間軸リスク分析、コンポーザビリティ依存関係マッピング)、不変条件、統合、ドキュメント品質、テスト分析、開発者・Gitの履歴をカバーしています。「x-ray」「audit readiness」「readiness report」「pre-audit report」「prep this protocol」「protocol prep」「summarize this protocol」のキーワードで実行されます。
semgrep
Semgrepスタティック分析スキャンを実行し、カスタム検出ルールを作成します。Semgrepでのコードスキャン、セキュリティ脆弱性の検出、カスタムYAMLルールの作成、または特定のバグパターンの検出が必要な場合に使用します。重要:ユーザーが「バグをスキャンしたい」「コード品質を確認したい」「脆弱性を見つけたい」「スタティック分析」「セキュリティlint」「コード監査」または「コーディング標準を適用したい」と尋ねた場合も、Semgrepという名称を明記していなくても、このスキルを使用してください。Semgrepは30以上の言語に対応したパターンベースのコードスキャンに最適なツールです。
ghost-bits-cast-attack
Java「ゴーストビッツ」/キャストアタック プレイブック(Black Hat Asia 2026)。16ビット文字が8ビットバイトに暗黙的に縮小されるJavaサービスへの攻撃時に使用します。WAF/IDSを回避して、SQLインジェクション、デシリアライゼーション型RCE、ファイルアップロード(Webシェル)、パストトラバーサル、CRLF インジェクション、リクエストスマグリング、SMTPインジェクションを実行できます。Tomcat、Spring、Jetty、Undertow、Vert.x、Jackson、Fastjson、Apache Commons BCEL、Apache HttpClient、Angus Mail、JDK HttpServer、Lettuce、Jodd、XMLWriterに影響し、WAFバイパスにより多くの「パッチ済み」CVEを再度有効化します。