Skip to main content
Agent SkillsはMarkdownの指示ファイルと少数のスクリプトを束ねた小さなパッケージですが、エージェント本体と同じ権限で動きます。ファイルの読み書き・シェル実行・保存された認証情報のすべてに届くため、実体はnpmやPyPIと同等以上のサプライチェーン攻撃面を持つ実行可能パッケージです。

リスクシナリオ

スキル経由の攻撃は大きく3つの経路をとります。
  • マーケットプレイスやGitHub経由で最初から悪性のスキルが配布される
  • 正規のスキルが後から侵害され、更新によって悪性へ変わる
  • スキル自体は無害でも、実行時に読み込む外部データ経由で命令が注入される
いずれもエージェントの権限で動くため、被害は認証情報の窃取・ソースコードの持ち出し・バックドアの設置まで届きます。厄介なのは、審査や走査を通した時点ではきれいで、実際に動いた瞬間に悪性へ変わるものがあることです。静的スキャンを通ったという表示は出発点であって、安全の保証にはなりません。

サプライチェーンのリスク

コミュニティベースで開発されているスキルには特に注意が要ります。ブランチプロテクションをはじめとした管理がなされていない場合や、開発者個人のアカウントが侵害された場合に、正規の配布経路のまま中身が改ざんされるリスクが大きくなります。利用者から見れば信頼したソースからの正規の更新であり、取り込みの時点で疑う理由がありません。 この構図はスキルに固有のものではありません。npmやpipのようなパッケージ管理でも、Visual Studio Codeのようなコードエディターの拡張機能でも、Google Chromeのようなブラウザ拡張でも同じ事件が繰り返されてきました。スキルは歴史が浅い分だけ署名や出所検証の標準が整っておらず、同じ轍を踏みやすい状況にあります。

攻撃の長期化

スキルがClaude Codeのプラグインとして提供される場合、自動アップデートが基本的にオンになります。承認後に中身を書き換えるrug pull型の攻撃と組み合わさると、侵害されたスキルを気づかないまま長期間使い続けることになります。どのバージョンをいつから使っているかを把握していなければ、侵害が公表されても自組織の影響範囲を特定できません。

npx skillsとlockファイル

スキル単体のエコシステムで使われるnpx skillsコマンドは、スキルのダウンロード時にlockファイルを生成し、特定バージョンへの固定を強制できるようになりました。バージョンピニングによって利用バージョンが明らかになったのは大きな進歩です。プロジェクト配下で管理しlockファイルごとリポジトリをGitHubにプッシュしていれば、スキルの侵害があったときに履歴と差分から追跡できますが、一方でユーザーのホームディレクトリにインストールした場合は変更履歴が残らず、何がいつ入れ替わったのかを事後に調べるのが難しくなります。またピニングが押さえるのはスキルのパッケージ本体まででスキル実行時に外部URLから読み込むドキュメントが書き換わる可能性があることに注意が必要です

監視体制とアラート対応

誰がどのバージョンのスキルをどこで使っているか。これを定期的に同期されるインベントリとして管理することが監視の土台になります。従業員のエンドポイント端末をMDMで管理し、ローカルファイル上にどのような設定ファイルがあるのかを定期的に取得・パース・インベントリ化します。 インベントリと並行して、スキルの侵害に関する最新情報を複数のチャンネルから取得できるようにし、対応プロセスを準備しておきます。侵害が公表された時点でやることは影響バージョンの特定・利用端末の洗い出し・スキルの停止と認証情報のローテーションで、導入時にスキルのハッシュを取り実行前に取り直して照合すれば自動アップデートや後からの書き換えもここで検知できます。

事前対策としての可視化と中央集権化

低コストで始めるならライセンスを確認した上でのプライベートフォークが簡単な手の一つです。社内のフォークを唯一の配布元とし、組織全体でそれのみを使います。バージョンは固定され、外部の更新はフォークへ取り込むたびに審査を通ります。悪意のあるスキルや侵害された更新はフォーク前の審査段階で落とせるため、被害を未然に防げます。

スキャンツールによる検査

悪意のある指示やスクリプトの検知には、著名なセキュリティベンダーがOSSとして公開しているスキャナーを使えます。Cisco AI Defenseのskill-scannerはスキルのディレクトリを指定して検査するツールで、YARAパターンによる静的解析・ASTを使ったデータフローの挙動解析・LLMによるセマンティック解析・VirusTotal連携を重ねてPrompt Injection・データの持ち出し・悪性コードを検知します。GitHub ActionsのワークフローとSARIF出力が用意されているため、プライベートフォークへ更新を取り込むときの審査をCIとして自動化できます。 SnykのAgent Scanはアプローチが逆で、端末側から入ります。Claude CodeやCursorなどの設定を自動で探索し、インストール済みのスキル・MCPサーバー・エージェント設定を洗い出した上でPrompt Injection・マルウェア・ハードコードされたシークレットなど15種類以上のリスクを検査します。何が入っているか分からない端末の棚卸しと検査を一度にできるため、インベントリ整備の入り口としても使えます。 ただしどちらのスキャナーも万能ではなく、コードのシグネチャを持たない自然言語だけの指示やエンコードで隠したペイロードはすり抜けますし、スキャナーにだけ無害な内容を返して実エージェントにだけ影響を与えることも技術的には可能となります。

参考文献