見出し画像

DNSセキュリティ1:DNSキャッシュポイズニングとその対策

情報処理安全確保支援士試験の対策として、DNSセキュリティについて解説します。1回目はDNSキャッシュポイズニングです。


1.DNSキャッシュポイズニング

(1)概要

DNSキャッシュポイズニングとは、言葉のとおり、「DNSのキャッシュ」に「ポイズニング(毒を盛る)」ことだ。嘘のDNS情報を入れ込み、正規のサイトにアクセスしているつもりが、違うサイトにアクセスさせる。これで、ウイルスに感染させたり、個人情報を盗んだりする。DNS情報を偽装するDNSスプーフィングの代表的なものだ。

(2)DNSの問合せの流れ

まず、DNSの問合せの流れを確認しましょう。クライアントであるPC(リゾルバとも言います)は、キャッシュDNSサーバ(またはフルリゾルバサーバ)にFQDNに対するIPアドレスを問合せます。キャッシュDNSサーバは、回答に関する情報(キャッシュ)を持っていない場合、コンテンツDNSサーバ(または権威DNSサーバ)に問い合わせをします。そして、その回答を受け取るとともに、キャッシュDNSサーバに情報を蓄積します。

(3)攻撃の流れ

さて、DNSキャッシュポイズニング攻撃ですが、example.comの正規のコンテンツDNSサーバが応答をする前に、攻撃者が偽の応答のIPアドレス(192.51.100.1)を応答します。すると、利用者はexample.comのIPアドレスとして、偽のIPアドレスを取得してしまい、偽りのサーバに接続させられてしまいます。

😯DNSの回答までは1秒もかかりません。そんな瞬時に攻撃者は応答を返せるのですか?

🙆‍♂️できてしまうんだ。

攻撃者はどうやって、そんな絶妙のタイミングで巧妙に偽装した回答を返せのでしょうか。
それは、悪意のある攻撃者が自分で問い合わせているのです。本来のDNSからの回答を偽装したパケットまで準備しておけば、本来のDNSサーバより早く応答ことは可能です。

😒攻撃者からのパケットを無条件に信じてしますのですか?

🙅‍♂️そんなことはないよ。

キャッシュDNSサーバは、DNSで問い合わせするときに、問合せのID情報を付けて送っている。よって、その問合せID情報とは異なる回答だった場合、偽の情報と判断できます。
しかし、IDは16ビットであり、65536通りしかないのです。なので、攻撃者は65536通のIDを付けた回答を全て送り付けます。これであれば、DNSサーバはIDが一致したものを信じてしまうのです。
以下がとても詳しく解説されている。
https://www.nic.ad.jp/ja/newsletter/No40/0800.html

※IDとは、識別子のこと    (画像引用:拙書「情報セキュリティの教科書」(技術評論社)

(4)カミンスキー攻撃

※試験では、言葉くらいしか問われないと思います。

カミンスキー攻撃(Kaminsky's attack)は、DNSキャッシュポイズニング攻撃の効率的な攻撃方法です。ダン・カミンスキー氏が発見したことからこのように呼ばれます。
従来のDNSキャッシュポイズニング攻撃では、キャッシュの時間(TTL)が切れるのを待ってからの攻撃で、効率は良くありません。
カミンスキー攻撃では、標的DNSサーバに対して、存在しないであろうドメインを問い合わせします(例:123456.example.com)。存在しなければ、example.comの権威DNSサーバに問い合わせをしますが、そのときに、123456.example.com以外に、ns.example.jpなどの、聞かれていない情報まで汚染して送り込むのです。これが、一部のDNSサーバにおいて、上書きできるのです。
※参考URL:https://jprs.jp/related-info/guide/009.pdf

😯なぜ従来より“効率的”なのですか?

🙋‍♂️TTLが切れるのを待たなくていいからです。
従来のキャッシュポイズニングは「既にキャッシュされているレコード」に対して行いました。しかし、TTLが切れるまでは、新規にDNSサーバに問い合せしません。つまり、攻撃が成立しない場合があるのです。

😒存在しないドメインをキャッシュさせても意味が無いのでは?

🙅‍♂️それが違うのです。
実は、カミンスキー攻撃は、「存在しないサブドメイン自体をキャッシュすることが目的ではない」のです。その問い合わせのついでに返される“追加レコード(親ドメインの NSレコードやAレコード など)”を汚染してキャッシュさせることを狙います。

🙁123456.example.comという存在しないFQDNの名前解決が行われた時に、ns.example.comA レコードまで汚染できるの?

🙆‍♂️はい。
歴史的には可能でした。それが、カミンスキー攻撃が成立した理由の一つです。今は、追加レコードの扱いを厳しくする実装改善によって、成立しないことがほとんどでしょう。

2.DNSキャッシュポイズニングの対策

カミンスキー攻撃を含む、DNSキャッシュポイズニングの対策は、サーバの要塞化を図るとともに、以下の設定を行います。

(1)送信元ポート番号のランダム化

DNS応答を受け取ったサーバでは、ポート番号に矛盾があると、不正なパケットとして判断します。仮に送信元ポート番号が固定(つまり1つ)だとすると、偽装するパケットのあて先ポート番号は1つで済みます。ですので,偽装パケットはIDの数である65536個を作成すれば攻撃が成立します。
ところがポート番号をランダム(例えば10,000個)にすると,攻撃者は、ポート番号を変えながら,合計10,000×65,536個の偽装パケットを送らないといけません。送信処理が大変ですし、正規の応答より送信が遅くなる可能性もあります。

(2)DNSサーバの構成変更

詳細はこのあとの3で解説します。

(3)DNSSEC 

DNSSEC(DNS Security Extensions)では,ディジタル署名を用いることで,DNSキャッシュサーバからの応答が正しいもの,つまり,改ざんされていない情報であることが確認できます。詳しくは別の記事で解説します。

3.コンテンツサーバとキャッシュサーバの分離

DNSキャッシュポイズニング対策として、先ほど、DNSサーバの構成変更と述べました。詳細を解説します。

(1)構成について

DNSサーバを、コンテンツサーバとフルリゾルバサーバに分離します。この対策により、キャッシュポイズニング攻撃は防げます。
❶コンテンツサーバの設定
キャッシュを無効にする。つまり、再帰検索を無効にする。設定は、以下です。この設定によって、自分が持っている(権威ある)ゾーン情報のみを回答します。

recursion no

❷キャッシュサーバの設定
再帰問い合わせは許可されたセグメント(一般的には内部セグメント)のみから許可する。

🙁その設定で、運用上は問題ないのです?

🙆‍♂️そう、問題ないよ。
キャッシュサーバは、企業の内部セグメントからの問い合わせだけに答えればいいのです。なので、問い合わせのIPアドレスは内部に制限します。これは、プロバイダのキャッシュDNSサーバであっても同じです。自分のプロバイダにて払い出しているIPアドレスからの応答のみを答えます。そうしておけば、仮に攻撃する人がいたとしても、契約者情報から誰がやったのかがわかります。

❸キャッシュサーバ兼コンテンツサーバ
コンテンツサーバとキャッシュサーバの分離を図り、上記で述べたそれぞれの対策を実施します。

(2)なぜ攻撃が防げるのか

❶コンテンツサーバはなぜ攻撃を防げるか
キャッシュを無効にして、DNSの問合せ(再帰問い合わせ)もしなければ、キャッシュポイズニングはそもそも発生しない。

❷キャッシュサーバ
DNSキャッシュポイズニングに攻撃は、攻撃者がキャッシュサーバにDNSの問い合わせを実施するところからスタートする。そもそも、攻撃者を含む外部からのキャッシュDNSサーバへの問合せを受け付けなければいい。
内部セグメントであれば、(ボットなどによる攻撃を受ける可能性はあるが、)攻撃を受けにくいことは間違いない。

(3)構成例

過去問(R3春SC午後Ⅰ問2)を参考に、構成例をみてみましょう。
❶現状
以下の外部DNSサーバを見てください。そのあとの解説文にあるように、権威DNSサーバ(コンテンツDNSサーバ)とフルリゾルバサーバ(キャッシュDNSサーバ)の機能が混在しています。

❷修正後
DNSリフレクション攻撃の踏み台にならないようにするための対策がこちらです。権威DNSサーバとフルリゾルバサーバを分離します。
ただし、この変更に伴い、FWのルール変更をする必要があります。実際に問われた設問に関しては、後半の過去問の節で出題します。

4.DNSリフレクション攻撃(解説無し)

DNS reflection攻撃は、応答パケットのサイズが大きくなるような問合せを行います。このときに、大量の文字を記載したレコードを、DNSキャッシュポイズニングによってキャッシュさせることがあります。

詳細は、別途、DDoS対策にて記載予定です。

5.まとめ問題(オリジナル穴埋め問題)


まとめ問題です。前後の文脈だけでは判断しづらいものや、複数の答えが考えられるものもあります。皆さんに考えてもらえるようにと思ってのことですので、ご理解ください。

DNSキャッシュサーバに偽のDNS応答をキャッシュさせる攻撃が〔 ア 〕である。攻撃者は、正規の応答が届くより〔 イ 〕に偽応答を送り込み、キャッシュDNSサーバを汚染(ポイズニング)することで、ユーザを攻撃者が用意した偽サイトへ誘導したりする。
この攻撃の一つに、存在しないサブドメインに対して大量の問い合わせを発生させ、その応答に紛れ込ませた追加レコード(NSやAレコード)をキャッシュに書き込ませることで、親ドメインの参照先を乗っ取る攻撃がある。これを〔 ウ 〕攻撃と呼ぶ。
この攻撃を防ぐための方法に、〔 エ 〕のランダム化がある。従来のDNSサーバでは固定値として〔 オ 〕番を使っていたため、攻撃者はトランザクションIDだけを当てればよく、トランザクションIDが〔 カ 〕ビットの値であることから、65,536通りを総当たりすれば成功する可能性があった。
しかしポート番号を毎回ランダムにすれば、攻撃者は〔 キ 〕の数 ✖ トランザクションIDの組合せを総当たりする必要があり、現実的に攻撃は困難となる。
次に重要なのが、DNSサーバの構成面の見直しである。
具体的には、〔 ク 〕と〔 ケ 〕を分離することである。〔 ク 〕は再帰問い合わせを行うため、〔 コ 〕からの問い合わせのみに限定し、外部からのアクセスはFWなどで遮断する。一方、コンテンツDNSサーバ(権威DNSサーバ)は再帰を無効とし、自分が権威を持つゾーン情報のみを回答する設定とする。
最後に、応答の真正性を暗号的に検証できるようにする技術が〔 サ 〕である。












解答例
ア:DNSキャッシュポイズニング
イ:先
ウ:カミンスキー(Kaminsky)
エ:送信元ポート番号
オ:53
カ:16
キ:ポート番号
ク:フルリゾルバサーバ(またはキャッシュDNSサーバ)
ケ:権威DNSサーバ(またはコンテンツDNSサーバ)
コ:内部ネットワーク
サ:DNSSEC(DNS Security Extensions)

6.過去問:午前

(1)午前問題❶ H25SC春午前Ⅱ問12

問19 企業のDMZ上で1台のDNSサーバをインターネット公開用と社内用で共用している。このDNSサーバが,DNSキャッシュポイズニングの被害を受けた結果,引き起こされ得る現象はどれか。
ア DNSサーバで設定された自社の公開WebサーバのFQDN情報が書き換えられ,外部からの参照者が,本体とは異なるWebサーバに誘導される。
イ DNSサーバのメモリ上にワームが常駐し,DNS参照元に対して不正プログラムを送り込む。
ウ 社内の利用者が,インターネット上の特定のWebサーバを参照する場合に,本来とは異なるWebサーバに誘導される。
エ 電子メールの不正中継対策をした自社のメールサーバが,不正中継の踏み台にされる。

過去問(H25SC春午前Ⅱ問12)









正解

(2)午前問題❷ DNSのゾーン転送 H22春SC午前2問8

問8 DNSサーバに格納されるネットワーク情報のうち、第三者に公開する必要のない情報が攻撃に利用されることを防止するための、プライマリDNSサーバの設定はどれか。
ア SOAレコードのシリアル番号を更新する。
イ 外部のDNSサーバにリソースレコードがキャッシュされている時間を短く設定する。
ウ ゾーン転送を許可するDNSサーバを登録する
エ ラウンドロビン設定を行う。

(H22春SC午前2問8)










アは、DNS情報を変更した場合に必要な作業。シリアル番号の数字が増えていると、情報が書き変わったとみなされ、セカンダリDNSサーバへゾーン転送される。
イは、移転などにより、IPアドレスを変更する場合に行う作業。例えば、xxx.comのIPアドレスが1.1.1.1から3.3.3.3に変更した場合、多くのDNSサーバのキャッシュに古い1.1.1.1が保持されている場合、古いIPアドレスにアクセスし続けるため、利用者がアクセスできない。
ウは、正解。DNSの設定において、allow-transferでゾーン転送を許可するサーバを指定する。

😯ということは、DNSのゾーン転送はデフォルトでは誰でも受けられるということですか?

🙆‍♂️そうなんだ
ちなみに、セカンダリDNSサーバの設定としては、typeをslaveにして、mastersにプライマリDNSサーバのIPアドレスを入れるだけです。認証設定などは無いのです。さらにいうと、誰もがコマンドを打つことで、ゾーン情報を取得することもできてしまいます。
そもそも、DNS情報は公開する情報だから、第三者に見られてもいいのです。とはいえ、全部の情報のリストを見られると、その組織のネットワーク情報が分かってしまう。なので、セキュリティ上あまり好ましくないだろう(あくまでもだろう)という点に関する問題でした。

(3)午前問題❸ 令和5年SC春午前Ⅱ問5

問5 DNSに対するカミンスキー攻撃(Kaminsky’s attack)への対策はどれか。
ア DNSキャッシュサーバと権威DNSサーバとの計2台の冗長構成とすることによって,過負荷によるサーバダウンのリスクを大幅に低減させる。
イ SPF(Sender Policy Framework)を用いてDNSリソースレコードを認証することによって,電子メールの送信元ドメインが詐称されていないかどうかを確認する。
ウ 問合せ時の送信元ポート番号をランダム化することによって,DNSキャッシュサーバに偽の情報がキャッシュされる確率を大幅に低減させる。
エ プレースホルダを用いたエスケープ処理を行うことによって,不正なSQL構文によるDNSリソースレコードの書換えを防ぐ。

出典:令和5年SC春午前Ⅱ問5








カミンスキー攻撃(Kaminsky’s attack)の対策は、DNSキャッシュポイズニング(DNSキャッシュ汚染)の対策をすることで攻撃を難しくできます。
正解:ウ

7.過去問:午後

(1)午後問題❶ H22春SC午後2問1

DNSソフトの製品サポート窓口からは,現時点でとり得る対策として,  DNSサーバで,②名前解決の問合せにおいてDNSキャッシュポイズニング攻撃を受けやすい不適切な設定を行わないという解決策が提示され,それに従い設計書を修正した。念のため,現在のDNSサーバの設定を確認したところ,設定は適切であった。

設問2(3)本文中の下線②について,  DNSキャッシュポイズニング攻撃を受けやすいDNSサーバの不適切な設定とはどのような設定であるか。 25字以内で述べよ。 

(H22春SC午後2問1)






送信元ポート番号が、古いDNSサーバの場合は53に固定されていることが問題です。DNSキャッシュポイズニングでは、一瞬のスキで偽装パケットを送る必要がある。ポート番号が固定されていれば、応答パケットを作りやすいので、攻撃を受けやすいのです。
ちなみに、今のDNSサーバでは、送信元ポート番号は固定ではなくランダムです。

正解:
送信元ポート番号を固定する設定

(2)午後問題❷ R3SC春PM1-2

対策として、M主任は、三つの対策を考えた。一つ目の対策は、一つ目のリスクへの対策を流用することである。二つ目の対策は、送信元ポート番号を〔 d 〕する対策である。Dソフトでも可能である。三つ目の対策は、〔 e 〕という技術の利用である。この技術は、DNSサーバから受け取るリソースレコードに付与され──

R3SC春PM1-2







参考までに、「一つ目のリスクへの対策」とは、権威DNSサーバとフルサービスリゾルバに分けた上で、FWのルールでフィルタリングをすることです。
■ d:送信元ポート番号を〔ランダム化〕する
送信元ポート番号を毎回ランダムに変更(ランダム化)することで、攻撃者が偽応答を一致させる難易度を大きく上げます。

■ e:DNSSEC
DNSSECでは、DNS応答データに電子署名を付与し、その署名を検証することで改ざんの有無を確認できます。

(3)午後問題❸ R3春SC午後Ⅰ問2

先ほどの「3(3)構成例」の内容に関する問題です。そちらの図も確認した上で解いてください。

設問1(3) 表3中の〔 a 〕、〔 b 〕に入れる適切な字句を解答群の中から選び、記号で答えよ。









解答例:a:ア(DNS-F)→フルリゾルバサーバ
    b:イ(DNS-K)→権威DNSサーバ
※フルリゾルバサーバは、インターネットのDNSサーバに反復問合せをするために、インターネットへの通信を許可する必要がある
※権威DNSサーバは、インターネットからのDNSの問合せに応答する必要がある。

(4)午後問題❹ R1NW午後Ⅱ問2

〔DNSサーバヘの攻撃と対策〕
 Jさんは, DNSサーバヘの攻撃の中でリスクの大きい,DNSキャッシュポイズニング攻撃の手法について調査した。Jさんが理解した内容を次に示す。
 DNSキャッシュポイズニング攻撃は,次の手順で行われる。
(i)攻撃者は,偽の情報を送り込みたいドメイン名について,標的の【 f 】サーバに問い合わせる。
(ii)フルリゾルバサーバは,指定されたドメインのゾーン情報を管理するコンテンツサーバに問い合わせる。
(iii)⑥攻撃者は,コンテンツサーバから正しい応答が返ってくる前に,大量の偽の応答パケットを標的のフルリゾルバサーバ宛てに送信する。
(iv)フルリゾルバサーバは,受信した偽の応答パケットをチェックし,偽の応答パケットが正当なものであると判断してしまった場合,キャッシュの内容を偽の応答パケットを基に書き換える。

(ii)の問合せパケットと,(iii)の応答パケットの情報を表3に示す。 表3に示すように,(ii)の問合せパケットの送信元ポート番号には特定の範囲の値が使用されるケースが多いので,攻撃者は,(iii)の偽の応答パケットを正当なパケットに偽装しやすくなるという問題がある。調査の結果,この問題の対応策には,送信元ポート番号の【 g 】化があることが分かった。

過去問(R1NW午後Ⅱ問2)

 表3 (ii)の問合せパケットと,(iii)の応答パケットの情報(抜粋)

 Jさんは,DMZにある外部DNSサーバを、コンテンツサーバとして機能するDNSサーバ1と、フルリゾルバサーバとして機能するDNSサーバ2に分離すると考えた。Jさんは、⑦外部DNSサーバの構成変更によって,インターネットからのDNSサーバ2へのキャッシュポイズニング攻撃は防げると判断した。さらに,万が一の場合に備え,DNSサーバ2には,送信元ポート番号のランダム化に対応した製品の導入を提案することにした。
 Jさんは,調査結果と対応策をN主任に説明し,DNSサーバ2には送信元ポート番号のランダム化対応の製品の導入が了承された。

設問1【オリジナル問題】
【 f 】~【 g 】に入れる適切な字句を答えよ。

設問5 〔DNSサーバヘの攻撃と対策〕について(1)~(3)に答えよ。
(1)表3中の問合せパケットに対して,フルリゾルバサーバが正当な応答パケットと判断するパケットの内容について,表3中の【 キ 】~【 サ 】に入れる適切な字句又は数値を答えよ。
(2)本文中の下線⑥では,大量の偽の応答パケットが送信される。当該パケット中で,パケットごとに異なる内容が設定される表3中の項目名を,全て答えよ。
(3)本文中の下線⑦について,防げると判断した根拠を,60字以内で述べよ。
(4)【オリジナル問題】本文中の下線⑦について,DNSサーバ1へのキャッシュポイズニング攻撃も防げる。その理由を,20字以内で述べよ。

R1NW午後Ⅱ問2









難しかったと思います。正解は以下です。
■設問1 オリジナル問題
f:フルリゾルバ(またはキャッシュDNS)
g:ランダム  

■設問5 (1)
(ⅱ)のパケットを、表3と比べて正解を考えます。
【空欄サに関して、DNSサーバは,受信した問合せのパケット中の識別子を,応答パケット中に入れて返信します。設問文には「フルリゾルバサーバが正当な応答パケットと判断する」とあります。なので、識別子は同じ値,つまりmであるべきです。
【解答例】
空欄キ:コンテンツサーバのIPアドレス
空欄ク:フルリゾルバサーバのIPアドレス
空欄ケ:53  空欄コ:n   空欄サ:m

■(2)
【解答例】
宛先ポート番号,識別子
【解説】
攻撃者が知りえない「宛先ポート番号」と「識別子」の2つは、総当たりでパケットを作ります。よって、パケットごとに異なる内容が設定されます。ちなみに、送信元IPアドレスは、nslookupコマンドなどで、example.comのNSレコードを調べればわかります。

■(3)
【解答例】
攻撃者が送信する,キャッシュポイズニングのための名前解決要求パケットは,FWで破棄されるから

■(4)
【解答例】
DNSサーバ1は再帰問合せをしないから
【解説補足】
]DNSサーバ1へキャッシュポイズニングを仕掛けた場合、パケットそのものは届きます。FWで許可されているからです。ですが、DNSサーバ1は再帰問合せをしないので、キャッシュポイズニング攻撃は成功しません。

いいなと思ったら応援しよう!