2023年8月版 最速! 危険度の高い脆弱性をいち早く解説「脆弱性研究所」第13回 その2
8月に新たに公開された脆弱性は4539となります。この中で特に重大な脆弱性をその1に続いて解説いたします。
3. “MaginotDNS”と呼ばれる新たな攻撃手法が公開
BlackHatで新たなDNSキャッシュポイズニングの手法として「MaginotDNS」という手法が公開されました。以下ではこの手法について簡単に解説したいと思います。
一次情報源
- MaginotDNS(PDF)
影響を受ける製品
今回の脆弱性で影響を受ける製品は以下になります。
- BIND 9, Microsoft DNS, Knot Resolver, Technitiumなど
攻撃の詳細
前提
Kashpureff型攻撃とBailiwick(管轄区域)
1997年に問題になったキャッシュサーバーを汚染させるための手法(キャッシュポイズニング)として、Kashpureff型攻撃があります。これは、キャッシュサーバーに攻撃者が管理する権威サーバーへ問い合わせさせ、正規の応答パケットに問い合わせ内容と関係ない(権威外の)ドメインの情報を附加して、キャッシュサーバーへリプライとして送り込みます。これにより、キャッシュを汚染させる手法です。
- 上図の様に攻撃者が攻撃対象(キャッシュDNSサーバー)に「www.hgehoge.com」を聞きに行きます。
- 攻撃者が使用できるhogehoge.comのDNSサーバーがキャッシュDNSサーバーにwww.hogehoge.comに関する返答を返しますが、それに追加して、「自分の権威外のattack.fugafuga.comはfugafuga.comのNSになっていて、IPアドレスは1.2.3.4だよ」という偽の情報を返します。
- www.hogehoge.comのレコードとともに、偽の情報をキャッシュDNSサーバーがキャッシュしてしまいます。これでキャッシュが汚染されてしまいます。
これを防ぐために、DNSに「Bailiwick(管轄区域)」という概念が導入されました。これはRFC 8499に載っていますが、簡単に言うと「委譲されていないドメインに関しての返事を返されても無視して(削除して)ね」というものになります。これにより、DNSによる名前解決のパス上でのキャッシュポイズニングができないようになりました。
Kaminsky攻撃
次に2008年に問題になったキャッシュサーバーを汚染させるための手法(キャッシュポイズニング)として、Kasminsky攻撃があります。これはDNSの返答のタイミングをうまく付いてキャッシュサーバーを汚染させる総当たり攻撃の一種になります。
- 攻撃者が「a1.mybank.com」について攻撃対象(キャッシュDNSサーバー)にトランザクションID(TXID)=1001で問い合わせます。
- キャッシュDNSサーバーは正規のmybank.comのNSに「a1.mybank.com」について問い合わせに行きます。トランザクションID(TXID)=1001への返答としてAレコードの情報とNSサーバーの情報として「ns.mybank.comは1.1.1.1だよ」と送ります。
- 2の返答が行われるまでの時間で、攻撃者はTXID=(ランダム)で偽の情報「ns.mybank.comは1.2.3.4だよ」を送ります。
- 運良くTXIDが正規のもの(1001)にマッチしたものを2.の返答が届く前に送り込めれば成功です。ns.mybank.comが1.2.3.4という誤った情報がキャッシュDNSサーバーにキャッシュされます。
- うまく行かなかった場合には1に戻って「a2.mybank.com」の様に問い合わせます。これを攻撃が成功するまで行います。
この攻撃は、DNSによる名前解決のパスに加えて、別のパス(右下)を用いてキャッシュポイズニングを行っています。DNSのトランザクションID(TXID)が16bitしかなかったため、成功することがありました。これを防ぐため、「問い合わせ時のソースポート(16bit)」と「TXID(16bit)」の組み合わせを用いて検証する様にDNS実装が変更されました。これにより32bitのランダム値がマッチしなくてはならなくなったため、DNSによる名前解決のパス外からの総当たり攻撃を実質的に防げるようになりました。
CDNS
CDNSリゾルバ(conditional DNS resolver)とは、ゾーンに依ってforwardingモードとリゾルバモードを切り替えるリゾルバになります。この2つのモード間ではキャッシュを共用しています。
MaginotDNSの攻撃の詳細
今回攻撃する対象となるのはCDNSでforwardingモードとリゾルバモードの両方を有効にしたものになります。
一般的なDNSソフトウェア実装では、リゾルバボードではBailiwick(管轄区域)チェックは行われますが、forwardingモードでは行われません。そこで、下図のようにCDNSがUpstreamのDNSサーバーにクエリを転送して、attacker.comの権威サーバーが管理区域外の情報を返してきた場合には、Bailiwickチェックが行われないため、CDNSサーバーのキャッシュが汚染されてしまいます。つまり、DNSによる名前解決のパス上でのキャッシュポイズニングが可能になります。
また、下図の様にDNSの名前解決のパス外からのキャッシュポイズニングも行えます(この場合にはBIND9であればSADDSNS攻撃などを併用します)。
修正
攻撃の脆弱性は2022年初頭にBIND (CVE-2021-25220) と Knot (CVE-2022-32983) で修正されています。
参考情報
8月のまとめ
8月は、BlackHat USAがあったため、論文と一緒に発表されたCPUの攻撃や、(語弊がありますが)面白いDNSへの攻撃などが見られました。他にもBlackHatで紹介されたものが多くありますので、9月にも動きがあると思われます。
また、今回は紹介できませんでしたがFordの車載PCなど、他にも多数の脆弱性が出ています。メーカーからのセキュリティ情報を適宜確認して、こまめに対応しましょう。
<著者> 面 和毅
サイオステクノロジー株式会社 上席執行役員
OSS/セキュリティエバンジェリスト
OSSのセキュリティ専門家として20年近くの経験があり、主にOS系のセキュリティに関しての執筆や講演を行う。大手ベンダーや外資系、ユーザー企業などでさまざまな立場を経験。
2015年からサイオステクノロジーのOSS/セキュリティエバンジェリストとして活躍中。また、ヒートウェーブ株式会社でも講師として活動中。
専門分野はSELinuxを含むOSのアクセス制御、AntiVirus、SIEM、脅威インテリジェンス。
「脆弱性研究所」の最新話は、メールマガジンにてもご案内致しています。是非JAPANSecuritySummit Updateのメールマガジンにご登録ください。
メールマガジンの登録はこちらからお願いします
最速! 危険度の高い脆弱性をいち早く解説「脆弱性研究所」の過去の記事はこちらから