DNS サーバを構築するためのソフトウェアである BIND 9 に遠隔からサービスを不能とすることが可能となる脆弱性が報告されています。
脆弱性と脅威
243views
1.概要 DNS サーバを構築するためのソフトウェアである BIND 9 に遠隔からサービスを不能とすることが可能となる脆弱性が報告されています。当該脆弱性を利用して攻撃者に DNS サーバの機能を停止され偽の DNS サーバを設立されることにより、攻撃対象者は悪意のある Web コンテンツに誘導されてしまう可能性があります。
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" 以外のものを指定する。