mcpField
S
skill-scanner

skill-scanner

github.com/sickn33セキュリティ48.8k97 回インストール今日更新
リポジトリ

skill-scanner について

Skill Security Scannerは、エージェントスキルを導入前に評価するためのスキルです。付属の静的スキャナーがセキュリティ上のパターンやカバレッジ不足を構造化JSONで報告し、挙動、権限、サプライチェーンの人手による確認を支援します。

主な機能

  1. 01プロンプトインジェクションのパターン検出
  2. 02コードと権限のリスク確認
  3. 03構造化JSONでの検出結果出力
  4. 04スキャン範囲の不足の提示
  5. 05人手によるセキュリティレビューの支援

活用シーン

  1. 01導入前のスキルのスクリーニング
  2. 02スキルディレクトリのリスク確認
  3. 03権限とサプライチェーン問題の評価

インストール

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

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill skill-scanner

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

同梱ファイル

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

UPSTREAM-LICENSE.txt
UPSTREAM-NOTICE.md
references/
dangerous-code-patterns.md
permission-analysis.md
prompt-injection-patterns.md
scripts/
scan_skill.py

詳細

同梱された上流サポートファイル

サポートファイルはスキルからの相対パスに含まれています。固定された取得元、ライセンス、ハッシュ、取り込み時の変更については、UPSTREAM-NOTICE.md を参照してください。

スキルセキュリティスキャナー

スキルを採用する前に、セキュリティ上の問題がないかスキャンします。プロンプトインジェクション、悪意のあるコード、過剰な権限、シークレットの露出、サプライチェーンのリスクを検出します。

インストール済みのスキルディレクトリを明示的に指定してください。PyYAML を含むレビュー済みの Python 環境で同梱ヘルパーを実行します。リポジトリのルートディレクトリを作業ディレクトリにする必要はなく、依存関係が暗黙にダウンロードされることもありません。

使用する場面

  • スキルを採用する前に、プロンプトインジェクション、悪意のあるコード、過剰な権限、サプライチェーンのリスクがないか評価したい場合。
  • スキルディレクトリを対象に、静的スキャンと手動レビューを組み合わせたワークフローを実施したい場合。
  • エージェント環境でスキルを信頼してよいか判断したい場合。

同梱スクリプト

scripts/scan_skill.py

決定的なパターンを検出する静的解析スキャナーです。構造化 JSON(skill-scanner.locators.v2)を出力します。固定された検出内容の説明、ローカルファイルと行の位置情報、件数、認識されたツール、メタデータフィールドの有無と型を報告します。メタデータの生の値、ソースの抜粋、デコードされたペイロード、コマンド、シンボリックリンクのリンク先、完全な URL は含まれません。報告された場所で、これらを非公開で確認してください。相対ファイル名、選択したディレクトリの識別子、URL のホスト名は識別情報として表示されます。このレポートは機密性の高い名前を匿名化するものではありません。未対応の入力は安全と見なされず、不完全として扱われます。

python3 "<installed-skill-dir>/scripts/scan_skill.py" "<authorized-inert-skill-directory>"

検出内容、URL のホスト名と行の位置情報、構造情報、重大度別の件数を含む JSON を返します。スクリプトはパターンを機械的に検出します。意図を評価し、誤検出を除外するのはあなたの役割です。

スキャナーの対象範囲とレポートのプライバシー

プライベートで不活性なスナップショットを使用してください。このヘルパーは静的検査を行うものであり、実行サンドボックスではありません。最終リンクがシンボリックリンクであるファイルや通常ファイルでないファイルを拒否し、ファイルサイズは 1 MiB、ツリー全体は 1,000 ファイル/16 MiB に制限します。保護された no-follow ファイルオープンに対応していないホストでは、リンクを黙ってたどるのではなく、不完全として報告します。ネストされた通常のテキストファイルが対象に含まれます。バイナリや読み取れない入力は、明示的なカバレッジの欠落として扱われます。スキャンエラーやカバレッジの不完全がある場合は、クリーンな結果ではなく、ゼロ以外の終了コードで終了します。

あらゆるシークレット形式を認識できると想定するのではなく、ソースのペイロードはレポートから除外されます。表示されるファイル名やホスト名が機密性の高い識別情報である可能性はあります。共有する前に、レポートをローカルで確認してください。対象スクリプト、ライフサイクルフック、テスト、外部 URL は実行されません。ドメインへの馴染みや語句の重複だけでは、意味上のレビューやマージ権限を満たしません。

ワークフロー

フェーズ 1:入力と検出

スキャン対象を決定します。

  • ユーザーがスキルディレクトリのパスを指定した場合は、そのパスを直接使用します
  • ユーザーがスキル名を指定した場合は、plugins/*/skills/<name>/ または .claude/skills/<name>/ を検索します
  • ユーザーが「すべてのスキルをスキャン」と指示した場合は、すべての */SKILL.md ファイルを検出し、それぞれをスキャンします

対象に SKILL.md ファイルが含まれていることを確認します。スキルの構造を一覧表示します。

ls -la <skill-directory>/
ls <skill-directory>/references/ 2>/dev/null
ls <skill-directory>/scripts/ 2>/dev/null
フェーズ 2:自動静的スキャン

同梱スキャナーを実行します。

python3 "<installed-skill-dir>/scripts/scan_skill.py" "<authorized-inert-skill-directory>"

JSON 出力を解析します。スクリプトは重大度レベル、URL 分析、構造情報を含む検出結果を生成します。これらを、さらに詳しく分析する際の手がかりとして使用してください。

代替手段:スクリプトが失敗した場合は、参照ファイルに記載された Grep パターンを使用して手動で分析を進めます。

フェーズ 3:フロントマターの検証

SKILL.md を読み、次の項目を確認します。

  • 必須フィールド:name と description が存在すること
  • 名前の整合性:name フィールドがディレクトリ名と一致すること
  • ツールの評価:allowed-tools を確認します。Bash の使用は妥当ですか?ツールが制限なく使える状態(*)になっていませんか?
  • モデルの上書き:特定のモデルが強制されていますか?その理由は何ですか?
  • 説明の品質:説明はスキルの機能を正確に表していますか?
フェーズ 4:プロンプトインジェクションの分析

インストールされているスキルの references/prompt-injection-patterns.md を読み込み、内容を確認してください。

「Prompt Injection」カテゴリのスキャナーの検出結果を確認します。各検出結果について、次の手順を実施してください。

  1. ファイル内の前後の文脈を読む
  2. そのパターンがインジェクションを実行している(悪意がある)のか、インジェクションについて説明・検出している(正当である)のかを判断する
  3. セキュリティ、テスト、教育に関するスキルでは、インジェクションのパターンを参照することがよくあります。これは想定内です

重要な区別:参照資料にインジェクションのパターンを列挙するセキュリティレビュースキルは、脅威を記録しているのであって、攻撃しているのではありません。スキルを実行するエージェントに対して実行されるパターンのみを検出対象にしてください。

フェーズ 5:動作の分析

このフェーズはエージェントのみが実施します。パターンマッチングは行いません。SKILL.md の指示をすべて読み、次の点を評価してください。

説明と指示の整合性:

  • 説明は、指示でエージェントに実際に行わせていることと一致していますか?
  • 「コードフォーマッター」と説明されているスキルが、エージェントに ~/.ssh の読み取りを指示している場合、整合していません

設定・メモリのポイズニング:

  • CLAUDE.md、MEMORY.md、settings.json、.mcp.json、またはフック設定を変更する指示
  • 自身を許可リストに追加したり、権限を自動承認したりする指示
  • ~/.claude/ またはエージェント設定ディレクトリへの書き込み

スコープの逸脱:

  • スキルの明示された目的を超える指示
  • 不必要なデータ収集(スキルの機能に関係のないファイルの読み取り)
  • 説明に記載されていない他のスキル、プラグイン、または依存関係をインストールする指示

情報収集:

  • 必要な範囲を超えた環境変数の読み取り
  • スキルの範囲外にあるディレクトリの内容の一覧表示
  • 不必要な Git 履歴、認証情報、またはユーザーデータへのアクセス
フェーズ 6:スクリプトの分析

スキルに scripts/ ディレクトリがある場合:

  1. インストールされているスキルの references/dangerous-code-patterns.md を読み込み、内容を確認する
  2. 各スクリプトファイルをすべて読む(省略しない)
  3. 「Malicious Code」カテゴリのスキャナーの検出結果を確認する
  4. 各検出結果について、次の点を評価する:
    • データの持ち出し:スクリプトは外部 URL にデータを送信しますか?どのようなデータですか?
    • リバースシェル:I/O がリダイレクトされたソケット接続があるか
    • 認証情報の窃取:SSH キー、.env ファイル、環境変数内のトークンを読み取っているか
    • 危険な実行:動的入力を使った eval/exec、または補間を伴う shell=True があるか
    • 設定の変更:エージェント設定、シェル設定、Git フックへの書き込みがあるか
  5. PEP 723 の dependencies を確認する。正当で、広く知られたパッケージですか?
  6. スクリプトの動作が、SKILL.md に記載された機能の説明と一致していることを確認する

正当なパターン:gh CLI の呼び出し、git コマンド、プロジェクトファイルの読み取り、JSON を stdout に出力することは、スキルのスクリプトでは通常の動作です。

フェーズ 7:サプライチェーンの評価

スキャナーの出力にある URL ドメインとファイル・行の位置情報を確認し、ソース内で完全な URL を調べます。

  • よく知られたドメイン:GitHub、PyPI、ドキュメントサイトは調査の手がかりであり、特定のリポジトリやパッケージが信頼できる証拠ではありません
  • 信頼できないドメイン:不明なドメイン、個人サイト、URL 短縮サービスは、確認が必要なものとして検出します
  • リモートからの指示の読み込み:実行する、または指示として解釈するコンテンツを取得する URL は、すべて高リスクです
  • 依存関係のダウンロード:実行時にバイナリやコードをダウンロードして実行するスクリプト
  • 検証できないソース:標準レジストリにないパッケージやツールへの参照
フェーズ 8:権限の分析

インストール済みスキルの references/permission-analysis.md を読み込み、ツールのリスクマトリックスを確認します。

以下を評価します。

  • 最小権限:付与されたすべてのツールは、スキルの指示内で実際に使用されていますか?
  • ツールの正当性:スキル本文で、各ツールを必要とする操作が参照されていますか?
  • リスクレベル:参照ファイルの段階システムを使用して、権限プロファイル全体を評価します。

評価例:

  • Read Grep Glob — 低リスク。読み取り専用の分析スキル
  • Read Grep Glob Bash — 中リスク。Bash を使用する理由(同梱スクリプトの実行など)の説明が必要
  • Read Grep Glob Bash Write Edit WebFetch Task — 高リスク。ほぼすべてのアクセス権を持つ

信頼度レベル

レベル基準対応
HIGHパターンが確認され、悪意が明白深刻度を付けて報告
MEDIUM不審なパターンがあるが、意図は不明「確認が必要」として記載
LOW理論上の懸念、ベストプラクティスのみ報告しない

誤検知への注意が重要です。 正当なセキュリティスキルが攻撃パターンに言及しているだけで、悪意があると判断することが最大のリスクです。報告する前に、必ず意図を評価してください。

出力形式

## Skill Security Scan: [Skill Name]

### Summary
- **Findings**: X (Y Critical, Z High, ...)
- **Risk Level**: Critical / High / Medium / Low / No pattern matches
- **Skill Structure**: SKILL.md only / +references / +scripts / full

### Findings

#### [SKILL-SEC-001] [Finding Type] (Severity)
- **Location**: `SKILL.md:42` or `scripts/tool.py:15`
- **Confidence**: High
- **Category**: Prompt Injection / Malicious Code / Excessive Permissions / Secret Exposure / Supply Chain / Validation
- **Issue**: [What was found]
- **Evidence**: [local file/line and matched pattern; omit secret-bearing source snippets]
- **Risk**: [What could happen]
- **Remediation**: [How to fix]

### Needs Verification
[Medium-confidence items needing human review]

### Assessment
[Scoped review recommendation / More evidence required / Do not adopt]
[Brief justification for the assessment]

リスクレベルの判定:

  • Critical:信頼度の高い重大な検出事項(プロンプトインジェクション、認証情報の窃取、データの流出)がある
  • High:信頼度の高い高深刻度の検出事項、または中程度の検出事項が複数ある
  • Medium:信頼度が中程度の検出事項、または軽微な権限上の懸念がある
  • Low:ベストプラクティスに関する提案のみ
  • パターン一致なし:報告対象範囲では一致なし。これによって安全性や網羅性が保証されるわけではありません

参照ファイル

ファイル用途
references/prompt-injection-patterns.mdインジェクションパターン、ジェイルブレイク、難読化手法、誤検知のガイド
references/dangerous-code-patterns.mdスクリプトのセキュリティパターン:データ流出、シェル、認証情報の窃取、eval/exec
references/permission-analysis.mdツールのリスク階層、最小権限の方法、一般的なスキルの権限プロファイル

制限事項

  • このスキルは、タスクが上記の対象範囲に明確に該当する場合にのみ使用してください。
  • この出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認を求めてください。

コメント