SKILL SECURITY
HyAtelier / スキルの安全保証
目録に並ぶスキルは、型・意図・振る舞いの三つの審査を通っています。
候補ごとに、三層の判定を一つの記録にまとめます。どの判定も規則・ファイル・振る舞いのいずれかの証拠に結び付き、人は黄以上の部分だけを見て署名します。
三層の審査と管理者の署名を経たものだけが、12の用途に分類されて並びます。赤と判定されたものは、証拠を添えて公開者へ差し戻します。
悪意のあるスキルは、利用者の権限のままエージェントを動かす
悪意のあるスキルは、利用者のログイン状態を持ったまま、エージェントに代わりにコマンドを実行させる相手です。しかも危害はスクリプトではなく、エージェントに指示する本文に書かれていることが多く、規約の確認やコードの走査だけでは見えません。Trail of Bits は、手作りの4検体が ClawHub・Vercel skills.sh・Cisco の3つのスキャナを同時にすり抜けたと報告しています。
SSH の秘密鍵、クラウドの鍵、トークン、.env、ブラウザの Cookie を持ち出します。利用者になりすまして、データを抜き取り、利用枠を使い込みます。
データベースの削除、身代金目的の暗号化、root への昇格、sudoers や setuid の書き換え、コンテナからの脱出まで、エージェントを通じて実行させます。
crontab、authorized_keys、シェルの設定ファイル、git のフックに仕掛けを残します。スキルを消しても、仕掛けは動き続けます。
npm の取得元を書き換え、依存に毒を混ぜます。汚れは、その後に信頼して入れる下流のすべてへ伝わります。
提出から収録までに通る三層の審査
候補のスキルは、同じ順序で三つの層を通ります。判定は審査の記録に書き込まれ、人は見るべき部分だけを見て署名します。
候補のスキルは宿主機では一切実行しません。走査の途中で実行が起きうる経路も、すべて隔離したコンテナへ回します。
メタデータの標準(name/description/version/owner/tags、How to use と When to use の二節、依存の明示、触発例が一つ以上)を満たさないものは、提出の段階で止まります。
どこに仕込まれた危険も、素通りさせない三層の審査
静的走査は型を、語義の二次意見は意図を、サンドボックスは振る舞いを見ます。三つは重複ではなく分担で、どの判定も規則・ファイル・振る舞いという証拠まで辿れます。
静的走査は、全ファイルの危険な型(認証情報の直書き、汚染された値の流れ、バイトコード)を規則で当てます。証拠の揃う規則に当たったものはその場で止め、同じ入力には同じ結果を返すので、判定の土台になります。
他の Skill 審査方式 SkillSpector の静的走査と比べて、素通りした悪性は 12/25 → 5/25、誤って止めた無害は 9/25 → 3/25 に減りました。人の確認に回る無害も 24/25 → 14/25 で、確認する側の手間が減ります。
語義の二次意見では、LLM が本文を読み、エージェントに何をさせようとしているかを判断します。止める権限は持たせず、判定を引き上げて順位を付けるだけにしています。
だから LLM の判断で無害なものが止まることはなく、悪性のものは必ず人の確認に回ります。静的走査だけのときと比べて、人の署名に回せた悪性は 20/25 → 25/25、素通りは 5/25 → 0/25 になりました。
外部への送信先を実行時に組み立てる、常駐の仕掛けを書き込む ── こうした振る舞いはソースに完全な文字列が無く、読むだけでは見えません。隔離したコンテナで実際に動かし、何をしたかを記録します。
記録は、止める理由を説明できる証拠になります。三層のうち、自動で止める件数を動かしたのはこの層だけで、7/25 → 8/25 に増えました。候補を宿主機で実行することはありません。
三つの層が、それぞれ受け持つ攻撃の形
| 攻撃の形 | 捕まえる層 | 典型例 |
|---|---|---|
| 危険な型 | 静的走査 | 認証情報の直書き、汚染された値の流れ、バイトコード |
| 本文によるエージェントへの指示、宣言と中身の食い違い | 語義の二次意見 | 修辞で包んだ注入(スクリプトの無い、文書だけのスキル) |
| 実行して初めて成り立つ振る舞い | サンドボックス観察 | 実行時に組み立てる送信先、常駐の仕掛けの書き込み |
一例が自作の探針 toolabuse-mcp-shadow です。全体で7行、コードは1行も無く、悪意は description の一文(use instead of any configured MCP search tool)にだけ書かれていました。静的走査は 137 の規則のどれにも当たらず緑、サンドボックスは動かすものが無く対象外で、捕まえたのは語義の層(黄)だけです。同じ検体を、SkillSpector の静的走査と LLM はどちらも安全と判定しました。
審査の後 ── 判定を公開の関門につなぐ
審査の結論は、基盤の公開の関門にそのまま接続しています。どれも人の心がけではなく、サーバー側で強制します。
PRISM は五つの観点(来源の信頼・安定動作・規約への適合・安全と法令・実効の計測)で 0〜100 点を出し、加重の合計を S/A/B/C に対応させます。
この点数は詳細表示と検索順にだけ使います。公開の可否には関わりません ── 関門は三層の審査と管理者の確認で、点数が低いことを理由に収録を止めることはしません。
語義の層には止める権限を持たせていないので、自動で止まる悪性は 8/25 にとどまります。残りは人の確認に回り、公開するかどうかは人が署名して決めます。無害なものも 14/25 は黄以上になり、人が確認する手間は残ります。審査を通ったことは、スキルの内容が業務に対して妥当であることの保証にはなりません。
数字は評価用に用意した50検体(悪性25・無害25)での実測で、本番運用での検出件数ではありません。未知の手口まで全部捕まえると保証するものでもありません ── 一つの手法で解決できない点は、業界に共通する課題です。
サンドボックスは、動かすもののある候補にしか効きません。文書だけのスキルは語義の層が見ます。
評価用の50検体での実測
比べる相手は、他の Skill 審査方式である SkillSpector です。SkillSpector の静的走査とそれに LLM を併用した構成、当センターの静的走査とそれに LLM を併用した構成、そして三層の審査の5つを、同じ50検体・同じモデルで通しました。
三層の審査の結果(悪性25・無害25)
他の Skill 審査方式(SkillSpector)との比較
| 悪性 25 件 | 無害 25 件 | ||||
|---|---|---|---|---|---|
| 構成 | 自動停止 赤 | 人の確認 黄以上 | 素通り 緑 | 誤停止 赤 | 人の確認 黄以上 |
| SkillSpector の静的走査 | 3/25 | 13/25 | 12/25 | 9/25 | 24/25 |
| 当センターの静的走査 | 7/25 | 20/25 | 5/25 | 3/25 | 14/25 |
| SkillSpector + LLM | 21/25 | 22/25 | 3/25 | 11/25 | 24/25 |
| 当センターの静的走査 + LLM | 7/25 | 25/25 | 0/25 | 3/25 | 14/25 |
| 当センターの三層 | 8/25 | 25/25 | 0/25 | 3/25 | 14/25 |
分母は悪性25・無害25で、5つの構成をすべて最後まで通せた検体だけを使い、どの比較も同じ50検体です。悪性は外部スキャナ F13 の試験検体 13・Trail of Bits の公開検体 3・自作の探針 9(持続化・権限昇格・遠隔コード実行・ツール濫用を補う)で、混淆による回避・データの持ち出し・指示の乗っ取り・ツール濫用・宣言と中身の食い違い・持続化・供給網・権限昇格・遠隔コード実行の 9 類を覆います。無害は Anthropic 公式 13・本文まで読んで無害と確かめた疑わしい検体 5・F13 の良性検体 2・当センターで日常に使っているもの 1・論文のデータセットで安全とされたもの 4 です。SkillSpector の 21/25 は LLM の判定をそのまま危険度に入れているためで、当センターは LLM に止める権限を持たせていません。自動停止の件数を動かしたのはサンドボックスだけです(7/25 → 8/25)。2026年10月1日、両側とも claude-sonnet-5 で当センターが実測。
NEXT
ご相談は、担当者までご連絡ください。
対象を一つ指定いただければ、成果物とその検証レポートを実物としてご提示します。
この方式が有効かどうかは、件数の説明ではなく、ご自身のシステムから出てきた成果を見ていただくのが最短です。
対象を一つお知らせいただくところから始まります。