【悪用ダメ】簡単★パスワードクラッキング

#初めに

どうも、クソ雑魚のなんちゃてエンジニアです。

皆さんこんな経験ありませんか？
「あああ！このZipファイルのパスワード忘れた！！わっかんね！どうやって開こう！！」

そんな皆さんにこの記事を読んでいただき
「諦め....ないぞ！パスワードクラッキングだ！！（いや違うか？？）」
といったマインドを持っていただけるように記載します。

今回はお手持ちのWindows環境で簡単にパスワードクラッキングできるツールをご紹介いたします。
Kali Linuxという難しい環境は使いません。皆さんのビジネス環境は大体Windowsだと思いますので。

___※悪用するのはやめてください。あくまで社会への貢献のためにこれらの技術を使用してください。法に触れるので。___

#目次

+ パスワードクラッキングの攻撃手法
    + ブルートフォース攻撃
    + リスト型攻撃
+ 使用するツール紹介
    + John the Ripper
    + Hashcat
+ 環境構築
    + John the Ripperダウンロード
    + Hashcatダウンロード
    + パスワードリストファイル入手
+ パスワードクラッキング実践
+ まとめ
+ 参考

#パスワードクラッキングの攻撃手法
実際にパスワードクラッキングを行う前に、よくハッカー（クラッカー）が用いるパスワードクラッキングの手法を大きく２つ紹介します。

##ブルートフォース攻撃
パスワードを「aaa, aab, aac, ...」と総当たりで攻撃していくだけの単純な作業。
パソコンで高速に動かせばそのうち何とか当たるやろくらいの攻撃です。

##リスト型攻撃
よくユーザが使用するパスワードのリスト（password, Pass123, などなど）を用意して順々に試していくだけの単純な作業。
上記のブルートフォースよりはいい手順ですね。

今回はこちらの手法でパスワードがかかったZipを解析していきます。


#使用するツール紹介

|John the Ripper|Hashcat|
|---|---|
|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/e8dfaf22-d4e3-1daa-1314-0b73d2cf797b.png" width="372px" >|![XR0uNrj3_400x400.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/dba977bb-0576-1672-9cd2-c891e090f9ca.jpeg)|



##John the Ripper
Linux環境でよく使用されるパスワードクラッキングツールですね。「/etc/passwd」、「/etc/shadow」あたりのファイルをクラッキングしていくツールとして有名な？気がします。
よくmedusaあたりのツールと比較されたりするのですが、ユーザを指定するmedusaと違い、IDとパスワードを上記ファイル達から根こそぎ取れることが利点です。
（要するに不正アクセス後のクラッキングツールなのでmedusaとは扱うフェーズが違いますが）

今回はこのツールに含まれているパスワードハッシュタイプ抽出ファイルの「___zip2john.exe___」を使っていきます。

##Hashcat
ハッシュを復元するツールですね。パスワードクラッキングツールというよりはハッシュ値を解読していくツールになります。
主要な暗号化アルゴリズム（SHA128やAES256、MD5など）の解読機能を有しているので便利ですね。

上記「___zip2john.exe___」で抽出したハッシュを解析するツールです。

#環境構築
##John the Ripperダウンロード
まずはJohn the Ripperを以下のOpenWallからダウンロードします。
「Download the latest John the Ripper jumbo release (release notes) or development snapshot:」の項目から自身にあったものをダウンロードしてください。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/42c3e144-374a-7e5b-9346-ce93e4f3cc80.png)

+ [OpenWall：John the Ripperダウンロード](https://www.openwall.com/john/)

ダウンロードできれば解凍を行い、好きなフォルダ階層へ格納してください。
※cmdで直接操作することになるので扱いやすい階層が望ましいです。

##Hashcatダウンロード
次にHashcatを以下のサイトからダウンロードします。
「hashcat binaries」の「Download」項目からダウンロードできます。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/999ac295-bc40-0f7a-008e-3499990b62e3.png)

+ [Hashcatダウンロード](https://hashcat.net/hashcat/)

こちらも同じくダウンロードできれば解凍を行い、好きなフォルダ階層へ格納してください。
※cmdで直接操作することになるので扱いやすい階層が望ましいです。

##パスワードリストファイル入手
John the ripperには「password.lst」というリストファイルがすでに用意されているのでそちらを使っても大丈夫ですが、折角なのでネットからパスワードリストを拾ってきちゃいましょう。
以下のリンクから「rockyou.txt」のパスワードリストを入手しましょう。

+ [パスワードリストファイルダウンロード](https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt)

ダウンロードできれば、好きなフォルダ階層へ格納してください。
※cmdで直接操作することになるので扱いやすい階層が望ましいです。
※ちなみにこのリストは以下の経緯で流出したパスワードです。
>2009年にソーシャルネットワークアプリを提供するRockYou のデータベースが侵害されました。この事件をベースに作られたrockyou.txtには、32,603,388アカウントで使用される14,341,564個の一意のパスワードが含まれています。

#パスワードクラッキング実践
cmdを開きましょう。まず保存したJohn the Ripperのファイル階層にある「zip2john.exe」をZipファイルに対して実行しましょう。
※今回は解読対象のZipファイルを「pass.zip」にとしています。

```powershell
C:\Users\... > ...\john-1.9.0-jumbo-1-win64\john-1.9.0-jumbo-1-win64\run\zip2john.exe pass.zip
ver 2.0 pass.zip/pass.txt PKZIP Encr: cmplen=23, decmplen=11, crc=4A17B156
pass.zip/pass.txt:$pkzip2$1*1*2*0*17*b*4a17b156*0*26*0*17*4a17*bca2*c67cba4787bb4f2d85e71cbc1bc7b702a8ef3a77c01bb8*$/pkzip2$:pass.txt:pass.zip::pass.zip
```

続いてこのハッシュ値をechoコマンドで保存します。
※今回は保存先のファイルを「ziphash.txt」としています。

```powershell
C:\Users\... > echo $pkzip2$1*1*2*0*17*b*4a17b156*0*26*0*17*4a17*bca2*c67cba4787bb4f2d85e71cbc1bc7b702a8ef3a77c01bb8*$/pkzip2$ > ...\ziphash.txt
```

お次はハッシュ解析です。「hashcat-6.2.4」ファイル配下の「hashcat.exe」を実行しましょう。
各オプションを説明すると、`-m`で暗号化アルゴリズムの指定（今回は PKZIP (Uncompressed)）、`-a`で攻撃方法の選択（今回はリスト型攻撃）です。
※ここら辺のオプションは` > hashcat.exe -h` で調べることが出来ます。

```powershell
C:\Users\...\hashcat-6.2.4 > hashcat.exe -m 17210 -a 0 ziphash.txt ...\rockyou.txt
```

以下出力

```powershell
hashcat (v6.2.4) starting

Successfully initialized NVIDIA CUDA library.

Failed to initialize NVIDIA RTC library.

* Device #1: CUDA SDK Toolkit not installed or incorrectly installed.
             CUDA SDK Toolkit required for proper device support and utilization.
             Falling back to OpenCL runtime.

* Device #1: WARNING! Kernel exec timeout is not disabled.
             This may cause "CL_OUT_OF_RESOURCES" or related errors.
             To disable the timeout, see: https://hashcat.net/q/timeoutpatch
OpenCL API (OpenCL 1.2 CUDA 11.2.66) - Platform #1 [NVIDIA Corporation]
=======================================================================
* Device #1: GeForce GTX 1660, 4928/6144 MB (1536 MB allocatable), 22MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Optimizers applied:
* Not-Iterated
* Single-Hash
* Single-Salt

Watchdog: Temperature abort trigger set to 90c

Host memory required for this attack: 386 MB

Dictionary cache built:
* Filename..: rockyou.txt
* Passwords.: 14344391
* Bytes.....: 139921497
* Keyspace..: 14344384
* Runtime...: 1 sec

$pkzip2$1*1*2*0*17*b*4a17b156*0*26*0*17*4a17*bca2*c67cba4787bb4f2d85e71cbc1bc7b702a8ef3a77c01bb8*$/pkzip2$:password123

Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 17210 (PKZIP (Uncompressed))
Hash.Target......: $pkzip2$1*1*2*0*17*b*4a17b156*0*26*0*17*4a17*bca2*c...kzip2$
Time.Started.....: Fri Sep 17 23:48:50 2021 (0 secs)
Time.Estimated...: Fri Sep 17 23:48:50 2021 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 63947.5 kH/s (4.83ms) @ Accel:1024 Loops:1 Thr:64 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 1441792/14344384 (10.05%)
Rejected.........: 0/1441792 (0.00%)
Restore.Point....: 0/14344384 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: 123456 -> niika7
Hardware.Mon.#1..: Temp: 36c Fan: 38% Util:  3% Core:1575MHz Mem:4001MHz Bus:16

Started: Fri Sep 17 23:48:46 2021
Stopped: Fri Sep 17 23:48:52 2021
```

少し読みにくいですがパスワードが`password123`と表示されているのがわかると思います。
これで開かなかったZipファイルも開けますね！！

ちなみに実行環境としてGPUは「GeForce GTX 1660」を使っていて、6秒ほどで解析が完了していることがわかります。
まぁ簡単なパスワードならこんなものかなと思います。

#まとめ
第二回の投稿はいかがだったでしょうか？
よく忘れがちなZipファイルのパスワードをパスワードクラッキングを行って解析（力技）する手法を紹介しました。
今回もセキュリティエンジニアの皆さんの助けになればなと思います。

※こうなる前にパスワードはしっかり覚えておきましょうね（笑）


#参考
[パスワード保護されたPDF文書を総当たり攻撃で復号する](https://qiita.com/v_avenger/items/443358029c333a4a6d13)