1.1K Views
December 01, 19
スライド概要
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題(3題)と解説です。PHPカンファレンス2019での講演資料を少し手直ししました。
試験についてはこちら
https://www.phpexam.jp/tokumarubasic/
徳丸試験基礎編の例題を紹介 EG セキュアソリューションズ株式会社 徳丸 浩
前提 • ウェブ・セキュリティ基礎試験(徳丸基礎試験)の 模擬試験およびその解説です https://www.phpexam.jp/tokumarubasic/ • 徳丸試験の本番の問題とは別ですが、似たような難 易度に調整しています 2
問題1 クッキーにHttpOnly属性を設定した場合の効果を一つ 選択せよ 1. 2. 3. 4. クッキーがHTTPSではなくHTTPのみで送信される CSRF脆弱性を防止できる JavaScriptから当該クッキーを参照できなくなる 異なるオリジンからアクセスできるようになる 3
問題1 – 解説 • 正解は 3 • クッキーをHTTPのみで送信強制する方法はありま せん。 • クッキーの発行時にCSRF脆弱性を防止する機能と してSameSite属性が実装されていますが、タイミン グ的に徳丸本2版には間に合いませんでした • JavaScriptから当該クッキーを参照できなくなるす るのがHttpOnly属性の機能です • クッキーを異なるオリジンからアクセスできるよう にする機能候補としてdomain属性がありますが、 ドメイン(effective TLD)を超えた共有はできませ ん 4
問題2 脆弱性診断の結果、ディレクトリトラバーサル脆弱性が指摘さ れ、その証拠として /etc/passwd にアクセスした結果が報告書 に掲載されていた。 当該脆弱性の正しい対策を一つ選択せよ 1. ウェブアプリケーションの実行ユーザから /etc/passwd に アクセスできないよう設定する 2. 外部から入力されたファイル名を正しくエスケープ処理す る 3. 外部から入力されたファイル名に対して、basename関数な どディレクトリ名を除去する関数を用いる 4. Apache等の設定を見直し、ファイルの一覧が表示されない ことを確認する 5
問題2 – 解説 • 正解は 3 • /etc/passwd へのアクセス制御は現実的に難しいことと、 他のファイルへのアクセスには効果がないので緩和策と しても効果が少ないです • この文脈ではファイル名のエスケープ処理はできません • basename関数を用いて外部から入力されたファイル名 にディレクトリ名が含まれないようにする…これが正解 です(本番試験では特定言語の関数名は原則として出ま せん) • Apache等の設定を見直し、ファイルの一覧が表示され ないことを確認する…これはディレクトリ・リスティン グの禁止で、意図しないファイル公開への緩和策ですが、 ディレクトリトラバーサルには効果がありません 6
【解説】basename関数は何をするか • 以下のPHPスクリプト <?php $filename = '../../../../../../etc/passwd'; var_dump(basename($filename)); • 結果は下記となる(var_dumpなので引用符でこま れる) "passwd" • passwdというファイルは通常存在しないが、単に エラーにすればよい 7
問題3 X-Frame-Optionsヘッダと最も関連の深い脆弱性はど れか? 1. 2. 3. 4. クロスサイト・スクリプティング クリックジャッキング セッションハイジャック クロスサイト・リクエストフォージェリ 8
問題3 – 解説 • 正解は 2 • X-Frame-Optionsヘッダと最も関連の深い脆弱性は クリックジャッキングで、コンテンツがframe / iframe に入ることを防ぎます。 9
【解説】クリックジャッキングの攻撃手法 ウェブインテント機能を持つ掲示板、クエリー文字列intentを指定すると犯行予告文を入力 欄に設定できる。 罠ページの画像を用意し、iframe要素を用いて罠と攻撃対象フォームを重ねる。そして、 CSSのz-indexを用いて、罠画像を奥側、攻撃対象フォームを手前にした上で、攻撃対象の フォームを透明に設定する。 利用者から見ると罠サイトだけが見えるが、罠の「応募」ボタンを押そうとすると実際に は手前側の「投稿」ボタンが押され、犯行予告文を投稿してしまう。 10
【解説】クリックジャッキングの対策 アプリケーション単体では困難なためブラウザ側の支援が必要。 レスポンスヘッダX-Frame-Options ⚫ DENY(拒否) X-Frame-Options: DENY ⚫ SAMEORIGIN(同一オリジンに限り許可) X-Frame-Options: SAMEORIGIN いずれかの値をとる PHPによりX-Frame-OptionsのSAMEORIGINを指定するには以下のように記述 header('X-Frame-Options: SAMEORIGIN'); 一般的には、Apacheやnginxの設定で常時このヘッダを出力するとよい 11
その他大切なこと • 基礎試験はPHP等の特定言語には依存しません – JavaScriptに関する問題は出ます • 徳丸本7章 脆弱性診断入門 からは出題されません • とても基礎的な問題ですが、それでも意外に点数が ばらけます(経験談) • ウェブセキュリティの基礎が把握できているかを確 認するのに良いと思います 12