BIND 9 の TKEY 機能における実装不備により遠隔からサービス不能にされてしまう脆弱性(Scan Tech Report) | ScanNetSecurity
2024.03.29(金)

BIND 9 の TKEY 機能における実装不備により遠隔からサービス不能にされてしまう脆弱性(Scan Tech Report)

DNS サーバを構築するためのソフトウェアである BIND 9 に遠隔からサービスを不能とすることが可能となる脆弱性が報告されています。

脆弱性と脅威 エクスプロイト
1.概要
DNS サーバを構築するためのソフトウェアである BIND 9 に遠隔からサービスを不能とすることが可能となる脆弱性が報告されています。当該脆弱性を利用して攻撃者に DNS サーバの機能を停止され偽の DNS サーバを設立されることにより、攻撃対象者は悪意のある Web コンテンツに誘導されてしまう可能性があります。


2.深刻度(CVSS)
7.8
https://nvd.nist.gov/cvss.cfm?version=2&name=CVE-2015-5477&vector=(AV:N/AC:L/Au:N/C:N/I:N/A:C)


3.影響を受けるソフトウェア※1
以下のバージョンの BIND が当該脆弱性の影響を受ける可能性があります。

- 9.1.0 から 9.8.x 系の全てのバージョン
- 9.9.0 から 9.9.7-P1
- 9.10.0 から 9.10.2-P2

ただし、以上に示したバージョンのソフトウェアでも、OS のベンダが独自にパッチを適用している場合があるため、パッチが場合は当該脆弱性の影響を受けません。


4.解説
DNS サーバを構成するソフトウェアである BIND のバージョン 9 系に、遠隔からサービスを停止させることが可能な脆弱性が報告されています。

BIND 9 では、マスタサーバがスレーブサーバの間でアップデート情報を転送する際に、攻撃者による中間者攻撃などを防ぐために、TSIG 機能というものが存在します。TSIG 機能では、暗号鍵やパスワードによる認証機能を提供しています。当該機能では、サーバとクライアントの間でパスワードを安全に交換するために、TKEY 機能により公開鍵を用いてパスワードの交換を行います。
脆弱性は、TKEY 機能を構成するプログラム lib/dns/tkey.c に含まれる dns_tkey_processquery() メソッドの dns_message_findname() 関数内での変数処理に不備があるため生じています。

DNS プロトコルでは、どのような情報が要求されているかをサーバに伝えるためにクエリレコードが用いられます。攻撃では、クエリレコードのパラメータの内 Name パラメータと Type パラメータが用いられます。Name パラメータは主にドメイン名、Type パラメータにはどのような情報 (MX レコードなど) が要求されているかを指定します。

クエリレコードで宣言された情報が不十分である場合は追加レコードが参照されます。追加レコードでは、クエリレコードで指定された Name パラメータと Type パラメータが一致する情報を検索し、情報の追加を行います。BIND が提供する TKEY 機能に対するクエリでは、lib/dns/tkey.c のメソッドである dns_tkey_processquery() を用いて追加レコードの検索を行います。当該脆弱性は dns_tkey_processquery() メソッドの dns_message_findname() 関数における name 変数の処理の不備に起因しています。

追加レコードで必要な情報が検索できなかった場合は、応答レコードに対して検索を行います。まず、追加レコード内でクエリレコードの Name パラメータ (name 変数) と一致する情報を検索します。一致する情報が一つでも見つかった場合は、一致するすべての情報が foundname 変数に格納され、name 変数が初期化されます。次に、foundname 変数に格納された情報の内、クエリレコードで指定した Type パラメータが一致するものを検索します。この際に TKEY が検索されれば dns_message_findname() 関数は正の戻り値を出力し、応答レコードの検索を行わず情報の検索を終えますが、TKEY が検索できなかった場合は dns_message_findname() 関数内で name 変数の検証で異常が発生し、BIND のプロセスが assertion error により終了します。

実際に当該脆弱性を利用して攻撃を行うためには、以下のクエリを DNS サーバに送信します。

(1) クエリレコードの Type パラメータに "TKEY"、Name パラメータに適当なドメイン名を指定します。
(2) 追加レコードの情報として、クエリレコードと一致する Name パラメータを指定し、Type パラメータに "TKEY" 以外のものを指定する。

当該脆弱性を用いた攻撃によりサービスが停止した場合、/var/log/messages に以下のような行が出力されます。

Aug 31 20:14:51 localhost named[1746]: message.c:2311: REQUIRE(*name == ((void *)0)) failed, back trace


5.対策
当該脆弱性は TKEY 機能を無効にしていても影響を受けるため、設定の変更による対処が出来ません。以下のバージョンに BIND をアップデートすることにより、対処することが可能です。

- 9.9.7-P2
- 9.10.2-P3

また「◆影響を受けるソフトウェア」にも記載した通り、OS によってはパッチが適用されたバージョンにアップデートされる場合もあるため、各ベンダが公開している情報を確認することを推奨します。


6.ソースコード
(Web非公開)

(執筆:株式会社ラック サイバー・グリッド研究所

※Web非公開該当コンテンツ閲覧をご希望の方はScan Tech Reportにご登録(有料)下さい。

Scan Tech Report
http://scan.netsecurity.ne.jp/archives/51916302.html
《株式会社ラック デジタルペンテスト部》

関連記事

Scan PREMIUM 会員限定記事

もっと見る

Scan PREMIUM 会員限定記事特集をもっと見る

カテゴリ別新着記事

「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」
「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」

ページ右上「ユーザー登録」から会員登録すれば会員限定記事を閲覧できます。毎週月曜の朝、先週一週間のセキュリティ動向を総括しふりかえるメルマガをお届け。(写真:ScanNetSecurity 名誉編集長 りく)

×