run-scan について
run-scanは、OpenTaintでプロジェクトの事前構築済みモデルをスキャンし、SARIFレポートを収集するスキルです。組み込みルールとプロジェクトルールを読み込み、ルールや近似設定を指定でき、定められたメモリ再試行と失敗処理に対応します。
主な機能
- 01事前構築済みモデルのスキャン
- 02組み込みルールとプロジェクトルールの読み込み
- 03ルール絞り込みと近似設定への対応
- 048Gでメモリ不足の場合に一度再試行
- 05SARIFとスキャン成果物の収集
活用シーン
- 01モデル化済みプロジェクトのセキュリティスキャン
- 02指定したルール ID によるスキャン
- 03検出結果と外部メソッド成果物の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ seqra/ opentaint --skill run-scanインストール後、Claude Code で/run-scanを入力して読み込まれたか確認します。
詳細
スキル:スキャンの実行
プロジェクトモデルに対して OpenTaint スキャンを実行し、検出結果を収集します
入力
呼び出し元から指定します。省略された場合はデフォルト値を使用します。必須の入力がなく、妥当なデフォルト値もない場合に限り、確認してください。
project-root(任意)— 対象プロジェクトのルートです。Opentaint はすべての解析成果物を固定の<project-root>/.opentaint/ディレクトリに保存するため、以下の.opentaint/...パスはすべてそこを基準に解決されます。デフォルト:現在のディレクトリrule-ids(任意)— スキャン対象を限定する、ルールの完全な ID ですmax-memory(任意)— スキャン実行時に使用する--max-memoryの値です。デフォルト:未設定(エンジンのデフォルトは8G)
ワークフロー
1. スキャンを実行する
.opentaint/project にあるビルド済みモデルをスキャンします。レポートを .opentaint/results/report.sarif に書き込み、組み込みルールセットと、.opentaint/rules にあるプロジェクト独自のルールを読み込みます。
opentaint scan --project-model .opentaint/project \
-o .opentaint/results/report.sarif \
--ruleset builtin --ruleset .opentaint/rules \
--track-external-methods
--rule-id <full-id>— 実行可能な特定のルールに対象を限定します(繰り返し指定可能で、入力ルール ID ごとに 1 つ指定します)。参照されているライブラリルールは、ID を別途指定しなくても引き続き使用できます。読み込んだすべてのルールを実行する場合は省略してください--passthrough-approximations .opentaint/pass-through— このディレクトリが存在する場合に追加します。passThrough 設定はルール単位で組み込み設定を上書きし、指定されたルールが組み込みルールのいずれかに一致する場合にのみ、そのルールを上書きします--dataflow-approximations .opentaint/dataflow— このディレクトリが存在する場合に追加します。コードベースの近似設定です(ソースは自動コンパイルされ、コンパイル済みの.classディレクトリはそのまま渡されます)
どちらの近似設定ディレクトリ用フラグも、ディレクトリツリーを再帰的に走査します。親ディレクトリを一度だけ指定し、パッケージやバッチごとに指定しないでください。
スキャンには時間がかかります。バックグラウンドで実行し、完了するまで待機してください。--timeout はエンジンのデフォルト(900s)のままにしてください。CLI が解析を自ら終了し、その時点までの SARIF を書き込みます。
2. メモリ不足の場合は一度だけ再試行する
デフォルトの 8G で開始します。8G でメモリ不足が発生した場合、エンジンが部分的な SARIF を書き込んでいても、その結果は受け入れられません。何かを収集する前に、--max-memory 16G で一度だけ再試行してください。これ以上の値は指定しないでください(RAM を増やしても結果は改善しません)。引き上げは一度だけです。呼び出し元が max-memory を指定した場合は、最初の試行からその値を使用してください。
3. レポートを収集するか、エスカレーションする
通常のスキャンエラーが 2 種類発生していても、SARIF は使用可能なほど完全であれば、そのまま使用できます。対象となるのは、タイムアウト(CLI が解析を終了し、その時点までの結果を書き込んだ場合)と、16G でのメモリ不足(§2 の引き上げ後)です。それ以外の結果は受け入れてはいけません。不正な近似設定による設定読み込みエラーは、メモリを増やすのではなく修正してください。エンジンのエラーと、Output に従って .opentaint/pass-through/.opentaint/dataflow 配下の問題のあるファイルを報告し、修正後に再スキャンできるようにしてください。16G でも SARIF がまったく出力されない場合は、単純な失敗として扱い、Output に従ってスキャン設定とともに報告してください。
出力
実施内容を簡潔に報告します
成果物:
以下の 3 つはすべて、レポートと同じ .opentaint/results/ 配下にあります。
.opentaint/results/report.sarif— コードフロートレースを含む検出結果.opentaint/results/dropped-external-methods.yaml— モデルがないため、データフローファクトが破棄された外部メソッド.opentaint/results/approximated-external-methods.yaml— すでにモデル化されている外部メソッド
概要:
- 検出結果の件数、および破棄された外部メソッドと近似モデル化された外部メソッドの件数
- メモリを 16G に引き上げたかどうか
- 不正な近似設定による設定読み込みエラーでスキャンに失敗した場合:エンジンのエラーと、修正して再スキャンできるよう、エラーから特定した
.opentaint/pass-throughまたは.opentaint/dataflow配下の問題のあるファイルを報告します。これはメモリ不足による失敗ではないため、16G にしても解決しません - 16G でも SARIF が出力されなかった場合:スキャンを失敗のままにしたことと、使用した設定(ルールセット、近似設定ディレクトリ、モデルを含む完全なスキャンコマンド)を報告します
制約
- スキャン結果を変えるために、プロジェクトモデルを手作業で編集してはいけません。このスキルではモデルの読み取りのみを行います。モデルに誤りがある場合は、
project.yamlやその配下のファイルを修正するのではなく、モデル構築の段階で再構築してください