Web Application Security Memo

ウェブセキュリティに関するメモ書き

IPA ウェブ健康診断仕様を使ったWebアプリ脆弱性検査(XSS編)

※当サイトにはプロモーションが含まれています。

公開日: 更新日:

ウェブ健康診断仕様

IPAが公開しているウェブ健康診断仕様の中にあるXSS(クロスサイト・スクリプティング)の診断をやってみます。

診断内容

ウェブ健康診断仕様.pdf より抜粋

ウェブ健康診断仕様

診断する環境

  • クライアントOS:OS X
  • ブラウザ:Firefox (OWASP ZAPに対するプロキシ設定は済んでいるものとします)
  • HTTP通信を記録するツール:OWASP ZAP
  • 診断対象となるWebアプリケーション:

※ OWASP BWA、DVWA(Damn Vulnerable Web Application) については、こちらの記事 OWASP BWA (The Broken Web Applications) とは? を参照して下さい。

診断対象となるWebページ

DVWAの「XSS Reflected」ページ(Security Level: low) を診断します。

手順1:環境を用意する

順番に起動していくだけなので詳細は省略します。

1-1. VirtualBoxを起動

1-2. VirtualBox内の OWASP BWA を起動

1-3. OWASP ZAP を起動

1-4. Firefox を起動

手順2:目的のWebページにアクセスする

2-1. OWASP BWAのトップページにアクセスする。

2-1-1. http://192.168.0.50/ にアクセスします。

OWASP BWAトップページ

2-2. DVWAのXSS reflectedページにアクセスする。

2-2-1. “Damn Vulnerable Web Application” をクリックして、DVWAにアクセスするとログインページが表示されます。

2-2-2. Usernameに “admin”, Passwordに “admin” を入力して[Login]ボタンをクリックし、DVWAにログインします。

DVWAログインページ

2-2-3. 画面左の[XSS reflected]メニューをクリックして、今回診断を行うページにアクセスします。

DVWAトップページ

DVWAのXSS Reflectedページ

  • 入力フィールドを右クリックし、[要素を調査]を選択すると、開発ツールの画面が表示され、対象フィールドの name 属性名が “name” であることが確認できます()。

手順3:診断を行う

4つの検出パターンを入力・サブミットし、レスポンスを調査します。

3-1. 検出パターン1

3-1-1. 検出パターン1の文字列を入力して[Submit]ボタンをクリックします。 検出パターン1の入力

3-1-2. ブラウザ上で更新された箇所を確認します。

  • 入力した文字列のうち、画面上には「’>”>」が表示され、その後に水辺線が表示されました。

検出パターン1の結果

3-1-3. OWASP ZAPでリクエストの内容を確認します。 検出パターン1のリクエスト

3-1-4. OWASP ZAPでレスポンスの内容を確認します。

  • 入力した文字列が、エスケープ等されずにそのまま出力されていることが分かります。

検出パターン1のレスポンス

3-1-5. 脆弱性の有無を判断します。

  • ウェブ健康診断仕様によると、脆弱性有無の判定基準は「エスケープ等されずに出力される」であるため、今回は脆弱性有りと判定できます。

3-2. 検出パターン2

3-2-1. 検出パターン2の文字列を入力して[Submit]ボタンをクリックします。 検出パターン2の入力

3-2-2. ブラウザ上で更新された箇所を確認します。

  • JavaScriptのalert()が実行され、クッキーの内容が表示されました。 検出パターン2の結果画面

3-2-3. OWASP ZAPでリクエストの内容を確認します。 検出パターン2のリクエスト

3-2-4. OWASP ZAPでレスポンスの内容を確認します。

  • 入力した文字列が、エスケープ等されずにそのまま出力されていることが分かります。 検出パターン2のレスポンス

3-2-5. 脆弱性の有無を判断します。

  • ウェブ健康診断仕様によると、脆弱性有無の判定基準は「エスケープ等されずに出力される」であるため、今回は脆弱性有りと判定できます。

3-3. 検出パターン3

3-3-1. 検出パターン3の文字列を次のようにURLに入力してアクセスします。

検出パターン3の入力

3-3-2. ブラウザの表示が更新されました。

  • Not Found という文字列と共に、検出パターン3の文字列が表示されています。 検出パターン3の結果画面

3-3-3. OWASP ZAPでリクエストの内容を確認します。

検出パターン3のリクエスト

3-3-4. OWASP ZAPでレスポンスの内容を確認します。

  • 検出パターン3の文字列が表示されていますが、“<“ → “<”, “>” → “>” というように文字参照に変換されています。

検出パターン3のレスポンス

3-3-5. 脆弱性の有無を判断します。

  • ウェブ健康診断仕様によると、脆弱性有無の判定基準は「エスケープ等されずに出力される」であるため、今回は脆弱性無しと判定できます。

3-4. 検出パターン4

3-4-1. 検出パターン4の文字列を入力して[Submit]ボタンをクリックします。 検出パターン4の入力

3-4-2. ブラウザ上で更新された箇所を確認します。

検出パターン4の結果画面

3-4-3. OWASP ZAPでリクエストの内容を確認します。 検出パターン4のリクエスト

3-4-4. OWASP ZAPでレスポンスの内容を確認します。

  • 入力した文字列が、入力フィールドの下あたりに
    タグに囲われて出力されています。エスケープ等はされていませんが、この場所でJavaScriptが実行されることはありません。
  • 入力した文字列は、ここ以外には出力されていません。 検出パターン4のレスポンス

3-4-5. 脆弱性の有無を判断します。

  • ウェブ健康診断仕様によると、脆弱性有無の判定基準は「href 属性等に出力される」であるため、今回は脆弱性無しと判定できます。

手順4:脆弱性診断の結果

検出パターン1,2において脆弱性有りの判定となりました。

手順5:対策アドバイス

  • ウェブページに出力する全ての要素に対して、エスケープ処理を施す。
  • 入力値の内容チェックを行う。
  • CookieにHttpOnly属性を付ける。
    • それに伴いTRACEメソッドを無効化する。

その他

  • 問題点等ありましたらご指摘下さい。

[最終更新日: 2014年2月28日]