オープンソース

unboundのDNS攻撃対策

私たちは、DNSをあまり意識せずに使っています。DNSは、インターネット上でサービスやホストの名称とIPアドレスを管理する重要なサービスです。DNSがなければ、インターネットの仕組み自体が成り立たないといっても過言ではありません。
その一方で、DNSに関連したたくさんの攻撃が観測されています。DNSを攻撃すれば、簡単にシステムを利用不能にすることができます。また、DNSのデータを改竄すれば、情報を盗み見たり、利用者を騙すことも簡単に行うことができてしまいます。
unboundのもっとも重要な特徴は、こうした攻撃に対して様々な対策を行うことができることです。ここでは、どのような対策を行うことができるのかを解説します。

DNSキャッシュサーバに対する脅威

まずは、DNSに対する脆弱性について確認しておきましょう。

脆弱性への攻撃

DNSに対する攻撃のうちの多くが、DNSサーバ自体の脆弱性を突くものです。DNSのリクエストパケットに細工をすることで、DNSサーバの管理するキャッシュを書き換えたり、DNSサーバを使用不能にするような攻撃が多く見られています。そのため、DNSサーバでは、まずは脆弱性対策をしっかり行っておく必要があります。

カミンスキー攻撃

2008年に、セキュリティ研究者のカミンスキー氏が発表した攻撃の手法です。この攻撃は、DNSの付加情報を悪用して行います。攻撃者は、本来存在しないドメイン名をDNSキャッシュサーバに問い合わせます。攻撃者は、偽の応答にDNS付加情報として、偽のドメイン名とIPアドレスの組み合わせを付加します。DNSキャッシュサーバは、この偽の情報を信用してキャッシュしてしまいます。

この攻撃では、キャッシュの有効性に関わらず強制的に偽の情報を送り込むことができます。そのため、攻撃者が攻撃できるタイミングが飛躍的に増加します。

DNS水責め攻撃

DNS水責め攻撃は、2014年に日本国内でも多く観測され、多くのプロバイダが被害にあった攻撃です。

DNSキャッシュサーバは、存在しない名称での問い合わせに対して、情報が存在しないという応答を返します。一般的に、存在しないことの調査には、存在している場合と同等か、それ以上のコストがかかります。そのため、DNSキャッシュサーバは、「情報が存在しない」ということをキャッシュデータとして残します。

DNS水攻め攻撃は、多数のクライアントから、存在しない名前を一斉に検索する攻撃で、ランダムサブドメイン攻撃とも呼ばれます。DNSキャッシュサーバは、「情報が存在しない」という情報を大量に記録しようとします。そして、記録できるキャッシュの量の限界に達すると古い情報を捨てます。最終的には、DNSキャッシュは、「情報が存在しない」という情報で埋め尽くされることになります。こうなると、利用者からの通常の問い合わせに迅速に対応することができず、応答が徐々に遅くなり、利用不能になってしまいます。

頻発するDNSサーバへの攻撃

日本で、DNS水責め攻撃が行われた背景には、一般家庭に置かれたWi-Fiルータなどの設定が間違っていたり、古い機器のバグが取り除かれていなかったことがあげられます。最近では、監視カメラが攻撃に利用されたこともありました。こうした攻撃は繰り返し行われていて、2018年には総務省がIoTセキュリティガイドラインを発表するなど、社会問題化しています。

こうしたことを背景に、企業でも、事業継続性の観点から、DNSサーバに対する攻撃の対策が求められています。

DNS攻撃対策の課題

こうした攻撃があることが分っていても、DNSサーバへの攻撃の対策は容易に行うことができません。それには、つぎのような理由があります。

FirewallやIPSでは防げない

DNSはUDPで実装されています。そのため、パケットの偽造が簡単で、送信元をランダムに変えることができます。そのため、FirewallやIPSで、特定のIPアドレスを遮断するだけでは、攻撃を防ぐことができません。一方で、攻撃を遮断しないと、ファイアウォールの管理テーブルがオーバーフローするなど、二次的な影響が出ることもあります。

個別のIPをブロックできない

NAT共有されている特定のIPアドレスをブロックすると、そのIPを共有しているすべてのノードからのリクエストがブロックされてしまいます。DNSへの問い合わせがブロックされると、実質的に通信不能になります。このように、予想外に大きな影響が出る可能性があり、個別のIPアドレスのブロック以外の対策を行う必要があります。

unboundの攻撃対処の機能

unboundには、このようなDNS攻撃を検出したり対処するための機能が備わっています。

DNSSEC

DNSSECは、DNSキャッシュが改竄されたことを検知できるように、DNSのデータに電子署名をする技術です。DNSキャッシュサーバでは、DNS問い合わせによって得られた結果を検証し、正しいデータであることを検査することができます。

unboundは、DNSSECをフルサポートしています。また、unboundでは、DNSSECの鍵が正しく配布されないような事故があった場合でも、一時的に特定のドメインだけをDNSSECの検証から外すことができます。これは、unboundの独自機能で、bindでは利用することができません。

unbound-controlによるキャッシュ制御

DNSキャッシュに誤ったデータが保管されてしまったり、DNS水責め攻撃でキャッシュに不都合な情報が多数記録された場合には、unbound-controlコマンドで、動的にキャッシュを削除することができます。unboundでは、全キャッシュをフラッシュすることもでき、個別のキャッシュを削除することもできます。

ローカルデータによるDNSデータの上書き

DNS水責め攻撃では、ランダムなサブドメインを生成してDNS問い合わせが行われます。この攻撃を防ぐために、DNSキャッシュサーバに一時的にサブドメインを作成してしまい「情報が存在しない」というキャッシュが大量に生成されるのを防ぐという手法があります。unboundでは、DNSのローカルデータを動的に定義することができるため、このような手法でDNS水責め攻撃を防ぐことができます。

防御設定

unboundには、攻撃を検知したり防御したりする細かな機能がたくさん実装されています。こうした機能には、RFCなどで標準化された範囲内で行えるものと、利用するとRFCに定義された動作と異なる動作をするものがあります。そのため、unboundでは、それぞれの機能のON/OFFを設定で切り替えることができるようになっています。ここでは、こうした機能のいくつかを紹介します。

  • カミンスキー攻撃の対策

    DNSコンテンツサーバの権威の範囲のみグルーレコードを信用する

  • キャッシュポイズニングの検出

    上位ゾーンと下位ゾーンから返るNSレコードが一致しないことを検出し、条件によって検索を停止する

  • 偽造レスポンスの検出

    DNS調査時にクエリ名に小文字と大文字をランダムに混在させて、偽造攻撃を検証する

  • キャッシュのクリア

    望ましくない回答を受け取った回数を記録し、閾値を越えたら関連したキャッシュをクリアする

ratelimitによる水責め攻撃対策

unboundのratelimit機能は、ゾーン毎のQPSの情報をもとに流量の制限を行う機能です。unboundでは、この機能を使って、DNSへの水責め攻撃やランダムサブドメイン攻撃の被害を軽減することができます。unboundは、ratelimitを設定すると、ゾーンごとにQPS(秒間問合数)を計算します。そして、それが制限値を越えた場合、unboundは制限を実施します。unboundでは、次のような制限を行うことができます。

  • 全クエリの遮断、または、流量の制限(例:2回に1回はクエリを許可するなど)
  • ゾーンごとに制限値を変更可能
  • キャッシュに載っているドメインに関しては制限対象外

unboundは、.com.や.jp.など利用頻度が非常に高いゾーンの制限値を高くしたり、制限から除外することができます。また、unboundはratelimitの情報を2秒置きに更新し、クエリが緩やかになると制限を自動的に解除します。

unbound_ratelimit機能

動作イメージ

unboundのログ保管と管理

unboundのratelimitや各種の防御設定の機能を使っても、すべての攻撃が防げるわけではありません。そのためunboundでは、どのような攻撃が行われているかを解析する仕組みを導入することができるようになっています。

しかし、unboundが直接ログを出力すると、ログの保管の処理のために処理性能が悪化してしまいます。そのため、unboundは、高速にログを保管するための仕組みであるdnstapに対応しています。unboundは、直接ログを保管するのではなく、dnstapを通じてログサーバにログを高速に転送することができます。

デージーネットでは、unboundのdnstapから出力されたログを、Graylogを使って蓄積、解析することを推奨しています。

デモのお申込み

もっと使い方が知りたい方へ
unboundの操作方法や操作性をデモにてご確認いただけます。使い方のイメージを把握したい、使えるか判断したい場合にご活用下さい。unboundのデモをご希望の方は、下記よりお申込みいただけます。

デモをご希望の方

デモの申し込みイメージ

OSS情報「unbound」

unbound〜攻撃に強いDNSキャッシュサーバ〜
ここでは、DNSのキャッシュサーバに特化したDNSサーバのソフトウェアである「unbound」を紹介します。
unboundのDNS攻撃対策
unboundの特徴は、DNSに関連した攻撃に対して様々な対策を行うことができることです。ここでは、どのような対策を行うことができるのかを解説します。
unboundのシステム構成とBINDからの移行
ここでは、unboundを利用する場合のシステム構成について説明します。
unboundのインストール
ここでは、CentOS7でunboundを設定する方法について解説します。

unboundのDNS攻撃対策の先頭へ