Agentセキュリティの特殊性

従来のセキュリティモデルは、行動の主体が認証された人間のユーザーであり、行動は予測可能であると仮定しています。しかし、AI Agentはこの仮定を打ち破ります——人間の明示的な指示なしに自律的にツール呼び出しを開始できます。新たな課題:意図の予測不可能性(破壊的な操作チェーンを組み合わせる可能性)、プロンプトインジェクション攻撃(悪意のある操作を誘発する巧妙に細工された入力)、権限の増幅(付与された広範な権限が悪用される可能性)、間接攻撃(Agentが依存する外部データソースを汚染して行動を操作する)。従来の「認証+認可」モデルはAgentのシナリオでは不十分です——意図の検証、行動境界、リアルタイム監視も必要です。

3層セキュリティアーキテクチャ

多層防御の3層アーキテクチャを推奨します:入力層の保護(プロンプトインジェクション検出、機密情報フィルタリング)、実行層の保護(権限制御、サンドボックス分離、リスクスコアリング)、出力層の保護(コンテンツモデレーション、漏えい防止)。入力層の遮断が最も経済的で、実行層の制御が最も重要で、出力層のフィルタリングが最後の防衛線です。

Agent権限モデルの設計

従来のRBACは能力ベースの細粒度権限モデルに拡張する必要があります:能力宣言(OAuthスコープ類似、例:「file:read:/data/*」)、最小権限の原則(タスク完了に必要な最小限の権限のみ付与)、動的権限(コンテキストに応じて調整、例:本番環境では追加承認が必要)、権限の減衰(子Agentの権限は親Agentのサブセットのみ)。

セキュリティサンドボックスの実装

import re, json
from datetime import datetime

class AgentSandbox:
    DANGER = [r"rm\s+-rf", r"DROP\s+TABLE", r"os\.system", r"eval\(", r"subprocess\."]

    def __init__(self, agent_id):
        self.agent_id = agent_id
        self.perms = {}
        self.audit = []
        self.risk_threshold = 7

    def grant(self, resource, actions):
        self.perms.setdefault(resource, set()).update(actions)

    def assess_risk(self, action, params):
        risk = 0
        if any(a in action.lower() for a in ["delete","deploy","execute","publish"]):
            risk += 5
        if params.get("scope") == "production":
            risk += 4
        return min(risk, 10)

    def execute(self, action, params, func):
        resource = params.get("resource", "default")
        if resource not in self.perms or action not in self.perms[resource]:
            return {"ok": False, "error": "permission denied"}
        risk = self.assess_risk(action, params)
        if risk >= self.risk_threshold:
            return {"ok": False, "error": f"risk {risk} too high, need approval"}
        if "code" in params:
            for p in self.DANGER:
                if re.search(p, params["code"], re.I):
                    return {"ok": False, "error": f"dangerous pattern: {p}"}
        try:
            result = func(**params)
            self.audit.append({"ts": datetime.now().isoformat(), "action": action, "result": "ok"})
            return {"ok": True, "result": result}
        except Exception as e:
            self.audit.append({"ts": datetime.now().isoformat(), "action": action, "error": str(e)})
            return {"ok": False, "error": str(e)}

sb = AgentSandbox("a1")
sb.grant("files", ["read","write"])
print(sb.execute("read", {"resource":"files","path":"/data/r.txt"}, lambda **kw: f"ok:{kw}"))
print(sb.execute("deploy", {"resource":"api","scope":"production"}, lambda **kw: "deployed"))

プロンプトインジェクション防御と監査

プロンプトインジェクションはAgentセキュリティで最も厄介な問題です。攻撃方法には、直接インジェクション、間接インジェクション(検索ドキュメントに悪意のある指示を隠す)、マルチモーダルインジェクション(画像のOCRテキストを介する)があります。防御戦略:指示の分離(XMLタグでユーザー入力をラップ)、入力前処理(疑わしい指示パターンをスキャンして除去)、出力検証(ツール呼び出しパラメータの二次検証)、最小情報開示(System Promptに機密のアーキテクチャ情報を公開しない)。監査では、誰が操作を開始したか、何をしたか、なぜ(推論チェーン)、結果はどうか、正確なタイムスタンプを記録する必要があります——重要なのは「なぜ」を記録することで、セキュリティチームが意思決定プロセスを再生できるようにすることです。

セキュリティインシデント対応と緊急処理

完全な予防策があっても、セキュリティインシデントは発生し得ます。Agentセキュリティインシデント対応プロセスを確立することが重要です:検知フェーズ——異常検知モデルを通じてAgentの行動パターンを監視し、正常パターンからの逸脱(例:機密ツールの突然の大量呼び出し、勤務時間外の高頻度操作)でアラートを発動;封じ込めフェーズ——侵害が疑われるAgentは直ちに「読み取り専用モード」に入ります——すべての書き込み操作が自動的にブロックされ、読み取り操作のみが維持され基本サービスを継続;フォレンジックフェーズ——

当該Agentの完全な監査ログと実行トレースを凍結し、攻撃タイムラインのレポートを生成します。私たちはかつてこのプロセスを通じて、プロンプトインジェクション攻撃を正常に阻止したことがあります。攻撃者は一見正常な「技術文書」に隠れた指示を埋め込み、Agentに内部データを外部URLへ送信させようとしました。異常検知モデルは、Agentがこれまで一度も使用したことのないHTTPツールを突然呼び出そうとしたことを検知し、直ちに封じ込めメカニズムを発動しました。事後分析により、文書のゼロ幅文字にインジェクション指示が隠されていたことが判明しました。これは従来のテキストフィルタリングでは検出が困難な攻撃ベクトルです。

エージェント権限監査のベストプラクティス

本番環境では、エージェントのすべての機密操作を記録し、追跡可能にする必要があります。当社の監査フレームワークは5W原則に従います:Who(どのエージェント/ユーザーか)、What(どの操作が実行されたか)、When(ミリ秒精度のタイムスタンプ)、Where(どのリソース上で実行されたか)、Why(エージェントの推論チェーン、なぜこの決定がなされたか)。監査ログの保存方法:直近のログ(7日以内)はElasticsearchに保存し、リアルタイムのクエリとアラートに使用します。履歴ログ(7日〜1年)はS3/OSSのParquet形式で保存し、長期的な分析とコンプライアンス監査に使用します。1年を超えるログは、匿名化処理後にモデルトレーニングに使用できます。プライバシーについて:監査ログにユーザーの個人情報が含まれる場合、匿名化が必要ですが、匿名化ポリシーは書き込み時にリアルタイムで実行する必要があります(後からではなく)。これにより、転送中や保存中の生の機密データの漏洩を防ぎます。

エージェントセキュリティの多層防御アーキテクチャ

単一層のセキュリティ対策では決して十分ではありません。当社は多層防御戦略を採用してエージェントセキュリティシステムを構築しています。前述のサンドボックスと権限制御に加えて、2つの重要な層を追加します:ネットワーク層の分離—エージェントは独立したVPC/Namespaceで実行され、APIゲートウェイを通じて限られたポートのみを公開します。エージェントからの送信ネットワークアクセスはホワイトリストで制御され(例:特定のAPIドメインのみへのアクセスを許可)、データの外部漏洩を防ぎます。ランタイム保護—エージェント実行環境にランタイムセキュリティ監視(例:Falco)を展開し、異常なシステムコールパターン(例:エージェントが突然/etc/passwdを読み取ろうとしたり、予期しないネットワーク接続を確立しようとしたりする)を検出します。これらの多層対策は過剰設計ではありません。一度のエージェントセキュリティインシデントによるブランドとユーザーの信頼の損失は、セキュリティ投資の100倍を超える可能性があります。

このスキルチェーンを自分で編成してみませんか?

スキルチェーンで開く →