見出し画像

情報処理安全確保支援士試験 一発合格勉強法~午後問題解説 令和4年秋 午後Ⅰ問1

午後問題解説 令和4年秋 午後Ⅰ問1解説動画

文字おこし

設問1

空欄aの部分を確認していきます。

解答はDNSキャッシュポイズニングになりますが、これは知っていれば即答できる知識問題で、問題本文の「DNSキャッシュサーバ」という文言がヒントになります。
この後の(2)(3)につながる知識を含めて、DNSキャッシュポイズニングのフローについてもう少し具体的に説明してきます。

DNSキャッシュポイズニングとは、偽のDNS応答をキャッシュDNSサーバにキャッシュさせることで、攻撃者が用意したサーバに誘導する攻撃手法のことです。


まず、正常な場合の名前解決のフローを説明していきます。
前提としてtoppakou.comのWebサーバのIPアドレスは1.1.1.1とします。

権威DNSサーバのゾーン情報のAレコードにtoppakou.comのドメインに対するWebサーバのIPアドレスの1.1.1.1を紐づけておきます。
キャッシュDNSサーバには未だキャッシュ情報は無いものとします。

まず、クライアントパソコンは、toppakou.comのWebサーバのIPアドレスを取得するために、toppakou.comの名前解決をキャッシュDNSサーバに依頼します。
しかし、キャッシュDNSサーバにはまだ、toppakou.comの情報がキャッシュされていないので、原本を保持している権威DNSサーバに問い合わせます。
権威DNSサーバは、toppakou.comのWebサーバのIPアドレスの情報をキャッシュDNSサーバに返却します。
この時の通信プロトコルはコネクションレスのUDPが使われます。コネクションレスなので信頼性は低いですが、TCPに比べて通信にかかるコストが低いため、高速に処理が行えるメリットがあります。
キャッシュDNSサーバは、その名前解決した情報を一定期間キャッシュとして保持します。
そして、キャッシュDNSサーバは、toppakou.comのWebサーバのIPアドレスを問い合わせ元に返却します。

そしてクライアントパソコンは入手したIPアドレスに接続してtoppakou.comのWebサーバにデータを取得できる流れとなります。


今度は、DNSキャッシュポイズニングの場合で考えていきます。
攻撃者が用意した悪意を持ったサーバのIPアドレスを2.2.2.2とします。

まずtoppakou.comのWebサーバのIPアドレスを取得するために、クライアントパソコンは、toppakou.comの名前解決をキャッシュDNSサーバに依頼します。
しかし、キャッシュDNSサーバにはまだ、toppakou.comの情報がキャッシュされていないので、原本を保持している権威DNSサーバに問い合わせます。
そして、攻撃者は権威DNSサーバが応答を返すよりも先に、キャッシュDNSサーバに対して名前解決の結果を返却します。この場合攻撃者サーバの2.2.2.2が返却されます。
後から権威DNSサーバの正規の応答があっても先勝ちなので破棄されてしまいます。

キャッシュDNSサーバは、その名前解決した情報を一定期間キャッシュとして保持します。
そして、キャッシュDNSサーバは、攻撃者の用意したWebサーバのIPアドレスを問い合わせ元に返却します。

そしてクライアントパソコンは入手したIPアドレスで攻撃者の準備したWebサーバに接続する流れとなります。
キャッシュが残っている間は他のユーザがtoppakou.comの名前解決の問い合わせをしても、権威DNSサーバまで行かないので、キャッシュの情報が返却され攻撃者が用意したWebサーバにアクセスすることになります。

DNSキャッシュポイズニングを成功させるためにはいくつか条件があります。
・正規の応答より攻撃者の応答が先であること
・キャッシュDNSサーバが外部へ問い合わせ中
・送信先のIPと送信元のIPアドレスが一致する
・送信元ポート番号と宛先ポート番号が一致
・トランザクションID(シーケンス番号)が一致する

この内容が次の設問で問われていますので一緒に確認していきます。


設問1(2)については、名前解決のプロトコルが問われています。
先程のフローで説明したように、コネクションレスのUDPが使われるので、問合せ先でない攻撃者が割って入る可能性があります。


次の設問1(3)はDNSキャッシュポイズニングを成功させるための条件が問われています。
先程のフローで説明したパターンのいずれかがかかれていれば正解になると思いますが、IPAの模範解答と挙げられているのは一番上のパターンになります。


設問1(4)

下線2の部分を確認していきます。

HTTPSはSSL/TLSを使っています。
サーバ証明書を利用することによってそのサーバの真正性を確認することができます。
例えば、toppakou.comのWebサーバの場合、第三者証明機関であるCAが発行したサーバ証明書(公開鍵証明書)をWebサーバにあらかじめ格納しておきます。
クライアント側はそのサーバ証明書を検証することでtoppakou.comのドメインが真正であること、つまりサーバが真正であることを確認できます。



設問1(5)

空欄cの部分を確認していきます。
 

空欄cはファームウェアに対して真正性を確認するするためにあるものを導入するとあります。
正解としては、コードサイニングになりますが用語を知らないと解けない問題になります。
今後は、フローが問われる可能性があるのでコードサイニングについて掘り下げて説明します。
---
コードサイニング証明書とは?|GMOグローバルサイン【公式】 (globalsign.com)
GMOグローバルサインのWebページに詳しく説明がありますが、このページを参考にして説明していきます。
---


コードサイニングとは、ソフトウェアにデジタル署名を付与するプロセスのことをいいます。コード署名ともいいます。
デジタル署名を用いることで、プログラムコードの真正性の確認と改ざんの検知を行うことができます。

ソフトウェア提供者は、公開鍵と秘密鍵の鍵ペアを生成して、信頼できる第三者機関である認証局CAに依頼書であるCSRを送付し、その公開鍵の証明書を発行してもらいます。
これがコードサイニング証明書になります。目的がプログラムコードの改ざん検知・真正性確認に用いるのでコードサイニング証明書という名前ですが、よく耳にする公開鍵証明書やサーバ証明書と似たイメージになります。
コードサイニング証明書には、公開鍵が添付されています。

ソフトウェア開発者は、プログラムコードのハッシュ値を生成します。
それを、コードサイニング証明書を取得した公開鍵と対になる、秘密鍵を使って署名します。
つまりデジタル署名を発行します。
イメージ的には秘密鍵は、その人しか持っていない印鑑の役割を果たします。
インターネットでプログラムを配布する際に、プログラムコードと一緒にコードサイニング証明書とデジタル署名も一緒に配布します。

プログラムの利用者側は、まずコードサイニング証明書に添付されている公開鍵を使ってデジタル署名を検証し、真正性を確認します。
イメージ的には公開鍵は、印影の様なイメージで、秘密鍵で押した印鑑の形と一致するかをチェックします。
また、プログラムコードのハッシュ値をとって、デジタル署名のプログラムコードを元にして作られたハッシュ値と一致するかを確認し、改ざんされていないかのチェックを行います。

これがコードサイニングの一連の流れとなります。

設問2

空欄dの部分を確認していきます。

 
空欄dはsetvalueの処理に関する問題点の知識が問われているようにみえますが、図をよく見ることで解答可能な問題でもあります。
IPアドレス設定画面で設定された値は、そのままの形でsetvalueに送信されるリクエストに設定され、図4の設定を行うコマンドで利用されていることがわかります。
この設定する値に不正なコマンドを入れるとそのまま実行されてしまう可能性があります。



図6のリクエストを見ると、POSTメソッドで、一部のパラメタに不正な値が埋め込まれていることが分かります。
このリクエストをどのようにして発行してWebアプリRに送り付けるかということが問われています。
WebアプリRが受け付けてくれるにはログインしている利用者自身のセッション情報が必要になるので本文にあるように利用者Rを攻撃者が用意したサイトの画面に誘い込み、
例えばそのページ内で、宛先をWebアプリR、アクションにPOSTメソッドを指定して、hiddenタグなど利用者から見えないようにします。そして、うまくボタンを押させるなどして、リクエストを発行することできれば、図6にあるリクエストを発行することが可能になります。
つまり、この罠ページを表示させる仕組みが必要になります。

問題本文では罠サイトの画面が表示されている前提とも読み取れるので、このIPA解答自体は難易度高いと思います。


設問3(2)

空欄eの部分を確認していきます。

脆弱性Bは、攻撃者が準備したリクエストパラメタを利用者が発行してしまうものでした。
トークンは、正規のサーバが準備したワンタイムパスワードの様なものになります。
ただこのトークンは、同じ値を使っていたり、連番だったりすると容易に推測することができる可能性があり攻撃者に悪用されてしまいます。
つまり、空欄eの答えは「推測困難である」になります。

設問4


この記事が気に入ったらサポートをしてみませんか?