MacでもJohn the Ripperを使いたい
作成日時: 2022/12/10
更新日時: 2022/12/19
# はじめに
Mac用の[John the Ripper](https://www.openwall.com/john/)を使うおうとしたら無駄に苦戦してしまったのでインストールから動作確認までの手順を記事にしました。
# 環境
macOS Monterey 12.6(Apple M1チップ)
Homebrew 3.6.14
John the Ripper 1.9.0-jumbo-1 [darwin21.6.0 64-bit arm ASIMD AC]
# homebrew か zip か
MacでJohn the Ripperを使うなら、
- [homebrew](https://formulae.brew.sh/formula/john-jumbo) 経由でインストールする
- [公式サイト](https://download.openwall.net/pub/projects/john/contrib/macosx/) のzipを直接落とす ※トップページの下の方にあるリンクからも飛べます
この2択になると思いますが、公式のはバージョンが古かった(2022/12/9現在)ので、homebrewでのインストールをお勧めします(zipの方でも動作確認は出来ました)。
# インストール
homebrew経由でインストール。
```
brew install john-jumbo
```
実行結果。
```
(略)
==> Pouring john-jumbo--1.9.0_1.arm64_monterey.bottle.tar.gz
==> Caveats
zsh completions have been installed to:
/opt/homebrew/share/zsh/site-functions
==> Summary
🍺 /opt/homebrew/Cellar/john-jumbo/1.9.0_1: 446 files, 75.8MB
(略)
```
Summaryを見ると`/opt/homebrew/Cellar/john-jumbo/1.9.0_1`にインストールされていることがわかります。その中の`bin`や`share/john`を見れば色々なコマンドが入っているのが確認できると思います。
## johnパス確認
```
john --help
```
※ 最初の実行時はホームディレクトリ(`/Users/ユーザー名`)に`.john`フォルダが生成されます。
実行結果としてバージョンや`john` コマンドのオプション一覧が表示されていれば問題ありません。`command not found`であればフォルダにパスを通すなりパスが通ってる場所にシンボリックリンクを貼るなりしましょう。
# 解析
パスワード付きzipを生成し、そのパスワードを総当たり攻撃で解析してみます。
解析の流れとしては、
1. zipファイル情報から暗号化されたパスワードを抽出(zip2john)
2. パスワードの総当たり攻撃(john)
となります。
## 事前準備(zip生成)
```sh
# 作業ディレクトリ作成
~ % mkdir johnTest
~ % cd johnTest
# zip化するファイル作成
johnTest % touch data.txt
```
秘密にしたいデータをテキトーに書き込みます。

鍵付きのzipファイルを生成するには`zip`コマンドの`-e`オプション(encrypt)を使います。
```
# zip -e 新規zipファイル名 圧縮するファイル名
zip -e data.zip data.txt
```
パスワードを2回聞かれるので`pass123`とかで設定しましょう(なんでもいいですが複雑にすると解析に時間かかります)。
これで`data.zip`が生成されました。開こうとするとパスワードを要求されると思います。
## zipパスワード解析
ここからがメインの解析です。
### zip2john
`zip2john`コマンドは、zipから暗号化されたパスワードの情報を取得します。
#### zip2johnにパスを通す
先ほどの`john`コマンドは`インストール場所/bin/`にありますが、
`zip2john`は`インストール場所/share/john/`にあります。
テキトーな場所で`zip2john`コマンドを叩いても`command not found`になるので、パスを通しておきましょう。
パスについては詳しく説明しませんが、`~/.bashrc`や`~/.zshrc`内に`export PATH="インストール場所/share/john:$PATH"`を追記します。
今回であれば、
```
export PATH="/opt/homebrew/Cellar/john-jumbo/1.9.0_1/share/john:$PATH"
```
を追記してターミナルを再起動します。
#### zip2johnパス確認
```
zip2john
```
と叩いて`command not found`ではなくUsageなど表示されていればパスは通っています。
#### zipファイルから暗号化されたパスワードの情報だけ取り出し、ファイルに書き出す
```
# zip2john zipファイル名 > 暗号化された文字列だけ記載した新規ファイル名
zip2john data.zip > passwordInfo.txt
```
一応書き出したファイルの中身見ると暗号化されてそうな謎の文字列が入ってますね。

### 解析実行
ここまで来ればあとは`john`に解析してもらうだけです。
`john`で出来る解析は[いくつかのモード](https://www.openwall.com/john/doc/MODES.shtml)が用意されていますが、今回は`incremental`(総当たり/ブルートフォース)で解析してみましょう。
```
john --incremental=ASCII passwordInfo.txt
```
`incremental=`の後ろの`ASCII`は、解析で使用する文字列パターンです。例えば`ASCII`でなく`Digits`を指定すれば数値だけに絞って総当たりを試します。
数秒~数分待つと以下のように結果が表示されます。
```
johnTest % john --incremental=ASCII passwordInfo.txt
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
pass123 (data.zip/data.txt)
1g 0:00:00:02 DONE (2022-12-10 02:04) 0.3906g/s 2080Kp/s 2080Kc/s 2080KC/s paniqi1..pasa192
Use the "--show" option to display all of the cracked passwords reliably
Session completed
johnTest %
```
真ん中あたりに設定したパスワードが書いてあります。
```
pass123 (data.zip/data.txt)
```
パスワード解析完了です!
# 参考文献
- [ZIPファイルのパスワードを総当りで解析する【CTF】](https://lonesec.com/2021/12/07/zip_password_security/)
CTF練習サイト(CELTF)の解説記事です。この解説見てJohn the Ripper入れようとして苦戦したって流れです。
- [john-jumbo](https://formulae.brew.sh/formula/john-jumbo)
john-jumboのhomebrewリンク
- [John the Ripper](https://download.openwall.net/pub/projects/john/contrib/macosx/)
John the Ripper公式サイト