Code InterpreterでネットワークモードをSandboxにすると外部ネットワークアクセスはできないと説明があったらしい。
しかし、実際に外部のHTTPアクセスを試すとHTTP経由でアクセスは確認できなかったが、DNSリクエストを外部に行っていたことが確認された。
つまりは、実際には外部通信が可能であるということが判明。
当初、AWSは外部通信を完全に遮断する修正の意向があったようだが、現在は仕様ということになったらしい。
www.beyondtrust.com
Code InterpreterとSandbox
Code Interpreterは使用したことが無いので、正直詳細は分かっていないがAIエージェントがコードを生成・実行するためのマネージドサービスということで合っている?
この際にネットワークモードとして、「Public(外部通信許可)」、「Sandbox(外部通信無)」、「VPC(ネットワーク制御)」の3モードがある。
Sandboxモードでは「complete isolation with no external access(外部アクセスのない完全な隔離)」と記載されていたらしく、外部に全くアクセスしないことが示されていた。
この状況に対して、BeyondTrustのセキュリティチームがHTTPリクエストは失敗してもDNSリクエストは外部に送信されていることを発見した。
現在は「Environment with limited external network access(限定的な外部ネットワークアクセスのある環境)」という表現が記載されている。
docs.aws.amazon.com
完全にネットワークから隔離された環境で実行されていると思われたものが、実はそうではなく外部とちょっとだけ通信している。
ただ、このちょっとが問題でDNS経由でデータ持ち出しとかが発生しうる。
プロンプトインジェクション経由でSandboxモードからアクセス可能なAWSリソースからデータをDNS経由で外部に送信できるし、依存関係にあるサードパーティライブラリ経由のサプライチェーン攻撃とかに繋がる。
ちなみに、Code InterpreterのSandboxでどんなことができるかセキュリティ観点からの研究は既にある話だったようで、他にも公開された情報があった。
sonraisecurity.com
個人的に気になったポイント「HTTP系通信できません(DNSリクエストは外部にしてます)」
ここが今回超気になった点で、見かけ上HTTPリクエストは失敗しているのにDNSリクエストだけ上手くいっている。
![]()
BeyondTrustの記事より(https://www.beyondtrust.com/blog/entry/pwning-aws-agentcore-code-interpreter#:~:text=As%20you%20can%20see%2C%20the%20command%20seemed%20to%20fail%20to%20connect.)
AWSが最終的に「仕様」ということにしたのであれば、AWSのバックエンドとしてはS3か何かを使用するために必要な通信なのだろう。
それでも、失敗しているように見えてもレイヤを変えると上手くいっていることがあるというのは今後の脆弱性発見のヒントなのだと改めて実感した。
ここのOOBの調査には、ProjectDiscoveryのInteractshを使用したらしい。さすが、ProjectDiscovery!
github.com
また、今回のDNSで外部に通信できるというのをC2として落とし込んだツールをBeyondTrustが公開している。
github.com
C2系などのDNSデータ流出
あまり、話題に挙がらないがDNS経由のデータ流出はよくある話。
DNS経由でネットワークプロキシしたり、コマンド送受信したり、データ送信したり。
Cobalt Strike,SliverとかDNS経由での通信に対応しているし、専用ツールだとdnscat2が有名か。
内部ネットワーク監視では、ちゃんと怪しいDNSリクエストも監視してください。
