
BurpSuite用Response Overview拡張機能 - レスポンスボディをグループ化して特異なレスポンスを発見
BurpSuite用のレスポンス概要拡張機能
作者: Tobias "floyd" Ospelt, @floyd_ch, http://www.floyd.ch
Pentagrid AG, https://www.pentagrid.ch
この拡張機能はすべてのレスポンスボディを類似度でグループ化し、グループごとに1つのリクエスト/レスポンスを示すサマリーを表示します。この拡張機能により、テスターは(スキャナー、プロキシなど)すべてのツールからテスト対象ウェブサイトのレスポンスの概要を把握できます。これは(通常の検出方法であるレスポンスベース、タイムベース、インタラクションベースなどと比較して)追加の「半自動検出方法」を提供します。主にパフォーマンス上の理由から、さまざまな最適化が施されています。「remove parameters」機能は、比較前にレスポンスから反射されたリクエストパラメータを削除します。
これまでに:
使い方はとても簡単です:
この拡張機能は以下の場合にHTTPレスポンスを分析します:
上記のフィルター条件が満たされると、受信したレスポンスボディ(すべてのBurpツールから!)が、すでに作成したすべてのグループと比較されます。グループはその最初のメンバーによって定義され、メモリに保持されます。処理中のレスポンスがその最初のメンバーと95%類似していれば、そのグループに属し、「Group Size」カウンターが増加するだけです。つまり、そのレスポンスは保存されません。レスポンスがどのグループとも95%類似していない場合、新しいグループを形成し、その最初のメンバーとなります。
異常を発見できるこのようなレスポンス概要の最初のバージョンは、2010年にw3afプロジェクトに提案し(こちらの議論も参照: https://github.com/andresriancho/w3af/issues/17345)、Pythonで書かれました。なぜかw3afのメインラインには取り込まれませんでした。当時Pythonのdifflibについて多くを学び、ユースケースに合わせてパフォーマンスを最適化しました。2019年にmodzero AG https://github.com/modzero/burp-ResponseClusterer で働いていたときに、Burp用の同様の拡張機能をPythonで書き、再びPythonのdifflibについて多くを学びました。しかし、ある時点でこの拡張機能がBurpのパフォーマンスをいくらか消費している可能性があることに気づきましたが、最初は無視していました。2021年にこの拡張機能は新しいJythonバージョンでは動作しなくなり完全に壊れ、コードを見直す中で非常にメモリ効率の悪い拡張機能を書いていたことに気づきました。というわけで、これが2021年のKotlinによる新機能を備えた新しい拡張機能であり、再びPythonのdifflibやさまざまな機能から多くを学んでいます。常に同じ文字列と比較するのであれば特定の計算は不要であることに気づいたため(Pythonコードですでに実装されていたように)、パフォーマンスを改善しました。Response Clustererは死んだ、Response Overview万歳。
理論上、デフォルト設定ではBurpのパフォーマンスがあまり良くない可能性があります。しかし、これは起こる可能性は非常に低いです。すべてのレスポンスが最大デフォルトレスポンスサイズ(約1MB)であるテストでは、互いに比較する必要があり、比較には事前計算されたbByteCount最適化あり(通常ケース)で最大30ms、この最適化なし(各エントリで一度だけ発生)で最大80msかかりました。最大グループ数(1000)を掛けると、絶対的な最悪ケースでは最大80秒の処理時間になる可能性があります。別スレッドであるため、次の比較は最大30秒しかかからないので、これは許容範囲でしょう。しかし、約1MBの多様なレスポンスを多数持つウェブアプリケーションなどあるでしょうか?あまり多くないことを願います。また、レスポンスの長さが2%以上異なる場合、veryQuickRatio最適化により類似度マッチングはまったく時間がかからないことを忘れないでください。