セキュリティ

最新鋭のサイバー攻撃「SAD DNS」についてCloudflareが解説、その巧妙な手口とは?


インターネットを利用する上で欠かすことができない「ドメインネームシステム(DNS)」は、1983年に設計された古いシステムであるため、高度化した現代のサイバー攻撃に対応できるセキュリティを持ち合わせているとは言えません。実際にDNSキャッシュポイズニングで利用者を悪意のあるウェブサイトに誘導するといった攻撃事例は数多く存在します。そんなDNSに対する新たな攻撃手法「SAD DNS」について、ネットワーク企業のCloudflareが説明しています。

SAD DNS Explained
https://blog.cloudflare.com/sad-dns-explained/

インターネット上の通信にはIPアドレスが用いられていますが、ただの数字の羅列であるIPアドレスは人間にとっては扱いにくいもの。そんなIPアドレスを「gigazine.net」といったドメイン名に対応させ、インターネットを快適に利用できるようにしているのがDNSです。DNSはドメイン名からIPアドレスを要求する「DNSクエリ」とIPアドレスを返答する「DNSリプライ」で構成されています。

DNSによってドメイン名がIPアドレスに変換されるまでには「クライアント」「リゾルバ」「権威サーバー」という3つの要素が関わります。クライアントはまずリゾルバに対してDNSクエリを送信し、リゾルバは問い合わせを受けたドメイン名とIPアドレスの対応をキャッシュしていた場合、そのままクライアントにDNSリプライを送信。ドメイン名がキャッシュにない場合は、各ドメインの権威サーバーに順番にDNSクエリを送信するという構造になっています。


DNSは一般的に、暗号化や認証機能のないUDPをトランスポート層のプロトコルに用いて通信を行います。近年はHTTPS上でDNS通信を行うDNS over HTTPS(DoH)などの技術によって安全なDNSの構築が進められてはいるものの、大半のDNS通信にはUDPが用いられているとのこと。さらに、DoHはクライアントとリゾルバ間の通信にのみ適用されるものであり、リゾルバと権威サーバー間の通信には当面の間はUDPが用いられるとCloudflareは指摘しています。

暗号化や認証機能がないUDPを補完し、攻撃者による応答のなりすましを困難にするため、DNSには追加機能が備わっているとのこと。具体的には、DNSクエリ送信時にランダムなIDも送信し、DNSリプライも同じIDを持っていれば、正当な応答として処理するという仕組み。DNSリプライはDNSクエリの送信元ポート番号に対して送信する必要があるので、「DNSのID」と「送信元ポート番号」がDNSにおけるエントロピーの増大に貢献し、なりすましを困難にする要素となっています。


しかし、こうした仕組みは完全には機能していないとのこと。リゾルバのポート番号は53が一般的であるため、エントロピーを増大させる要素は実質的にIDのみ。さらにIDは6万5536種類しか設定できず、なりすましを困難にするには単純すぎる状態でした。この弱点を利用したのがカミンスキー型攻撃手法で、リゾルバからのDNSクエリに権威サーバーが応答する前にIDの異なる大量のDNSリプライをリゾルバに送信し、悪意のある情報をリゾルバにキャッシュさせる攻撃です。


カミンスキー型攻撃手法に対処するため、利用するポートをランダム化する機能がリゾルバに実装されましたが、それでもDNSを攻撃する手法は存在します。そのひとつはDNSのエントロピーを増大させるランダム性がすべて「DNSメッセージ」内に含まれていることを利用した方法。UDPはパケット分割の際にDNSのIDと送信元ポートをひとつの分割先にまとめ、DNSのデータ部分は別の分割先に格納するため、DNSのデータ部分さえすり替えることができれば、IDと送信元ポートによるランダム化を無効化できるというわけです。


今回、カリフォルニア大学バークレー校などの研究チームによって新たに発見されたDNSへの攻撃手法「SAD DNS」は、リゾルバが利用するポートを特定するというアプローチを採用しています。ポートを特定するにはさまざまな手法がありますが、SAD DNSではICMPのエラー送信間隔を制限する「ICMP Rate Limit」が用いられているとのこと。

ICMP Rate Limitは一定間隔におけるICMPエラーメッセージの送信回数を制限する機能。ICMPエラーメッセージを送信するたびにカウンタをひとつづつ増やしていき、カウンタ数が制限に達するとエラーメッセージの送信を停止することができます。この機能は、大量のICMPパケットでサーバーがパンクしてしまうのを防ぐことができますが、裏を返せば攻撃者に「開放されているポートがあるかどうか」の情報を与えてしまうことになるとCloudflareは説明しています。

ICMP Rate Limitが50の場合、まず攻撃者はリゾルバの1000~1049の合計50ポートに対してパケットを送信し、その後あるポートに対して追加でパケットを送信します。仮に1000~1049のポートのうちどれかひとつが開放されていた場合、ICMP Rate Limitが作動していないので、追加のパケット送信に対してICMPエラーメッセージの応答があるはず。攻撃者はこの操作によって「リゾルバの1000~1049のポートのうち、どれかひとつは開放されている」という情報を入手することができ、操作を繰り返せば開放されているポートを特定できるというわけです。


Cloudflareはすでに自社のDNSサービス「1.1.1.1」にDNSのID推測を困難にする対策を講じていますが、SAD DNSに対する根本的な解決には至っていないとのこと。問題はDNSがIPアドレスやポート番号を隠ぺいすることによってセキュリティを確保する「隠ぺいによるセキュリティ」に頼っている点にあるとして、デジタル署名を利用してDNSリプライの正当性を確認できるDNSSECの普及に注力するとCloudflareはコメントしています。

この記事のタイトルとURLをコピーする

・関連記事
Microsoftが「DNS接続の暗号化」に賛同、将来的にWindowsの対応も検討 - GIGAZINE

「DNSの暗号化方式」の覇権を巡る争いとは? - GIGAZINE

「どのDNSサーバーが最速か」を一発でベンチマークできる「DNS Benchmark」レビュー - GIGAZINE

Google Chromeは「DNSルートサーバー」に大きな負荷をかけている、その理由とは? - GIGAZINE

偽のドメイン名をかたる「DNSハイジャック」の標的がAndroidからiOSやPCへと拡大して世界中にも拡散中 - GIGAZINE

プライバシー面を重視したDNSサービス「1.1.1.1」をCloudflareが提供開始 - GIGAZINE

Cloudflareとインターネットアーカイブがウェブの信頼性をさらに高めるため提携 - GIGAZINE

in ソフトウェア,   セキュリティ, Posted by darkhorse_log

You can read the machine translated English article here.