VPCピアリングは「信頼の境界」か、それとも「侵入の高速道路」か
クラウドアーキテクトが最も陥りやすい罠がある。それは、「VPCピアリングは同じAWSアカウント(あるいは組織)内にあるのだから、基本的には安全である」という、根拠なき性善説に基づいた設計だ。
しかし、レッドチームの視点から言えば、VPCピアリングは単なるネットワーク接続ではない。それは、「境界防御が物理的に崩壊した後の、内部ネットワークにおける横展開(Lateral Movement)の最速ルート」に他ならない。
1. ピアリングが孕むアーキテクチャの盲点
VPCピアリングを構成する際、多くのエンジニアはセキュリティグループ(SG)の「ソース」に「別のVPCのCIDR」を指定することで満足する。だが、これはネットワークACL(NACL)とSGのレイヤリングを理解していない証左だ。
攻撃者は、侵害したインスタンスのメタデータサービス(IMDSv2)を叩き、IAMロールを奪取する。そこから何をするか? ピアリング先のVPCのサブネットに対してポートスキャンを仕掛け、ターゲットを探す。もし、ピアリング先のSGが「同じセキュリティグループIDを許可」している場合、攻撃者はそのインスタンスになりすますことで、認証をバイパスするケースすらある。
攻撃者が狙うプロトコル構造の隙間
通信プロトコルそのものの脆弱性よりも、クラウドの「抽象化されたネットワーク」の設計ミスを突く方が圧倒的に効率がいい。特に、UDPベースのサービスや、内部で稼働している古いRPC(Remote Procedure Call)のバッファオーバーフローを突く手法は、依然として現役だ。
2. セキュリティグループとNACLの「多層防御」を再定義する
多くの現場では、SGに依存しすぎてNACLを「デフォルト(全許可)」のまま放置している。これは非常に危険だ。NACLはステートレスであり、パケットの入出力を厳密に制御できる。
実践的なアーキテクチャ設計(Terraform例)
以下は、ピアリング接続に対して最小権限の原則を適用した設定例だ。
# ピアリング経由の通信を許可するが、NACLでプロトコルとポートを固定する
resource "aws_network_acl" "main_nacl" {
vpc_id = aws_vpc.main.id
# ピアリング経由のインバウンド制御:特定のポート以外は拒否する
ingress {
protocol = "tcp"
rule_no = 100
action = "allow"
cidr_block = "10.0.0.0/16" # ピアリング先のCIDR
from_port = 443
to_port = 443
}
# ステートレスなNACLの特性上、エフェメラルポートの戻り通信も許可が必要
egress {
protocol = "tcp"
rule_no = 100
action = "allow"
cidr_block = "10.0.0.0/16"
from_port = 1024
to_port = 65535
}
}
この設定の肝は、「ピアリング先の全通信を許可する」という怠惰なセキュリティグループルールを廃止し、NACLでネットワークレベルのパケットフィルタリングを強制する点にある。
3. 生成AI時代の新たな脅威:プロンプトインジェクションとネットワーク
最近のトレンドとして、LLMを搭載した内部APIサーバーがピアリング先のDBにアクセスするケースが増えている。ここで発生するのが、「プロンプトインジェクションによる内部SQLインジェクション」だ。
攻撃者がWebフロントエンドに悪意あるプロンプトを注入し、バックエンドのLLMが意図しないクエリをピアリング先のデータベースに投げる。これが成立すると、ネットワーク境界(SG/NACL)は無力化される。なぜなら、通信自体は「許可された正当な経路」を通っているからだ。
防御層(ガードレイル)の設計指針
- 通信の認可(Authorization at Application Layer): ネットワークレベルの許可だけでなく、JWTやMutual TLS (mTLS) を用いて、サービス間通信自体に強力な署名を要求する。
- ガードレイルの配置: APIゲートウェイとアプリケーションの間に、プロンプトの妥当性を検証する中間層を挟む。
- 最小特権ロールの徹底: ピアリング先のデータベースへアクセスするIAMロールは、特定のテーブル、特定のクエリのみを許可する最小限の権限に絞る。
4. 結び:レッドチームからの提言
ペネトレーションテストの現場で、私は「ネットワーク的に繋がっているか?」よりも「その先で、信頼の連鎖がどこで切れているか?」を真っ先に確認する。
VPCピアリングは便利だが、それは「信頼の拡張」であると同時に、「攻撃のベクトルの拡張」でもある。今日から、クラウドの管理コンソールを開き、すべてのピアリング接続に対して「本当にその通信が必要か?」「NACLで厳格に絞り込んでいるか?」を自問自答してほしい。
セキュリティは静的な設定ではない。攻撃者の思考を先回りし、動的に防御を更新し続けるエンジニアだけが、この荒野を生き残ることができる。
コメント