内部 ALB に公開 DNS 名: 本当に露出しているのか
公開リゾルバーが内部 AWS ロードバランサーのプライベートアドレスを返すことがある。スキーム、経路、リスナーを確認してから露出と判断すべきだ。
内部ロードバランサーに対して公開 DNS を引くと、プライベートアドレスが返ってくることがあり、これはレコードの目的を確認するまで設定ミスのように見える。AWS は、内部ロードバランサーの名前が公開で解決可能でありながら、そのノードはプライベートアドレスしか持たないと文書化している。リゾルバーはサービスがどこにあるかを答えただけで、経路を作らず、セキュリティグループを開けず、誰も認証していない。その答えが問題かどうかは、順に確認できる事実に依存する。
第一段階: IP ではなくスキームを読む
スキームフィールドは、ロードバランサー自身がその境界について述べたものだ。aws elbv2 describe-load-balancers --names app-internal は internal または internet-facing の Scheme を返し、IPv4 かデュアルスタックかのアドレスタイプも示す。インターネット向けロードバランサーでもプライベートなターゲットへ転送できるため、プライベートなバックエンドアドレスが見えてもフロントエンドについては何も証明できない。
他の何かを見る前にスキームを書き留める。以後の判断はすべてそれに依存し、セキュリティグループやリスナールールからその種のロードバランサーの機能群まで、どの制御が存在するかも分かる。古いコンソールのスクリーンショットから写したスキームは、メモがないより悪い。API から読み直し、値をチケットに貼る。
第二段階: 名前が何に解決されるかを見る
VPC の外から dig +short app-internal-1234567890.eu-west-1.elb.amazonaws.com で問い合わせ、答えが 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 のどれに入るか記す。公開リゾルバーからのプライベートな答えは内部ロードバランサー名として想定される挙動であり、そのアドレスがインターネットから経路到達可能だという証拠ではない。
同じ名前を VPC の内側から解決して比較する。二つの答えが違えばスプリットホライズン命名を見ているのであり、その違いは設計上の詳細であって漏えいではない。
第三段階: 到達しうる経路を列挙する
プライベートアドレスは、経路とセキュリティルールがある場所からならどこでも到達できる。それらを意図的に列挙する:サイト間 VPN、クライアント VPN、VPC ピアリング、トランジットゲートウェイ接続、Direct Connect、そして VPC 内の任意のプロキシや踏み台だ。一つが意図した経路で、残りは攻撃者が探す経路である。
次に各経路の制御を確認する:ロードバランサーのセキュリティグループ、サブネットのネットワーク ACL、そして経路そのものを成立させるルーティングだ。「内部サービスが露出した」と報告される事例の多くは、意図しないピアリングがあったか、経路は意図どおりでアプリケーションに認証がなかったかのどちらかで、ここで解ける。
第四段階: リスナーとアプリケーションを別々に試す
サービスに届くはずのないネットワークから接続を試み、届かないことを確認する。次に届くはずのネットワークから試み、リスナーに到達することを確認する。この二つの結果がネットワーク到達性とアプリケーションの挙動を分け、露出の問いに対して意味を持つ唯一の証拠になる。
到達可能なリスナーは、アクセス可能なアプリケーションと同じではない。TLS 証明書とプロトコルポリシーを確認し、次にアプリケーション自身の認証と認可を確認する。社内 VPN 上の任意の呼び出し元を受け入れる内部ツールは、その VPN 上の侵害されたすべてのノート PC に対して露出しており、インターネット向けとは別のリスクだが、リスクであることに変わりはない。
制御は種類によって異なることを忘れない。アプリケーション層のファイアウォールは一方のロードバランサー系列に接続し、もう一方には接続しないため、目の前のスキームと種類で実際に何が使えるかを確認し、同等だと仮定しない。
第五段階: 名前そのものが問題かを決める
公開で解決できることは、サービス名、リージョン、アドレス範囲を開示しうるため、ポリシー上の答えを持つ情報開示の問いとして扱い、自動的なインシデントとはしない。機密の業務用語をリソース名から外し、命名規則が望む以上に明かすならリスク記録に開示を記す。
組織がプライベートな命名を望むなら、プライベートホストゾーンは関連付けられた VPC 内だけで解決するエイリアスを提供できる。それは利用者が見る名前を変えるが、プロバイダーが生成した名前を秘密にせず、ネットワーク経路も一つも削除しない。
答えを隠すためにアドレスを固定しようとしてはいけない。ロードバランサーのアドレスは変わり、固定は TLS 検証の習慣を壊し、本当に必要な制御は誰が接続を確立できるかとアプリケーションが相手に何を要求するかだ。四つの事実を確認して書き留めれば、問いは曖昧でなくなる。