DNSキャッシュポイズニング【情報処理安全確保支援士 令和4秋 午後1 問1 No.1】

問1 IoT製品の開発に関する次の記述を読んで、設問に答えよ。

 J社は、家電の製造・販売を手掛ける従業員1,000名の会社である。J社では、自社の売れ筋製品であるロボット掃除機の新製品(以下、製品Rという)を開発し、販売することにした。製品Rの仕様を図1に示す。

 WebアプリRを含むファームウェアの開発は、開発部のFさんとG主任が担当することになった。

[各機能のセキュリティ対策の検討]
 まず、Fさんは、ファームウェアアップデート機能のセキュリティ対策を検討した。ファームウェアアップデート機能が偽のファームウェアをダウンロードしてしまうケースを考えた。そのケースには、DNSキャッシュサーバが権威DNSサーバにWサーバの名前解決要求を行ったときに、攻撃者が偽装したDNS応答を送信するという手法を使って攻撃を行うケースがある。この攻撃手法は(a)と呼ばれる。
 この攻撃は、DNSキャッシュサーバが通信プロトコルに(b)を使って名前解決要求を送信し、かつ、攻撃者が送信したDNS応答が、当該DNSキャッシュサーバに到達できることに加えて、①幾つかの条件を満たした場合に成功する。攻撃が成功すると、DNSキャッシュサーバが攻撃者による応答を正当なDNS応答として処理してしまい、偽の情報が保存される。当該DNSキャッシュサーバを製品Rが利用して、この攻撃の影響を受けると、攻撃者のサーバから偽のファームウェアをダウンロードしてしまう。しかし、Fさんは、②製品Rは、Wサーバとの間の通信においてHTTPSを適切に実装しているので、この攻撃の影響は受けないと考えた。Fさんは、ファームウェアアップデート機能のセキュリティ対策がこれで十分か、G主任に相談した。次は、この時のG主任とFさんとの会話である。

G主任:攻撃者のサーバから偽のファームウェアをダウンロードさせる攻撃は回避できます。しかし、偽のファームウェアをダウンロードしてしまう場合として、ほかにも、攻撃者がWサーバに侵入するなどの方法でファームウェアを直接置き換える場合もあります。対策として、ファームウェアに(c)を導入しましょう。まず、製品Rでは(c)証明書がJ社のものであることを検証します。その上で、検証された(c)証明書を使って、ダウンロードしたファームウェアの真正性を検証しましょう。

Fさん:分かりました。

 続いて、Fさんは、WebアプリRの実装について開発部の他の部員にレビューを依頼した。その結果、脆弱性Aと脆弱性Bの二つの脆弱性が指摘された。



設問1 【各機能のセキュリティ対策の検討】について答えよ。

(1)本文中の(a)に入れる攻撃手法の名称を15字以内で答えよ。

攻撃手法の内容は「DNSキャッシュサーバが権威DNSサーバにWサーバの名前解決要求を行ったときに、攻撃者が偽装したDNS応答を送信するという手法を使って攻撃を行う」と記載されています。


DNSは、ドメイン名をIPアドレスに変換する「名前解決」を司ります。

クライアントから問い合わせ受けたDNSは、まずDNSキャッシュサーバにドメイン名に紐づくIPアドレスがないか確認します。

クライアント→キャッシュDNSサーバへの問い合わせを、再帰問い合わせと言います。


一度アクセスしたことがあるドメインであれば、キャッシュサーバで一時的に記憶しているため、名前解決できます。

一度もアクセスしたことがないドメイン名の場合は、キャッシュサーバ内で返答できないため、権威DNSサーバに問い合わせます。

キャッシュDNSサーバ→権威DNSサーバへの問い合わせを、反復問い合わせと言います。


引用:DNS resolver / recursive query iterative query|ネットワークエンジニアとして


DNS

2023年3月20日




今回の事例では、キャッシュサーバに情報がなく、権威DNSサーバに名前解決欲求を行った時に、権威DNSサーバを装った攻撃者が偽のDNS応答を送信するとあります。

そうすると、DNS応答を受け取ったキャッシュサーバは偽のIPアドレスにアクセスさせてしまいます。


この攻撃手法を、DNSキャッシュポイズニングと言います。

引用:DNSに関するセキュリティ上の脅威|総務省


DNSキャッシュポイズニングの対策としては、次が挙げられます。

  • 攻撃成功率を下げるパッチの適用
  • DNSSECを使うことで、DNS応答に添付された署名が正規の相手からのデータであることを検証する



DNSキャッシュポイズニングの一種に、カミンスキー攻撃という攻撃もあります。

DNSキャッシュポイズニングは、アクセスしたことがない(問い合わせたことがない)新規ドメインへの問い合わせ時が必要なタイミングで行われるため、一度問い合わせが完了すると、キャッシュDNSサーバからIPアドレスの情報が消えるまで、同じドメインで攻撃することができません。


それに対し、カミンスキー攻撃は架空の存在しないドメイン名のIPアドレスを問い合わせます。

当然キャッシュDNSサーバは権威サーバに反復問い合わせをします。

攻撃者は正規の通信よりも先に、キャッシュDNSサーバに攻撃者が用意したサイトのIPアドレスを回答します。

すると、キャッシュDNSサーバは正規の権威DNSサーバからの返答と勘違いし、アクセスさせます。


カミンスキー攻撃

2023年3月12日

今回の問題文では、カミンスキー攻撃であると断定できる記載はないため、DNSキャッシュポイズニングが答えになります。



回答:DNSキャッシュポイズニング


(2)本文中の(b)に入れる適切な字句を解答欄の中から選び、記号で答えよ。

(1)に引き続き、DNSキャッシュポイズニングに関する知識問題です。

問題文には、「この攻撃(DNSキャッシュポイズニング)は、DNSキャッシュサーバが通信プロトコルに(b)を使って名前解決要求を送信し、かつ、攻撃者が送信したDNS応答が、当該DNSキャッシュサーバに到達できること」が必要であることが記載されています。


解答群の単語の意味を確認します。

ア、ARP:IPアドレスからMACアドレスを求めるために使うプロトコル。

イ、ICMP:pingコマンドを打つ時に使う特殊なプロトコル。ネットワーク通信の問題を診断するためにデバイスが利用するネットワーク層のプロトコル

ウ、TCP:トランスポート層に属する通信プロトコル。コネクションを確立して通信するため、セキュア。

エ、UDP:トランスポート層に属する通信プロトコル。TCPと異なりコネクションレスで通信する。


(2)問題は知識問題ですが、消去法で確認してみましょう。

まず、DNSの名前解決にMACアドレスは使わないので、ARPは消えます。
また、ネットワーク通信の問題を診断することもないので、ICMPも消えます。

(b)直前に「通信プロトコル」であることが記載されているので、ウorエに絞れます。


TCPを使うと、3wayハンドシェイクによりコネクションを確立した通信となるので、キャッシュサーバと偽の権威DNSサーバが通信することができません。


よって、回答はエ、UDPとなります。

一般的に、DNSの名前解決にはUDPが使われますが、問い合わせサイズが大きい場合などでTCPが使われます。





(3)本文中の下線①について、攻撃者が送信したDNS応答が攻撃として成功するために満たすべき条件のうちの一つを、30字以内で答えよ。

(1)で解説したように、DNSキャッシュポイズニングは、正規の権威DNSサーバよりも先に偽のDNS応答を送信することで、DNSキャッシュサーバを誤認させる攻撃です。

回答:権威DNSサーバからの応答よりも早く到着する。



(4)本文中の下線②について、どのような実装か。40字以内で答えよ。

「どのような実装」って何だ…?
回答として何を求められているのかがわからないよ…。

回答方針としては、下線②でふわっと記載されている「適切な実装」を詳細に記載してあげるイメージだよ。
なぜHTTP通信であれば、DNSキャッシュポイズニングの影響を受けないと言えるのかな?


製品RとWサーバ間ではHTTPS通信となっています。

HTTPS通信では、サーバ側からサーバ証明書が送られ、クライアント側で認証を行うことができます。



仮にDNSキャッシュポイズニングにより、攻撃者が用意した偽サイトにアクセスさせられても、HTTPSの実装であれば、製品R(クライアント)によるサーバ認証により検証できるため、通信相手がWサーバ以外である場合はアクセスを拒否することができます。

HTTPS通信では、サーバの認証の他にも、通信の暗号化やデータの改ざんの検知ができるんだ。


回答:サーバ証明書を検証し、通信相手がWサーバであることを確認する実装。



(5)本文中の(c)に入れる適切な字句を10字以内で答えよ。


(c)には、ファームウェアなどのソフトウェアが正規のソフトウェアであることを証明する証明書が入りそうです。


ソフトウェアに対するデジタル署名といえば、コードサイニング証明書です。


コードサイニング証明書は、コードが改ざんされていない本物であることをクライアント側で確認するためのものです。

今回の事例では、以下の手順でファームウェアをダウンロードすることで、真正性を確かめます。

  1. J社がコードサイニング証明書を発行する
    • J社側で秘密鍵・公開鍵ペアを作成し、公開鍵をCAに送信。
    • CAの秘密鍵で暗号化し、デジタル署名を付与したコードサイニング証明書を発行ーα
    • 同時に、J社の発行した秘密鍵でファームウェアのハッシュ値を暗号化し、デジタル署名を作るーβ
  2. 製品Rでコードサイニング証明書がJ社のものであることを検証
    • コードサイニングのデジタル署名をCAの公開鍵で復号し、証明書がJ社の物であることを確認するーα
  3. 検証したコードサイニング証明書を使ってダウンロードしたファームウェアの真正性を検証
    • ファームウェアのデジタル署名を公開鍵で復号し、ファームウェア自体が正規のものであることを確認するーβ