IPA Webアプリケーション・ソフトウェアの脆弱性 — 頻出論点と過去問

頻出論点

1. この分野は何か

Webアプリケーションやプログラムを作るときに入り込む脆弱性とそれを突く攻撃を、どう実装・設定すれば防げるかという作り手の側から扱います。どの脆弱性にどの実装や設定が効くかを結びつけられるようになります。

2. 実際の出題のされ方

入力値の無害化や開発初期からの対策という基本概念は、ITパスポートで問われます。入力内容に含まれる有害な文字列を無害な文字列に置き換えるサニタイジングや、企画・設計段階から情報セキュリティを確保するセキュリティバイデザインの用語が出題されています。

攻撃ログからの原因推定や、ヘッダ・Cookie・セッション管理による防御策は、応用情報技術者の午前と高度試験の午前Iで出題されます。リクエストのパラメータに;とOSコマンドが続くログから悪用されかけた脆弱性を推測する問題、シェルを起動できる言語機能を避ける実装対策、URLパラメータによる自動遷移機能を悪用して偽サイトへ誘導するオープンリダイレクトが出題されています。また、HTTPレスポンスヘッダにX-Frame-Optionsを設定するクリックジャッキング対策、ログアウト時にWebサーバ側でセッションIDを無効化するセッション乗っ取り対策、CookieのSecure属性やサードパーティCookieのブロック効果も問われています。

脆弱性ごとの根本対策と軽減策の切り分けや、言語仕様・並行処理に関わる実装上の欠陥は、高度試験の午前IIで問われます。SQLインジェクションにおける実装対策(静的プレースホルダ)と実装以外の対策(データベースアカウントの権限最小化)の組み合わせ、クロスサイトリクエストフォージェリ(CSRF)に対して効果がない対策を選ぶ問題、掲示板への書き込みを通じてスクリプトが保存・実行される格納型クロスサイトスクリプティング(Stored XSS)と反射型の区別が出題されています。さらに、Perlのsystem関数やPHPのexec関数を介したOSコマンドインジェクション、HSTSの動作、排他制御の不備によるレースコンディション、メモリ保護機能を備えたプログラム言語を用いるメモリ安全性(Memory Safety)も問われています。

3. 学習のポイント

第一に、主要なWeb脆弱性と根本対策の対応を確実に結びつけます。

  • SQLインジェクション: 静的プレースホルダ(バインド機構)でSQL文を組み立てるとともに、DBアカウントの権限を必要最小限にします。
  • OSコマンドインジェクション: ;などのメタ文字とOSコマンドが注入され、exec関数やsystem関数でシェルが実行される脆弱性です。シェルを起動できる言語機能の利用を避けます。
  • クロスサイトスクリプティング(XSS): <や>などの特殊文字を<や>に置き換えるエスケープ処理(サニタイジング)を行います。サーバ上にスクリプトが保存される格納型と、罠リンクの応答にそのまま含まれる反射型があります。
  • CSRF: ログイン中の利用者に罠サイト経由で意図しないリクエストを送らせる攻撃です。推測困難な秘密の値(トークン)の照合、重要操作時のパスワード再入力、Refererによる遷移元確認が有効です。

第二に、Cookie属性とHTTPレスポンスヘッダの動作を整理します。CookieのSecure属性はURLスキームがhttpsのときだけ送出させ、HttpOnly属性はJavaScriptからの読出しを禁止し、サードパーティCookieのブロックは複数サイト横断のトラッキングを防ぎます。また、X-Frame-Optionsヘッダは他サイトのフレーム内への読み込みを制限して透明なフレームを重ねるクリックジャッキングを防ぎ、Strict-Transport-Security(HSTS)ヘッダを返すと、ブラウザは指定された有効期間中、そのサイトへの接続を自動的にTLSによるHTTPSへ切り替えます。

第三に、ソフトウェア実装上の欠陥を押さえます。確保したメモリ領域を超える入力で誤動作を招くバッファオーバーフローやメモリリークを防ぐには、直接メモリにアクセスする機能を避けメモリ保護機能を備えた言語を採用します。また、複数プロセス・スレッドが共有リソースに同時アクセスして想定外の動作をする問題はレースコンディション(競合状態)と呼びます。

4. 間違えやすいところ

XSS対策とCSRF対策の混同を突く問題が出ています。リクエストに含まれる<や>などの特殊文字を<や>に置き換える処理はXSS対策であり、CSRF対策としては効果がありません。また、CSRF対策としてリクエストにGETメソッドを使用するとしたり、セッションハイジャック対策として利用者ごとに固定のセッションIDを使用するとしたり、ログアウト時にWebブラウザのキャッシュだけをクリアするとしたりする誤答にも注意が必要です。

さらに、CookieのSecure属性とHttpOnly属性・Path属性・有効期間属性の説明を入れ替えた選択肢や、HSTSの説明としてEV SSL証明書のときにアドレスバーを緑色にする仕組みや同一オリジンポリシーによるアクセス制限を挙げる選択肢、メモリ安全性の事例としてハードウェアのECCメモリや宇宙線対策の多重化を選ばせる選択肢もあります。

Webアプリケーション・ソフトウェアの脆弱性の理解度チェック

Webアプリケーション・ソフトウェアの脆弱性の過去問一覧

Webアプリケーション・ソフトウェアの脆弱性の用語

セキュリティ技術のほかの論点

暗号方式・ハッシュ53問 デジタル署名・PKI48問 利用者認証・SSO・ID連携61問 サイバー攻撃手法45問 マルウェア24問 ネットワーク防御・セキュリティ製品33問 セキュアプロトコル・無線LAN・接続認証48問 DNS・電子メールのセキュリティ54問 ハードウェア・物理的セキュリティ32問 脆弱性管理・セキュリティ監視44問