OWASP ZAP スキャンポリシーの検査項目一覧(Release版)

OWASP ZAP

スキャンポリシーで選択できる各検査項目(Release品質の項目のみ)の一覧と、やっている検査処理の簡単な説明です。

脆弱性を自動診断して何らかの脆弱性が報告された場合、本当にその脆弱性が存在するのか調査すると思いますが、どういう診断処理が行われたのかが分かっていないと、非効率な調査しかできません。ですので、OWASP ZAPの自動検査で発見された脆弱性を調べる時に、この一覧を役立てて頂ければ嬉しいです。

※ 脆弱性自体の説明があまりされていなかったり、各CWE情報へのリンクが貼っていなかったりして少し不親切な状態ですが、今後少しずつ追加していければなと思っています。

Passive

Script passive scan rules

  • Passive Rules用に作成しておいたスクリプトが実行される。

Application Error disclosure

  • 脆弱性の種類
    • CWE-200:Information Exposure
    • WASC-13:Information Leakage
  • クラス
    • org.zaproxy.zap.extension.pscanrules.ApplicationErrorScanner
  • スキャン処理 (レスポンス)
    1. ステータスコードが500の場合
      1. アラートする。
    2. ステータスコードが404でない場合
      1. レスポンスボディに、内部の情報を表示する一般的なエラーメッセージが含まれていた場合、アラートする。

Incomplete or no cache-control and pragma HTTPHeader set

  • 概要
    • SSLページなのにキャッシュを許可しているかチェックする。
  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.CacheControlScanner
  • スキャン処理 (レスポンス)
    1. (SSLページ && CSSファイルでない && 画像ではない && レスポンスボディがある) 場合
      1. レスポンスヘッダに no-cache 等がない場合
        1. アラートする。
      2. レスポンスヘッダのPRAGMAに、”no-cache” がない場合
        1. アラートする。

Content-Type header missing

  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.ContentTypeMissingScanner
  • スキャン処理 (レスポンス)
    1. レスポンスヘッダ内の Content-Type ディレクティブが無かったらアラートする。
    2. レスポンスヘッダ内の Content-Type の値が空だったらアラートする。

  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.CookieHttpOnlyScanner
  • スキャン処理 (レスポンス)
    1. Set-Cookieの値を取得する。
      1. httponlyが含まれていなかったらアラートする。
    2. Set-Cookie2の値を取得する。
      1. httponlyが含まれていなかったらアラートする。

  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.CookieSecureFlagScanner
  • スキャン処理
    1. Set-Cookieの値を取得する。
      1. “secure” が含まれていなかったらアラートする。
    2. Set-Cookie2の値を取得する。
      1. “secure” が含まれていなかったらアラートする。

Cross-domain JavaScript source file inclusion

  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.CrossDomainScriptInclusionScanner
  • スキャン処理 (レスポンス)
    1. レスポンスから script タグ要素を取得してそれぞれループ処理する
      1. src属性値を取得する。
      2. 別のドメインが指定されていた場合、アラートする。

IE8’s XSS protection filter not disabled

  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.HeaderXssProtectionScanner
  • スキャン処理 (レスポンス)
    1. レスポンスヘッダから “X-XSS-Protection” ディレクティブの値を取得する。
    2. “1” がセットされていない場合、アラートする。

Secure pages including mixed content

  • 概要
    • SSLページに、http へのリンクがあるかチェックする。
  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.MixedContentScanner
  • スキャン処理 (レスポンス)
    1. SSLページでなければ、処理を終了する。
    2. レスポンス内の全てのタグ要素をループ処理する。
      1. URLを指定できる属性があれば、そこが “http:” で始まっていれば list に要素名等を追加する。
    3. list に1つでも値があればアラートする。

Password Autocomplete in browser

  • 概要
    • パスワードを含む input タグ要素の AUTOCOMPLETE 属性値はOFFになっているかチェックする。
  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.PasswordAutocompleteScanner
  • スキャン処理 (レスポンス)
    1. formタグ要素を取得して、それぞれループ処理する。
      1. form要素が、AUTOCOMPLETE属性値を持っていないか、OFFになっている場合
        1. form要素内の input要素を取得し、ループ処理する。
          1. inputタグ要素の”TYPE”属性値が “PASSWORD” の場合
            1. そのinputタグ要素の ”AUTOCOMPLETE”属性値が空か、”OFF”でない場合、アラートする。

Private IP disclosure

  • 脆弱性の種類
    • CWE-200:Information Exposure
    • WASC-13:Info leakage
  • クラス
    • org.zaproxy.zap.extension.pscanrules.TestInfoPrivateAddressDisclosure
  • スキャン処理 (レスポンス)
    1. レスポンスボディ内に、プライベートアドレスが出力されていたらアラートする。

Session ID in URL rewrite

  • メモ
    • これがアラートされたら、オプション画面でセッションクッキー名を登録するとよい。
  • 脆弱性の種類
    • CWE-200:Information Exposure
    • WASC-13:Info leakage
  • クラス
    • org.zaproxy.zap.extension.pscanrules.TestInfoSessionIdURL
  • スキャン処理 (レスポンス)
    1. オプション画面で設定してあるセッションクッキー名を取得し、その値毎にループ処理する。
      1. 対象ノードURLにその名前が含まれている場合、アラートする。

X-Content-Type-Options header missing

  • メモ
    • ウェブブラウザにコンテンツスニッフィングをやめさえるためのヘッダー。
  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.XContentTypeOptionsScanner
  • スキャン処理 (レスポンス)
    1. レスポンスヘッダの “X-Content-Type-Options” ディレクティブを取得する。
      1. なければアラートする。
      2. ある場合は、あった数だけループ処理する。
        1. “X-Content-Type-Options” ディレクティブの値に、”nosniff” が含まれていない場合、アラートする。

X-Frame-Options header not set

  • メモ
    • X-Frame-Options HTTP レスポンスヘッダは、ブラウザがページを または <iframe> の内部に表示することを許可するかを示すことができる。
  • 脆弱性の種類
    • なし
  • クラス
    • org.zaproxy.zap.extension.pscanrules.XFrameOptionScanner
  • スキャン処理
    1. レスポンスヘッダの “X-Frame-Options” ディレクティブを取得する。
      1. なければアラートする。
      2. ある場合は、あった数だけループ処理する。
        1. “X-Frame-Options” ディレクティブの値に、(“deny” が含まれていない) && (“sameorigin”が含まれていない) && (“allow-from” が含まれていない)場合、アラートする。

Injection (インジェクション)

Server side include

  • 脆弱性の種類
    • CWE-97
    • WASC-31
  • クラス
    • org.zaproxy.zap.extension.ascanrules.TestServerSideInclude
      • パラメータ毎のscanを行う。
  • 説明
    • 特定のパラメータ値が Server Side Include コマンドを実行する可能性を検査する。
  • スキャン処理
    1. 次のベクタをパラメータにセットして送信し、対応する確認用文字列がレスポンスボディに含まれているかチェックする。含まれていればアラートする。
      1. ベクタ:「<!–#EXEC cmd=”ls /”–>」
        • 確認用文字列:「\broot\b.*\busr\b」
        • ※ \b は単語の先頭、または末尾にマッチする。(単語の区切り)
      2. ベクタ:「”><!–#EXEC cmd=”ls /”–><」
        • 確認用文字列:上と同じ。
      3. ベクタ:「<!–#EXEC cmd=”dir \”–>」
        • 確認用文字列:「\bprogram files\b.*\b(WINDOWS|WINNT)\b」
      4. ベクタ:「”><!–#EXEC cmd=”dir \”–><」
        • 確認用文字列:上と同じ。

Cross Site Scripting(Reflected)

Cross Site Scripting(Persistent)

Cross Site Scripting (Persistent) – Prime

Cross Site Scripting (Persistent) – Spider

SQL Injection

Server Side Code Injection Plugin

  • 脆弱性の種類
    • CWE-94:Improper Control of Generation of Code (‘Code Injection’)
    • WASC はなし
  • クラス
    • org.zaproxy.zap.extension.ascanrules.CodeInjectionPlugin
      • パラメータ毎の scan を行う。
  • スキャン処理
    1. PHPコード・インジェクションのテスト
      1. パラメータ値に、PHPコードの断片(chr()関数で指定した文字列をprintさせている)をセットしてHTTPリクエストを投げる。
      2. レスポンスボディに、断片内の文字列(chr()で出力される文字列)が存在するかチェックする。
      3. 含まれていたら脆弱性有りとする。
    2. ASPコード・インジェクションのテスト
      1. パラメータ値に、ASPコードの断片(数値の掛け算をさせている)をセットしてHTTPリクエストを投げる。
      2. レスポンスボディに、断片内の文字列(掛け算の結果)が存在するかチェックする。
      3. 含まれていたら脆弱性有りとする。

Remote OS Command Injection Plugin

  • 脆弱性の種類
  • クラス
    • org.zaproxy.zap.extension.ascanrules.CommandInjectionPlugin
      • パラメータ毎のscanを行う。
  • スキャン処理 (パラメータ毎)
    • ペイロード毎にループ処理する。
      • メッセージオブジェクトを生成する。
      • 対象パラメータに、ペイロードをセットする。
      • HTTP通信する。
      • このペイロードに対するマッチ文字列(例:”root:.:0:0”)が、レスポンスボディ内に存在していた場合、アラートする。

CRLF injection

  • 脆弱性の種類
    • CWE-113 (HTTP Response Splitting)
  • クラス
    • org.zaproxy.zap.extension.ascanrules.TestInjectionCRLF
      • パラメータ毎の scan を行う。
  • スキャン処理
    1. 用意したベクタ毎にループ処理する。
      1. パラメータ値としてをベクタをセットしてHTTPリクエストを送る。
        • 各ベクタは「Set-cookie: Tamper=xxxx」を含んでいる。
      2. レスポンスヘッダが “Set-cookie: Tamper=xxxx」を含んでいるかチェックする。
      3. 含んでいれば、脆弱性有りとする。

Parameter tampering

  • 説明
    • 問題のあるパラメータ値を受け取った時に、適切なエラー処理がされているかチェックする。
  • 脆弱性の種類
    • CWE-472:External Control of Assumed-Immutable Web Parameter
    • WASC-20:Improper Input Handling
  • クラス
    • org.zaproxy.zap.extension.ascanrules.TestParameterTamper
      • パラメータ毎のscanをしている。
  • スキャン処理
    1. 基のリクエストを普通に送信する。
    2. ステータスコードが200でなければ終了
    3. PARAM_LIST配列毎にループ処理する
      1. PARAM_LIST配列の値をパラメータにセットして、HTTPリクエストを送信する。
      2. ステータスコードが200でない && ステータスコードがサーバーエラーでない場合は処理を終了
      3. 最初に送った通常のリクエストに対するレスポンスボディと、今回のレスポンスボディが全く同じであれば処理を終了する。
      4. 今回のレスポンスボディに、Java, PHP, ODBC, Tomcat などの一般的なエラー文字列が含まれていたら脆弱性有りと判定する。

Script active scan rules

  • これは Active Rules 用に作成されたスクリプトを実行する。

Information gathering (インフォメーション)

Directory browsing

  • 概要
    • URLにアクセスして、ファイル一覧のページが表示されていないかチェックする。
  • 脆弱性の種類
    • CWE-548
    • WASC-48
  • クラス
    • org.zaproxy.zap.extension.ascanrules.TestDirectoryBrowsing
      • 対象ノード(URL)に対して1回のスキャンを行う。
  • スキャン処理
    1. 対象ノードのURLから クエリ部分を削除したURLの末尾が “/” でなければ、”/” をつける。
    2. HTTPリクエストを送信する。
    3. ステータスコードが200でなければ、処理を終了する。
    4. レスポンスボディに、特定の文字列(例:”Parent Directory”)が含まれていれば脆弱性有りと判定する。

Client browser (クライアント・ブラウザ)

Secure page browser cache

  • 概要
    • SSLページなのに、cache を許可する指示を出しているかチェックする。
  • クラス
    • org.zaproxy.zap.extension.ascanrules.TestClientBrowserCache
      • 対象ノード(URL)に対して1回スキャン処理する。
  • 脆弱性の種類
    • CWE-525:Information Exposure Through Browser Caching
    • WASC なし
  • スキャン処理
    1. SSLページでないなら処理を終了する。
    2. 画像なら処理を終了する。
    3. レスポンスボディのサイズが0なら終了する。
    4. ステータスコードがクライアントエラーだったら処理を終了する。
    5. HTTPレスポンスヘッダに、No-cache や No-store がない && HTTPレスポンスボディのMETAタグにも No-cache や No-store がない場合、脆弱性有りと判定する。
      • “No-cache”がない →「キャッシュしてよいです」

Server security (サーバ・セキュリティ)

Path Traversal (パス トラバーサル)

  • 脆弱性の種類
    • CWE-22
    • WASC-33
  • クラス
    • org.zaproxy.zap.extension.ascanrules.TestPathTraversal
      • パラメータ毎のスキャン処理をしている。
  • スキャン処理
    1. 設定されたAttackStrengthによって決定する回数だけループ処理する
      1. このループ回数に対応する prefix 文字列を取得する。
      2. テストする target (“/etc/passwd” など)の数だけループ処理する
        1. パラメータに prefix + target をセットして、HTTPリクエストを送信する。
        2. (ステータスコードが200) && ((レスポンスヘッダ+レスポンスボディ)に、taget で指定したファイル内に通常存在する文字列が含まれている) であれば、脆弱性有りと判定して処理を終了する。

Remote File Inclusion (リモートファイル インクルージョン)

  • 脆弱性の種類
    • CWE-98
    • WASC-5
  • クラス
    • org.zaproxy.zap.extension.ascanrules.TestRemoteFileInclude
      • パラメータ毎のスキャン処理をしている。
  • スキャン処理
    1. 設定された AttackStrength の数だけループ処理する。
      1. URLスキーマ名を prefix にセットする。
      2. REMOTE_FILE_TARGETS配列の数だけループ処理する
        1. REMOTE_FILE_TARGETSから値を取り出して、target にセットする。
          • (例): “www.google.com/”
        2. パラメータに prefix + target をセットしてHTTPリクエストを送信する。
        3. ステータスコードが200 且つ (レスポンスヘッダ+レスポンスボディ)に、target 文字列が含まれている場合は、脆弱性有りと判定する。

Miscellaneous (一般)

External redirect

[最終更新日時: 2014年5月12日]

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*