AIエージェントとツール利用の保護
自律的なエージェントの行動を制約します。
「AIエージェントとツール利用の保護」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
エージェントが危険になる理由
AIエージェントとは、ツールとループを組み合わせたLLMです。推論し、関数(検索、コード実行、API、ファイルアクセス)を呼び出し、結果を観測し、目標が達成されるまでこれを繰り返します。この自律性は強力である一方、危険でもあります。
セキュリティ上の本質的な変化は次のとおりです。通常のチャットボットでは、悪い出力は単なるテキストです。エージェントでは、悪い判断が実際の操作になります。たとえば、レコードの削除、メールの送信、1ドルの支出、秘密情報の漏えいなどです。
信頼できないコンテンツが推論ループに入り込む可能性があるため、エージェントが利用できるすべてのツールがプロンプトインジェクションの攻撃面になります。
ツールに対する最小権限
最も重要な制御は最小権限です。各ツールには、目的を達成できる範囲で最も限定されたスコープだけを付与します。
- 読み書き可能なものよりもread-onlyを優先し、読み取り対象を現ユーザーのデータに限定します。
- 広範なツールをより限定されたツールに分割します(生のSQLツールではなく、
get_invoiceツールを使用します)。 - ツールの認証情報を共有サービスアカウントではなくエンドユーザーのIDに紐付け、エージェントがユーザーに許可された操作だけを引き継げるようにします。
# Scope queries to the authenticated user, never raw SQL
def get_invoice(invoice_id: str, *, user_id: str):
return db.query(
"SELECT * FROM invoices WHERE id=%s AND owner=%s",
(invoice_id, user_id),
)人間による確認ポイント
高い影響を及ぼす操作や取り消せない操作では、実行前に人間による明示的な承認を必須にします。エージェントが提案し、人間が確認します。
- 外部へのメールやメッセージの送信。
- 金融取引や購入。
- データの削除や上書き。
- コードのデプロイやインフラストラクチャの変更。
実行前にインジェクションやハルシネーションによるコマンドを発見できるよう、正確な操作と引数を平易な言葉でユーザーに示します。
コードとコマンドのサンドボックス化
コードやシェルコマンドを実行するエージェントは、必ず分離されたサンドボックス内で実行し、ホスト上では決して実行しないでください。
- ホストマウントを持たない、一時的なコンテナまたはマイクロVMを使用します。
- ネットワークアクセスをデフォルトで無効にし、明示的な送信先許可リストだけを許可します。
- 暴走したコードや悪意のあるコードを封じ込めるため、CPU、メモリ、実行時間に制限を設定します。
- rootではない権限のないユーザーとして、ルートファイルシステムを読み取り専用にして実行します。
docker run --rm \
--network none \
--read-only \
--user 1000:1000 \
--memory 256m --cpus 0.5 \
--pids-limit 64 \
agent-sandbox:latest python /work/task.pyリーサル・トライフェクタを断つ
エージェントがプライベートデータへのアクセス、信頼できないコンテンツへの接触、外部と通信する能力を同時に持つと、データ流出ツールになります。この組み合わせがリーサル・トライフェクタです。
各ワークフローで、少なくとも1つの要素を取り除くように設計します。
- 信頼できないコンテンツを扱うセッションを、機密データを保持するセッションから分離します。
- 外向きのネットワーク通信を厳格な許可リストに制限します。
- プライベートデータがコンテキストに含まれる場合は、外部に送信する前に承認を必須にします。
信頼できないツール出力
ツールの結果はモデルのコンテキストに再び入るため、ツール出力は信頼できない入力です。Webページ、取得したファイル、APIレスポンスには、次の推論ステップを狙ったインジェクション指示が含まれている可能性があります。
- ツール出力を明確な区切り文字で囲み、コマンドではなくデータであることを示します。
- 隠しテキスト(HTMLコメント、ゼロ幅文字、画面外に配置されたCSS)を削除または無効化します。
- ペイロードに使える余地を制限するため、注入コンテンツのサイズに上限を設けます。
ポリシーチェックなしに、生のツール出力だけで次のツール呼び出しを密かに決定させてはなりません。
アクションの許可リストとポリシー適用
モデルが自分自身を取り締まることに頼ってはいけません。エージェントと各ツールの間にコードによるポリシー層を設けて適用します。
- 各ツール呼び出しを、許可されたアクションと引数形式の許可リストに照らして検証します。
- 現在のタスクのスコープ外にある呼び出しを拒否します。
- ツールごと、ユーザーごとにレート制限と予算を適用します。
この決定論的なゲートはモデルの判断に関係なく動作するため、インジェクションが成功しても強固な壁で遮断されます。
def authorize(call):
if call.name not in ALLOWED_TOOLS:
raise PolicyError("tool not allowed")
if not SCHEMA[call.name].validate(call.args):
raise PolicyError("bad arguments")
if exceeds_budget(call):
raise PolicyError("rate limit")ループを制限する
自律的なループは、無限の再試行、再帰的なツール呼び出し、暴走する支出(denial-of-wallet)によって制御不能になる可能性があります。上限を設けます。
- タスクあたりの最大ステップ数と合計トークン数に上限を設定します。
- 実行全体に実時間のタイムアウトを設定します。
- 累積コストを追跡し、しきい値を超えたら中止します。
- ループ(同一の呼び出しの繰り返し)を検出して抜け出します。
これらの制限は、DoSや無制限な消費の攻撃(OWASP LLM10)の影響も抑えます。
メモリとマルチエージェントのリスク
永続的なエージェントメモリとマルチエージェントシステムは、新たな攻撃面を生み出します。
- メモリポイズニング: あるセッションで長期メモリに書き込まれたインジェクションが、後のセッションに影響を与えます。永続化する内容を検証し、スコープを限定します。
- エージェント間の信頼: 侵害されたエージェントが別のエージェントにインジェクションを仕掛ける可能性があります。エージェント間のメッセージを信頼できないものとして扱います。
- 混乱した代理人: 高い権限を持つエージェントが、より低い信頼レベルのエージェントからの要求に応じて行動する問題です。元の主体の認可情報をチェーン全体で引き継ぎます。
ロギングと可観測性
見えないものを安全にすることはできません。エージェントのトレース全体を計測します。
- すべてのツール呼び出しと、その引数および結果をログに記録します。
- フォレンジック調査に備えて、推論コンテキストと取得したコンテンツを記録します。
- 予期しない外向き通信、権限の使用、拒否の繰り返し、コストの急増などの異常を検知して通知します。
- 実行ユーザーに紐付いた改ざん不可能な監査証跡を保持します。
優れたテレメトリにより、気付かれない侵害を検知および調査可能なインシデントに変えられます。
多層エージェントアーキテクチャ
これまでをまとめると、防御可能なエージェントスタックは次のようになります。
- アイデンティティ: 最小権限のスコープで、エンドユーザーとして操作を実行します。
- ポリシーゲート: すべてのツール呼び出しに対して、決定論的な許可リストとスキーマ検証を適用します。
- サンドボックス: ネットワークとリソースを制約した分離実行環境。
- 人間による確認ポイント: 取り消せない操作に対する承認。
- 制限: ステップ、トークン、時間、コストの予算。
- 可観測性: 完全な監査ログと異常アラート。
モデルは乗っ取られる可能性があると想定し、乗っ取られた場合でも被害範囲が小さく収まるようにします。
理解度チェック
エージェントのセキュリティ制御についての理解度を確認します。
振り返り
AIエージェントとツール利用のセキュリティ保護:
- エージェントは不適切な出力を実際のアクションに変えてしまうため、すべてのツールが攻撃対象領域になります。
- ツールごとに最小権限を適用し、認証情報をエンドユーザーに紐付けます。
- 不可逆なアクションには人間による承認を必須とし、コード実行はサンドボックス化します。
- 致命的な三要素を断ち切り、ツールの出力を信頼できない入力として扱います。
- 決定論的なポリシーゲート(許可リスト、スキーマ検証)を、プロンプトではなくコードで強制します。
- ループ(ステップ数、トークン数、時間、コスト)に上限を設け、検知のためにすべてのツール呼び出しをログに記録します。
AI チューターと学ぶ Cyber Security Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 76
- レッスン
- 303
よくある質問
「AIエージェントとツール利用の保護」レッスンは無料ですか?
はい。「AIエージェントとツール利用の保護」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「AIエージェントとツール利用の保護」で何を学びますか?
自律的なエージェントの行動を制約します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「AIエージェントとツール利用の保護」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- プロンプトインジェクションとJailbreak
- OWASP LLM Top 10
- AIエージェントとツール利用の保護
- モデル、データ、サプライチェーンのリスク