目录
hashcat简介
hashcat号称是世界上最快的密码破解工具。此前曾有过hashcat-lagacy(仅支持CPU)、cudahashcat以及oclhashcat,本文所述的hashcat是现在已经作为开源软件在github上公开的由OpenCL实现的hashcat,当前最新版本为v6.1.1。支持多种操作系统(Linux, Windows 和 macOS),多种OpenCL运行时库(AMD, Apple, Intel, Nvidia, POCL, ROCM)以及多种计算设备(GPU、CPU、APU)。支持多种破解方法以及超过300种hash加密算法。release版本的二进制文件以及源代码可以在hashcat - advanced password recovery 下载,也可以访问GitHub - hashcat/hashcat: World's fastest and most advanced password recovery utility下载最新的开发版本。
源代码编译安装
每个版本的hashcat对OpenCL运行时库的版本有具体的要求,最新的v6.1.1版本要求如下:
platform | OpenCL runtime requirement |
---|---|
AMD GPUs on Linux | "RadeonOpenCompute (ROCm)" Software Platform (3.1 or later) |
AMD GPUs on Windows | "AMD Radeon Adrenalin 2020 Edition" (20.2.2 or later) |
Intel CPUs | "OpenCL Runtime for Intel Core and Intel Xeon Processors" (16.1.1 or later) |
NVIDIA GPUs | "NVIDIA Driver" (440.64 or later) and "CUDA Toolkit" (9.0 or later) |
本文在昆山系统默认的rocm 3.9.1环境下进行安装测试。软件包下载后通过如下命令解压:
tar -zxvf hashcat-6.1.1.tar.gz
然后进入hashcat-6.1.1目录,直接执行make,即可完成编译,编译全部完成后当前目录生成了hashcat可执行文件以及一些example脚本及相关文件。在计算节点直接运行example脚本,或通过调度系统提交任务,即可直接运行程序。
运行示例
hashcat支持非常多的功能,因此也有大量的命令参数可以选择,这里仅列出部分常用选项,详细的列表可以在hashcat顶层目录执行如下命令查看:
./hashcat --help
常用参数:
-a 指定要使用的破解模式,其值参考后面对参数。“-a 0”字典攻击,“-a 1”
组合攻击;“-a 3”掩码攻击。
-m 指定要破解的hash类型,如果不指定类型,则默认是MD5
-o
指定破解成功后的hash及所对应的明文密码的存放位置,可以用它把破解成功的hash写到指定的文件中
--force 忽略破解过程中的警告信息,跑单条hash可能需要加上此选项
--show 显示已经破解的hash及该hash所对应的明文
--increment
启用增量破解模式,可以利用此模式让hashcat在指定的密码长度范围内执行破解过程
--increment-min 密码最小长度,后面直接等于一个整数即可,配置increment模式一起使用
--increment-max 密码最大长度,同上
--outfile-format 指定破解结果的输出格式id,默认是3
--username 忽略hash文件中的指定的用户名,在破解linux系统用户密码hash可能会用到
--remove 删除已被破解成功的hash
-r 使用自定义破解规则
破解模式:
0 | Straight(字段破解)
1 | Combination(组合破解)
3 | Brute-force(掩码暴力破解)
6 | Hybrid Wordlist + Mask(字典+掩码破解)
7 | Hybrid Mask + Wordlist(掩码+字典破解)
输出格式:
1 = hash[:salt]
2 = plain
3 = hash[:salt]:plain
4 = hex_plain
5 = hash[:salt]:hex_plain
6 = plain:hex_plain
7 = hash[:salt]:plain:hex_plain
8 = crackpos
9 = hash[:salt]:crackpos
10 = plain:crackpos
11 = hash[:salt]:plain:crackpos
12 = hex_plain:crackpos
13 = hash[:salt]:hex_plain:crackpos
14 = plain:hex_plain:crackpos
15 = hash[:salt]:plain:hex_plain:crackpos
hash类型(部分):
900 | MD4
0 | MD5
100 | SHA1
1300 | SHA2-224
1400 | SHA2-256
10800 | SHA2-384
1700 | SHA2-512
17300 | SHA3-224
17400 | SHA3-256
17500 | SHA3-384
17600 | SHA3-512
6000 | RIPEMD-160
600 | BLAKE2b-512
掩码设置:
l | abcdefghijklmnopqrstuvwxyz 纯小写字母
u | ABCDEFGHIJKLMNOPQRSTUVWXYZ 纯大写字母
d | 0123456789 纯数字
h | 0123456789abcdef 常见小写字母和数字
H | 0123456789ABCDEF 常见大写字母和数字
s | !"\#\$%&'()\*+,-./:;\<=\>?@[\\]\^_\`{|}\~ 特殊字符
a | ?l?u?d?s 键盘上所有可见的字符
b | 0x00 - 0xff 可能是用来匹配像空格这种密码的
掩码设置示例:
八位数字密码:?d?d?d?d?d?d?d?d
八位未知密码:?a?a?a?a?a?a?a?a
前四位为大写字母,后面四位为数字:?u?u?u?u?d?d?d?d
前四位为数字或者是小写字母,后四位为大写字母或者数字:?h?h?h?h?H?H?H?H
前三个字符未知,中间为admin,后三位未知:?a?a?aadmin?a?a?a
6-8位数字密码:--increment --increment-min 6 --increment-max 8 ?l?l?l?l?l?l?l?l
6-8位数字+小写字母密码:--increment --increment-min 6 --increment-max 8 ?h?h?h?h?h?h?h?h
hashcat还支持用户自定义最多4组字符集:
--custom-charset1 [chars]等价于 -1
--custom-charset2 [chars]等价于 -2
--custom-charset3 [chars]等价于 -3
--custom-charset4 [chars]等价于 -4
在掩码中用?1、?2、?3、?4来表示
例如--custom-charsset1 ?u?d
,那么在设置掩码时,?1就代表该位是一个大写字母或数字。
使用如下命令生成一个MD5的hash串:
echo -n aci92Q | md5sum
aci92Q是随意输入的字符串,也就是我们的密码,通过md5sum工具得到如下字符串:
35e0ab25e7485a30a389aa760bd1f0a3
然后在hashcat顶层目录,执行如下命令尝试破解该密码:
./hashcat -a 3 -m 0 35e0ab25e7485a30a389aa760bd1f0a3 ?a?a?a?a?a?a?a?a
--increment -O
其中 -a 3表示采用掩码暴力破解方式,-m 0表示hash类型为md5,?a?a?a?a?a?a?a?a表示密码最多有8位,每一位都可能是键盘上的任何字符。如果这里设置的位数少于密码的实际位数,将无法得到正确的破解结果。--increement 表示密码可能的位数不确定,不是一个固定的数,-O表示采用优化的核函数。
经过一段时间的运行,得到如下结果,表示密码已被破解:
可见得到的结果aci92Q就是最初设定的密码,Status给出了本次破解尝试的状态。hashcat自动使用一个节点的全部4张GPU卡进行破解尝试,Speed分别给出了每张卡的速度以及总速度。
性能测试
hashcat自带内置benchmark选项,可以方便地以单条hash的暴力破解模式进行性能测试:
./hashcat -m 0 -b
由于P100节点驱动版本较低,无法安装最新的v6.1.1版本,所以安装了次新的v5.1.0版本,并与昆山节点进行对比,结果如下:
platform | device | speed MH/s |
---|---|---|
NVIDIA | Tesla P100-SXM2-16GB, 4070/16280 MB allocatable, 56MCU | 27235.5 |
NVIDIA | Tesla P100-SXM2-16GB, 4070/16280 MB allocatable, 56MCU | 28238.1 |
NVIDIA | Tesla P100-SXM2-16GB, 4070/16280 MB allocatable, 56MCU | 28249.7 |
NVIDIA | Tesla P100-SXM2-16GB, 4070/16280 MB allocatable, 56MCU | 28247.8 |
DCU | gfx906+sram-ecc, 16256/16368 MB (13912 MB allocatable), 64MCU | 19696.6 |
DCU | gfx906+sram-ecc, 16256/16368 MB (13912 MB allocatable), 64MCU | 19566.2 |
DCU | gfx906+sram-ecc, 16256/16368 MB (13912 MB allocatable), 64MCU | 19397.7 |
DCU | gfx906+sram-ecc, 16256/16368 MB (13912 MB allocatable), 64MCU | 20191.8 |
可见DCU与P100大约有30%的性能差距。
hashcat本身不支持多节点运行,如需多节点运行,需要使用第三方工具,例如:
Hashtopolis: GitHub - hashtopolis/server: Hashtopolis - distributed password cracking with Hashcat
Disthc: GitHub - unix-ninja/disthc: disthc
本文没有尝试上述工具。