Burp Suiteをhomebrew-caskでインストール出来るようにした話

なんでもセキュリティ Advent Calendar 2016 18日目の記事です。
読み返すとセキュリティあんまり関係なくなってますが、Burp Suiteの話ということでご容赦頂きたく。

# 本記事の対象者
以下に当てはまる人に関係ある話になります。

- Burp Suite Free Editionユーザ（今後Burp Suiteと書いた場合はFree Editionのつもりで書いてます）
- Macユーザ
- homebrewユーザ

# 概要
セキュリティ界隈の人（特にWeb系）であれば、Burp Suiteを使っている人は多いかと思います。
Burp Suiteは最近開発が盛んで更新が多いのですが、アップデートするためにはMacの場合、dmgファイルを落としてきて自分でインストールして...という手順が必要です。
面倒くさがりの自分には耐えられなかったので、homebrew-caskでインストールやアップデートできるようにしてみた、という内容です。
この記事をちゃんと読まなくても、Macの人は以下のコマンド打つとBurp Suiteがインストール可能になった、ということだけ知って頂ければ。

```
$ brew cask install burp-suite
```

# 経緯
どういう経緯だったかについてだらだらと書いておきます。Caskの作り方に興味ある人は見て下さい。

dmgファイルのインストールなら[homebrew-cask](https://github.com/caskroom/homebrew-cask/)が使えるのではないかと考えました。
そこでリポジトリを見たら既にBurp Suite用のCask(`burp-suite.rb`)がありました。
https://github.com/caskroom/homebrew-cask/blob/83a77e125a9b0a6913556a4a8706be95407f1881/Casks/burp-suite.rb

これで楽になる！と思って早速使ってみました。

```
$ brew cask install burp-suite
==> Caveats
burp-suite requires Java. You can install the latest version with

  brew cask install java

==> Downloading https://portswigger.net/Burp/Releases/Download?productId=100&version=1.7.06&type=MacOsx
######################################################################## 100.0%
==> Verifying checksum for Cask burp-suite
To complete the installation of Cask burp-suite, you must also
run the installer at

  '/usr/local/Caskroom/burp-suite/1.7.06/Burp Suite Free Edition Installer.app'

🍺  burp-suite was successfully installed!
```

これはよく見ると、手動でインストーラを実行するように言われています。
つまり、以下の2つの手順のうち、1をやってくれているものになります。
1. dmgファイルのダウンロード
2. Installerの実行

確かにWebページへ行ってdmgを落とす面倒さからは解放されるものの、肝心のインストールの方の手間は省けていません。

そこでburp-suiteのCaskを読んでみました。
すると、以下の行で`installer manual`と書いてあります。
https://github.com/caskroom/homebrew-cask/blob/83a77e125a9b0a6913556a4a8706be95407f1881/Casks/burp-suite.rb#L9

```
...
installer manual: 'Burp Suite Free Edition Installer.app'
uninstall delete: '/Applications/Burp Suite Free Edition.app'
...
```


これはどうやら、公式ドキュメントを読む限りインストールを手動で行うときに使う記法のようです。
https://github.com/caskroom/homebrew-cask/blob/master/doc/cask_language_reference/stanzas/installer.md#installer-manual

ここで諦めかけたのですが、他のアプリはどうしてるのかと調べてみました。
例えばSlackとかはどうなのかと調べたところ、`app`という記法を使っていました。
https://github.com/caskroom/homebrew-cask/blob/c28d61f56d5e0630add9bd38806ab5b1cb3a7cfd/Casks/slack.rb#L14

```
...
app 'Slack.app'
uninstall quit: 'com.tinyspeck.slackmacgap'
...
```

これは単にappファイルを移動してくれるだけのもののようです。
https://github.com/caskroom/homebrew-cask/blob/master/doc/cask_language_reference/stanzas/app.md

dmgの中にappファイルが入ってる場合は`app`記法で良さそうですが、Installerが入っている場合は使えなさそうです。
いよいよ無理かな、と思ったのですが、一応他のCaskをもう少し眺めてみることにしました。
すると以下のようなCaskを見つけました。

```
installer script: 'XAMPP.app/Contents/MacOS/osx-intel',
          args:   ['--mode', 'unattended'],
          sudo:   true
```

これはXAMPPのCaskなのですが、`installer script`という記法が使われています。
これは何だろうと思って調べたところ、Installerを実行してくれる仕組みのようで、まさに今欲しいものでした。
https://github.com/caskroom/homebrew-cask/blob/master/doc/cask_language_reference/stanzas/installer.md#installer-script

MacのInstallerの仕組みをよく知らなかったのですが、どうやら`Contensts/MacOS`の下にインストールスクリプトが置いてある場合があるようです。
そこでBurp Suiteについても調べてみると、実行ファイルが置いてありました。

```
$ file Burp\ Suite\ Free\ Edition\ Installer.app/Contents/MacOS/JavaApplicationStub
Burp Suite Free Edition Installer.app/Contents/MacOS/JavaApplicationStub: Mach-O 64-bit executable x86_64
```

しかし使い方が分からない...とりあえず`-h`でも付けて実行してみるか！と思って適当に実行してみたら、ヘルプ出てきました。

```
$ Burp\ Suite\ Free\ Edition\ Installer.app/Contents/MacOS/JavaApplicationStub -h
2016-12-15 17:04:27.653 JavaApplicationStub[68638:19066191] NEW LAUNCHER
```

![スクリーンショット 2016-12-15 17.04.43.png](https://qiita-image-store.s3.amazonaws.com/0/76501/d13dfe48-cf5c-178d-a80e-4b5d98f579e5.png)

こんなのあるのか...と驚きつつオプションを見ると`-q`というオプションがあります。
これを使ってCask作れそう、と思って色々検証したところ一応インストールできるようになりました。
PR出したらすぐにマージしてもらえました。
https://github.com/caskroom/homebrew-cask/pull/27295

```
$ brew cask install burp-suite
==> Caveats
burp-suite requires Java. You can install the latest version with

  brew cask install java

==> Downloading https://portswigger.net/Burp/Releases/Download?productId=100&version=1.7.14&type=MacOsx
Already downloaded: /Users/teppei.fukuda/Library/Caches/Homebrew/Cask/burp-suite--1.7.14.14&type=MacOsx
==> Verifying checksum for Cask burp-suite
==> Running installer script Burp Suite Free Edition Installer.app/Contents/MacOS/JavaApplicationStub
==> 2016-12-15 17:17:15.707 JavaApplicationStub[47214:19196829] NEW LAUNCHER
==> The installation directory has been set to /Applications.
==> Extracting files ...
==> Finishing installation ...
🍺  burp-suite was successfully installed!
```


# まとめ
Burp Suiteをhomebrew-caskでインストールまでしてくれるようにしました。
今後はコマンド1つで更新してくれるので自分は大分幸せになりました。
自分の検証した範囲では特に問題なかったですが、何か不具合あったらすみません。