【基礎編2】DNSサーバに対するサイバー攻撃に関して深める
DNS攻撃では、DNSサーバの機能とドメイン/ホスト名からIPアドレスへの解決を妨害して、ユーザーを悪意のあるWebサイトに誘導したり、インターネットトラフィックを傍受して不正アクセスを取得したりしようとします。
DNSに対する攻撃は金銭的損失に加え、データの盗難、評判の失墜、Webサイトのダウンタイム、マルウェア感染など、深刻な被害をもたらす可能性があります。
DNSの基本の仕組み
DNSはドメイン/ホスト名とそれに対応するIPアドレスの情報を格納する階層的なサーバ連携の仕組みです。
ユーザーがブラウザにドメイン/ホスト名を入力すると、ブラウザはDNSクエリをローカルDNSリゾルバに送信します。DNSリゾルバはドメイン名に関連付けられたIPアドレスを検索します。
DNSリゾルバがIPアドレスを持っていない場合、クエリはルートDNSサーバーに送信され、ルートDNSサーバーはドメインの権威DNSサーバーにクエリを転送します。権威DNSサーバーは、クエリに対して正しいIPアドレスで応答します。このように階層的にサーバに問い合わせる仕組みになっているのが、DNSの大きな特徴となっています。

DNS攻撃とは
DNS攻撃は、DNSプロトコル自体またはDNSサーバの構成の脆弱性を悪用することで実現します。
DNS攻撃を成功させるには、攻撃者はDNSクエリを傍受し、正当な応答が到着する前に偽の応答を送信する必要があります。例えば、DNSキャッシュポイズニングはDNSサーバを騙してドメイン名のIPアドレスをキャッシュさせます。結果利用者のアクセスを攻撃者が用意したサーバに誘導することとなりフィッシング/マルウェアの配信、電子メールの窃盗などを図ります。
同様に、DNSアンプ攻撃は、オープンリゾルバー(パブリックDNS)を悪用して標的のサーバに大量のトラフィックを送りつけます。結果、DNSサーバをサービス不能な状態にさせることを図ります。
多くの場合、DNS攻撃はDDoS攻撃の実行や機密データの窃取など、何らかの損害や不当な利益を得るために、DNSシステムを何らかの形で操作したり悪用したりするものとなります。
DNS攻撃の種類
DNSアンプ攻撃(DNSリフレクター攻撃)
DNSアンプ攻撃はDNSを利用したDoS攻撃の一種です。
送信元IPアドレスを装った問い合わせをDNSキャッシュサーバ(フルリゾルバ)、権威サーバに送ることでそこから応答を攻撃対象のサーバに送ることでサービス停止/不能の状態に陥らせることを目指します。
DNSの要求のパケットよりもDNS応答のパケットの方が大きい特徴からDNSアンプ攻撃とも呼ばれます。 この攻撃の特徴は以下の通りです。
- UDPを使用しておりなおかつ攻撃元IPアドレスの偽装が可能で攻撃が反射的な特徴であることから、攻撃元の特定が難しい問題がある
- 攻撃に利用可能なパブリックDNSがインターネット上に多く存在するため攻撃元範囲を広げやすい
ランダムサブドメイン攻撃(DNS水攻め攻撃)
ランダムサブドメイン攻撃は企業/組織の権威DNSサーバ/フルリゾルバに対するDoS攻撃の一種です。
仕組みとしては問い合わせのドメイン名にランダムなサブドメインを追加し、フルリゾルバのキャッシュ機能の効果を無効化することで攻撃対象となる権威サーバに問い合わせを集中させます。結果、権威DNSサーバ/フルリゾルバをサービス不能の状態にさせることを目指します。
この攻撃は基本的にボットネットを用いて行われ、また問い合わせ元IPアドレスを偽装する必要がないこと、つまり攻撃に使われる問い合わせと通常の問い合わせを識別できない構造上の特徴から、対策が実施づらいという問題がある。
DNSキャッシュポイズニング(DNSスプーフィング)
DNSキャッシュポイズニングは偽のDNS応答をフルリゾルバ(DNSキャッシュサーバ)に蓄積させることで、DNSサーバ利用者のアクセスを攻撃者が用意したサーバに誘導し、マルウェア配信、フィッシング、電子メール窃盗などを図る攻撃のことです。
DNSハイジャック
DNSハイジャック(狭義のドメインハイジャック)はドメインの管理権限を持たない第三者が何かしらの手段でドメインを自身の支配下に置くことです。
ドメインハイジャックが成功した場合、攻撃者は偽サイトへの誘導、フィッシング、マルウェア配信、クッキーの改竄、電子メールの窃盗など様々な形で悪用が可能です。
具体的な手法は以下の通りです。
- レジストリに登録されている情報を不正な形で書き換える
- 権威DNSサーバに不正なデータを登録する
- フルリゾルバに不正データをキャッシュさせる
BINDの脆弱性に対する攻撃
BINDは米国のISCが開発しているDNSソフトウェアです。
非常に多くの企業/組織で使われていますが、脆弱性が多いこと有名です。
これは権威DNSサーバとDNSキャッシュ機能を1つのプログラムで実装しているという設計上の仕様により発生しています。
BINDはDoS攻撃を発生しうる脆弱性を多く内包しています。
DNS攻撃に対する対策
ここで各種DNSへの攻撃の対策方法に関して紹介します。
DNSアンプ攻撃への対策
DNSアンプ攻撃では権威DNSサーバ、フルリゾルバ(DNSキャッシュサーバ)に分けて対策方法を考えます。
権威DNSサーバにおける対策
権威DNSサーバは不特定多数のインターネットからのクライアントの要求を受け付ける必要があります。 つまるところACLの実施は不可能となります。
そこでRRL(Response Rate Limiting)と呼ばれるDNSプロトコルに実装されているDNSアンプ攻撃を防ぐ仕組みを利用することになります。 RRLは権威DNSサーバが応答する問い合わせの間隔を制限することにより、DDoS攻撃を未然に阻止します。
フルリゾルバにおける対策
フルリゾルバにおける対策ではDNSサービスの範囲を限定する、つまり、IPアドレスベースでの適切なACL設定が重要になります。 この設定を行うことで自組織が管理するDNSキャッシュサーバが外部からのDNSリフレクター攻撃の踏み台になることを防止ができます。
またACLの設定はDNSアンプ攻撃だけではなく、DNSキャッシュポイズニングの攻撃リスクを低下させることも可能となります。
ランダムサブドメイン攻撃への対策
ランダムサブドメイン攻撃に対して根本的な対策というものは攻撃の性質上存在しません。
そのためDNSの構成や要求監視/攻撃検知を工夫することにより実現します。具体的な内容は以下の通りです。
- 外部から不正/想定されていないが利用が可能となっているDNSキャッシュサーバ機能を停止する
- フルリゾルバにおいてフィルタリング/レート制限などの仕組みを実装する
- 監視の仕組み/攻撃検知の仕組みを導入する
DNSキャッシュポイズニングへの対策
DNSキャッシュポイズニングはDNSプロトコルの性質に起因します。 これはDNSソフトウェアの実装を工夫することで攻撃の低減が見込まれます。具体的なものの1つにはソースポートランダマイゼーションと呼ばれる手法があります。
この手法はUDPのお問い合わせの際のソースポートを要求ごとにランダムに変化させることで、DNSキャッシュポイズニングの成功確率を低下させることを目的としています。また最近、この機能は大体のスタブリゾルバ(DNSクライアント)とフルリゾルバ(DNSキャッシュサーバ)に標準で実装されています。
DNSハイジャックへの対策
DNSハイジャックはDNSが不正に書き換えられること、またそれを検知することで緩和することを目指します。
BINDの脆弱性に対する攻撃への対策
この攻撃に関しては言わずもがな、ソフトウェアの状態を常に最新版に保つようにすることが重要です。
また根本的な解決としてはBindを使用せず、PowerDNS, NSD, Knot DNSなど他のDNSソフトウェアを使用することも選択肢にあります。
これは運用上の手間やセキュリティを上げることにつながります。
総括
DNSはインターネットの根幹を支える仕組みといっても過言ではありません。 DNSのセキュリティを上げるためには以下実装を考慮する必要があります。
- BINDをメインのDNS機能として使わない(権威DNSサーバとして使わない)
- DNSキャッシュサーバは内部のみに機能を提供範囲を限定する
- DNSSECを必ず導入する
次回は前回の「基礎編1」と今回の「基礎編2」を踏まえて、中程度(数百台以上のクライアント)の組織ITインフラのDNS構成案を具体的に検討してみます。