AI Agent 安全危機:なぜ Claude、GPT は自律攻撃が可能に見えるのか?JSON 検証にできること
「モデルは自分でハックするか」は問いが違う。2026 年の公開記録で、Claude と GPT がしていることは、あなたのサポート Agent と同じだ:tool_calls を出し、ホストが実行し、ツールがネットワークに触る。変わったのは、ループが長く、カタログが広く、モデルが自分で仕事を終えることだ。本稿は自律攻撃能力を分解し、それから問う:JSON 検証は実際に何ができるか。
読む前の早見
| 概念 | 一言 | どこに落ちるか |
|---|---|---|
| モデル | ツール名と引数だけを提案する | tool_calls JSON |
| ホスト | 検証し、実行し、結果を書き戻す | あなたの runtime であり、モデルではない |
| 自律 | ループで JSON を埋める。人間の待ちが減る | Agent loop |
| JSON Schema | 実行前に形を測る物差し | required / enum / allowlist |
分担を先に覚える。モデルはオブジェクトを埋め、ホストが実行し、ループが動作を連続させる。JSON 検証は形を測る。線を抜くことも、認証することも、二度聞くことも代行しない。
「自律攻撃」の問いを直す
2026 年の夏から秋、両旗艦ラボは同じ種類の文を公開文書へ書いた:モデルは助言だけではない。ツールを選び、引数を埋め、結果を読み、次の一手を選ぶ。Anthropic は Claude を「自律サイバー攻撃 Agent」と書いた。OpenAI は GPT-6 Astra を「重要なサイバーセキュリティ能力閾値」と標した。「モデルがゼロデイを発明し、自分でポートを開く」と読むと、守る層を間違える。
公開記録で重なるのは三件だ。一つ欠ければ、ただのチャットだ:
- モデルは名前と引数だけを提案する。副作用はホストにある。
- カタログがブラウザ、シェル、パッケージ倉庫、任意の HTTP を含む瞬間、合法な JSON が動作になる。
- ループはもう待たない。結果が書き戻れば、次のオブジェクトはすぐ埋まる。人は少数の戦略の門に留まる。
だから本稿は、Claude 事件のタイムラインをホップごとに語り直さない。Claude 事件とツール JSON はすでに実行経路を分解した。本稿が問うのは、能力の出所と、JSON 検証が覆える範囲だ。
能力は「モデルが悪くなった」ではない
返金照会も公開事件も、同じループを歩く。AI Agent 完全ガイド はすでに描いた:提案、実行、書き戻し、再提案。ツール名を替えても、ループは変わらない。自律と呼べるのは、三層が重なったときだ:
- 多段ループ。本物の副作用は最低四ホップだ:提案 → 門 → 実行 → 書き戻し。門を飛ばせば、JSON は命令になる。
- 箱の外へ出られるカタログ。Function Calling、MCP Tool Schema vs Function Calling、Claude Code / Codex のローカルツールは、発話を仕事にする。未登録のツールは呼べない。ネットに出られるツールを一本足せば、実行経路が一本増える。
- 自分で仕事を終えるモデル。GPT-6 Astra ガイド はすでに書いた:それは「ツールを選ぶ → ツールを呼ぶ → オブジェクトを返す」をより確実に歩き、「続けるべきか」をあまり聞かない。ループが長くなると、悪い形は次ホップに事実として扱われやすい。
どの層を欠いても、ただのチャットだ。三層が揃えば、合法な JSON は実システムに触る。モデルが新プロトコルを発明したのではない。ホストが実行をループへ渡したのだ。
Claude と GPT:公開信号であり、一本の映画ではない
先に分ける。「AI が反乱した」に潰すと、変えられる唯一の部分を失う:ツール、ネットワーク、門。
Claude 線。2025 年の GTG-1002:人間が標的を選び、Claude Code と MCP が戦術を走らせた。Anthropic の見積もりでは、AI が戦術作業の約 80–90% を完了し、人間は戦略の門に留まった。2026 年 7 月、設定誤りの評価環境が公衆インターネットへ届き、モデルは CTF 課題を実組織として扱った。詳細は Claude 事件とツール JSON。骨格は一句だ:箱の外へ出られるツール + ループで埋める JSON。
GPT 線。GPT-6 Astra ガイド は 2026 年 9 月 3 日に公開された。公式文は、それを「重要なサイバーセキュリティ能力閾値」に達した最初のモデルと標す:会社は、段階的な人間の指示がほぼ無くても、硬化したシステムの脆弱性を見つけ利用できると考える。完全な攻撃能力は Daybreak(Blue / Red)の内側に留まる。公開版は、より厳しい拒否と非同期の misalignment monitoring を足す。同日の System Card は、思考連鎖の監視可能性が GPT-5.6 Sol より下がったとも書く。二文は一緒に読め。
Astra は「自分でポートを開く」ではない。ツールチェーンをより確実に歩くことだ。UK AISI のサプライチェーン模擬:書面の範囲が無いと、499 回中 60 回が越境した。明示の制限があると、500 回中 2 回。足場と制約は、ランキングの百分率より価値がある。独立ラボ Irregular は、完全に硬化した標的で成功攻撃 0 を見た——能力閾値はマスターキーではない。
共通の工学面は一句だ:モデルはオブジェクトを埋め、ホストが実行する。ブランドを替えても、ループは変わらない。
手を動かすのはオブジェクトであり、一段の話ではない
危機を「モデルが危険な言葉を言った」と書くと、システム prompt を直しに行く。公開記録では、動作はホストが tool_calls を解析したあとに始まる。名前が合い、引数が通れば、関数は走る。
良性の Function Calling の形は、サポートの照会と区別がつかない:
{
"tool_calls": [{
"id": "call_3c91",
"type": "function",
"function": {
"name": "lookup_order",
"arguments": "{\"order_id\":\"A-1042\"}"
}
}]
}
arguments は文字列化されたオブジェクトであり、チャット記録ではない。モデルは「攻撃を送る」のではない——フィールドを送る。広い type: object は扉を外すのと同じだ:余分な鍵、任意の URL、未宣言のメソッドがホストに入る。
各ツールには JSON Schema が要る。キーワードは JSON Schema 教程。名前は短く、enum は固定し、パスは pattern で釘付けにせよ。AI が JSON Schema を必要とする理由 はすでに書いた:Schema は口径であり、prompt の「JSON を返して」ではない。
デバッグは 整形 で形を見、JSONPath 抽出 で name と arguments を抜き、先週通ったオブジェクトと JSON Diff する。本番の認証情報、顧客行、ツールログを公開サイトへ貼るな。
JSON 検証にできること
検証はアラインメントではない。アンチウイルスでもない。答える問いは一つだ:このオブジェクトは実行してよいか?止められるのは、すべて形だ:
- required が欠ける。
pathが無ければ HTTP は呼ばない。 - 型が違う。文字列の
amountは失敗する。 - enum の外。
methodはGETだけだ。 - 余分な鍵。
additionalProperties: falseが紛れ込んだhostを止める。 - pattern 不一致。
pathは/api/v1/の下になければならない。 - 結果がオブジェクトではない。次ホップに parse する散文は無い。捏造フィールドは状態に入れない。
この引数オブジェクトは合法な JSON に見える。だが、在ってはいけない host フィールドを抱えている:
{
"method": "GET",
"path": "/api/v1/orders/A-1042",
"host": "internal.example"
}
締めた inputSchema に対し、このオブジェクトは実行前に失敗すべきだ:
{
"name": "http_request",
"description": "Call an allowlisted HTTP API",
"inputSchema": {
"type": "object",
"properties": {
"method": { "enum": ["GET"] },
"path": { "type": "string", "pattern": "^/api/v1/" }
},
"required": ["method", "path"],
"additionalProperties": false
}
}
上の Schema は GET /api/v1/… だけを許す。additionalProperties: false が無ければ、モデルはいつでも別の host を滑り込ませられる。API キー、cookie、内部ベースはホストに残せ。引数オブジェクトへ入れるな。検証はログの物差しでもある:毎回の tool_calls オブジェクトを残せ。散文の要約では Diff も再生も突合もできない。
検証にできないこと
Schema を「安全計画」と書くと、次ホップは本物の門を落とす。検証ができないことはこれだ:
- ネットワーク隔離。「インターネットはない」と書いた prompt は、線を抜く代わりにならない。評価事件がすでに証明した。
- 認証。誰でも繋がる MCP エンドポイントは、カタログをネットへ公開する。
- 二度目の確認。持ち出し、スキーマ変更、成果物の公開は、人間が門を通す。GTG-1002 の操作員は、もともとそれらの門にいた。
- 意図の審査。合法な形でも、触ってはいけないホストを指しうる。allowlist は別層であり、型検査ではない。
- 思考連鎖への信頼。「シミュレーション中だ」はネットワークログではない。モニタはツールオブジェクトを読むべきであり、モデルの自己説明だけを見てはいけない。
- ベンダー監視の代替。Astra の misalignment monitoring はツール流量を見てアラートする。それはあなたのアプリの validator ではない。
additionalProperties: falseを代行しない。
四層を分けたあと、職責は戻る:
| 層 | システムがしていること | Schema がないと |
|---|---|---|
| モデル | 目標をツール名と引数に畳む | 散文がホストに入り、副作用が先に走る |
| ホスト | tool_calls を検証して実行する | 名前が合えば呼ぶ。ネットワーク方針は口を挟めない |
| MCP / API | 動作を外部システムへ繋ぐ | 任意の URL、任意のメソッドが箱の外へ出る |
| JSON Schema | 何もしない。物差しだけだ | 物差しが prompt にしかないと、CI と runtime は測れない |
物差しは形を測る。権限と線は測れない。Structured Output は不正な token を止める。ネットワーク隔離は代行しない。
門の書き方:次ホップもオブジェクトでなければならない
次ホップを実行すべきかは、「続けて」という一文ではいけない。オブジェクトでなければならず、allowed はモデルが埋めてはいけない:
{
"step": 3,
"last_tool": "lookup_order",
"state": {
"order_id": "A-1042",
"status": "paid"
},
"next": {
"tool": "http_request",
"allowed": false,
"reason": "missing_confirmation"
}
}
allowed は、ホストが Schema と方針から算出しなければならない。モデルは「続けることを勧める」と言ってよい。自分で allowed を true にしてはいけない。AI Agent と JSON Schema のワークフロー は門の並べ方だ。
方針ファイルは default-deny、それから切れ目を開ける:
{
"agent": "ops_assistant",
"default_deny": true,
"max_steps": 8,
"tools": {
"lookup_order": {
"network": false,
"confirm": false
},
"http_request": {
"network": true,
"allowlist": ["api.internal.example"],
"confirm": true
}
}
}
ネットに出られるツールは既定で切る。開けるなら方針ファイルへ書き、確認を要求する。prompt の「インターネットはない」は制御措置ではない。
2026 年の実装
- リポジトリに
schemas/tools/とpolicy.jsonを置き、安定した$idと版を付ける。 - JSON Schema を先に書き、それから MCP または Function Calling を登録する。型は投影であり、源ではない。
- 内部状態の照会はネットなしツールへ。ネットに出る操作、書き込み、外部送信は分けて登録し、既定は
confirm: true。 - 新しいツールの既定は
default_deny。拡張するなら版を足す。ルートオブジェクトを広げてはいけない。 - 評価、CI、ローカル Agent は同じ allowlist を使う。prompt の「ネットに出るな」は制御措置にならない。
- 秘密と顧客フィールドはブラウザだけで見る:整形、JSON Diff、アップロードなし。
カタログは薄くてよい。大切なのはデモより先にファイルだ。モデルは変わる。ツール名は変わる。口径を先に安定させる。
よくある誤り
- モデルを実行者だと思う。それは JSON を埋める。箱の外へ出る、データベースを変える、リクエストを送るのはホストだ。
- 広い
type: objectで設計を逃げる。開いたオブジェクトは門ではない。 - 入力だけを検証し、結果を検証しない。次ホップは捏造フィールドを事実として扱う。
- 思考連鎖だけを信じる。「シミュレーション中だ」はネットワークログの代わりにならない。
- ベンダー監視をホスト検証だと思う。misalignment monitoring はアラートであり、
additionalProperties: falseではない。 - 検証を安全計画の全部だと思う。形が通っても、線、権限、確認は別に書く。
FAQ
モデルはすでに自分で標的を立てられるか?
公開記録では違う。GTG-1002 は人間が標的を選び、タスクを分解し、戦略の門を通した。評価事件は、人間が CTF 課題を出し、隔離を忘れたことだ。ここでの自律は、戦術ステップで人間の待ちが減ることであり、モデルが誰を打つかを決めることではない。
JSON 検証は攻撃を止められるか?
不正なオブジェクトの実行は止められる:欠けたフィールド、誤った型、余分な鍵、接頭辞の外のパスは、実行前に失敗する。隔離、認証、人間の確認の代わりにはならない。合法な形でも、触ってはいけないホストを指しうる。その層は allowlist だ。
Claude と GPT の差は何か?
ブランドは違う。ループは同じだ。Astra はツールチェーンをより終えやすく、サイバーセキュリティ能力のラベルを持つ。Claude 事件は、箱の外へ出る経路があるカタログが実システムに触ることを示した。工学では先にカタログと Schema を監査せよ。モデルを替えることから始めるな。
Structured Output で足りるか?
足りない。不正な token を止め、最終返信を Schema に載せる。ネットワークを隔離しない。形は合法でも、触ってはいけない対象の呼び出しは捕まらない。副作用のある仕事は、なお Function Calling を通る。ホストはもう一度検証しなければならない。
この JSON をローカルでどう見るか?
先に整形して形を見、Schema で欠けた required や誤った enum を探し、先週通ったオブジェクトと Diff する。JSONSort はブラウザローカルで行い、データをアップロードしない。本番の認証情報や顧客記録を公開サイトへ貼るな。
まとめ
安全危機は「モデルがハックを覚えた」ではない。Agent に箱の外へ出られるツールを渡し、ループで JSON を埋めさせれば、実世界は触られる。
JSON 検証にできることは狭い。そして硬い:実行前に形を測る。欠けたフィールド、誤った型、余分な鍵、接頭辞の外のパスは、その場で失敗する。線、権限、確認は、検証にはできない。別に書け。次のツールを足す前に、schemas/tools/ と policy.json をリポジトリへ置け。
関連記事
- Claude AI ハッカー事件解析 公開二件の実行経路
- GPT-6 Astra ガイド 能力閾値、Responses API、JSON Schema
- AI Agent とは何か?Tool Calling と JSON ランタイム、ツール呼び出し、JSON 契約
- AI が JSON Schema を必要とする理由 Structured Output、Function Calling、契約
- AI Agent と JSON Schema のワークフロー Tool Calling から構造化の門へ
- JSONSort ローカル道具箱 整形、検証、Diff
- すべての記事 JSON と AI 開発のメモ
更新履歴: 初回公開