同じドメインから、2つの異なる回答
最初のリクエスト
公開IPに解決
検証
通過、安全に見える
TTL切れ
数秒後
2回目のリクエスト
127.0.0.1に解決
DNSリバインディングとは?その危険性を解説
ドメインが関わるセキュリティチェックの多くは、そのIPアドレスが一度検証すれば以後は信頼できる程度に安定している、という前提に立っています。DNSリバインディングは、まさにこの前提を突く攻撃です。攻撃者はドメインのDNSを制御し、最初は通常の公開IPアドレスに解決されるように設定して、対象システムが行う検証をすり抜けます。そして、チェックが完了した後の次のリクエストに対しては、応答を内部アドレス(127.0.0.1 や、内部の 10.x.x.x の範囲など)に切り替えます。
単なる理論上の手口にとどまらない理由
非常に短いTTLがあると、この攻撃は現実的になります。攻撃者はレコードが数秒で期限切れになるように設定するため、検証のチェックと、それに続く実際のリクエストが、ミリ秒の間隔で異なる2つの応答を受け取ることがあります。被害を受けるシステムは、足元が変わったことに気づきません。ドメインを一度だけ解決して、そのIPを複数の処理で使い回すシステムは、攻撃を受ける可能性があります。さらに悪いのは、検証のために一度解決し、実際のリクエストでは別のコンポーネントにもう一度解決させる場合です。
唯一の確実な防御策
ホスト名の文字列を検証するだけでは不十分で、IPを一度検証するだけでも不十分です。確実な防御策は、実際に接続を行う時点で、解決されたアドレスをプライベートまたは内部の範囲のブロックリストと照合することだけです。それを最初の検証時だけでなく、毎回行います。こうすれば、リバインディングが頼りにするタイミングのすき間が塞がれます。「チェック済み」から「使用」までの間に、応答が変わる余地がなくなるからです。
- プライベート範囲(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)、ループバック(127.0.0.0/8)、リンクローカル(169.254.0.0/16)、クラウドのメタデータエンドポイントを、IPv4とIPv6の両方でブロックします。
- 入力の検証時に一度だけでなく、使用のたびに再チェックします。
- IPv4射影IPv6アドレス(::ffff:127.0.0.1 など)は、そこに埋め込まれたIPv4アドレスと同等に扱います。リバインディングの試みでは、IPv6だけを見る単純なチェックをすり抜けるために、まさにこの表記が使われることがあります。
| 対策 | リバインディングのすき間を塞げるか |
|---|---|
| ホスト名の文字列を一度だけ検証する | 塞げません。何に解決されるかについては何も分かりません |
| 一度解決して、そのIPを後続のリクエストで使い回す | 塞げません。再利用の前にレコードが変わることがあります |
| 使用のたびに解決して、ブロックリストと照合する | 塞げます。応答が変わる余地が残りません |
実際に問題になった場面
DNSリバインディングは、一部の人だけが気にする学術的な問題ではありません。認証のないローカルの管理インターフェースを公開している家庭用ルーター、スマートホームのハブなどの機器に対して、繰り返し使われてきました。そうした機器は、信頼できるローカルのトラフィックしか届かないはずだ、という想定で作られています。同じネットワーク内の通常のブラウザータブで悪意のあるウェブページを開くと、リバインディングによって、被害者自身のブラウザーに、攻撃者の代わりにその管理インターフェースへ直接リクエストを送らせることができます。このブラウザーは、ローカルネットワーク上にあるというだけでルーターから信頼されています。ブラウザーは、最初の公開ドメインと通信し続けているつもりでいます。変わったのは、その下にあるDNSの応答だけです。
より巧妙な変種:複数応答によるリバインディング
より高度な手法では、TTLが切れるのを待つ必要さえありません。1つのDNS応答に複数のAレコードを含めることは仕様上認められており、クライアントソフトウェアによっては、それらを順に試したり、リクエストごとにラウンドロビンで切り替えたりします。攻撃者は、正規の公開アドレスと内部アドレスの両方を、まったく同じ応答に含めて返すことができます。そして、クライアントがいずれ2番目のエントリを試すことに賭けます。待つ必要も、タイミングの窓もありません。複数の回答を含む応答に入っているすべてのアドレスが等しく信頼できることを保証するようには、DNSは設計されていません。この手口は、その事実を突いたものです。「最初に返されたアドレスをチェックする」では決して十分でなく、応答に含まれるすべてのアドレスに同じ精査が必要であることを、改めて教えてくれます。
ドメインの公開DNSアドレスを調べたい場合は、Domain IP Lookupツールをお試しください。
関連記事
ほぼすべてのゾーンで出会うレコード
CAAレコードとは?証明書の発行元を制御する
DNSのCAA(認証局認可)レコードが、許可する証明書の発行元を指定する仕組みと、よくあるCAA設定のミスを避ける方法を詳しく解説します。
再帰的なDNS検索を1ホップずつ見る
ブラウザー
example.comを要求
リゾルバー
ISP / 1.1.1.1
ルート + TLD
.comの管理元は?
権威サーバー
正式な回答
この連鎖の各ホップはそれ自体がDNS検索で、結果はその後キャッシュされます
DNSSECとは?DNS応答を検証する仕組み
DNSSECの署名、DSレコード、DNSKEYレコードの役割、検証の流れ、設定ミスがSERVFAILを引き起こす仕組みを解説します。
IPv4の各範囲にはIPv6の対応物がある
見過ごせないIPv6のセキュリティ上の注意点
セキュリティの観点では、IPv6は単なる「アドレスが増えたIPv4」ではありません。いくつかの違いが、脅威モデルを実際に変えます。