すべての投稿に戻る
公開日 · 著者 Renaud Deraison

エージェントには住所があった

DEF CON 34 で Team Cymru の Eli Woodward は、AI ハニーポットの 48 時間分のキャプチャを示した。3,993 件のリクエスト、327 の送信元 IP、344 件の認証情報探索。しかも誰も公開していないポートに対してである。コーディングエージェントへの他の攻撃は、その目の前にテキストを置く手段を必要とする。この攻撃が必要とするのは、そこへ至る経路だけだ。Bromure Agentic Coding は既定でエージェントを NAT の内側で動かすので、見つけるべき経路そのものが存在しない。

コーディングエージェントへの他の攻撃は、その目の前にテキストを届ける手段を 必要とする。この攻撃が必要とするのはそこへ至る経路であり、スキャナーは すでにそれを持っている。

DEF CON 34 の土曜朝、 Creator Stage 3 で、Team Cymru の Eli Woodward が MCPwned: How Exposed AI Agents Became the Internet's New Recon Toy と題した 30 分の講演を行った。彼が作ったのは AI ハニーポットだ。LLM と AI インフラの 16 のペルソナを 16 のポートに配置し、 それぞれがフレームワークどおりの応答、ヘッダー、エラー、プロトコル挙動を 返すので、触れたスキャナーは本物を見つけたと信じ込む。

48 時間の窓の中で、このハニーポットは 327 の一意な送信元 IP から 3,993 件のリクエスト を受け取った。うち 155 件は MCP の探索、344 件は AI の API キーの探索である。

それらのポートを誰も公開してはいなかったし、327 のアドレスのどれも Woodward を名指しで狙ってはいなかった。彼がキャプチャから取り出した手口は、退屈で 産業的な部類のものだ。LiteLLM のモデル登録の悪用、MCP のリソース列挙、 フレームワークを踏まえた認証情報の総当たり、そして露出したローカル推論 サービスを探す協調的なスキャン。開いた RDP や認証なしの Redis を求めて 10 年にわたりアドレス空間を掃いてきた集団が、同じ機械を AI 開発ツールに 向けたのである。脅威モデルよりも先に。

誰もあなたに何かを送る必要はない

この 1 年のコーディングエージェントへの攻撃を読み返すと、どれも同じ形をして いる。エージェントが読む何かに指示が入っているのだ。 バグ報告見えない PR コメントエージェントが取得したウェブページREADMEWAF のログ行。そのいずれにおいても、 配達こそが攻撃者にとっての難題だった。あなたが意図してつないだ経路を見つけ、 そこに自分のテキストを流し込まねばならない。

矢印の向きを反転させれば、その難題は消える。スキャナーがポート 11434 に SYN を送ると、あなたのマシン上の何かが応答する。

スキャナーが見つけているもの

Woodward のキャプチャの背後にある母集団は、万の単位にのぼる。

Censys は インターネットから到達可能な MCP サービスを地図化し、 2026 年 4 月 28 日時点で、56 か国・425 の自律システムにまたがる 8,758 の 一意な IP アドレス上に 12,520 件を見つけた。1 週間後の 5 月 6 日には、その 数は 21,000 を超えていた。おおよそ 10 件に 4 件は、認証情報の確認なしに誰の リクエストでも受け付ける。プロトコルが既定でそれを要求していなかったからだ。

Wiz は実際にノックしてみた。 7 月 28 日に公開された調査 で、クラウド環境の 80% に MCP が存在し、そのうち約 6 分の 1 が少なくとも 1 台のサーバーを露出させていた。露出していたもののうち、約 70% は認証なしの 呼び出し元に完全なツールカタログを引き渡し、約 42% は研究者がツールを呼び 出すと実データを返し、およそ 10% は機微なバックエンドの前面に立っていた。 Wiz は確認済みの一部をクラウドのメタデータエンドポイントに向け、一時的な 認証情報を取り戻した。

Knostic は同じ試みを Shodan から行い、 1,862 台の露出サーバー の指紋を採った。手作業で検証した 119 台は、すべてが認証なしで tools/list に応答した。それらのサーバーはいずれも、自分が存在する唯一の理由である仕事を、 見知らぬ相手のために果たしていた。

ローカル推論も、数字が丸いだけで同じ絵になる。LeakIX は 2026 年 2 月 23 日に 認証なしの Ollama インスタンス 12,269 台 を数えた。どれもが /api/tags によるモデル列挙、/api/generate/api/chat による無料の計算資源、/api/pull/api/push によるモデルの 窃取を差し出しており、約 1,000 件では Probllama のパストラバーサル連鎖まで そろっていた。

誰も公開していない 16 ポートでの 48 時間走査するインターネット標的リストなし、詐欺メールなし配達するものもないポートへの SYN だけ何かが応答する16 の LLM・AI 基盤ペルソナ16 ポート、枠組みに忠実ヘッダー、エラー、protocolそしてログが埋まる3,993 件のリクエスト327 の一意な送信元 IP からたった一度の 48 時間の窓で手口は IP が変わっても同じMCP 探索 155 件AI 鍵の探索 344 件LiteLLM のモデル登録ローカル推論の一斉走査リソース列挙、枠組みを踏まえた認証情報の総当たり、そして前回応答したものすべて現実のインターネットで見つかっているものMCP サービス 21,000 超Censys、2026 年 5 月、前は 12,520約 4 割は認証情報を求めない70% がカタログを渡すWiz、2026 年 7 月、匿名で42% は実データを返す無防備な Ollama 12,269LeakIX、2026 年 2 月列挙、生成、pull、push
Woodward の 48 時間のキャプチャと、その背後にある現実の母集団。サービス自身が応答してしまうため、スキャナーには標的リストも配達経路も要らない。

あなたのマシンが応答してしまうまで

あなたはサービスをインターネットに置こうと決めたわけではない。ソファの上の ノート PC からデスクトップのモデルを使いたくて OLLAMA_HOST=0.0.0.0 を 設定し、同じ理由で MCP サーバーを全インターフェースに束縛した。README が そう書いていたので docker run -p 8080:8080 を実行した。スマートフォンで 何かをデバッグするためにトンネルを開き、そのままにした。

そしてノート PC を別の場所へ運んだ。会議場の Wi-Fi、コワーキングのフロア、 ホテル、UPnP があなたに代わって気を利かせた家庭用ルーター、あるいは誰かが 急いでセキュリティグループを広げたクラウドの開発マシン。束縛はフラグ 1 つ だが、露出は、あなたがたまたま座っている場所の背後にあるルーティング表を 書いた者のものだ。あなたはその一点として同意していない。

Bromure Agentic Coding は、あなたが何も設定しなくても、この隙間を既定で 閉じる。

VM には住所がない

Bromure はコーディングエージェントを Apple Silicon 上の使い捨て Linux VM で 動かし、その通信の 1 バイトずつをホスト上のプロキシ、すなわち エージェントが動く箱の外側を通らせる。この攻撃の 分類では、その仕組みのネットワーク側が重みを担う。

リソース → ネットワーク の下でモードは NAT であり、何も選ばなければ NAT になる。VM は Virtualization.framework 内蔵の NAT を通じて Mac の ネットワーク接続を共有する。外向きは通り、LAN 上のどれも VM には届かない。 その VM の中でサービスを 0.0.0.0 に束縛しても、束縛先は NAT の内側にある VM 内部のインターフェースだ。ポート転送表を書き間違える余地はない。この モードはそもそもポートを転送しないからである。

スキャナーの SYN は、フィルタ済みのポートにも閉じたポートにも届かない。 そこへ至る経路が存在しないからだ。Woodward のハニーポットは、何かを集める のに 16 の待受プロセスを必要とした。Bromure のプロファイルはその 1 つも 差し出さず、344 件の認証情報探索には着地する先がない。

ブリッジ は望んだときのために用意されており、あなたが名指しした物理 インターフェース上で DHCP により LAN 経路のあるアドレスを VM に与える。 これはプロファイル単位の設定で、インターフェースの選択も明示的なので、 LAN に出るつもりだった実行のときにだけ LAN に出ることになる。

あなたの MCP サーバーは待ち受けない

MCP パネルのサーバーはプロファイル設定である。Bromure はそれらを Claude Code の JSON か Codex の TOML に翻訳し、起動時に注入する。 stdio サーバーは VM 内でパイプ越しに話す子プロセスなので、ソケットを 持たず、tools/list による列挙には届く先がない。HTTP サーバーは あなたが指し示す URL であり、任意でベアラートークンを添えられる。つまり リクエストを送るのはあなたの側だ。見知らぬ相手に応答している 40% の MCP サービスは、誰かが自分で立てて手で束縛したサーバーである。

ローカル推論は Mac 側で動く

「露出したローカル推論サービスを探す協調的なスキャン」はハニーポット自身 の言い回しで、その結果が無防備な Ollama 12,269 台だ。Claude Code の ローカルモデル 認証は、ローカルモデル パネルで選んだ端末内の MLX モデルへ推論を回す。それは macOS 上、つまりプロキシのホスト側で動く。 露出させるべきポート 11434 は VM の中に存在しない。Fusion の端末側の 足も同じ経路をたどる。

入り込んだ探索が拾うのは飾りだけ

フレームワークを踏まえて認証情報を総当たりする者は、どこを見ればよいかを 知っている。環境変数の OPENAI_API_KEY~/.aws/credentials~/.docker/config.json、kubeconfig、~/.ssh。Bromure はそのすべてを VM に置き、そのすべてを偽物にする。手に入るのは brm_…xai-brm-… の トークン、使い捨てのクライアント証明書を持つ合成 kubeconfig、偽の base64 レジストリ認証、そしてプロキシを迂回した瞬間に InvalidSignatureException を返す AWS の資格材料だ。Bromure は本物の値 をホストに留め、それが属する宛先に対してだけ通信上で差し替える。

破壊的な動詞はホスト側で裁定される

Wiz は露出サーバーの約 42% が実データを返すのを確認し、その隣に書き込み と削除の分類も見つけた。Guardrails はホストのプロキシにある ポリシーエンジンで、Kubernetes、AWS、DigitalOcean、コンテナレジストリ、 GitHub、GitLab、Bitbucket、そして HTTPS のデータベースエンドポイントを 対象にする。リソースごとに破壊的操作の遮断か読み取り専用を設定すれば、 遮断された呼び出しは硬い 403 として返り、エージェントはそれをありふれた API の失敗として報告する。Bromure はその裁定を macOS 内で下すので、VM の 中に切れるスイッチは存在しない。

開発者のノート PC ではOLLAMA_HOST=0.0.0.0別のノート PC から使えるようにポート 11434、全方位で待受MCP サーバーも同じ束縛tools/list は誰にでも答えるカタログこそが偵察になるそして環境変数は本物48 時間で 344 件の鍵探索は場所を知る経路を書いた者が決める会議の Wi-Fi、UPnP、広すぎる設定Bromure のプロファイルの中VM は既定で NAT外向きは通る。内向きは届かない0.0.0.0 は VM 内部の口に束縛stdio の MCP はパイプ子プロセス、列挙できるソケットなしHTTP サーバーは指し示す URLローカル推論は Mac で動くVM 内に走査対象の 11434 はないしかも環境変数は brm_… だけ本物はホスト、通信時に差し替え
同じ 2 つの便利さを、2 台のマシンで見る。ノート PC ではフラグ 1 つずつで、たまたま接続している網にサービスが載る。Bromure のプロファイルでは VM に内向きの経路がなく、MCP サーバーはパイプ、モデルは Mac で動き、探索が掃く環境変数には飾りしか入っていない。

見知らぬ相手からの依頼も、やはりテキストである

誰かが露出させたリモートの MCP サーバーにあなたがつなぎ、それがデータ以上の ものを返してきたとしよう。スキャナーがこれらのサービスを列挙できるように なった以上、それを見つけた者は、正面の入口から、内容としてあなたの エージェントに届くこともできる。

Bromure はその内容を入ってくる時点で採点する。ローカルのプロンプト インジェクション検出モデルが、エージェントが取り込むファイルの中身、 ウェブページ、tool_result ブロックを読み、読み手に向けられた命令形を探す。 記録して続行 は各検出をセキュリティログに残す。どうするか尋ねる は 外向きのリクエストを止め、印を付けた箇所をあなたの前に置く。一方的に遮断 はモデルが見る前に止め、エージェントには硬い 451 を渡す。もう 1 つの検出器、 微調整した ModernBERT 分類器とゼロ幅・双方向・Unicode タグのペイロードを 探す決定的スキャナーの組み合わせが、CLAUDE.mdAGENTS.mdGROK.md と その入れ子および全体の変種を対象にする。

どちらのモデルもあなたの Mac 上で動き、bromure.io から一度だけ ダウンロードされる。第三者の MCP サーバーの出力を採点することは、その出力を どこかへ送ることを意味しない。

ノックはログの 1 行になる

VM が出すすべてのリクエストはホストのプロキシを通り、トレース水準 アクティビティ では、Bromure がその 1 件ごとにホスト、ステータス、 遅延、差し替え結果、漏えい警告を記録する。インジェクションの検出は、印を 付けたテキストを添えてセキュリティログに残る。水準を上げれば、Bromure は AI リクエストの本文も保持する。プロファイルの秘密情報と同じキーチェーンの 鍵で暗号化される。

外からの指示を受け取り始めたエージェントは、誰かの役に立つためにはどこかへ 到達しなければならない。そしてどこかへ到達したことは、そのセッションが動いた マシンの上で読める 1 行である。

そしてマシンを消したくなれば、消える。ホームを消去/home/ubuntu、 つまりドットファイル、.sshnpm-global.cargo、シェル履歴を、 クローン直後の状態まで拭き取る。ベースへリセット はシステム水準の変更を すべて捨て、作業ディスクをベースイメージから再クローンする。

MCP はやがて既定値を改め、Ollama も認証の物語を手に入れるだろうし、 Woodward のハニーポットのポートは来年の 8 月には別のポートになっている だろう。だが形は変わらない。いまエージェントをまともに動かすということは、 その隣でゲートウェイと数個のツールサーバーを動かすということであり、 その 1 つ 1 つが、旅をするノート PC の上でソケットを束縛するプログラムだ。

ここにある他の記事は、エージェントが読むものを疑えと求める。この記事が問う のはもっと短い。見知らぬ相手がノックしたとき何が応答するのか、そして何も 応答しないほうがよいのではないか。

Bromure Agentic Coding を導入する。スキャナーには見えない マシンを、あなたのエージェントに与えよう。