2008年に、DNS(Domain Name System)サーバーのキャッシュポイズニングが注目を集めた。ハッカーは、DNSの結果を偽のIP(Internet Protocol)アドレスを用いて欺くことで、ウェブブラウザーを本来の安全なサイトから、マルウェアを埋め込んだ偽サイトに誘導していた。対処策が発見されたおかげで、DNSキャッシュポイズニング攻撃は激減した。しかし、カリフォルニア大学リバーサイド校の研究者らは、脆弱なDNSキャッシュを悪用した新しい攻撃手法の「SAD DNS」を発見した。
DNSキャッシュポイズニングとは、DNSキャッシュサーバーへのアドレス問い合わせを傍受して、偽のDNSキャッシュに誘導する攻撃のことだ。ウェブブラウザーやインターネットアプリケーションに、悪意のあるIPアドレスを返信して、正しいサイトの代わりに偽サイトに誘導する。そのウェブサイトは、ユーザーのPCをランサムウェアに感染させたり、ユーザー名、パスワード、口座情報などを盗んだりできる。
防御策として、DNSクエリーIDとDNSリクエストソースポートのランダム化、名前付きエンティティーのDNSベース認証(DANE)、DNSSEC(DNS Security Extension)などがあり、これらによって、DNSキャッシュポイズニングの大部分を防ぐことができる。しかし現状では、十分に導入されていないため、DNSベースの攻撃は依然として起こっている。
研究者らは、最も人気のあるDNSソフトウェアスタックを対象に実行できる、サイドチャネル攻撃のSAD DNSを発見した。脆弱なプログラムとして、広範に使用されているBIND、Unbound、そしてLinux上で動作するdnsmasqなどがある。主たる脆弱性は、DNSサーバーのOSとネットワークが、ICMP(Internet Control Message Protocol)のエラーメッセージを送信できるように設定されている場合だ。
その仕組みを説明しよう。まず攻撃者は、偽装したIPアドレスと、DNSフォワーダーやリゾルバーからの要求をトリガーできるコンピューターを使用する。フォワーダーやリゾルバーは、DNSリクエストの送信先を特定するためのものだ。例えば、フォワーダー攻撃の場合、学校や図書館の公衆無線ネットワークなど、無線ルーターで管理されているLANに、攻撃者はログインする。Cloudflareの「1.1.1.1」やGoogleの「8.8.8.8」など、パブリックDNSリゾルバーも攻撃できる。
次に研究者らは、DNSリクエストで使用されているメインチャネルと関連しているが、外部にあるネットワークチャネルを使用した。そして、正しいソースポート番号を突き止めるまで、チャネルを開いた状態にして、毎秒1000件の推測を実行した。ランダム化されなくなったソースポート番号に悪意のあるIPアドレスを注入し、DNSキャッシュポイズニング攻撃を成功させた。
研究者らの調査から、34%を超えるインターネットのオープンリゾルバーに脆弱性があることが分かった。また、最も人気の高い無料のパブリックDNSサービスの85%が攻撃を受ける可能性があるという。
攻撃に対して無防備であるか知りたい場合、SAD DNSのウェブサイトで手順に従うだけで、簡単に確認できる。
これらの攻撃を防ぐ方法が幾つかある。実際のところ、既に存在する手法だ。セキュリティ拡張機能のDNSSECは有効だが、十分に導入されていない。比較的新しい「RFC 7873」DNSクッキーを使用しているなら、それも役立つはずだ。
しかし、最も簡単な緩和策は、ICMPによる応答を完全に無効化することだ。ただこれにより、ネットワークのトラブルシューティング機能や診断機能が失われる可能性がある。
もう1つの簡単な対策として、DNSクエリーのタイムアウト時間をより厳しく設定することが挙げられる。例えば、1秒未満に設定するとよい。それによってソースポートの存続時間が短くなり、攻撃者が偽の応答を注入する前に消えてしまう。しかし、より多くのクエリーが再送され、全体的なパフォーマンスが低下するかもしれないマイナス面がある。
どちらの方法を選ぶかはさておき、1つだけはっきりしている。DNSサーバーやDNSフォワーダーを運用しているなら、何らかの対策が必要だ。この攻撃はあまりにも簡単なため、犯罪グループはすぐに悪用するだろう。
この記事は海外Red Ventures発の記事を朝日インタラクティブが日本向けに編集したものです。