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
インタフェースを実装しています。- このインタフェースの主なメソッド
void onHttpRequestSend(HttpMessage httpMessage)
- リクエストが送信される直前に呼ばれます。
void onHttpResponseReceive(HttpMessage httpMessage)
- レスポンスを取得した直後に呼ばれます。
- このインタフェースの主なメソッド
- 各フィルタがまとめて取得されるところ
- 各フィルタが実行されるところ
- フィルタのクラスは、
org.parosproxy.paros.extension.filter
という名前空間に属しており、そのほとんどのファイルは zaproxy のリポジトリに格納されています。但し、WebSocket に関するフィルタは、zap-extensions のリポジトリに入っています。 - この機能に関連する言語のリソースファイルは、zaproxy のリポジトリ内の
src/lang/Messages.properties
のようです。
バージョン 2.4 以降について
- もう少しでリリースされる予定のバージョン2.4では、フィルタのダイアログボックスに以下のような警告文が表示されます。
その他
- 間違っている所があれば、ご指摘して頂けると助かります。
- 上の方で書いた「レスポンス中の”Set-cookie”攻撃を検出」というフィルタについてですが、やっている処理は単純に “Set-cookie” を検出して警告し、その内容を変更できるようにしているだけ(参照)であって、攻撃だけを検出しているわけではないので、Crowdinサイト(ZAPの翻訳をするサイト)で日本語訳を “HTTPレスポンス中の ‘Set-cookie’ を検出して警告する” にしておきました。もっとよい言葉がありましたら、変更してしまっておいて下さい。(Crowdinのアカウントがあれば、こちらから このセンテンスのページにアクセスできます)
最終更新日: 2014-11-30