情報処理安全確保支援士過去問題 令和6年秋期 午後 問4
⇄問題文と設問を画面2分割で開く⇱問題PDF出題趣旨
脆弱性は一つ一つが軽微でも,複数組み合わせて悪用されると,重大な被害につながることがある。また,診断ツールで検出される脆弱性以外にも,想定される攻撃に対して,セキュリティ対策が不足しているといった脆弱性もある。診断者がこういった脆弱性も報告に含めることで,その後,システムのセキュリティが大きく向上することがある。本問では,個人情報を取り扱うWebサイトに対するセキュリティ診断を題材に,診断ツールで検出された脆弱性について,悪用された場合の被害を想定する能力及び被害を低減するための対策を立案する能力を問う。
設問1
- a: (イ)
- b: https://test.△△△.jp/
- c: メール受信者によるログイン
- d: 使用済みのsessionIDを無効にした上で,新しいsessionIDを発行
- e: Mサイトへの接続をHTTPSに強制することができる。
- f: Mサイトのコンテンツに対して,Content-Typeヘッダーで指定したMIMEタイプを強制的に適用することができる。
- 〔aについて〕
表Aの項番1で指摘されている脆弱性が、図3の画面遷移図中のどの矢印に相当するかを答えます。項番1の脆弱性は「セッションフィクセーション(セッション固定化)」です。
セッションとは、利用者がWebサイトにアクセスしてからログアウトやブラウザ終了などで利用を終えるまでの一連のやり取りを、サーバ側で一つのまとまりとして扱う仕組みです。HTTPは本来ステートレスなプロトコルであり、直前のリクエストの内容を覚えていません。そのままではログイン中の利用者の識別やカートの中身の保持ができないため、サーバはセッションIDという識別子を発行し、それをもとに利用者の状態を管理します。通常はWebブラウザにcookieを設定する方式でセッションを識別しますが、本問のMサイトでは、Cookieではなく、フォームのhiddenフィールドにsessionIDを設定して、画面間で引き継ぐ方式を採用していることがわかります。診断報告書の表Bでは、このsessionIDがログイン前後を通じて一定であることが確認されており、これがセッションフィクセーションの原因になっています。
セッションフィクセーション攻撃では、攻撃者があらかじめ自分用のsessionIDを取得し、そのsessionIDを標的ユーザーに使わせたうえで、標的ユーザーに正規のログイン操作をさせます。サーバ側は、そのsessionIDでログインが完了したと認識するため、攻撃者は同じsessionIDを使ってアクセスすることで、被害者になりすましてログイン後の画面を操作できるようになります。診断報告書2.2.1でも、図Aの手順でこの脆弱性を悪用すると「Mサイトに不正にログインすることができる」と説明されています。セッションフィクセーションの脆弱性は、ログイン前に発行されたsessionIDをログイン後も使いまわす(変更しない)ことによって生まれます。したがって、脆弱性が検出された画面遷移は、図3中でログイン成功後に画面02へ遷移する矢印(イ)と判断できます。
∴a=(イ) - 〔bについて〕
前述のとおり、セッションフィクセーション攻撃では、攻撃者があらかじめ取得したsessionIDを標的ユーザーに使わせ、そのsessionIDのまま標的にログインさせることで、同じsessionIDを使って攻撃者もログイン済み状態に入り込みます。
したがって、不正ログインの攻撃を仕掛ける前提として、攻撃者は自分のWebブラウザでMサイトにアクセスし、正規のsessionIDを取得しておく必要があります。表Aの手順2がこのフェーズに相当します。MサイトにおいてsessionIDがHTMLに含まれ、かつ、ログインしていない利用者がアクセスできるのは、01ログイン画面だけです。表1の画面一覧から、01ログイン画面のURLは「https://test.△△△.jp/」であることがわかります。
∴b=https://test.△△△.jp/ - 〔cについて〕
図Aの手順では、メール受信者がメール内のリンクから罠サイトにアクセスすると、自動送信されるリクエストによって、攻撃者が事前に取得しておいたsessionIDがMサイト側に渡されます。「Mサイトでは・・・sessionIDの値だけでセッション管理を実施している」ため、sessionIDの値が引き継がれ、メール受信者のWebブラウザには、攻撃者が指定したsessionIDを含んだMサイトのログイン画面が表示されます。
この時点では、まだ不正ログインは成立していません。攻撃者が期待しているのは、標的ユーザー(メール受信者)がこのログイン画面で自分の利用者IDとパスワードを入力し、ログイン処理を完了してくれることです。ログインが完了すると、攻撃者が決めたsessionIDに求人企業アカウントのログイン状態が結び付けられます。その後、攻撃者は同じsessionIDを自分のWebブラウザから送信することで、ログイン済みの状態をそのまま利用でき、なりすましによる不正ログインが成立します。
したがって、図Aの手順7で攻撃者が完了を待っている動作とは「メール受信者によるログイン」となります。
∴c=メール受信者によるログイン - 〔dについて〕
ログイン成功後の画面遷移(イ)で講ずべき対策が問われています。
Mサイトのように、ユーザーがログインする前の段階(例えばサイトの閲覧を開始した時点)でセッションIDを発行してセッションを開始し、そのセッションをログイン後も継続して使用する実装となっている場合、セッションIDの固定化攻撃に対して脆弱となるおそれがあります。IPA「安全なウェブサイトの作り方」によれば、ログイン前にセッションIDを発行している実装では、次のいずれかの対策を講じることがセッションフィクセーションへの根本的な対策とされています。- ログイン成功後に、新しくセッションを開始する
- ログイン成功後に、既存のセッションIDとは別に秘密情報を発行し、ページの遷移ごとにその値を確認する
∴d=使用済みのsessionIDを無効にした上で,新しいsessionIDを発行
- 〔eについて〕
Strict-Transport-SecurityはHTTPレスポンスヘッダーの一つで、Webブラウザに対し、指定した期間内はHTTPSでの通信を強制することができるものです。
利用者がHTTPSのサイトにHTTPSでアクセスした場合、通常HTTPSのページにリダイレクトが行われます。しかし、リダイレクト前の1回の送受信は平文で行われるため、ここに通信の盗聴や改ざんの危険性があります。Strict-Transport-Security(HSTSヘッダー)はこのリスクを低減するものです。HSTSヘッダーを出力しておけば、次からはHTTPのURLアドレスであったとしても、HTTPSでアクセスするようWebブラウザの動作を強制できます。なお「HSTSプリロード」を設定すれば、1回目のアクセスからHTTPSを強制することができます。
したがって、Strict-Transport-Securityを設定した効果とは、「Mサイトに対して、HTTPSでのアクセスを強制できる」点になります。
∴e=Mサイトへの接続をHTTPSに強制することができる。
【参考】
HSTSヘッダーは通常、以下のように記述されます。Strict-Transport-Security: max-age=[expire-time]; includeSubDomains〔fについて〕
max-age - 有効期間を秒単位で指定する
includeSubDomains - サブドメインにも適用するための記述
X-Content-Type-OptionsはHTTPレスポンスヘッダーの一つで、WebブラウザがContent-Typeヘッダーに設定されたMIMEタイプ(例:text/html、image/pngなど)に従ってコンテンツを解釈するように強制するものです。値として有効なのは「nosniff」のみです。
Webブラウザは、送られてきたデータの中身を基にコンテンツの種類を推測することがあり(MIMEスニッフィング)、これがXSS攻撃やCSSインジェクションの脆弱性となる場合があります。X-Content-Type-Optionsが設定されていれば、攻撃者がアップロード画像などにスクリプトを紛れ込ませ、誤判定を狙って実行させようとする攻撃を防ぐことができます。
∴f=Mサイトのコンテンツに対して,Content-Typeヘッダーで指定したMIMEタイプを強制的に適用することができる。
設問2
- g: 画面09で,会社名に,図Cのabc@example.comを攻撃者のメールアドレスに変更した文字列を入力して変更ボタンをクリックする。
- h: 画面04からの一連の操作において,画面05又は画面07で再設定後のパスワードを入力して,WebAPIキーを確認又は発行する。
〔gについて〕
図3の注1)によれば、Mサイトではメールアドレスの変更時に次の2つのタイミングで通知を行っています。
∴g=画面09で,会社名に,図Cのabc@example.comを攻撃者のメールアドレスに変更した文字列を入力して変更ボタンをクリックする。
〔hについて〕
図Dでは、攻撃者がパスワード再設定まで完了したあと、求人企業として正規の機能を用いて求職者情報を大量に取得する流れが示されています。図4の4.1には「WebAPIを悪用して」と記載されているので、空欄hで問われている操作は、WebAPIを利用するための前段階の画面操作であると読み取れます。
Mサイトでは、求人企業がWebAPIを利用するために、まずWebAPIキーを確認又は新規発行する必要があります。この操作の流れは、図3に示された画面04から画面08までの遷移で表現されています。また、画面05と画面07では、いずれも求人企業のパスワードの入力が求められます。しかし、図Dの(5)までの手順で攻撃者はすでにパスワード再設定の手順を完了しており、自分の設定した新しいパスワードに変更済みです。そのため、攻撃者は画面05や画面07で再設定後のパスワードを入力することで、難なく認証を通過できます。
このようにして、攻撃者は画面04からの一連の操作を進め、途中のパスワード確認画面で再設定後のパスワードを入力することで、WebAPIキーを確認(画面06)したり、新たに発行(画面08)したりできます。その後、入手したWebAPIキーを用いてWebAPIを呼び出し、求職者の氏名や自宅住所などの属性情報を不正に取得することが可能になります。
(5)は再設定後のパスワードでログイン、(7)はWebAPIの利用ですから、(4)にはその間の「APIkey管理画面にアクセスし、再設定したパスワードを入力して、APIKeyを取得する」までの手順が当てはまります。
∴h=画面04からの一連の操作において,画面05又は画面07で再設定後のパスワードを入力して,WebAPIキーを確認又は発行する。
図3の注1)によれば、Mサイトではメールアドレスの変更時に次の2つのタイミングで通知を行っています。
- 画面09で変更要求したときに、変更前のメールアドレスに確認用URLの送付
- 確認用URLクリックで変更が確定したときに、変更前・変更後のメールアドレスに変更内容の通知
- 画面09の会社名欄に、任意の会社名 + 改行コードとSMTPのToフィールド + 連続2回の改行コード(SMTPでヘッダーとボディの区切りを意味する空行)を入力して、変更登録する●●株式会社 - 任意の会社名
%0D%0ATo:abc@exmaple.com - 改行コードとSMTPのToフィールド
%0D%0A%0D%0A - 連続2回の改行コード - Mサイトはデータベース上の会社名を、上記のメールアドレスを含む文字列に変更する
- 画面09のメールアドレス欄に任意のメールアドレスを入力して、変更要求を行う
- 確認用URLを含むメールが送信される。この際、Subjectフィールドにはデータベース上の会社名が出力され、会社名に含まれる改行コードにより偽のToフィールドが現れる。その後ろの"空行"の存在により、本来のToフィールドはメッセージボディ部に追いやられる
- 攻撃者は受信したメールの確認用URLにアクセスする。変更確定時のメール通知も上記と同じ理由で、本来通知されるべき変更前のメールアドレスには届かない
∴g=画面09で,会社名に,図Cのabc@example.comを攻撃者のメールアドレスに変更した文字列を入力して変更ボタンをクリックする。
〔hについて〕
図Dでは、攻撃者がパスワード再設定まで完了したあと、求人企業として正規の機能を用いて求職者情報を大量に取得する流れが示されています。図4の4.1には「WebAPIを悪用して」と記載されているので、空欄hで問われている操作は、WebAPIを利用するための前段階の画面操作であると読み取れます。
Mサイトでは、求人企業がWebAPIを利用するために、まずWebAPIキーを確認又は新規発行する必要があります。この操作の流れは、図3に示された画面04から画面08までの遷移で表現されています。また、画面05と画面07では、いずれも求人企業のパスワードの入力が求められます。しかし、図Dの(5)までの手順で攻撃者はすでにパスワード再設定の手順を完了しており、自分の設定した新しいパスワードに変更済みです。そのため、攻撃者は画面05や画面07で再設定後のパスワードを入力することで、難なく認証を通過できます。
このようにして、攻撃者は画面04からの一連の操作を進め、途中のパスワード確認画面で再設定後のパスワードを入力することで、WebAPIキーを確認(画面06)したり、新たに発行(画面08)したりできます。その後、入手したWebAPIキーを用いてWebAPIを呼び出し、求職者の氏名や自宅住所などの属性情報を不正に取得することが可能になります。
(5)は再設定後のパスワードでログイン、(7)はWebAPIの利用ですから、(4)にはその間の「APIkey管理画面にアクセスし、再設定したパスワードを入力して、APIKeyを取得する」までの手順が当てはまります。
∴h=画面04からの一連の操作において,画面05又は画面07で再設定後のパスワードを入力して,WebAPIキーを確認又は発行する。
設問3
- i: 求職者IDが推測困難なものになるように,求職者IDの生成方法を変更する。
- j: APIkeyが窃取された場合,当該求人企業への問合せ又は応募をした求職者の情報漏えいだけに被害を軽減することができるから
- i: WebAPIのアクセス元IPアドレスを限定して接続を許可するように変更する。
- j: WebAPIへの第三者による不正なアクセスを防ぐことができるから
- i: WebAPIで取得できる求職者属性情報は,個人を特定できないものだけに限定するように変更する。
- j: 不正にWebAPIが利用されても,個人を特定できない情報の漏えいだけに被害を軽減することができるから
- k: ログインの認証を,多要素認証に変更する。
- l: アカウントの乗っ取りを防ぐことができるから
- k: 利用者ごとにアクセス元IPアドレスを限定して接続を許可するように変更する。
- l: 第三者による不正なアクセスを防ぐことができるから
- k: 求人企業プロパティ変更において,メールアドレス以外を変更した場合でも,メールを送信するように変更する。
- l: 不正に求人企業プロパティが変更された場合に気付くことができるから
- ※①~③に限らず,WebAPI に関する被害を軽減する仕様の改善方針案が記述されていること
〔ijについて〕
空欄iとjは、WebAPIの仕様に関する改善案と、その改善によってどのように被害を防止・軽減できるかという理由を、自分の言葉で記述させる問題です。表Fの項番1の欄には、もともと具体的な案は書かれておらず、診断者としてどのような仕様改善を提案できるかを見る設問になっています。
模範解答としては3つの例が示されていますが、趣旨としては「MサイトのWebAPI仕様(図2)に起因して発生し得る被害を、仕様レベルでどう抑え込むか」を書けていればよく、これらと同様の方向性を持つ案であれば得点対象になると考えられます。
〔klについて〕
空欄k,lも同様に、Webアプリケーションプログラムに関する被害を軽減するための改善案とその理由を自由に記述するものです。公式の解答例は3つあるのでそれぞれの趣旨を解説します。
空欄iとjは、WebAPIの仕様に関する改善案と、その改善によってどのように被害を防止・軽減できるかという理由を、自分の言葉で記述させる問題です。表Fの項番1の欄には、もともと具体的な案は書かれておらず、診断者としてどのような仕様改善を提案できるかを見る設問になっています。
模範解答としては3つの例が示されていますが、趣旨としては「MサイトのWebAPI仕様(図2)に起因して発生し得る被害を、仕様レベルでどう抑え込むか」を書けていればよく、これらと同様の方向性を持つ案であれば得点対象になると考えられます。
- i=求職者IDが推測困難なものになるように、求職者IDの生成方法を変更する。
j=APIkeyが窃取された場合、該当求人企業への問合せ又は応募をした求職者の情報漏えいだけに被害を軽減することができるから
本文では、求職者IDは「登録年月日8桁の数字+その日に登録した順に000001から採番する6桁の数字」という、規則性の高い14桁の数字列であると説明されています。このような連番方式だと、攻撃者がAPIkeyを不正に入手した場合、WebAPIの機能③「任意の求職者IDを指定して求職者属性情報を取得する」を悪用し、日付部分を固定したまま000001、000002…と順番にIDを指定していくだけで、多数の求職者属性情報を機械的に取得されてしまうリスクがあります。
そこで、iとして「求職者IDが推測困難なものになるように、求職者IDの生成方法を変更する」とし、jとして「APIkeyが窃取された場合、当該求人企業への問合せ又は応募をした求職者の情報漏えいだけに被害を軽減することができるから」と理由付けます。IDをランダムな文字列などに変更しておけば、攻撃者は連番総当たりで他社に関係する求職者IDを次々に指定することが難しくなり、現実的には、当該企業とやり取りした求職者のID程度しか把握できません。その結果、漏えい範囲を「当該企業に関係する求職者」に事実上限定できるという考え方になります。 - i=WebAPIのアクセス元IPアドレスを限定して接続を許可するように変更する。
j=WebAPIへの第三者による不正なアクセスを防ぐことができるから
図2では、WebAPIの認証は「HTTPリクエスト内のAPIkeyが発行済みであり有効期限内であることを確認する」という方式だけになっており、APIkeyさえ手に入れば、攻撃者であってもインターネット上のどこからでもAPIを呼び出せてしまいます。一方で、WebAPIの利用主体は求人企業のアプリケーションプログラムに限られており、企業側の環境からのアクセス元IPアドレスはある程度固定されることが想定されます。
そこで、iとして「WebAPIのアクセス元IPアドレスを限定して接続を許可するように変更する」と記述します。これにより、登録済みのIPアドレス以外からのAPI利用を拒否できるため、たとえAPIkeyが窃取されても、攻撃者側の環境からはWebAPIに接続できません。したがって、jとして「WebAPIへの第三者による不正なアクセスを防ぐことができるから」と説明することができます。 - i=WebAPIで取得できる求職者属性情報は、個人を特定できないものだけに限定するように変更する。
j=不正にWebAPIが利用されても、個人を特定できない情報の漏えいだけに被害を軽減することができるから
本文冒頭にあるとおり、Mサイトに登録される求職者属性情報には、氏名、自宅住所、電話番号、勤務先など、個人が特定できる情報が含まれています。現在のWebAPIの仕様では、機能③で任意の求職者IDに対して求職者属性情報全体を取得できるため、APIが悪用されると、これらの個人情報が一括で漏えいするリスクがあります。
そこで、iとして「WebAPIで取得できる求職者属性情報は、個人を特定できないものだけに限定するように変更する」とし、例えば年齢層や希望職種などの属性にとどめるよう仕様を見直します。これにより、万一攻撃者にWebAPIを不正利用された場合でも、流出するのは個人を直接識別できない情報に限定されます。このため、jとして「不正にWebAPIが利用されても、個人を特定できない情報の漏えいだけに被害を軽減することができるから」と理由を述べることができます。
〔klについて〕
空欄k,lも同様に、Webアプリケーションプログラムに関する被害を軽減するための改善案とその理由を自由に記述するものです。公式の解答例は3つあるのでそれぞれの趣旨を解説します。
- k=ログインの認証を,多要素認証に変更する。
l=アカウントの乗っ取りを防ぐことができるから
図3の画面01からわかるように、現状のMサイトでは、利用者IDとパスワードだけでログイン認証を行っています。IDとパスワードだけの認証方式は、漏えい・総当たり・フィッシングなどで資格情報を盗まれた場合、そのままアカウントを乗っ取られてしまうという弱点があります。
これを強化する方法として多要素認証があります。例えば、IDとパスワードに加えて、スマートフォンのSMSや認証アプリで表示されるワンタイムコードを入力させる方式などがこれに該当します。このように、たとえ知識情報であるIDとパスワードが盗まれても、利用者本人が所持する端末や生体情報がなければログインできないため、アカウントの乗っ取りを防ぐ効果があります。そのため、kは「ログインの認証を多要素認証に変更する」、lは「アカウントの乗っ取りを防ぐことができるから」とまとめるのが適切です。 - k=利用者ごとにアクセス元IPアドレスを限定して接続を許可するように変更する。
l=第三者による不正なアクセスを防ぐことができるから
設問3②では、WebAPIのアクセス元IPアドレスを限定する案をWebAPI側の改善として挙げましたが、これは求人企業が自社システムからWebAPIを利用する場合の制御であり、Mサイトのログイン画面にアクセスする利用者全体を直接制御するものではありません。ここでの改善案は、Webアプリケーション側で、利用者ごとにアクセス元IPアドレスを制限することで、不審な場所やネットワークからの接続を抑止しようというものです。
例えば、特定の企業のアカウントについては、その企業の拠点やVPNのIPアドレスだけを許可するようにすれば、攻撃者が全く別のネットワークから不正ログインを試みても、IP制限によってブロックできます。このように、正当な利用者が通常利用しないIPからのアクセスを拒否することで、第三者による不正なアクセスを防ぐことができるため、理由としてlの記述になります。 - k=求人企業プロパティ変更において,メールアドレス以外を変更した場合でも,メールを送信するように変更する。
l=不正に求人企業プロパティが変更された場合に気付くことができるから
図3の画面状態遷移の説明を見ると、画面09の求人企業プロパティ変更では、メールアドレスを変更した場合にだけ確認用のメールが送信される仕様になっています。一方、図Bで示されたメールヘッダーインジェクションの攻撃手順では、まず会社名の変更フォームに特定の文字列を入力し、その後にメールアドレスを変更しています。もし会社名やその他のプロパティが不正に書き換えられても、メールアドレスが変わらない限り、現行仕様では求人企業側に通知が届かず、被害に気付きにくい状態です。メールアドレス以外のプロパティ変更時にも確認メールを送るようにしておけば、正当な担当者は「身に覚えのない変更通知」によって異常に気付き、早期にパスワード変更や問い合わせなどの対応を取ることができます。
したがって、仕様としては「メールアドレス以外の項目を変更した場合でもメールを送信する」とし、その理由として「不正に求人企業プロパティが変更された場合に気付くことができるから」とするのが一つの回答になります。
