情報処理安全確保支援士 2022年 秋期 午後1 問01
IoT製品の開発に関する次の記述を読んで、設問に答えよ。
J社は、家電の製造・販売を手掛ける従業員1,000名の会社である。J社では、自社の売れ筋製品であるロボット掃除機の新製品(以下、製品という)を開発し、販売することにした。製品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の二つの脆弱性が指摘された。
〔脆弱性A〕
IPアドレス設定機能には、任意のコマンドを実行してしまう脆弱性がある。図2に示すように、利用者がIPアドレス設定画面でIPアドレス、サブネットマスク及びデフォルトゲートウェイのIPアドレスをそれぞれ入力してから確認ボタンをクリックし、IPアドレス設定確認画面で確定ボタンをクリックすると、setvalue に対して図3に示すリクエストが送信される。setvalue が図3中のパラメータを含むコマンド文字列をシェルに渡すと、図4のIPアドレス設定を行うコマンドなどが実行される。



リクエストに対するsetvalueの処理には、dしまうという問題点があるので、setvalueに対して、図5に示す細工されたリクエストが送られると、製品Rは想定外のコマンドを実行してしまう。

〔脆弱性B〕
IPアドレス設定機能には、ログイン済みの利用者が攻撃者によって設置された罠サイトにアクセスし、利用者が意図せずに悪意のあるリクエストをWebアプリRに送信させられた場合に、WebアプリRがそのリクエストを受け付けて処理してしまう脆弱性がある。
〔脆弱性の修正〕
次は、二つの脆弱性の指摘を踏まえて修正を検討した時の、FさんとG主任の会話である。
Fさん:脆弱性Aですが、悪用されるリスクは低いです。というのは、利用者宅内にある製品Rは、インターネットからは直接アクセスできないと想定されるからです。攻撃するには、攻撃者は利用者宅の同一セグメントにつなぎ、不正なログインも成功させる必要があります。修正の優先度を下げてもよいのではないでしょうか。
G主任:確かに脆弱性Aだけを悪用されるリスクは低いでしょう。しかし、例えば、攻撃者が、WebアプリRにログイン済みの利用者を罠サイトに誘い、③図6の攻撃リクエストを送信させると、脆弱性Bが悪用され、その後、脆弱性Aが悪用されます。この結果、製品Rは攻撃者のファイルをダウンロードして実行してしまいます。このリスクは低くありません。

Fさん:分かりました。胎弱性Aと脆弱性Bの両方を修正します。
Fさんは、脆弱性Aへの対策として、利用者からリクエストのパラメータとして受け取ったIPアドレス情報を、コマンドを用いず安全にIPアドレスを設定できるライブラリ関数を利用する方法で設定することにした。次に、脆弱性Bについては、利用者からのリクエストのパラメータに、セッションにひも付けられ、かつ、eという特徴をもつトークンを付与し、WebアプリRはそのトークンを検証するように修正した。
FさんとG主任は、そのほかに必要なテストも行って、WebアプリRを含むファームウェアの開発を完了した。
設問1:各機能のセキュリティ対策の検討〕について答えよ。
(1)本文中のaに入れる攻撃手法の名称を15字以内で答えよ。
模範解答
a:DNSキャッシュポイズニング
解説
解答の論理構成
- 問題文には「DNSキャッシュサーバが権威DNSサーバにWサーバの名前解決要求を行ったときに、攻撃者が偽装したDNS応答を送信するという手法を使って攻撃を行うケースがある。」と記載されています。
- 偽装した応答をキャッシュサーバに送り込み、誤った名前解決結果を保存させる攻撃は、一般に「DNSキャッシュポイズニング」と呼ばれます。
- さらに問題文は「この攻撃手法はaと呼ばれる。」と続いており、ここに該当する語を答えればよいことが分かります。
- したがって、解答は「DNSキャッシュポイズニング」となります。
誤りやすいポイント
- DNSリバインディングと混同する。リバインディングはブラウザを介した攻撃であり、キャッシュサーバを書き換える本問とは異なります。
- DNSスプーフィング(DNS偽装)を直接書く受験者がいますが、本問はキャッシュへの毒入れを強調しているため「DNSキャッシュポイズニング」が最適です。
- 問題文に「キャッシュサーバ」が明示されている点を見落とし、単に「DNSポイズニング」と答えてしまう。正式名称で解答する必要があります。
FAQ
Q: 「DNSスプーフィング」と「DNSキャッシュポイズニング」の違いは何ですか?
A: スプーフィングは広義に偽のDNS応答を送り込む行為全般を指し、一時的なものも含みます。キャッシュポイズニングはキャッシュサーバに誤情報を保存させ、長期間にわたり利用者を偽サイトへ誘導できる点が特徴です。
A: スプーフィングは広義に偽のDNS応答を送り込む行為全般を指し、一時的なものも含みます。キャッシュポイズニングはキャッシュサーバに誤情報を保存させ、長期間にわたり利用者を偽サイトへ誘導できる点が特徴です。
Q: なぜHTTPSを適切に実装していれば影響を受けないのですか?
A: DNSが改ざんされても、HTTPS通信では証明書検証が行われるため、攻撃者のサーバが正しい証明書を提示できず接続が失敗します。つまり、名前解決が誤っても真正なサーバとの通信しか成立しません。
A: DNSが改ざんされても、HTTPS通信では証明書検証が行われるため、攻撃者のサーバが正しい証明書を提示できず接続が失敗します。つまり、名前解決が誤っても真正なサーバとの通信しか成立しません。
Q: DNSSECを導入すれば本攻撃は防げますか?
A: はい。DNS応答に電子署名を付与し検証するDNSSECを導入すれば、偽装応答を正規のものとして受け取らなくなり、キャッシュポイズニングは防止できます。
A: はい。DNS応答に電子署名を付与し検証するDNSSECを導入すれば、偽装応答を正規のものとして受け取らなくなり、キャッシュポイズニングは防止できます。
関連キーワード: DNSSEC, HTTPS, 権威サーバ、名前解決、偽装応答
設問1:各機能のセキュリティ対策の検討〕について答えよ。
(2)本文中のbに入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群
ア:ARP
イ:ICMP
ウ:TCP
エ:UDP
模範解答
b:エ
解説
解答の論理構成
- 本文には「DNSキャッシュサーバが通信プロトコルにbを使って名前解決要求を送信し」とあります。ここに当てはまるのは、DNS標準のトランスポート層プロトコルです。
- 一般的な名前解決要求は 53 番ポートで行われ、接続確立のない非同期通信方式を取ります。この特徴をもつのは「UDP」です。
- DNS では TCP も利用されますが、それは「ゾーン転送」や「大きな応答を返す場合」など限定的なケースです。攻撃文脈で述べられている「偽装したDNS応答を送信する」という手法は、三者間ハンドシェイクが無い UDP の方が成立しやすいことと整合します。
- 解答群のうち該当するものは「エ:UDP」であり、模範解答とも一致します。
誤りやすいポイント
- 「DNS = TCP/53 も使う」という知識だけで「ウ:TCP」を選んでしまう。TCP ではコネクション確立が必要なため、本文で説明される容易な偽装攻撃と齟齬があります。
- ARP や ICMP はネットワーク層・データリンク層のプロトコルであり、「DNSキャッシュサーバが通信プロトコルに――を使って名前解決要求を送信」には当てはまりません。
- “DNS over HTTPS” や “DoT” など最新の保護手段を連想して混乱し、本質である従来の DNS 問い合わせプロトコルを見落とす。
FAQ
Q: DNS が TCP を使うケースはありますか?
A: はい。メッセージサイズが 512 バイトを超える場合やゾーン転送(AXFR)では TCP/53 が用いられます。ただし本文のような通常の名前解決要求は UDP/53 が主流です。
A: はい。メッセージサイズが 512 バイトを超える場合やゾーン転送(AXFR)では TCP/53 が用いられます。ただし本文のような通常の名前解決要求は UDP/53 が主流です。
Q: UDP を使うとなぜ応答偽装が容易なのですか?
A: UDP にはコネクション確立やシーケンス管理が無く、送信元 IP アドレスも容易に偽装できます。そのため、ランダム性が低い場合は攻撃者が“もっともらしい”応答を先回りして送ることでキャッシュポイズニングが成立しやすくなります。
A: UDP にはコネクション確立やシーケンス管理が無く、送信元 IP アドレスも容易に偽装できます。そのため、ランダム性が低い場合は攻撃者が“もっともらしい”応答を先回りして送ることでキャッシュポイズニングが成立しやすくなります。
Q: DNSSEC を導入すれば本攻撃は防げますか?
A: 署名付き応答を検証する DNSSEC を正しく導入すれば、偽装応答を受け取っても検証に失敗してキャッシュされません。ただしクライアント側も検証結果を確認できる構成が必要です。
A: 署名付き応答を検証する DNSSEC を正しく導入すれば、偽装応答を受け取っても検証に失敗してキャッシュされません。ただしクライアント側も検証結果を確認できる構成が必要です。
関連キーワード: DNS, UDP, キャッシュポイズニング、スプーフィング
設問1:各機能のセキュリティ対策の検討〕について答えよ。
(3)本文中の下線①について、攻撃者が送信したDNS応答が攻撃として成功するために満たすべき条件のうちの一つを、30字以内で答えよ。
模範解答
権威DNSサーバからの応答よりも早く到達する。
解説
解答の論理構成
-
攻撃の前提
【問題文】では「攻撃者が偽装したDNS応答を送信するという手法を使って攻撃を行うケースがある」と述べ、これは典型的な DNS キャッシュポイズニング攻撃です。 -
成功条件の列挙
同じ段落に「攻撃者が送信したDNS応答が、当該DNSキャッシュサーバに到達できることに加えて、①幾つかの条件を満たした場合に成功する」とあります。 -
“幾つかの条件”の中身
DNS は問い合わせごとに識別情報(トランザクションIDや送信元ポートなど)を付与し、その情報が一致した最初の応答を採用します。よって攻撃者は
・識別情報を推測し一致させる
・正規の応答より先に到達させる
という二つのハードルを越える必要があります。 -
本問で問われている条件
①の空欄は“条件の一つ”を 30 字以内で答える設問です。識別情報の一致と先着性のうち、より明快で 30 字以内に収めやすいのが「正規応答より先に届くこと」です。 -
解答
したがって「権威DNSサーバからの応答よりも早く到達する」となるわけです。
誤りやすいポイント
- 「トランザクションIDを一致させる」だけを書き、先着性を見落とす
- 「キャッシュが空の場合に限り有効」など条件を限定し過ぎる
- 「DNSSEC を使わないこと」など“回避策”を書いてしまう
- 30 字以内を超える長文を記述してしまう
FAQ
Q: “識別情報を一致させる”でも正解になりませんか?
A: 設問は“条件のうちの一つ”とだけ示していますが、試験委員会が想定する代表例は先着性です。トランザクションID一致は必須条件とも取れるため、別答案として採点対象になるとは限りません。
A: 設問は“条件のうちの一つ”とだけ示していますが、試験委員会が想定する代表例は先着性です。トランザクションID一致は必須条件とも取れるため、別答案として採点対象になるとは限りません。
Q: HTTPS を使っているなら DNS キャッシュポイズニングを無視していいのでは?
A: HTTPS で証明書検証を適切に行えば偽サイトと通信しないので影響は小さくなります。しかし名前解決が狂えば利用者が混乱する場合もあり、根本対策として DNSSEC の導入などが望まれます。
A: HTTPS で証明書検証を適切に行えば偽サイトと通信しないので影響は小さくなります。しかし名前解決が狂えば利用者が混乱する場合もあり、根本対策として DNSSEC の導入などが望まれます。
Q: キャッシュポイズニングは外部からしか狙えませんか?
A: 内部ネットワークに侵入した攻撃者がローカル DNS に対して行うことも可能です。攻撃面が広いので多層防御が重要です。
A: 内部ネットワークに侵入した攻撃者がローカル DNS に対して行うことも可能です。攻撃面が広いので多層防御が重要です。
関連キーワード: DNSキャッシュポイズニング、権威DNSサーバ、トランザクションID, ポートランダム化、DNSSEC
設問1:各機能のセキュリティ対策の検討〕について答えよ。
(4)本文中の下線②について、どのような実装か。40字以内で答えよ。
模範解答
サーバ証明書を検証し、通信相手がWサーバであることを確認する実装
解説
解答の論理構成
-
攻撃シナリオの前提
- 本文では、DNSキャッシュ汚染によって偽サイトへ誘導されるケースを想定しつつ、Fさんは
「②『製品Rは、Wサーバとの間の通信においてHTTPSを適切に実装している』ので、この攻撃の影響は受けない」
と判断しています。
- 本文では、DNSキャッシュ汚染によって偽サイトへ誘導されるケースを想定しつつ、Fさんは
-
“HTTPSを適切に実装”の意味
- HTTPSの安全性は暗号化だけでなく、サーバ証明書の検証を行い「通信相手が真正か」を確かめる点にあります。
- DNSが偽情報を返しても、デバイスが提示されたサーバ証明書を検証し、正当な“Wサーバ”の証明書と一致しなければ TLS ハンドシェイクが失敗し、ファームウェアはダウンロードされません。
-
証明書検証以外の実装では不十分
- 例えば暗号化のみや自己署名証明書の許容では、フィッシングサイトでも通信は成立してしまいます。
- 従って「偽のファームウェアをダウンロードしない」条件を満たすには、証明書の妥当性確認が不可欠です。
-
以上より、②の具体的な実装は
「サーバ証明書を検証し、通信相手がWサーバであることを確認する」
という記述が最も的確となります。
誤りやすいポイント
- 「HTTPSだから安全」として暗号化のみを連想し、証明書検証の工程を回答から漏らす。
- クライアント証明書相互認証と混同し、不要な“クライアント証明書の提示”を含めてしまう。
- 「IPアドレスが正しいかどうか」を確認すると誤解し、DNS上書きを見抜けると勘違いする。
FAQ
Q: ルート証明書の登録だけでは対策になるのでしょうか?
A: ルート証明書の事前登録は前提ですが、接続時にサーバ証明書の失効確認(OCSP/CRL)とホスト名一致検証を行って初めて効果があります。
A: ルート証明書の事前登録は前提ですが、接続時にサーバ証明書の失効確認(OCSP/CRL)とホスト名一致検証を行って初めて効果があります。
Q: HSTS を使えば今回の回答は変わりますか?
A: HSTSも有効ですが、本問の焦点は「サーバ証明書の真正性確認」にあります。HSTSは追加的な強化策であり、根本は証明書検証です。
A: HSTSも有効ですが、本問の焦点は「サーバ証明書の真正性確認」にあります。HSTSは追加的な強化策であり、根本は証明書検証です。
Q: クライアント側で証明書ピンニングを行う必要はありますか?
A: ピンニングは攻撃面をさらに狭めますが、設問は“適切なHTTPS実装”の説明なので、一般的なCAベースの証明書検証が回答の範囲となります。
A: ピンニングは攻撃面をさらに狭めますが、設問は“適切なHTTPS実装”の説明なので、一般的なCAベースの証明書検証が回答の範囲となります。
関連キーワード: HTTPS, サーバ証明書、TLSハンドシェイク、DNSキャッシュポイズニング
設問1:各機能のセキュリティ対策の検討〕について答えよ。
(5)本文中のcに入れる適切な字句を10字以内で答えよ。
模範解答
c:コードサイニング
解説
解答の論理構成
- 本文には、攻撃者が W サーバ内部に侵入して「ファームウェアを直接置き換える」場合を想定し、G主任が
「ファームウェアにcを導入しましょう。まず、製品Rではc証明書がJ社のものであることを検証します。その上で、検証されたc証明書を使って、ダウンロードしたファームウェアの真正性を検証しましょう。」
と提案しています。 - ここで求められているのは、
・証明書を発行・検証して製造元を確認する
・証明書に基づきファームウェア自体の真正性(改ざん有無)を確認する
という二段階を実現する仕組みです。 - ソフトウェアの配布時に公開鍵基盤を用いてコードに署名し、受信側で署名を検証して改ざんやなりすましを防ぐ技術は「コードサイニング」と呼ばれます。
- よって c に入る適切な字句は「コードサイニング」となります。
誤りやすいポイント
- TLS 証明書やサーバ証明書と混同し、「SSL証明書」「HTTPS証明書」などと書いてしまう。TLS は通信路の安全性を担保しますが、配布ファイルの改ざん検知までは行いません。
- 「デジタル署名」とだけ答えるケース。デジタル署名は技術要素ですが、ソフトウェア配布での具体的な運用概念としては「コードサイニング」を用いるのが正答です。
- 「公開鍵暗号方式」など広すぎる概念を書いてしまう。問題文は証明書の存在まで明示しており、具体的導入手法を問うています。
FAQ
Q: コードサイニング証明書と TLS サーバ証明書の違いは何ですか?
A: TLS サーバ証明書は通信相手(サーバ)の真正性を示し、通信を暗号化します。コードサイニング証明書は配布ファイル(プログラム)に署名し、頒布後でも改ざんの有無と発行元を検証できます。目的と使用タイミングが異なります。
A: TLS サーバ証明書は通信相手(サーバ)の真正性を示し、通信を暗号化します。コードサイニング証明書は配布ファイル(プログラム)に署名し、頒布後でも改ざんの有無と発行元を検証できます。目的と使用タイミングが異なります。
Q: コードサイニングだけでファームウェアの漏えいは防げますか?
A: いいえ。コードサイニングは改ざん検知と真正性の保証が目的です。情報漏えいを防ぐには暗号化やアクセス制御など別の対策が必要です。
A: いいえ。コードサイニングは改ざん検知と真正性の保証が目的です。情報漏えいを防ぐには暗号化やアクセス制御など別の対策が必要です。
Q: 自社 CA で発行したコードサイニング証明書でも問題ありませんか?
A: 製品側で自社 CA を信頼できるようルート証明書を格納しておけば問題ありません。外部 CA を利用する場合は信頼チェーンの管理が簡素化される利点があります。
A: 製品側で自社 CA を信頼できるようルート証明書を格納しておけば問題ありません。外部 CA を利用する場合は信頼チェーンの管理が簡素化される利点があります。
関連キーワード: コードサイニング、デジタル署名、公開鍵基盤、真正性保証、改ざん検知
設問2:
本文中のdに入れる適切な字句を35字以内で答えよ。
模範解答
d:シェルが実行するコマンドをパラメータで不正に指定できて
解説
解答の論理構成
- 【問題文】では、図3の正常リクエストを受け取った setvalue が
「図3中のパラメータを含むコマンド文字列をシェルに渡す」と記述されています。
つまり、利用者入力がそのまま OS のシェルコマンドに埋め込まれる実装です。 - 続けて、細工されたリクエスト(図5)では
ipaddress=...";ping -c 1 192.168.1.10;"...
というように複数コマンドを連結しています。
シェルは区切り文字 ; を解釈し、意図外の ping を実行してしまいます。
これは、パラメータで自由にコマンドを注入できる実装上の欠陥です。 - 問題文の空欄 d は「setvalue の処理には、_____ しまうという問題点がある」と指摘しており、図5の例から「コマンドをパラメータで不正に指定できる」点が問題であることが明白です。
- 以上より、d に入る字句は
「シェルが実行するコマンドをパラメータで不正に指定できて」
が適切となります。
誤りやすいポイント
- 「シェルコマンドを実行してしまう」だけでは、何が問題かを具体的に述べていないので減点対象になりがちです。
- 注入されるのは“パラメータ”経由である点を落とすと、単なる OS コマンド実行脆弱性の指摘として不十分です。
- 「SQL インジェクション」と混同しやすいですが、本問はシェルコマンドの連結であり OS コマンドインジェクションです。
FAQ
Q: 図5の ";ping -c 1 ...;" のようにセミコロンが使われる理由は?
A: シェルにおいて ; はコマンド区切り子です。これにより、元々の ifconfig コマンドに続けて任意のコマンドを実行させることができます。
A: シェルにおいて ; はコマンド区切り子です。これにより、元々の ifconfig コマンドに続けて任意のコマンドを実行させることができます。
Q: POST しか受け付けない機能でも脆弱性が成立するのか?
A: はい。HTTP メソッドが POST でも、サーバ側で入力検証を欠いたままシェルに渡せばコマンドインジェクションは成立します。
A: はい。HTTP メソッドが POST でも、サーバ側で入力検証を欠いたままシェルに渡せばコマンドインジェクションは成立します。
Q: パラメータ検証を行わずにシェルを呼ぶ実装を避けるベストプラクティスは?
A: 入力値を直接シェルに渡さず、IP アドレス設定専用の安全なライブラリや OS API を使用することです。
A: 入力値を直接シェルに渡さず、IP アドレス設定専用の安全なライブラリや OS API を使用することです。
関連キーワード: コマンドインジェクション、DNSキャッシュポイズニング、HTTPS, CSRF, 入力値検証
設問3:〔脆弱性の修正〕について答えよ。
(1)本文中の下線③について、罠サイトではどのような仕組みを使って利用者に脆弱性Bを悪用する攻撃リクエストを送信させることができるか。仕組みを50字以内で具体的に答えよ。
模範解答
攻撃リクエストをPOSTメソッドで送信させる仕組み
解説
解答の論理構成
- 【問題文】には、罠サイト経由で「③図6の攻撃リクエストを送信させる」と明示されています。
- 図6のリクエスト先は /setvalue であり、【図1】の「IPアドレス設定機能」は「POSTメソッドによる入力だけを受け付ける」と記載されています。
- また脆弱性Bの説明は「ログイン済みの利用者が攻撃者によって設置された罠サイトにアクセスし、利用者が意図せずに悪意のあるリクエストをWebアプリRに送信させられた場合」とあり、典型的な CSRF(Cross-Site Request Forgery)の状況です。
- CSRF を成立させる代表的手法は、罠サイトに
① - よって「攻撃リクエストをPOSTメソッドで送信させる仕組み」とまとめるのが適切です。
誤りやすいポイント
- 「リンクをクリックさせる」など GET を想定した回答にしてしまう。IPアドレス設定機能は POST 限定 のため不適切です。
- 「CSRF」とキーワードだけを書き、どのように送信させるかを具体的に述べない。設問は「仕組み」を要求しています。
- Java アプレットや Flash など古い技術名を書く。現行ブラウザで動作しづらく現実味が低いです。
FAQ
Q: GET で送れないのですか?
A: 【図1】に「POSTメソッドによる入力だけを受け付ける」とあるため、GET では Web アプリR が処理しません。
A: 【図1】に「POSTメソッドによる入力だけを受け付ける」とあるため、GET では Web アプリR が処理しません。
Q: CSRF という単語を使う必要はありますか?
A: 設問は「仕組み」を求めており、名称より「POST フォームを自動送信する」など具体策の記述が評価対象です。
A: 設問は「仕組み」を求めており、名称より「POST フォームを自動送信する」など具体策の記述が評価対象です。
Q: JavaScript を必ず使うべきですか?
A: をユーザにクリックさせても成立しますが、自動送信させるために JavaScript を併用するのが一般的です。
A: をユーザにクリックさせても成立しますが、自動送信させるために JavaScript を併用するのが一般的です。
関連キーワード: CSRF, HTMLフォーム、hiddenフィールド、自動送信、POSTリクエスト
設問3:〔脆弱性の修正〕について答えよ。
(2)本文中のeに入れる、トークンがもつべき特徴を15字以内で答えよ。
模範解答
e:推測困難である
解説
解答の論理構成
- 本文では脆弱性Bへの対策として、
「利用者からのリクエストのパラメータに、セッションにひも付けられ、かつ、eという特徴をもつトークンを付与」
と明記されています。 - セッションに結び付いたリクエスト偽造対策といえば、代表的なのが CSRF トークン方式です。CSRF トークンの要件は、
• 外部の攻撃者が値を事前に知ることができない
• 推測や列挙が現実的に不可能
であることです。 - したがって e に入るべき語は、攻撃者が値を当てられないことを表す「推測困難である」となります。
- まとめると、セッション ID とペアで「推測困難である」トークンを検証することで、本文が示す脆弱性B(利用者の「意図せずに悪意のあるリクエストを…」)を防止できるため、解答は「推測困難である」と導かれます。
誤りやすいポイント
- 「セッションにひも付けられ」と並んでいるため「一意である」や「乱数である」などを記述してしまいがちですが、乱数でも推測可能な短い値では意味がありません。
- CSRF 対策と XSS 対策を混同し、「入力無害化」や「エンコード」と答えるケースがあります。
- 「秘密である」を選択する受験者もいますが、秘密性は必須条件の一部であり、問題が求めているのは外部から値を当てられない点=「推測困難である」です。
FAQ
Q: 「ランダムである」と「推測困難である」は同じ意味ですか?
A: ランダム生成でも桁数が少なければ推測可能です。「推測困難である」は十分な長さ・エントロピーを含むことを強調した表現です。
A: ランダム生成でも桁数が少なければ推測可能です。「推測困難である」は十分な長さ・エントロピーを含むことを強調した表現です。
Q: 「セッションにひも付けられた推測困難なトークン」は何の攻撃を防ぎますか?
A: 利用者になりすまして不正リクエストを送る CSRF(Cross-Site Request Forgery)攻撃を防ぎます。
A: 利用者になりすまして不正リクエストを送る CSRF(Cross-Site Request Forgery)攻撃を防ぎます。
Q: 同一セグメント内の製品でも CSRF は成立しますか?
A: はい。利用者がログイン状態で罠サイトに誘導されると、ブラウザが自動でローカル機器へリクエストを送信するため成立します。
A: はい。利用者がログイン状態で罠サイトに誘導されると、ブラウザが自動でローカル機器へリクエストを送信するため成立します。
関連キーワード: CSRF, トークン、推測困難性、セッション管理、ノンス
設問4:
脆弱性A及び脆弱性Bが該当するCWEを、それぞれ解答群の中から選び、記号で答えよ。
解答群
ア:CWE-78 OSコマンドインジェクション
イ:CWE-79 クロスサイトスクリプティング
ウ:CWE-89 SQLインジェクション
エ:CWE-94 コードインジェクション
オ:CWE-352 クロスサイトリクエストフォージェリ
力:CWE-918 サーバサイドリクエストフォージェリ
模範解答
脆弱性A:ア
脆弱性B:オ
解説
解答の論理構成
-
脆弱性Aの特徴
- 【問題文】には「IPアドレス設定機能には、任意のコマンドを実行してしまう脆弱性がある」と明記されています。
- さらに図5のリクエストでは ";ping -c 1 192.168.1.10;" という文字列がパラメータ中に混入しており、シェルに渡されたコマンド列に連結されることで想定外の OS コマンドが実行されます。
- 以上より、利用者入力がシェルコマンドとして解釈・実行される「OS コマンドインジェクション」に該当します。
- 解答群で該当するのは「ア:CWE-78 OSコマンドインジェクション」です。
-
脆弱性Bの特徴
- 【問題文】では「ログイン済みの利用者が攻撃者によって設置された罠サイトにアクセス」し「利用者が意図せずに悪意のあるリクエストをWebアプリRに送信させられた場合に、WebアプリRがそのリクエストを受け付けて処理してしまう」と記述されています。
- これは典型的な「利用者の認証済みセッションを悪用して不正リクエストを発行させる」攻撃であり、クロスサイトリクエストフォージェリ(CSRF)に一致します。
- 修正策として「利用者からのリクエストのパラメータに、セッションにひも付けられ、かつ、eという特徴をもつトークンを付与」して検証する方法が採用されており、まさに CSRF トークンの導入です。
- 解答群で該当するのは「オ:CWE-352 クロスサイトリクエストフォージェリ」です。
誤りやすいポイント
- 脆弱性Aを「コードインジェクション(エ)」と誤認する
- コマンド文字列がそのまま OS シェルに渡る点に注目し、「プログラムコードの注入」と勘違いしやすいですが、実際には OS コマンドを注入しているため CWE-78 が正解です。
- 脆弱性Bを「クロスサイトスクリプティング(イ)」と混同する
- 罠サイト経由というキーワードで XSS を連想しがちですが、利用者ブラウザでスクリプトが実行されるのではなく、認証済みリクエストが偽造される点が決定的に異なります。
- 修正策のトークンを「セッション ID」と思い込み、別概念と誤解する
- CSRF トークンは「セッションにひも付けられ、推測困難」であり、ブラウザ自動送信の Cookie とは区別すべきものです。
FAQ
Q: 図5や図6のようにシェル文字列を連結させる攻撃が OS コマンドインジェクションになる決め手は何ですか?
A: 入力値がシェルメタキャラクタ(; や | など)により区切られ、アプリケーションが用意したコマンドとは別の OS コマンドが実行される点です。これは CWE-78 の定義に合致します。
A: 入力値がシェルメタキャラクタ(; や | など)により区切られ、アプリケーションが用意したコマンドとは別の OS コマンドが実行される点です。これは CWE-78 の定義に合致します。
Q: CSRF と XSS はどう区別すれば良いですか?
A: XSS は「攻撃者が用意したスクリプトが被害者ブラウザ内で実行」されます。一方 CSRF は「被害者ブラウザが攻撃者の意図するリクエストを正規サイトへ送信」する攻撃で、スクリプト実行が必須ではありません。
A: XSS は「攻撃者が用意したスクリプトが被害者ブラウザ内で実行」されます。一方 CSRF は「被害者ブラウザが攻撃者の意図するリクエストを正規サイトへ送信」する攻撃で、スクリプト実行が必須ではありません。
Q: CSRF トークンはどのような性質を持たせるべきですか?
A: 【問題文】が示すように「セッションにひも付けられ、かつ、eという特徴をもつ」すなわちランダムで推測困難な値とし、毎リクエストまたはフォーム単位で検証することが推奨されます。
A: 【問題文】が示すように「セッションにひも付けられ、かつ、eという特徴をもつ」すなわちランダムで推測困難な値とし、毎リクエストまたはフォーム単位で検証することが推奨されます。
関連キーワード: OSコマンドインジェクション、CSRF, シェルメタキャラクタ、入力値検証、トークン認証


