カリフォルニア大学リバーサイド校の研究チームによる最新の論文には、これまで見落とされていたLinuxカーネルのサイドチャネルの存在が指摘されている。これはDNSサーバ攻撃に悪用される可能性がある。
研究者らによると、DNSの問題の根源はその設計にある。セキュリティが重要な課題として認識されていなかったため、強力なセキュリティ機能を後から加えるのが極めて困難なのだ。
その重要な役割とは裏腹に、DNSはセキュリティチェーンの脆弱部分になっています。DNSでは歴史的に、効率性が中心的な考慮事項でした。そのため、UDP上の単一クエリと応答という設計になっていて、現在も中核的なメカニズムとして残っているのです。
DNSSECやDNSクッキーといたセキュリティ機能はあるものの、後方互換性の問題から広く普及するには至っていない、と研究者らは述べている。DNSをセキュアにする唯一のアプローチは、UDPポートの乱数化である。これはエフェメラルポートと呼ばれるもので、攻撃者による検出を難しくするためのものだ。
この結果として、過去にはいくつかのDNS攻撃の存在が明らかになっている。最近確認されたSAD DNSはDNSキャッシュポイズニングの亜種で、攻撃者がDNSキャッシュに悪意のあるDNSレコードを挿入することによって、任意のトラフィックを自身のサーバにリダイレクトし、中間者(man-in-the-middle、MITM)になることを可能にするものだ。
さらに最近では、SAD DNSを発表した研究者の一部が、Linuxカーネル内部で10年間にわたって見つかっていなかったサイドチャネル脆弱性を公開している。この脆弱性は、ICMPプローブを使ってUDPエフェメラルポートのスキャンを可能にするもので、研究者らはこれを利用して、新たなDNSキャッシュポイズニング攻撃をすることに成功した。
この時に研究者らが注目したのは、"ICMP fragment needed"(IPv6では"ICMP packet too big")と"ICMP redirect"という、2タイプのICMPのエラーメッセージだった。研究者らが示すように、Linuxカーネルはサイドチャネルを構成する共有リソースを使用して、これらのメッセージを処理している。これが意味するのは、大まかに言うと、攻撃者がICMPプローブを送信する際に、特定のポートを標的にすることができる、ということだ。標的とするポートが正しければ、それによって共有リソースの状態に何らかの変化が生じる。その変化は間接的に監視可能であるため、推測が正しかったことの確認ができるのだ。例えば、攻撃によってサーバのMTUを低くできたことは、それ以降の応答が断片化されることによって検証が可能である。
新たに発見されたサイドチャネルは、研究者らによれば、BIND、unbound、dnsmasqなど、Linux上で動作する一般的なDNSソフトウエアの大部分に影響がある。オープンリゾルバの13.85パーセントが影響を受けると推定される。さらに研究者らは、最新のBINDリゾルバとホームルータを対象としたエンドツーエンド攻撃が、ものの数分で成功することを示している。
この新たな攻撃は、ICMPフラグメントが必要なメッセージを受け入れないようにOSを設定してサイドチャネルを完全に排除するなど、適切なソケットオプションを設定する、カーネルの共有キャッシング構造自体を乱数化する、ICMPリダイレクトをリジェクトする、といった方法で防ぐことができる。
新たな脆弱性が公開されたことを受けてLinuxカーネルには、IPv4およびIPv6の共有カーネル構造を乱数化するようなパッチが実施された。さらにBIND 9.16.20では、IPv6ソケットにIP_PMTUDIC_OMIT
がセットされる。