0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

攻撃側の AI エージェントにゼロトラストで備える:侵入後の「速さ」と「数」を要求ごとの検証で止める

0
Posted at

攻撃者が AI エージェントを使い、偵察から侵入、横展開、データの持ち出しまでを、ほぼ自動で進める事例が公開されるようになりました。人の攻撃者と比べて、攻撃エージェントは速く、疲れず、並行して何本もの攻撃を進められます。

この記事では、攻撃側の AI エージェントが組織の中でどう動くかを整理し、ゼロトラストのどの仕組みが、攻撃のどの段階で効くかを図で説明します。攻撃の手順そのものではなく、防御側の設計に絞ります。

AI を使った攻撃全体の動向は、LLM で攻撃はどう変わったか:2026 年の脅威レポートから読む悪用の実態と防御側の優先順位 でまとめています。

攻撃側の AI エージェントで何が変わったか

公開されている事例から、防御側にとって重要な点を拾います。

人の関与が「要所だけ」になった
Anthropic は 2025 年 11 月、自社の AI を悪用したサイバー諜報活動を検知・遮断したと報告しました。約 30 の組織が標的になり、偵察、脆弱性の特定、認証情報の収集、データの持ち出しといった作業の 80〜90% を AI が自律的に進め、人が判断したのは 1 回の攻撃につき 4〜6 か所だったとしています。要求は数千回に及び、1 秒に何回も送られることがありました。

盗んだトークンをその場で使う
2026 年 2〜3 月には、AI で動いていると名乗る自動化されたアカウントが、公開リポジトリの GitHub Actions の設定不備を次々と探し、複数の有名プロジェクトで CI のトークンを盗み、そのトークンでリポジトリの非公開化やリリースの削除まで行いました(StepSecurity・Orca Security の報告)。見つけた認証情報を、人の確認を挟まずにすぐ次の操作に使っている点が特徴です。

侵入から横展開までが分単位になった
CrowdStrike の 2026 年版 Global Threat Report によると、侵入から横展開に移るまでの時間(ブレイクアウトタイム)は、サイバー犯罪の平均で 29 分、最速では 27 秒でした。AI エージェントに限った数字ではありませんが、人がアラートを見てから対応する運用では間に合わない速さです。

一方で、攻撃エージェントにも弱点があります。先の Anthropic の報告では、AI が実際には使えない認証情報を「入手した」と報告したり、公開情報を重要な発見として扱ったりして、成果を誇張することがあったとされています。失敗も含めて、とにかく大量に試すのが攻撃エージェントの動き方です。これは、防御側が振る舞いで見分ける手がかりになります。

境界型のネットワークは、攻撃エージェントに「自由に動ける場所」を与える

境界型とゼロトラストで、攻撃エージェントが最初の足場からどこまで広がるかを比べた図

左の境界型では、社内ネットワークの内側に入った時点で「信頼済み」として扱われます。攻撃エージェントは、最初の足場(社員の PC や CI のトークン)から、ファイルサーバー、認証基盤、顧客 DB へと、数十秒おきに次のシステムへ移っていきます。人の攻撃者なら数日かける横展開を、機械の速さで進められてしまいます。

右のゼロトラストでは、内側からの要求でも毎回判定されます。盗まれたトークンで届くのは、そのトークンにもともと許された範囲だけです。そこから認証基盤や顧客 DB へ進もうとする要求は拒否されます。さらに、短時間に大量・広範囲の要求があれば、それ自体を異常として、追加の確認やトークンの失効につなげます。

ゼロトラストは侵入そのものを完全には防げません。ただし、足場を取られたあとに広がる範囲と速さを大きく変えられます。攻撃エージェントの強みが速さと量である以上、ここが最も効く場所です。

攻撃の段階ごとに、ゼロトラストのどの仕組みが効くか

攻撃の 5 段階それぞれについて、攻撃エージェントが速く・多くなる点と、ゼロトラストで効く対策を並べた図

偵察
攻撃エージェントは、外部に公開されている資産(サーバー、管理画面、公開リポジトリの設定など)を短時間で調べ尽くします。外に出しているものを減らし、管理画面をインターネットに公開しないことが、そのまま対策になります。何を公開しているかを棚卸ししておかないと、攻撃エージェントのほうが先に見つけます。

初期侵入
フィッシングの文面作りや、既知の脆弱性を試す作業を大量にこなされます。パスキーなどのフィッシング耐性のある MFA は、偽サイトでは認証が成立しないため、文面の出来に関係なく効きます。脆弱性は、公開からパッチ適用までの時間を短くするしかありません。

認証情報の入手
攻撃エージェントは、見つけた API キーやトークンをその場で試します。キーをコードや設定ファイルに置かない、トークンを短命にして範囲を絞る、の 2 つで、盗まれたときの価値を下げます。攻撃エージェントは使えない認証情報も含めて大量に試すので、認証失敗の急増は有力な検知の手がかりです。

横展開
ゼロトラストが最も効く段階です。要求ごとの判定、ネットワークの細かい分割(マイクロセグメンテーション)、ID ごとの最小権限で、1 つの足場から次のシステムへ進めないようにします。

収集・持ち出し
攻撃エージェントは大量のデータを素早く整理して送り出します。ID ごとのデータ量を監視し、しきい値を超えたら自動で遮断・失効させます。

「速さ」と「数」を逆手に取る:振る舞いで判定する

攻撃エージェントの動きは、人の利用とは形が違います。同じ ID が短時間に大量の要求を送り、次々と別のリソースに触れ、失敗も多い。ゼロトラストの判定に、この振る舞いを材料として加えます。

同じ ID の 1 分あたりの要求数で、人と攻撃エージェントを比べ、しきい値で再認証・失効する様子を示した図

人の要求数はほぼ一定の範囲に収まります。盗んだトークンを使う攻撃エージェントは、使い始めた途端に要求数が跳ね上がります。最初のしきい値で再認証や人の承認を求め、さらに大きく超えたらトークンを失効させます。

ポイントは、この判定と遮断を自動で行うことです。ブレイクアウトタイムが分単位、場合によっては秒単位になっている以上、人がアラートを確認してから止める運用では間に合いません。

振る舞いで判定する最小例

同じ ID の直近 60 秒の振る舞いから、許可・追加確認・失効を決める例です。実際のログではなく、要求のパターンを固定値で作って試しています(Python 3.13)。

from collections import defaultdict, deque
from dataclasses import dataclass

WINDOW = 60  # 直近 60 秒を見る

@dataclass
class Event:
    t: float          # 秒
    identity: str
    resource: str
    ok: bool          # 認証・認可に成功したか

class BehaviorGate:
    def __init__(self, max_req=60, max_resources=10, max_fail=5):
        self.max_req, self.max_resources, self.max_fail = max_req, max_resources, max_fail
        self.events = defaultdict(deque)
        self.revoked = set()

    def check(self, e: Event) -> str:
        if e.identity in self.revoked:
            return "revoked"
        q = self.events[e.identity]
        q.append(e)
        while q and q[0].t < e.t - WINDOW:
            q.popleft()
        reqs = len(q)
        resources = len({x.resource for x in q})
        fails = sum(not x.ok for x in q)
        if reqs > self.max_req * 3 or fails > self.max_fail * 2:
            self.revoked.add(e.identity)
            return "revoke"       # トークン失効
        if reqs > self.max_req or resources > self.max_resources or fails > self.max_fail:
            return "step_up"      # 再認証・人の承認を求める
        return "allow"

2 つのパターンを流し、それぞれの判定結果と、初めて step_up・revoke になった時点を出力しました。

  • 人(alice): 3 秒に 1 回、3 種類のアプリを使う
  • 攻撃エージェント役(svc-ci): 盗んだ CI のトークンで 1 秒に 5 回、毎回違うホストを試し、4 回に 1 回は失敗する
alice {'allow': 20}
svc-ci first index {'step_up': 10, 'revoke': 40, 'revoked': 41} -> 秒: {'step_up': 2.0, 'revoke': 8.0, 'revoked': 8.2}

人の利用はすべて許可されました。攻撃エージェント役は、触れたホストが 10 種類を超えた時点(2 秒後)で追加確認になり、失敗が 10 回を超えた時点(8 秒後)でトークンが失効しました。以降の要求はすべて拒否されます。

実際の運用では、しきい値を ID の種類ごとに決める必要があります。CI やバッチ処理のように、もともと要求の多いサービスアカウントもあるためです。ふだんの振る舞いを記録し、そこからの外れ方で判定するほうが誤検知を減らせます。

防御側の自動化も前提にする

公的機関のガイダンスも、AI エージェントを前提にした権限管理と監視を求める方向にあります。米 CISA・NSA と、オーストラリア、カナダ、ニュージーランド、英国の機関は、2026 年 4 月 30 日付の共同ガイダンス「Careful Adoption of Agentic AI Services」で、権限の大きすぎるエージェントは 1 回の侵害の影響を大きくすると指摘しています。そのうえで、エージェントごとの検証できる ID、タスクに必要な範囲だけの権限、ゼロトラストと多層防御の適用、継続的な監視を挙げています。自社で使うエージェントについてのガイダンスですが、「機械の速さで動く主体を、毎回検証し、権限を絞り、振る舞いを見る」という考え方は、攻撃側のエージェントへの備えとそのまま重なります。

攻撃側が自動化した以上、防御側も、判定・遮断・失効までを自動で動かせるように設計しておく必要があります。人は、自動で止めたあとの調査と復旧に時間を使えるようにします。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?