John the RipperとHashcatについて、オフラインパスワードクラッキングの性能比較を行うため、Windows+GPU環境でJohn the Ripperを使えるようにしました。
※注意
本記事の内容は犯罪行為を助長するものではありません。サイバー空間の安心・安全な環境を確保する目的にのみ利用し、絶対に悪用しないでください。
端末の環境
今回John the Ripperをインストールする環境は以下のとおりです。
項目 | 内容 |
---|---|
CPU | AMD Ryzen 9 5900X 12-Core Processor |
GPU | NVIDIA GeForce RTX 3080 |
Memory | 64GB |
OS | Windows 11(バージョン 22H2) |
John the Ripperのインストール
John the Ripperのインストール手順は以下のとおりです。
- John the Ripperのダウンロード
- ダウンロードしたファイルの解凍
- OpenCL.dllのコピー(John the RipperにGPUを認識させるために必要)
まずは、John the Ripperの公式サイトから最新版のバイナリ(記事執筆時点の最新は1.9.0-jumbo-1 64-bit Windows binaries)をダウンロードし、任意のフォルダに解凍します。
次にJohn the RipperにGPUを認識させるため、WindowsのOpenCL.dllをJohn the RipperのcygOpenCL-1.dllへ上書きコピーします。
C:\> copy "C:\path\to\john-1.9.0-jumbo-1-win64\run\cygOpenCL-1.dll" "C:\path\to\john-1.9.0-jumbo-1-win64\run\cygOpenCL-1.dll.bak" C:\> copy /Y "C:\Windows\System32\OpenCL.dll" "C:\path\to\john-1.9.0-jumbo-1-win64\run\cygOpenCL-1.dll"
John the Ripperの動作確認
GPUが認識されているか確認
John the RipperがOpenCL経由で正しくGPUを認識しているか確認します。
C:\path\to\john-1.9.0-jumbo-1-win64\run> john.exe --list=opencl-devices Platform #0 name: NVIDIA CUDA, version: OpenCL 3.0 CUDA 11.6.127 Device #0 (1) name: NVIDIA GeForce RTX 3080 Device vendor: NVIDIA Corporation Device type: GPU (LE) Device version: OpenCL 3.0 CUDA Driver version: 512.15 [recommended] Native vector widths: char 1, short 1, int 1, long 1 Preferred vector width: char 1, short 1, int 1, long 1 Global Memory: 10239 MB Global Memory Cache: 1904 KB Local Memory: 48 KB (Local) Constant Buffer size: 64 KB Max memory alloc. size: 2559 MB Max clock (MHz): 1740 Profiling timer res.: 1000 ns Max Work Group Size: 1024 Parallel compute cores: 68 CUDA cores: 4352 (68 x 64) Speed index: 7572480 Warp size: 32 Max. GPRs/work-group: 65536 Compute capability: 8.6 (sm_86) Kernel exec. timeout: yes PCI device topology: 07:00.0 Platform #1 name: Intel(R) OpenCL, version: OpenCL 3.0 WINDOWS Device #0 (2) name: AMD Ryzen 9 5900X 12-Core Processor Device vendor: Intel(R) Corporation Device type: CPU (LE) Device version: OpenCL 3.0 (Build 0) Driver version: 2021.13.11.0.23_160000 Native vector widths: char 32, short 16, int 8, long 4 Preferred vector width: char 1, short 1, int 1, long 1 Global Memory: 65463 MB Global Memory Cache: 512 KB Local Memory: 32 KB (Global) Constant Buffer size: 128 KB Max memory alloc. size: 16365 MB Profiling timer res.: 100 ns Max Work Group Size: 8192 Parallel compute cores: 24 Speed index: 0
GPUの情報が正しく表示されていることから、John the RipperがGPUを認識していることを確認できます。
ちなみに、OpenCLが正しく認識されていない場合、以下のように表示されます。
C:\path\to\john-1.9.0-jumbo-1-win64\run> john.exe --list=opencl-devices Error: No OpenCL-capable platforms were detected by the installed OpenCL driver. Error: No OpenCL-capable devices were detected by the installed OpenCL driver.
パスワードクラッキングの確認
実際にパスワードハッシュ値を用意し、平文パスワードの特定を試みます。以下のファイルは、WindowsのAdministratorアカウントに強度の低いパスワード「admin123」を設定し、パスワードハッシュ値(NTLM)をダンプしたものです。
C:\path\to\john-1.9.0-jumbo-1-win64\run> type ntlm.hash Administrator:500:aad3b435b51404eeaad3b435b51404ee:3008c87294511142799dca1191e69a0f:::
John the Ripperでは、辞書リストベースのパスワードクラッキングにはCPUを使用し、総当たりやマスクベースのパスワードクラッキングにはOpenCL経由のGPUを使用します。
まずは、CPUによるパスワードクラッキングの動作確認を行うために、用意したパスワードハッシュ値を辞書リスト攻撃で解析します。
オプション | 説明 |
---|---|
--format | 解析対象のハッシュタイプを指定する。今回はNTLMなのでntを指定。 |
--fork | 並列処理を行うため、解析するプロセス数を指定する。使用しているCPUが24スレッドであるため、24を指定。 |
--wordlist | 用する辞書リストを指定する。今回はKali Linuxから持ってきたrockyou.txtを指定。 |
C:\path\to\john-1.9.0-jumbo-1-win64\run> john.exe --format=nt --fork=24 --wordlist=rockyou.txt ntlm.hash Using default input encoding: UTF-8 Loaded 1 password hash (NT [MD4 256/256 AVX2 8x3]) Node numbers 1-24 of 24 (fork) admin123 (Administrator) 6 1g 0:00:00:00 DONE (2022-11-30 17:11) 166.6g/s 640000p/s 640000c/s 640000C/s teddy06..michelle77 2 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3622Kp/s 3622Kc/s 3622KC/s !Password.. no 3 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3735Kp/s 3735Kc/s 3735KC/s !SHITHEAD!.. maka 4 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3689Kp/s 3689Kc/s 3689KC/s !RaelynnB1.. jupanu 5 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3689Kp/s 3689Kc/s 3689KC/s !Pass098765.. ciocolatax 7 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3622Kp/s 3622Kc/s 3622KC/s !QAZxsw2#4.. 1990 8 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3434Kp/s 3434Kc/s 3434KC/s !QA2ws3ed.. 1111 9 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3666Kp/s 3666Kc/s 3666KC/s !SAZ!07.. pepe 10 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3712Kp/s 3712Kc/s 3712KC/s !PRIR!.. markinho 11 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3600Kp/s 3600Kc/s 3600KC/s !SAMMI!.. mara 12 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3515Kp/s 3515Kc/s 3515KC/s !SACL!ND!NHO.. 54321 13 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3495Kp/s 3495Kc/s 3495KC/s !Ruby.Cherie.!.. 123d 14 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3600Kp/s 3600Kc/s 3600KC/s !MYBABY!.. 7 15 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3454Kp/s 3454Kc/s 3454KC/s !RAJTEK!810.. 1234567 16 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3557Kp/s 3557Kc/s 3557KC/s !R8281c0.. 1 17 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3536Kp/s 3536Kc/s 3536KC/s !PrincesS!702.. 18 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3536Kp/s 3536Kc/s 3536KC/s !QAZ2wsxx.. 19 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3644Kp/s 3644Kc/s 3644KC/s !Simone2006.. Press 'q' or Ctrl-C to abort, almost any other key for status 20 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3666Kp/s 3666Kc/s 3666KC/s !Qaz)Okm101..xCvBnM, 21 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3712Kp/s 3712Kc/s 3712KC/s !P9O4R4sche!.ie168 22 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3622Kp/s 3622Kc/s 3622KC/s !QWasd890zx.abygurl69 23 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3931Kp/s 3931Kc/s 3931KC/s !PeBbLeS!.a6_123 24 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3957Kp/s 3957Kc/s 3957KC/s !LuvShan..*7¡Vamos! 1 0g 0:00:00:00 DONE (2022-11-30 17:11) 0g/s 3758Kp/s 3758Kc/s 3758KC/s !SI!LIL1218.. you805 Waiting for 23 children to terminate Session completed
Administratorアカウントの平文パスワードが「admin123」であることを特定できています。
次に、GPUによるパスワードクラッキングの動作確認を行います。今回は1~8文字のパスワードの総当り攻撃で解析します。対象とする文字種は、英小文字、英大文字、数字です。なお、John the Ripperは一度解析したパスワードハッシュ値を記録し、解析対象から除外してくれるため、ここでは同フォルダ内のjohn.potファイルを削除しておく必要があります。
オプション | 説明 |
---|---|
--format | 解析対象のハッシュタイプを指定する。今回はNTLMなのでntを指定。 |
--devices | 並列処理を行うため、解析するプロセス数を指定する。使用しているCPUが24スレッドであるため、24を指定。 |
--mask | 用する辞書リストを指定する。今回はKali Linuxから持ってきたrockyou.txtを指定。 |
--min-length | 解析する最小のパスワード長を指定する。 |
--max-length | 解析する最大のパスワード長を指定する。 |
-1 | 1~9番までカスタム文字種を定義できる。今回は1番に数字、英小文字、英大文字を指定している。 |
C:\path\to\john-1.9.0-jumbo-1-win64\run> del john.pot C:\path\to\john-1.9.0-jumbo-1-win64\run> john.exe --format=nt-opencl --devices=1 --mask='?1' --min-length=0 --max-length=8 -1=[0-9a-zA-Z] ntlm.hash Device 1: NVIDIA GeForce RTX 3080 Using default input encoding: UTF-8 Loaded 1 password hash (NT-opencl [MD4 OpenCL]) Press 'q' or Ctrl-C to abort, almost any other key for status Warning: Only 1 candidate buffered, minimum 278528 needed for performance. 0g 0:00:00:04 1.59% (1) (ETA: 17:30:55) 0g/s 0.2197p/s 0.2197c/s 0.2197C/s 0 0g 0:00:00:06 1.61% (2) (ETA: 17:32:55) 0g/s 9.106p/s 9.106c/s 9.106C/s 00 0g 0:00:00:06 1.61% (3) (ETA: 17:32:55) 0g/s 564.4p/s 564.4c/s 564.4C/s 000..00Z Warning: Only 62 base candidates buffered, minimum 557056 needed for performance. 0g 0:00:00:06 1.61% (4) (ETA: 17:32:55) 0g/s 34979p/s 34979c/s 34979C/s 0000..00ZZ Warning: Only 3844 base candidates buffered, minimum 557056 needed for performance. 0g 0:00:00:06 1.61% (5) (ETA: 17:32:55) 0g/s 2166Kp/s 2166Kc/s 2166KC/s 00000..00ZZZ Warning: Only 238328 base candidates buffered, minimum 557056 needed for performance. 0g 0:00:00:06 1.64% (6) (ETA: 17:32:49) 0g/s 133747Kp/s 133747Kc/s 133747KC/s 000000..00LUk2 0g 0:00:00:08 1.61% (7) (ETA: 17:34:58) 0g/s 7216Mp/s 7216Mc/s 7216MC/s 0000000..00LUk20 0g 0:00:01:57 1.61% (8) (ETA: 19:27:36) 0g/s 30592Mp/s 30592Mc/s 30592MC/s 00000000..00LUk200 admin123 (Administrator) 1g 0:00:07:11 DONE (8) (2022-11-30 17:33) 0.002318g/s 33086Mp/s 33086Mc/s 33086MC/s admin123..00FzH223 Use the "--show --format=NT-opencl" options to display all of the cracked passwords reliably Session completed
こちらの方法でも、Administratorアカウントの平文パスワードが「admin123」であることを特定できています。
これで、CPUによる辞書リストベースの解析、およびGPUによるマスクベースの解析、いずれも正常に動作していることを確認できました。なお、解析結果は以下のコマンドによって、後からでも確認可能です。
C:\path\to\john-1.9.0-jumbo-1-win64\run> john.exe --format=nt-opencl --show ntlm.hash Device 1: NVIDIA GeForce RTX 3080 Administrator:admin123:500:aad3b435b51404eeaad3b435b51404ee:3008c87294511142799dca1191e69a0f::: 1 password hash cracked, 0 left
おわりに
Windows+GPU環境でJohn the Ripper使ったパスワードクラッキング環境を構築しました。
本記事の導入のとおり、次は同じ端末上でHashcatによるパスワードクラッキング環境を構築し、各ツールの性能比較を行う予定です。