Web Application Security Memo

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

OWASP ZAPのフィルタ機能についてのメモ

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

公開日: 更新日:

OWASP JAPAN

29日に行われた OWASP DAY というイベントの中で Proxy War というプレゼンがあったようで、スライドが公開されていました。この中では Fiddler, BurpSuite, OWASP ZAP といった3つのローカルプロキシツールについての特徴が説明されており、すごく面白くて勉強になりました。まだ見ていない方がいましたら、是非見て頂きたいと思います。

ZAPについても知らないことがいろいろあったのですが、今回はその中からフィルタ機能について調べたので分かったことをメモしておきます。最初に書いておきますが、ホントにメモみたいであまり整頓されていません。

フィルタ機能とは?

  • Paros時代からある機能です。(OWASP ZAPの源流は Parosというツールです)
  • [ツール]メニュー - [フィルタ…] を選択すると、各フィルタの一覧が表示されたダイアログボックスが表示されます。目的のフィルタにチェックを入れ(項目によっては補足的なデータもセットして)使用します(下の方に画面を貼り付けてあります)。
  • フィルタとは基本的に、**「ZAPをプロキシとして設定したブラウザにおいて、Webサイトに対してリクエストを送信する直前と、レスポンスを取得した直後に何かしらの処理を行う」**ものです(フィルタによってどちらか片方だけのものもあります)。
  • 例えば、「レスポンス中の”Set-cookie”攻撃を検出」(英語だと [Detect and alert ‘Set-cookie’ attempt in HTTP response for modification.])というフィルタの場合、レスポンスが返ってきた直後、レスポンスヘッダに “Set-cookie” がセットされているのを検出し、その場でダイアログボックスを表示して警告し、クッキーの内容を変更することができます。
  • 公式サイトの Wikiでフィルタ機能についてのページを探したのですが、見つかったのは以下だけでした。これ以外に何かドキュメントはあるのでしょうか?

内部的な話し

  • フィルタを表すクラスは、[org.parosproxy.paros.extension.filter.Filter](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/Filter.java) インタフェースを実装しています。
    • このインタフェースの主なメソッド
      • [void onHttpRequestSend(HttpMessage httpMessage)](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/Filter.java#43)
        • リクエストが送信される直前に呼ばれます。
      • [void onHttpResponseReceive(HttpMessage httpMessage)](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/Filter.java#45)
        • レスポンスを取得した直後に呼ばれます。
  • 各フィルタがまとめて取得されるところ
    • [org.parosproxy.paros.extension.filter.FilterFactory.loadAllFilter()](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/FilterFactory.java#46)
  • 各フィルタが実行されるところ
    • [org.parosproxy.paros.extension.filter.ExtensionFilter](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/ExtensionFilter.java) クラスの以下のメソッド
      • [public boolean onHttpRequestSend(HttpMessage httpMessage)](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/ExtensionFilter.java#154)
      • [public boolean onHttpResponseReceive(HttpMessage httpMessage)](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/ExtensionFilter.java#185)
  • フィルタのクラスは、[org.parosproxy.paros.extension.filter](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/org/parosproxy/paros/extension/filter/) という名前空間に属しており、そのほとんどのファイルは zaproxy のリポジトリに格納されています。但し、WebSocket に関するフィルタは、zap-extensions のリポジトリに入っています。
  • この機能に関連する言語のリソースファイルは、zaproxy のリポジトリ内の [src/lang/Messages.properties](https://code.google.com/p/zaproxy/source/browse/branches/2.3/src/lang/Messages.properties) のようです。

バージョン 2.4 以降について

  • もう少しでリリースされる予定のバージョン2.4では、フィルタのダイアログボックスに以下のような警告文が表示されます。
    • zap_filter
    • つまり、フィルタ機能はスクリプトの機能によって置き換えられてきており、将来的にはなくなります。
    • ちなみに スクリプトというのは、以下のように [Scripts]タブで作成することができます。
      • zap_new_script
      • この画面中に[タイプ]という項目がありますが、フィルタと全く同じ役割を持つのは “プロキシ”というタイプになります(リクエスト送信直前と、レスポンス取得直後に処理を追加できる)。

その他

  • 間違っている所があれば、ご指摘して頂けると助かります。
  • 上の方で書いた「レスポンス中の”Set-cookie”攻撃を検出」というフィルタについてですが、やっている処理は単純に “Set-cookie” を検出して警告し、その内容を変更できるようにしているだけ(参照)であって、攻撃だけを検出しているわけではないので、Crowdinサイト(ZAPの翻訳をするサイト)で日本語訳を “HTTPレスポンス中の ‘Set-cookie’ を検出して警告する” にしておきました。もっとよい言葉がありましたら、変更してしまっておいて下さい。(Crowdinのアカウントがあれば、こちらから このセンテンスのページにアクセスできます)

最終更新日: 2014-11-30