Burp Suite の「bambdas」機能について: HTTPログを効率的にフィルタリングする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88603/f51110f7-ca57-9f28-15aa-7dec89236c85.png)

LIFULLでセキュリティエンジニアをしています、福沢です。
LIFULLの提供サービスに対してBurp Suiteを利用して定期的な脆弱性診断の業務などをしています。今回は、普段使っているBurp Suiteについて書いてみました。

### この記事について
Burp Suiteに新しく追加されたHTTPログをフィルタリングする機能の「bambdas」についての記事です。「bambdas」の基本的な概要を理解し、HTTPログを効果的にフィルタリングする方法を探ります。
Burp Suiteを利用している方にとって、なにか役立つヒントになれば嬉しいです。

### 対象読者
- Burp Suite(Community/Professional)を利用している方
- Burp SuiteのBambdasについて知りたい方
向けの内容になります。

### 1. 「bambdas」とは何か
Burp Suiteに追加された機能の1つです。
読み方はちょっとよくわかりません。
PortSwigger社（Burp Suiteの開発元）がbambdasの機能についてのYoutube動画を出していたので拝聴したところ、「バムダ」や「バンバ」と言っていたようには聞こえました。
（Lambdaてきな読み方でいいのかな？）

で、この「bambdas」というのは、HTTPのログをフィルタリングしてくれる機能です。
いままでも特定の文字列を検索することは可能でしたが、bambdasを利用するとより高度なフィルタリングが可能になります。フィルタリングはコードで表現されます。

例えば、
・レスポンスにX秒以上かかっているログ
・cookieの値に特定の文字が含まれるログ
・ページタイトルに特定の文字が含まれているレスポンスのログ
などを条件にフィルタリングできたり、ハイライトで色付けできたりします。

つまるところ
**「Burp Suiteの結果から無関係なトラフィックを取り除いて、効率的にログを探索できるようになる。」**

というのがbambdasの利点です。


### 2. 「bambdas」の使い方
・Proxyタブ>HTTP historyより"Filter Setteings"からBambda modeを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88603/310e4d58-11c1-7e55-ccc3-5d4528526cce.png)

もしくは
・Loggerタブ>View FilterよりBambda modeを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88603/020d8b29-1e38-a4d4-3e7a-a5e994480dd6.png)


bambdasはリリース当初は、Proxyタブでのみ利用できる機能でしたが、
[Professional / Community 2023.12.1のEarly Adopter版](https://portswigger.net/burp/releases/professional-community-2023-12-1?requestededition=professional) から
Loggerタブでもbambdasが利用できるようになっています。
このアップデートにより、Scanner,Repeater,Intruderなどの結果をLoggerのBambdasで
フィルタリングができるようになりました！

### 3. 実際のフィルタリング例
フィルタ用のコードはJavaで書きます。
trueを返す条件を設定することで、フィルタが実現されます。
いくつかの例を以下に示します。
```:HTTPステータスコードが404のレスポンス
return requestResponse.response().statusCode() == 404;
```
```:HTTP/1.1 を利用しているレスポンス
return requestResponse.response().httpVersion().contains("HTTP/1.1");
```
```:リクエストから最初のレスポンスまでが5000msより大きいログ
return requestResponse.timingData().timeBetweenRequestSentAndStartOfResponse().toMillis() > 5000;
```
```:特定のhost(例ではexample.com)かつUser AgentがWindowsのリクエスト
var uaHeader = requestResponse.request().headerValue("User-Agent");
var host = requestResponse.request().headerValue("host");

if (uaHeader.contains("Windows") && host.equals("example.com")){
    return true;
}
return false;
```






Burpのエディタでオブジェクトを入力すると、使えるメソッドも教えてくれます。たとえば、requestResponse.response()には、containsやcookieValue、hasHeaderなどがあります。適宜条件に合うようにコードを作成をしてください。
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88603/8581104b-5548-24dd-7630-e4ebd47a0848.png)



### 4. 使ってみての感想
フィルタをコードで表現できるので、様々な条件でフィルタができるようになり、
効率的なログの探索がbambdasで可能になったと思いました。
また、抽出だけでなく特定の条件にあったログのハイライト等もできるので色んなことができそうです。
例えば以下は、PortSwiggerのGithubリポジトリに載っているスニペットですが、
Loggerの表示にツール別（Scanner, Proxy, Repeaterなど）のハイライトをつけることもでき、これによって視認性があがりそうです。
(引用元)　https://github.com/PortSwigger/bambdas/blob/main/Logger/View/HighlightToolType.bambda
```:Loggerの表示にツール別（Scanner, Proxy, Repeaterなど）のハイライトをつける
/**
 * Highlights messages according to their tool type.
 * @author ps-porpoise
**/
var highlights = Map.of(
        ToolType.TARGET,     HighlightColor.RED,
        ToolType.PROXY,      HighlightColor.BLUE,
        ToolType.INTRUDER,   HighlightColor.CYAN,
        ToolType.REPEATER,   HighlightColor.MAGENTA,
        ToolType.EXTENSIONS, HighlightColor.ORANGE,
        ToolType.SCANNER,    HighlightColor.GREEN,
        ToolType.SEQUENCER,  HighlightColor.PINK
);

requestResponse.annotations().setHighlightColor(
        highlights.getOrDefault(requestResponse.toolSource().toolType(), HighlightColor.NONE)
);

return true;
```
結果：
![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88603/0c8dc30f-a0e9-2320-7014-bcca8ce2e8cb.png)

Burpの利用者にとって、作業の効率化も図れる機能になりそうで１度触って活用してみる価値はあるのかと思いました。以上です！

### 5. 参考
- Introducing Bambdas
https://portswigger.net/blog/introducing-bambdas
- The future of Bambdas
https://portswigger.net/blog/the-future-of-bambdas
- PortSwigger/bambdas
https://github.com/PortSwigger/bambdas