Burp MCP Serverを使い、自然言語でBurpを操作する 脆弱性診断を自動化したい

## これは何?

最近流行りのMCP(Model Context Protocol)使うといろんな操作をAIエージェントにやってもらえるようになる。

今回は脆弱性診断等で使用される[Burp Suite](https://portswigger.net/burp)を[Burp MCP Server](https://portswigger.net/bappstore/9952290f04ed4f628e624d0aa9dccebc)を使って自然言語で操作してみた。

脆弱性診断業務の一部が自動化できると嬉しいので，良いアイデアをお持ちの方がいればぜひコメントお願いします。

---

## 環境

- ホストOS: Windows 11(Ubuntuでも動作確認まではやりましたが，業務利用を見据えてWindowsをメインに記載します)
- Burp Suite Community Edition v2025.3.3
- MCP Clientト: [Roo-Code](https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline)
- MCP Server: [Burp MCP Server](https://portswigger.net/bappstore/9952290f04ed4f628e624d0aa9dccebc)

:::note info
Roo-Codeで試しましたが，お得に試したい
GitHub Copilot使用者向けの設定も[おまけ](#おまけ)に記載しています。
:::

---

## セットアップ

### Burp Suiteのインストール

- [公式](https://portswigger.net/burp/releases/professional-community-2025-3-3)からインストールできる

### BApp StoreからBurp MCP Serverをインストールする

ExtensionsタブからBApp Storeを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/068e61ae-03e4-4cc7-9adf-d229dca94a11.png)

「MPC」などで検索してインストールする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/c6379a5d-a559-4c83-83ad-78837edfee55.png)

MCPというタブが追加されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/5adb8080-80f9-46ab-8d79-a78a5853cc9c.png)


:::note info
[公式リポジトリ](https://github.com/portswigger/mcp-server)をクローンしてgradleでビルドして.jarを作成する方法も可能。
:::

:::note warn
割とMCP Client側でMCP Serverを起動するパターン(STDIO接続)が多く、自分は最初STDIO接続でMCP ClientとBurp MCP Serverを接続しようとしていた。
だが、Burp MCP Serverの場合はBurp側でサーバが起動されている(SSE)なのでMCP Client側で接続先を指定するだけで使用できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/cc03baf2-b6ba-467c-8276-fb03c1de8c3c.png)

そのため、後述するMCP Clientの設定では起動コマンドを設定していない。
[portswiggerのmcp-server](https://github.com/portswigger/mcp-server)等を見ると起動コマンドが例で書いてあったが自分はつかわなかった。
:::

### VS Code(MCP Client)の設定

1. [Roo-Code](https://marketplace.visualstudio.com/items/?itemName=RooVeterinaryInc.roo-cline)をインストールする
2. AnthoropicのAPIキーをセットする。[参考](https://qiita.com/sigma_devsecops/items/7c40266160262ecd5ed1#vscode%E3%81%AE%E8%A8%AD%E5%AE%9A)
3. mcp.jsonを記載する [GitHubのissue](https://github.com/PortSwigger/mcp-server/issues/6)が参考になった
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/84ed542d-d64d-44c5-a4e3-22b000d510d6.png)
  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/74773418-6f09-4f33-807d-ace0355100e3.png)
  
  ```json
  {
    "mcpServers": {
      "burp": {
        "url": "http://localhost:9876/sse",
        "disabled": false,
        "autoApprove": []
      }
    }
  }
  ```
  
:::note info
設定が間違っている等でうまく接続できないと赤文字でエラーがでる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/09342148-88f1-4bfc-85f3-fe1b14e8d1a3.png)
:::

---

## 動作確認

### とりあえず，repeaterを使ってみる

Roo-Codeからタスクを依頼してみる。MCPを使わずに解決されると困るのでMCPを使うように明記した。
(システムプロンプトに記載してもよい)

> Burp MCP Serverを使ってrepeaterにgoogle.comへアクセスする設定をいれてください。ただし，User-Agentをsigmaにして

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/1cc14649-8d31-4552-aa61-16f41cc1c185.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/037c139e-e4ea-484d-aeb6-a9cfe677c6c0.png)

---

## 実務での使いみちを検討

### Burpの設定変更

MCPタブからEnable tools that can edit your configにチェックするとコンフィグをいじれるようになるらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/1336ca42-ad72-4e8e-9951-d863ace3abcc.png)

> BurpのMCP Serverを使ってproxyのportを8080から8008に変更して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/cdb8ad7e-114b-43d9-8e0e-5d92ef9f0e5e.png)

おおお!ちゃんとできた。

#### Scope設定の自動化

実務で脆弱性診断をする場合，誤って余計なところにリクエストが飛ばないようにScopeを設定し，指定したFQDN以外へ通信が飛ばないように設定することがある。
数が多い時などはAIにやってもらえると嬉しいかも。

例: 「以下のurlをscopeに設定してください。urlは以下です」

#### 正しい設定ができているかのダブルチェック

Burpの設定ファイルをチームで共有し，設定を共通化するのも良いが，疎通確認のために一時的に設定を変更することが自分はよくある。
自分はチェックするということが苦手なので，AIエージェントにダブルチェックしてもらうのは結構良いのではないかと思っている。

> Burp MCPを使って設定確認を行ってください。
> 1. Drop all out-of scope requestsにチェックがついているか
> 2. proxyのportが8008か
> 3. scopeが設定されているか
> 違反しているものがあれば教えて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/e1aaf65d-a31e-4eb2-bfd4-512aeb1318d0.png)

#### 設定ミスを探す

しょうもない設定ミスのせいで通信が飛ばなくなったと誤解してあれこれ試してしまうことがある。
(最近あったのだと，Intruderをオンにしているのを忘れていたとか)
こういったイージーミスに時間をかけてしまうのは勿体ないので，素直にBurp MCPに調査を依頼しよう

> example.comにBurp経由で疎通できないのですが，設定ミス等ありますか?

### repeaterから連続してリクエストを送る

Postmanでやれよと言われたらそれまでだが，repeaterを使って連続してリクエストを飛ばせると診断の効率があがるのではないだろうか。

ユースケースは以下のような状況を想定している。

1. カートに商品を追加
2. カートの商品を決済

この場合，カートに商品を追加を実施しない限り，カートの商品を決済するリクエストの検証をすることができない。
BurpのRepeater機能は連続して別のリクエストを飛ばすような仕組みはないので(Extensionsであるかも)診断したい対象に対して前処理が多いとかなり手間に感じる。
このような状況では，Postmanを使って一連のリクエストを一括で送信できるようにしていたが，スクリプトを用意するのが地味に面倒だったので，Burp MCPを使ってやれるなら工数削減できそうである。

:::note info
リクエストは送ることができるが，http historyやRepeaterのresponseにはログが残らない。なぜなら，MCP ServerはBurp自体を操作しているのではなく，Burp APIを使ってBurpを操作しているためである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/8af2695c-7de0-469d-856f-4180bb73554e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/fbe8bbd7-3343-4bf0-9221-cb5239260f2f.png)

だが，変わりにLoggerタブにログが出力されているので証跡が残らないわけではない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/454a0ed8-1108-47b8-b240-ceebf4fa6709.png)
:::

### 雑な疎通確認

これもBurpでやらなくてもいい案件な気はするが，
診断対象のurl一覧にアクセスして疎通できるかの一次切り分けをやってもらうと楽かもしれない。

> 以下のurlにアクセスして，アクセスできるか確かめてください。対象は以下です。一部のurlにはログイン後しかアクセスできないので，アクセスできなかった部分はログイン後に再アクセスしてみてください。

### リクエストを通すのに不要なパラメータを削る

AIを使わなくても機械的にできそうとは思いつつ。

リクエストに含まれるパラメータのうち，リクエストが成功するのに不要なパラメータを削っておくとパラメータ改ざんが楽になりそう

> このリクエストに含まれるパラメータを1つずつ削除してリクエストを再送してみてください。再送した結果，レスポンスが200 OKでなくなった場合にはそのパラメータを再度設定しなおしてください。

---

## 感想等

Burp MCP Serverでしかできないわけでない脆弱性診断自動化案しか現状思いついていないが、自動化のシステムを作る余力がない場合もあるだろう。
雑にMCPで自動化してみて、効果が感じられたら真面目に自動化するみたいな進め方をする上でBurp MCP ServerはいわゆるPOC的に使えると感じた。

また，設定周りの変更など場合によっては手動でやるよりも早いので今後も良い使いみちを探したい。

---

## おまけ

GitHub CopilotのMCP機能を使って同じことをやる方法を書いておく。
API代を気にせずに試したい人向けの設定を記載しておく。


1. CopilotをAgentモードにする
2. settings.jsonに以下を追加する

    ```json
      "mcp": {
        "servers": {
          "burp": {
            "type": "sse",
            "url": "http://127.0.0.1:9876/sse",
          }
        }
      },
    ```
3. CopilotのChat欄にMCPのタブが追加されているのでクリックすると使用可能なツールが増える。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/f79aa67d-5239-4fdb-be07-ba9dd6f8b5c3.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/fc5c31c8-aab3-4328-9532-eb30e2cc6bb0.png)
4. outputでエラーがでてなさそうなら使える。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/82bee79d-dde3-4765-adf7-7eaee5c1eabe.png)

一応動くが、Roo-Codeの方が出力はみやすいと自分は感じる。