Hello there, ('ω')ノ
今回は、LLM(大規模言語モデル)がどのような思考経路で“壊されていくのか”を、ハッカー視点で一歩ずつ解きほぐします。 ゴールは単なる攻撃手法の紹介ではなく、なぜその発想に至るのか/防御側は何を設計すべきかを理解し、AIエージェントやLLMアプリを安全に作る力を身につけることです。
重要:ここでは再現可能な具体ペイロードやコマンドは一切書きません。 あくまで「考え方」と「設計・防御に使える視点」に集中します。
全体像:このペンテストで何が起きているのか
テストされているのは、次のような構成のLLMアプリです。
- ユーザー入力(プロンプト)
- システムプロンプト(開発者が定義したルール)
- LLM(推論エンジン)
- 外部ツール/関数呼び出し(ファイル操作、API、OSコマンド等)
ハッカーの関心は一貫しています。
👉 「LLMが“考えるだけの存在”から“行動できる存在”に変わる境界はどこか?」
ステップ1:最初の観察 — 「LLMは何を信じているか」
ここで考えていること
- LLMはどの情報を“命令”として扱うのか
- ユーザー入力とシステム指示の優先関係はどうなっているか
LLMは魔法ではなく、与えられたテキストを文脈として“もっともらしく”解釈する装置です。 この時点でハッカーは、こう仮定します。
「もし“ユーザー入力”が、 “システムの命令”と同じ重みで扱われていたら?」
これが最初の仮説です。
ステップ2:プロンプトは「入力」ではなく「制御面」だと気づく
視点の転換
多くの人はプロンプトを「ただの文章入力」だと考えます。 しかしハッカーは違います。
- プロンプト = プログラムの一部
- プロンプト = 設定ファイル
- プロンプト = 権限制御の境界
つまりここは、SQLインジェクションでいうSQL文そのものと同じ立ち位置です。
「文として解釈されるなら、 文脈を書き換えられる余地があるはず」
この時点で、攻撃対象はモデルではなく“設計”になります。
ステップ3:制約を観察する — 「何を禁止されているか」
なぜ“禁止事項”を見るのか
ハッカーは必ず制限から入る。
- 「〜してはいけない」
- 「〜は拒否する」
- 「安全のために〜」
理由は単純です。
制限は、内部の本音(本来できること)を示すヒント
これは人間の交渉でも同じです。 「それはできません」と言われた時、人は「なぜ?」を考えます。
LLMも同様で、禁止文言は“本当は可能”な機能の存在を示唆します。
ステップ4:LLMの“役割混同”を突く発想
重要な思考ポイント
このペンテストで最も重要なのは、次の一点です。
LLMは「誰の役割で話しているか」を時々忘れる
- ユーザー
- 開発者
- システム
- ツール実行者
これらがすべてテキストとして同じ場所に並ぶことで、 LLMは役割を混同する可能性があります。
ハッカーはここでこう考えます。
「もし“ユーザー”が “システムの代弁者”のように振る舞ったら?」
これはなりすましではなく、 文脈上の錯覚を誘う攻撃です。
ステップ5:ツール呼び出し=「現実世界への出口」
ここで状況が一気に危険になります。
- LLMが文章を生成するだけ → 被害は限定的
- LLMがツールを呼ぶ → 現実世界に影響
ハッカーの思考はこうです。
- どの条件でツールが呼ばれるか
- ツール実行前に人間チェックはあるか
- ツールの引数は誰が検証しているか
もし 「LLMが考えた結果を、そのまま実行する」 設計になっていれば、それは自律型エージェントの弱点になります。
ステップ6:「段階的に自由度を上げる」という攻撃思考
ここで重要なのは、いきなり壊しにいかない点です。
ハッカーは常にこう進めます。
- 解釈の幅を少し広げる
- 許可される範囲を観察する
- 次の一手を決める
これは人間社会のルール破りと同じです。 最初から重罪を狙う人はいません。
小さな曖昧さ → 大きな自由度 これがLLM攻撃の本質です。
ステップ7:最終的に「なぜ壊れたのか」
このケースの本質的な問題は、モデル性能ではありません。
壊れた理由(設計視点)
- プロンプトを信頼しすぎた
- ツール実行前の検証がなかった
- LLMを“意思決定者”として扱った
LLMは助言者であって、 最終判断者にしてはいけない。
防御側が必ず設計すべきポイント(超重要)
1. プロンプトは「入力」ではなく「攻撃面」
- 外部入力は必ず別レイヤーで検証
- LLMに直接“命令文”を渡さない
2. ツール実行には人間 or ルールエンジン
- LLM → 提案
- 人間/ポリシー → 承認
- 実行
3. LLMの役割を固定する
- 「あなたは判断しない」
- 「あなたは提案のみ」
- 「あなたは実行できない」
これをコード側で保証する。
ハッカー視点から学ぶ最大の教訓
LLMは“賢い”のではなく、“従順”である
- 文脈を信じる
- 指示に従おうとする
- 一貫性を保とうとする
だからこそ、 設計者が責任を持って“従わせる範囲”を決めなければならない。
まとめ
- LLM攻撃は「モデル破壊」ではなく「設計ミスの可視化」
- プロンプトは入力ではなく制御面
- ツール呼び出しは現実世界への出口
- AIエージェントには必ず人間とルールのガードレールを
Best regards, (^^ゞ