一般的なBIND DNSサーバーに重大な脆弱性が発見されました。 その操作により、攻撃者は任意のデータの正しい署名を取得し、この署名を使用して変更したり、すべてのDNSサーバーレコードのリストを取得したりできます(dnsゾーン転送攻撃)。
問題は何ですか
脆弱性CVE-2017-3143は、TSIGと呼ばれるBIND DNSの認証プロトコルの実装で発見されました。 TSIGは、PowerDNS、NSD、Knot DNSなど、他の多くのDNSサービスでも使用されています。
Synacktivの研究者は、TSIGレコードの処理中にエラーを発見しました。これにより、キー名を知っている攻撃者は、ゾーンの更新、アラート、およびゾーン転送操作の保護メカニズムを克服できます。
間違った長さのTSIGダイジェスト(使用するハッシュアルゴリズムで必要なものよりも多い)を送信すると、サーバーは、空の署名の代わりに、正しい署名で攻撃者の要求からデータを返します。 その結果、攻撃者は任意の偽データの正しい署名を取得し、TSIG認証を克服できます。 この脆弱性は、攻撃者がデータを変更したり、DNSゾーンを持つファイルにアクセスするために使用される可能性があります。
RFC 2845によると、応答ダイジェストはリクエストの3つのフィールドから計算されます:
- 要求からのダイジェスト(MAC)と長さフィールド。
- 要求からのレコード(更新)、ただしTSIGレコードなし;
- TSIGレコード自体、ただしダイジェストなし。
したがって、脆弱性の悪用はいくつかの段階で発生します。
- 攻撃者は、ゾーンの更新とSOAレコードを含むDNSクエリを送信し、ダイジェストではなく、サーバーデータベースに挿入するRRレコードを配置します。 たとえば、「Injected」というテキストでサーバーが制御するゾーンの1つにTXTを記録します。 このようなダイジェストの長さは、使用されるハッシュアルゴリズムで暗黙的に示される長さよりも大きくする必要があります。たとえば、HMAC-SHA256アルゴリズムの長さは32バイトを超えます。
- サーバーは、TSIGレコードの空のMAC(ダイジェスト)フィールドで応答する代わりに、攻撃者からデータを返します。これには、ゾーンの更新とサーバーの秘密鍵で署名されたTXTレコードが含まれます。
- 取得した署名を使用して、攻撃者はゾーン更新でステップ1と同じリクエストを送信しますが、TSIGレコードMACフィールドの代わりに、SOAレコードの後のゾーンセクションに追加エントリがあり、MACフィールドにはステップ2からの正しいダイジェストが含まれます、脆弱性のあるサーバーが署名を確認するときに同じデータを使用するように、TSIGレコードのTime Signedフィールドの値は同じである必要があります。
- サーバーは、送信された要求を正常にチェックした後、データをデータベースに適用します。データベースはログから確認できます。
14-Jun-2017 07:48:55.003 client 172.17.42.1#50445/key tsig_key: updating zone 'example.com/IN': adding an RR at 'i.can.inject.records.in.the.zone.example.com' TXT "injected"
研究者によって公開された情報によると、BINDの以下のバージョンの脆弱性が確認されました。
- バインド9.9.10
- バインド9.10.5
- バインド9.11.1
ライセンスBINDソフトウェアが配布されているISCによると、次のバージョンも脆弱です。
- 9.4.0から9.8.8に
- 9.9.0から9.9.10P1
- 9.10.0から9.10.5P1
- 9.11.0から9.11.1P1
- 9.9.3S1から9.9.10S2まで
- 9.10.5S1から9.10.5S2
Synaktivの代表者は、この脆弱性に対するPoCエクスプロイトコードも提示しました。
自分を守る方法
ISCの専門家は、記載されているセキュリティエラーを解決するためのパッチを公開しました。 さらに、Positive Technologiesの専門家がIDS Suricataのシグネチャを作成しました。これにより、ネットワークを介して脆弱性CVE-2017-3143を悪用する試みを特定および防止できます。アーカイブには、この脆弱性を悪用するトラフィックの例も含まれています:
また、脆弱性を検出するために、当社の専門家は、セキュリティ監視システムやMaxPatrol 8標準への準拠などの専用ツールの使用を推奨しています。