ドメインネームシステム(DNS)は、基本的にインターネット上のアドレス帳です。ブラウザーはDNSを使って、特定のサービスのIPアドレスを見つけます。例えば、esecurityplanet.comと入力すると、ブラウザーはDNSサービスに問い合わせて対応するサーバーに接続しますが、メールを送信するときにもDNSが使われます。
ユーザーにとっては、サービスごとにIPアドレスを覚える必要がないため便利ですが、セキュリティ上のリスクや脆弱性がないわけではありません。攻撃者は、一般的な攻撃を試みるためにDNSを列挙する可能性があります。
これは、データ窃取や改ざん、さらにはランサムウェア攻撃など、近年多くの組織に深刻な被害をもたらしているさらなる攻撃を実行するための、最初のステップになることがよくあります。さらに、このような攻撃はセキュリティツールで検知するのが難しいことが多く、1回の操作で数千もの被害者を標的にできるため、ハッカーに好まれています。
こちらもお読みください:DNS攻撃を防ぐ方法
DNS:5つの重要な概念
DNS攻撃とその影響を理解するには、まずDNSとは何か、どのように機能するのかを理解する必要があります。
- 接続されている各デバイスには、ほかのマシンがそのデバイスを見つけて識別できるよう、固有のIPアドレスが割り当てられています。
- DNSは、各デバイスやサービスの、人間にはほとんど読めないアドレスを記憶する手間を省きます。
- Webページを閲覧するたびに、実際にコンテンツを表示できるようになるまで、複数のDNSサーバーが呼び出されます。
- ドメイン名をIPアドレスに変換する処理はDNSルックアップと呼ばれ、DNSリゾルバーによって処理されます。
- DNSキャッシュ(DNSリゾルバーキャッシュとも呼ばれます)は、最近行われたDNSルックアップを蓄積したデータベースです。複数の階層にキャッシュが存在するため、DNSエントリーを作成または更新した際、DNSのプロパゲーション(反映)を待たなければならないことがよくあります。
一般的なDNS攻撃を解説
網羅的なリストではありませんが、以下の手法は、脅威アクターがDNSを侵害するために使う最も一般的な攻撃です。
DNSスプーフィングまたはDNSポイズニング
「スプーフィング」とは、攻撃者が、例えばドメインに関連付けられたIPアドレスを偽装するなどして、正規のサービスになりすますことを意味します。
DNSスプーフィングはかなり一般的な手法ですが、さまざまな状況を含む総称です。最も一般的なケースを説明するには、DNSキャッシュポイズニングのほうが正確でしょう。この場合、攻撃者はDNSキャッシュに偽の情報を入力し、DNSクエリによってユーザーを不正なIPアドレスへリダイレクトさせます。
DNSリゾルバーがキャッシュ内のデータを検証することは、技術的には不可能です。そのため、偽の情報は有効期限(TTL、time to liveとも呼ばれます)が切れるまでキャッシュに残ります。この攻撃は定義上、一時的なものにすぎませんが、マルウェアを侵入させるには十分な時間です。
多くの場合、ハッカーはユーザーを正規サイトのコピーへリダイレクトし、認証情報や銀行データを盗みます。偽サイトをユーザーが見分けられるという証拠もありますが、元のアプリを完全に複製したものなどは、検知がかなり難しい場合があります。
こちらもお読みください:新たなDNSスプーフィングの脅威により数百万台のデバイスが危険に
DNSトンネリング
この攻撃はクライアント・サーバーアーキテクチャに依存し、TCPやSSHなどの別のプロトコルを使って、DNSリクエスト経由でマルウェアをトンネリングします。攻撃者は通常、ドメイン名を登録し、マルウェアをホストする自身のサーバーをそのドメインに割り当てます。
ハッカーはこの手法を長年利用してきました。感染したマシンをコマンド&コントロールサーバーに接続するうえで、特に効果的だからです。こうしたDNSリクエストをブロックできるファイアウォールは存在しません。
DNSハイジャック
この場合、攻撃者はすべてのクエリを別のDNSサーバーへリダイレクトします。例えば、DNSレコードを変更する不正アクセスに成功した後などに行われます。DNSポイズニング攻撃とは異なり、DNSキャッシュは関与しません。
DNSハイジャックには、さまざまなアプローチや手法があります。例えば、ハッカーはローカルDNS設定を変更したり、ルーターを侵害したりできます。
DNS増幅攻撃
この攻撃では、脆弱なDNSサーバーのトラフィックを増幅し、攻撃の正確な発信元を隠します。攻撃者は送信先を被害者のアドレスに偽装するため、最小限のリソースでインフラ全体を停止させることが可能です。
DNSフラッディング
フラッディング攻撃は、高帯域幅で動作するデバイスを利用してDNSサーバーに大量のリクエストを送りつけます。標的のサーバーは、膨大な量のクエリを処理できません。このような攻撃には、過剰に強化されたボットネット(例:Mirai)が使われることが多く、最大規模の組織でさえ停止させる可能性があります。
DNS暗号化:DoHとDoT
DNS攻撃に対抗するため、Googleなどの大手企業は、DNSの暗号化をTLS(DoT)またはHTTPS(DoH)経由で推進してきました。これは、ほとんどのDNSリクエストが長年にわたって暗号化されておらず、DNSがMITM(中間者攻撃)を受けやすいためです。例えば、Wi-Fiや企業ネットワークに侵入できた者は、DNSクエリや応答を改ざんできます。
無料ソフトウェアのWiresharkなどを使えば、機密性の高い操作やインターネットトラフィック全体を含むデータを比較的簡単に取得できます。
最大の問題は、デバイスとDNSリゾルバーの間にある無条件の信頼です。幸い、暗号化によってDNSメッセージへのアクセスを強化できます。まったく同じ概念ではありませんが、WebサイトをHTTPからHTTPSへ移行するのに少し似ています。
TLS経由のDNS暗号化は、メッセージを安全なチャネルに埋め込むために導入されました。暗号化されたDNSメッセージを送信する前に、クライアントとサーバーの間でTLSハンドシェイクメッセージが交換されます。
これは新しいポート(例:ポート53)に依存するため、一部のファイアウォールによってブロックされる可能性があり、既存のアーキテクチャとの競合も生じます。その結果、ユーザーが暗号化されていないDNSリクエストに戻らざるを得なくなる可能性があります。そこで、この問題を解決し、Webアプリケーションが既存のAPIを利用できるようにDoHが作られました。
DoHを使うと、HTTPSプロトコル経由でDNSクエリを実行できます。適切な認証がなければ、クエリや応答にアクセスすることは理論上不可能です。
DNSCryptでDNSを保護する
DNSCryptは、DNSクライアントとDNSリゾルバー間の通信を暗号化、認証し、必要に応じて匿名化するプロトコルです。
言い換えれば、DNSCryptはすべてのDNSトラフィックを暗号化します。この暗号方式は楕円曲線暗号です。
例えばブラウザー内でUDPやTCPを通過するトラフィックをフィルタリングできるため、企業ネットワークにおける効果的なセキュリティ対策となります。認証によってDNSスプーフィングを防止することも可能です。
DNSCryptは、Windows、macOS、LinuxなどのほとんどのOSに加え、Android、iOS、オープンルーターのファームウェアにもクライアントとしてインストールできます。最も一般的なクライアントはdnscrypt-proxyです。
- メリット
- ネットワークから生成されたトラフィックを確認できる
- 広告、マルウェア、スパムをブロックできる
- ポート443を使用する
- 遅延を低減できる(例:IPv4のみのネットワーク)
- クラウドサーバーに導入できる
- デメリット
- 可用性よりもセキュリティを優先する。通常は望ましいことだが、欠点になる場合もある
- 他の層が安全でない場合、単一障害点になる可能性がある
こちらもお読みください:DNSCryptとDNSSECでDNSを安全にする方法
DNSSECでDNSを安全にする方法
DNSセキュリティ拡張(DNSSEC)は、公開鍵に基づくデジタル署名を使ってDNSを強化します。DNSクエリや応答を暗号化するのではなく、公開鍵と秘密鍵のペアでDNSデータを保護します。
秘密鍵は、特定のゾーン内のDNSデータに署名し、デジタル署名を生成するために使われます。そして公開鍵はゾーンに公開されます。そのゾーンのデータを検索するリゾルバーは、公開鍵を取得してDNSデータの真正性を検証してから、ユーザーに返すことができます。
署名が正しくない、または存在しない場合、リゾルバーは攻撃と判断し、データ転送をキャンセルします。
さらに、DNSSECでは通常、RRSIG(暗号学的署名)やDNSKEYなどの新しいDNSレコードが追加されます。
- メリット
- DNSポイズニングの軽減に効果的
- 導入と有効化が容易
- 業界でのサポートが充実している
- デメリット
- 暗号化ではなく検証を使用する
さらに進んだ対策:DNSペネトレーションテスト
定期的なDNSペネトレーションテスト(侵入テスト)は、実際の攻撃を再現するため、組織のDNSを安全にするために実施できる最も有効なセキュリティ対策の1つでしょう。
ペンテスターはまずNmapでサービスを列挙し、次にdigを使ってDNSを調査するでしょう。例えば、以下のKali Linuxでmozilla.orgの権威検索を実行できます。
dig authority mozilla.org
digコマンドの最終的な目的は、権威DNSサーバー、メールサーバー、ネームサーバーの一覧などの情報を取得することです。さらに、Metasploitには、次のようにDNSを列挙するための専用モジュールがあります:auxiliary/gather/enum_dns。
次に読む:ペネトレーションテストのおすすめツール





