hashcatは高速かつ高度なパスワード回復ツールです。同じく定番のJohn the Ripperは、PKZIPの解読にOpenCLが対応していなかったので、今回hashcatでグラフィックボードを利用して解読します。
実行環境
OS | Windows11 23H2 |
グラフィックボード | NVIDIA GeForce RTX 3060 12GB |
CUDA Toolkit | 11.8.0 |
hashcat | v6.2.4 |
GPUドライバの要件
- Linux上のAMD GPUにはAMDGPU(21.50 以降)およびROCm(5.0以降)が必要
- Windows上のAMD GPUにはAMD Adrenalin Edition(22.5.1以降)が必要
- Intel CPUにはOpenCL Runtime for Intel Core and Intel Xeon Processors(16.1.1以降)が必要
- NVIDIA GPUにはNVIDIA Driver(440.64 以降)およびCUDA Toolkit(9.0以降)が必要
今回はNVIDIAグラフィックボードを使用します。CUDA ToolkitをインストールすることでOpenCLよりも高速に解読できます。
ダウンロード
リンク先のページ下部にあるhashcat binaries v6.2.4をダウンロードして解凍してください。v6.2.5以上はバグにより、32KBを超えるPKZIPのハッシュデータの解読に失敗します。
ハッシュファイルの編集
ハッシュ値の抽出にはJohn the Ripperから行います。使い方は以下の記事をご覧ください。
zip2johnで抽出したハッシュファイルを編集します。
$PKZIP$~$PKZIP$までがハッシュ値になります。hashcatでは、前後の部分は不要なので削除して保存してください。
実行
コマンドプロンプトでhashcatフォルダを開きます。
今回は次のように指定しました。オプションについては以下に記載してあるので確認してください。
hashcat -m 17200 -a 3 -w 3 ファイル名.hash ?a?a?a?a?a?a
発見するとハッシュ値の後ろにパスワードが表示されます。これらはhashcat.potfileに保存されるので後からも確認できます。
ハッシュモードについて
-m xxxx ハッシュモードを指定する必要があります。
Hash-Mode | Hash-Name | ファイルの中身 |
---|---|---|
13600 | WinZip | |
17200 | PKZIP (Compressed) | 単一の圧縮ファイル |
17210 | PKZIP (Uncompressed) | 単一の非圧縮ファイル |
17220 | PKZIP (Compressed Multi-File) | 複数の圧縮ファイル |
17225 | PKZIP (Mixed Multi-File) | 圧縮・非圧縮ファイルが混在 |
PKZIPはファイルの中身によってモードが複数あります。解読できなかったらほかのモードを試したりしてください。その他のハッシュ値については以下のリンクを確認してください。
コアアタックモード
-a 3 ブルートーフォースアタック(総当たり攻撃)でのクラッキング方法になります。
ワークロードプロファイル
-w 3 計算負荷を調整する設定になります。1から4で設定でき、数字が大きいほど負荷が高いが計算が高速になります。
マスクの指定
マスクは以下を組み合わせて桁数やルールを指定します。
- ?l abcdefghijklmnopqrstuvwxyz
- ?u ABCDEFGHIJKLMNOPQRSTUVWXYZ
- ?d 0123456789
- ?s «space»!”#$%&'()*+,-./:;<=>?@[\]^_`{|}~
- ?a ?l?u?d?s
以下にマスクの指定方法の例をいくつか紹介します。詳しくは以下のリンクを確認してください。
?a?a?a?a?a?a
(英字小文字、英字大文字、数字、記号)6桁Apple?d?d?d?d
ワード (Apple) + (数字)4桁-1 ?l?u?d ?1?1?1?1?1?1
(英字小文字、英字大文字、数字)6桁
ドライバーのタイムアウト
以下のようなエラーが出る場合の修正方法です。
* 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
メモ帳などで次の内容をコピーペーストしてwddm_timeout_patch.regというファイルを作成します。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers]
"TdrLevel"=dword:00000000
- コマンドプロンプトを管理者権限で起動
- 作成したレジストリファイルのパスを張り付けて実行
- システムを再起動