Nseclog

ペネトレーションテスターがセキュリティ検証内容を発信するブログ

John the RipperをWindows+GPU環境で使う方法

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のインストール手順は以下のとおりです。

  1. John the Ripperのダウンロード
  2. ダウンロードしたファイルの解凍
  3. OpenCL.dllのコピー(John the RipperGPUを認識させるために必要)

まずは、John the Ripperの公式サイトから最新版のバイナリ(記事執筆時点の最新は1.9.0-jumbo-1 64-bit Windows binaries)をダウンロードし、任意のフォルダに解凍します。

次にJohn the RipperGPUを認識させるため、WindowsOpenCL.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 RipperOpenCL経由で正しく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 RipperGPUを認識していることを確認できます。

ちなみに、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によるパスワードクラッキング環境を構築し、各ツールの性能比較を行う予定です。

参考文献

https://github.com/openwall/john/tree/bleeding-jumbo/doc