Windows10上のBurp SuiteとNox Playerで通信をキャプチャする環境を作ってみる

# はじめに

いまさら(2023年)ながら、まとめてみる

# 各種ツールのインストール

- [Burp Suite Community Edition](https://portswigger.net/burp)
- [OpenSSL](https://slproweb.com/products/Win32OpenSSL.html) for [Windows](https://slproweb.com/products/Win32OpenSSL.html)
- [NoxPlayer](https://jp.bignox.com/)

インストール自体はさすがに省略 m(_ _)m

今回のバージョンは、

 - Windows10 Professional
 - Burp Suite Community Edition 2023.10.1.1
 - Win64 OpenSSL v3.1.3
 - Nox Player v7.0.5.8(2023/09/11) (Android9相当!?) (ダウンロードしたらv7.0.5.9だった)

# 認証局証明書の抽出

Burpから、証明書をExportする

特に秘密鍵は必要ないので、DER形式で抽出

![cacert01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/33212641-e7a9-5fcb-2398-ca83f29203e8.png)

# 証明書の編集

## DER形式からPEM形式へ変換

OenSSLのコマンドでフォーマットを変換

```cmd
openssl.exe x509 -inform DER -in cacert.der -out cacert.pem
```

## 証明書ファイル名の書き換え

これはどうも、OpenSSLの仕様のようだ。

「<b>&quot;ハッシュ値&quot;.0</b>」というファイルでないとダメのようだ。

```
C:\temp>openssl.exe x509 -inform PEM -in cacert.pem -subject_hash_old
9a5ba575
-----BEGIN CERTIFICATE-----
～～～～～省略～～～～～

C:\temp>move cacert.pem 9a5ba575.0
        1 個のファイルを移動しました。
```

Link
・[OpenSSLでSSLサーバ証明書の検証をする方法](https://qiita.com/aqmr-kino/items/d18c4a6fb35f09815a2b)

# NoxPlayerの設定(ルート化)

起動して、設定画面からAndroidエミュレータをRoot化できる

![cacert03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/ec24dcd9-11e3-501f-db87-8d43afe19617.png)

<font color="#ff0000"><b>GUIで設定できるのはとても便利だ♪</b></font>

# NoxPlayerへコピー

## NoxPlayerへコピー(D&D)

証明書ファイルをドラッグ・アンド・ドロップで、NoxPlayer内へコピーされると思う。
(コピー先のディレクトリパスは記憶しておくこと)

## NoxPlayerへコピー(adb.exeの場所)

Nox Playerのインストール先(**C:\Program Files (x86)\Nox\bin**)に**adb.exe**がある

```
C:\Program Files (x86)\Nox\bin>dir adb*
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は A079-921A です

 C:\Program Files (x86)\Nox\bin のディレクトリ

2023/09/29  10:58           395,091 adb.7z
2023/09/29  10:59         1,503,072 adb.exe
2023/09/29  10:59            97,792 AdbWinApi.dll
2023/09/29  10:59            62,976 AdbWinUsbApi.dll
               4 個のファイル           2,058,931 バイト
               0 個のディレクトリ  36,198,649,856 バイトの空き領域
```

## NoxPlayerの証明書フォルダへコピー

<b>D&amp;D</b>では、<b>/system/etc/security/cacerts/</b> 以下にはコピーできないようなので、<b>adb.exe</b>コマンドを使って、コピーする

↓のは、<b>D&amp;D</b>でコピーしたファイルが <b>/sdcard/Pictures</b> 以下にコピーされてしまったので、それを<b>/system/etc/security/cacerts/</b>以下にコピーする

```
C:\Program Files (x86)\Nox\bin>adb shell
d2q:/ # mount -o rw,remount /system
d2q:/ # mv /sdcard/Pictures/9a5ba575.0 /system/etc/security/cacerts/
d2q:/ # chmod 644 /system/etc/security/cacerts/9a5ba575.0
d2q:/ # reboot
```

複数のAndroidデバイスを接続していると、「デバイスIDを指定してくれ～」とか面倒なので、エミュレータ1台起動するだけにしておいた方が無難だと思う。

## NoxPlayerの再起動

adbコマンドの "reboot" コマンド後は仮想キーボードが無反応になるようなので、NoxPlayer自体を再起動した方がいいかもしれない。

# Burp Suite を外部からも接続できるようにする 

通常は<b>127.0.0.1</b>にバインドされていて、ローカルホストからしか接続できないので、外部ホストからも接続できるように<b>0.0.0.0</b>にバインドさせる

![cacert02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/6ae6683e-541b-2d79-fe70-55a402f65450.png)

キャプチャ画像にはバインドポート番号が空欄だけど、ここにはポート番号(例えば8080)を入れておくように。

# NoxPlayerのProxy設定

Burpが動作している端末のIPアドレスとポート番号は事前に調べておく。

それを

![cacert03a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/1cdc0450-991b-dde0-d0bc-ba21c2f39567.png)

- Tools→設定→ネットワークとインターネット→Wi-Fi→&quot;Wi-Fi名&quot;→詳細設定→&quot;編集ボタン&quot;→プロキシ

に記述する

# テスト

## ブラウザで動作テスト

Nox Playerに標準でインストールされているWebブラウザで、Proxy経由でhttps通信を覗けるかテストする

## アプリの動作テスト(AndroidStudio/Java)

AndroidStudio/Javaで書いたWebページを取得するだけのテスト用のアプリがあるので、実際にトラップできるかをテストする

[sWebGetAndroid](http://rocketeer.dip.jp/sanaki/free/android/afree04.htm) ([GooglePlay](https://play.google.com/store/apps/details?id=jp.dip.rocketeer.swebgetandroid&gl=US))
(レスポンスを表示するタイミングはすごい遅いので、待ち時間があるよ)


さすがに「<b>Force NoProxy</b>」を、チェックするとトラップできない。<font color="#ff0000"><b>(当たり前か...orz)</b></font>
→
<b>開発業者に[java.net.HttpURLConnectionクラス](https://docs.oracle.com/javase/jp/8/docs/api/java/net/HttpURLConnection.html)のProxyに関するプロパティはいじらないで</b>と言っておく必要があるかもしれない

## アプリの動作テスト(Monaca)

[Monaca(Cordva)](https://ja.monaca.io/)で書いたWebページを取得するだけのテスト用のアプリがあるので、実際にトラップできるかをテストする

[sWebGetMonaca](http://rocketeer.dip.jp/sanaki/free/android/afree02.htm) ([GooglePlay](https://play.google.com/store/apps/details/sWebGetMonaca?id=jp.dip.rocketeer.sWebGetMonaca&gl=US))

Webブラウザベース(WebView)なので、Webブラウザでトラップできれば、こちらでもトラップできるとは思う...

## アプリの動作テスト(Xamarin)

Xamarinで書いたWebページを取得するだけのテスト用のアプリがあるので、実際にトラップできるかをテストする

[sWebGetXamarin](http://rocketeer.dip.jp/sanaki/free/android/afree06.htm
) ([GooglePlay](https://play.google.com/store/apps/details?id=jp.dip.rocketeer.swebgetxamarin&gl=US))

<font color="#ff0000"><b>うん!? 「NoProxy」でトラップできないのは当然として、「Default」でもトラップできない...</b></font>

<b>開発業者がXamarinで作っていないように</b>とお祈りしておく必要があるかもしれない

## アプリの動作テスト(.NET MAUI)

<font color="#ff0000"><b>まだ、テスト用アプリを書いていない...orz</b></font>

## アプリの動作テスト(Flutter)

<font color="#ff0000"><b>まだ、テスト用アプリを書いていない...orz</b></font>

# Fiddlerの場合

## 認証局証明書の抽出

Fiddlerの場合、「Tools」→「Options」メニュー→「HTTPS」タブの「Actions」ボタンの「Export Root Certificate to Desktop」を選択すると、デスクトップに、CER形式の証明書がエクスポートされる

![fiddler.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/f46369b9-3052-40d4-c130-b5ac3fc0b223.png)

デスクトップに「FiddlerRoot.cer」というファイルができる

![fiddler1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/47cfd1e1-2562-3c8c-2659-168306464559.png)

## 証明書の編集

CER形式もDER形式でよいようだ

OenSSLのコマンドでフォーマットを変換

```cmd
openssl.exe x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.pem
```

これ以降は、Burpと同じ手順です。

# Zapの場合

## 認証局証明書の抽出

OWASP ZapもCER形式のようだ。

![zap-cer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/a995afed-5ff8-cf9c-16a5-de226985a638.png)

なので、Fiddlerと同じ手順です。

なので、これ以降は、Burpと同じ手順です。

# Link

- [エミュレーターとBurp SuiteでAndroidアプリのHTTP通信をキャプチャする(Android7.0以上対応)](https://qiita.com/howmuch515/items/c42de70ecddb039cb179)
- [アプリの通信内容を確認する(Android7以降)](https://kapiecii.hatenablog.com/entry/2020/03/06/083000)
- [Windows 10 + Burp Suite で Android 8.0 のアプリの通信を取得する方法](https://qiita.com/toubaru/items/a3427bc4b4e9da33c12f)
- [Burp Suite Professionalと連携するようAndroid端末を設定する](https://burp-resources-ja.webappsec.jp/Documentation/burp/documentation/desktop/mobile/config-android-device.html)
- [バージョン99以降のChromeブラウザの設定](https://httptoolkit.com/blog/chrome-android-certificate-transparency/)
- [Configuring Burp Suite With Android Nougat](https://blog.ropnop.com/configuring-burp-suite-with-android-nougat)
- [Android端末にインストール可能なDER形式の自己証明書作成](https://qiita.com/_takeshi_24/items/eb9cdb978e143284de7c)
-  [モバイルアプリの検証環境をつくってみた①](https://cysec148.hatenablog.com/entry/2021/12/01/184320)
-  [モバイルアプリの検証環境をつくってみた②](https://cysec148.hatenablog.com/entry/2021/12/02/214215)
- [AndroidへのBurpのCA証明書のイントールを途中までためしてみた](https://cysec148.hatenablog.com/entry/2021/12/04/183547)
-  [NoxPlayerでモバイルのテスト環境を構築してみた](https://cysec148.hatenablog.com/entry/2021/12/05/212213)
- [OWASP ZAP で Android の Web通信をインターセプトする方法](https://www.pupha.net/archives/3980/)
- [PKCS#12（pfx）形式から、秘密鍵、公開鍵形式への変換方法](https://knowledge.digicert.com/ja/jp/solution/SO28762.html)
- 後ほど

後で追記していく...

# 以上