hashcat

hashcat is the world’s fastest and most advanced password recovery tool.

ベンチマークの実施

-b オプションを指定すれば、自分のPCでどのぐらいの性能が出るのか確認することができます。

λ hashcat --benchmark -m 0 --speed-only
hashcat (v4.2.1) starting in benchmark mode...

OpenCL Platform #1: Apple
=========================
* Device #1: Intel(R) Core(TM) i5-8210Y CPU @ 1.60GHz, skipped.
* Device #2: Intel(R) UHD Graphics 617, 384/1536 MB allocatable, 24MCU

Benchmark relevant options:
===========================
* --optimized-kernel-enable

Hashmode: 0 - MD5

Speed.Dev.#2.....:   403.4 MH/s (57.83ms) @ Accel:128 Loops:32 Thr:256 Vec:1

Started: Wed Apr 24 16:18:56 2019
Stopped: Wed Apr 24 16:19:02 2019

ということで、403.4 MH/s の速度が出るそうです。MH/sMega Hash per second の略です。

アタックモードで最初から定義されている文字種

  • ?l = abcdefghijklmnopqrstuvwxyz

  • ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ

  • ?d = 0123456789

  • ?h = 0123456789abcdef

  • ?H = 0123456789ABCDEF

  • ?s = «space»!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

  • ?a = ?l?u?d?s

  • ?b = 0x00 - 0xff

マスクを利用する例

平文の長さがわかっている場合などで有用

λ echo -n "xyz" | md5
d16fb36f0911f878998c136191af705e

λ hashcat -a 3 -m 0 d16fb36f0911f878998c136191af705e "?a?a?a"
.....

λ hashcat -a 3 -m 0 d16fb36f0911f878998c136191af705e "?a?a?a" --show
d16fb36f0911f878998c136191af705e:xyz

具体例

1文字~8文字まで順番にブルートフォースで解析する例

λ echo -n "abcde" | md5
ab56b4d92b40713acc5af89985d4b786

λ hashcat -a 3 -m 0 --increment --increment-min=1 --increment-max=8 ab56b4d92b40713acc5af89985d4b786
.....

λ hashcat -a 3 -m 0 --increment --increment-min=1 --increment-max=8 ab56b4d92b40713acc5af89985d4b786 --show
ab56b4d92b40713acc5af89985d4b786:abcde

文字種をカスタマイズする例

λ echo -n "dark-lambda" | md5
667e8e6657c53439df589d9a269792c5

λ hashcat -a 3 -m 0 667e8e6657c53439df589d9a269792c5 -1 abcdefghijklmnopqrstuvwxyz- "?1?1?1?1?1?1?1?1?1?1?1"
...

例として11文字の dark-lambda を解析してみましょう。

出現する文字はアルファベットと - だけとわかっているので、その情報を使います。

カスタム文字種を利用する場合は -1 abcdefghijklmnopqrstuvwxyz- のように指定し、?1?1?1?1 のように利用します。一応1~4までカスタム文字種を設定できるようです。

これを実行すると、なかなか終わりません。(コンピュータの性能によります)

現在の進捗を確認するためにエンターキーを押してみましょう。

...
Session..........: hashcat
Status...........: Running
Hash.Type........: MD5
Hash.Target......: 028a44e44a6a2edce609caabdec635be
Time.Started.....: Wed Apr 24 15:06:04 2019 (1 min, 59 secs)
Time.Estimated...: Tue Sep  7 15:43:23 2021 (2 years, 137 days)
Guess.Mask.......: ?1?1?1?1?1?1?1?1?1?1?1 [11]
Guess.Charset....: -1 abcdefghijklmnopqrstuvwxyz-, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#2.....: 74208.8 kH/s (3.06ms) @ Accel:16 Loops:4 Thr:256 Vec:1
Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 9157214208/5559060566555523 (0.00%)
Rejected.........: 0/9157214208 (0.00%)
Restore.Point....: 393216/282429536481 (0.00%)
Candidates.#2....: cvjgrqjaner -> pfjcu-verer

[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit =>

Time.Estimated を確認してみると Tue Sep 7 15:43:23 2021 (2 years, 137 days) とあるので、推定で2年ちょっとかかるようです。

待ちきれないので、文字種類をもっと限定してみます。ちょっとずるいですが、出現する文字のみに絞りました。

λ hashcat -a 3 -m 0 667e8e6657c53439df589d9a269792c5 -2 abdklmr- "?2?2?2?2?2?2?2?2?2?2?2"
...

Session..........: hashcat
Status...........: Running
Hash.Type........: MD5
Hash.Target......: 667e8e6657c53439df589d9a269792c5
Time.Started.....: Wed Apr 24 15:15:16 2019 (1 sec)
Time.Estimated...: Wed Apr 24 15:16:30 2019 (1 min, 13 secs)
Guess.Mask.......: ?2?2?2?2?2?2?2?2?2?2?2 [11]
Guess.Charset....: -1 Undefined, -2 abdklmr-, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#2.....:   114.7 MH/s (4.58ms) @ Accel:16 Loops:8 Thr:256 Vec:1
Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 134479872/8589934592 (1.57%)
Rejected.........: 0/134479872 (0.00%)
Restore.Point....: 196608/16777216 (1.17%)
Candidates.#2....: mlkarallrll -> -lk---k--ma

今度は1分ちょっとで解析が終わりそうです。

λ hashcat -a 3 -m 0 667e8e6657c53439df589d9a269792c5 -2 abdklmr- "?2?2?2?2?2?2?2?2?2?2?2" --show
667e8e6657c53439df589d9a269792c5:dark-lambda

ちゃんと解析できました。

このように hashcat に外部からナレッジを与えることで、探索すべき解空間を減らし、ある程度の文字数であれば、普通のコンピュータでも現実時間で解けるようになります。

Mac の警告

ATTENTION! Pure (unoptimized) OpenCL kernels selected. This enables cracking passwords and salts > length 32 but for the price of drastically reduced performance. If you want to switch to optimized OpenCL kernels, append -O to your commandline.

こんな感じの警告が出る場合、オプションに -O を付けると良いです。

参考リソース

Last updated