引言
VeraCrypt 是一款流行的开源即时加密工具。虽然它提供了强大的安全性,但密码有时会成为最薄弱的环节。了解如何测试这些密码的强度是安全审计和渗透测试中的一项关键技能。
在本实验中,你将扮演一名安全分析师的角色。你将首先创建一个使用已知模式密码的加密 VeraCrypt 卷。然后,你将学习如何从该卷中提取必要的哈希数据。最后,你将使用强大的密码恢复工具 Hashcat 执行“掩码攻击”(mask attack)来破解密码。这个过程将让你亲身体验数字取证和道德黑客(ethical hacking)中使用的基本技术。
创建一个小型加密 VeraCrypt 卷
在此步骤中,你将使用 VeraCrypt 命令行界面创建一个新的加密文件容器。这个容器将作为我们后续密码恢复练习的目标。我们将故意使用一个简单的密码结构,以便在后续步骤中演示掩码攻击(mask attack)的有效性。
你将通过一个交互式创建过程进行引导。请仔细遵循说明。
首先,运行命令来创建一个新卷。-t 标志启用文本模式,-c 代表创建(create)。
veracrypt -t -c
程序现在会问你一系列问题。请按以下方式回答:
- **卷类型 (Volume Type)**:按
Enter选择默认的Normal。 - **卷位置 (Volume Location)**:输入
myvolume.hc并按Enter。这将在你当前目录(~/project)中创建卷文件。 - **卷大小 (Volume Size)**:输入
1M(代表 1 兆字节)并按Enter。对于本实验来说,一个小尺寸就足够了。 - **加密算法 (Encryption Algorithm)**:按
Enter选择默认的AES。 - **哈希算法 (Hash Algorithm)**:按
Enter选择默认的SHA-512。 - **文件系统 (Filesystem)**:按
Enter选择默认的FAT。 - **密码 (Password)**:这是一个关键步骤。在本实验中,输入密码
LabEx2024并按Enter。 - **重新输入密码 (Re-enter Password)**:再次输入
LabEx2024并按Enter。 - PIM:按
Enter使用默认值(不使用 PIM)。 - **密钥文件 (Keyfiles)**:按
Enter跳过使用密钥文件。 - **熵收集 (Entropy Collection)**:工具会要求你输入至少 320 个随机字符来生成加密熵。只需在键盘上随意输入字符,直到进度条满,然后按
Enter。
完成最后一步后,VeraCrypt 将创建文件。你可以使用 ls 命令来验证它的创建。
ls -l myvolume.hc
你应该会看到类似以下的输出,确认文件存在且大小约为 1MB。
-rw-r--r-- 1 labex labex 1048576 Dec 01 12:34 myvolume.hc
你现在已成功创建了一个加密的 VeraCrypt 卷。
提取前 512 字节作为哈希
在此步骤中,你将从刚刚创建的 VeraCrypt 卷中提取密码哈希。对于使用 SHA-512 或 RIPEMD-160 等哈希算法的标准 VeraCrypt 容器,密码验证所需的数据存储在卷文件的前 512 字节中。Hashcat 可以直接使用这些数据来执行破解攻击。
我们将使用 dd 命令,这是一个强大的数据复制和转换工具。
使用以下命令从 myvolume.hc 读取前 512 字节,并将它们写入一个名为 veracrypt.hash 的新文件。
if=myvolume.hc:指定 input file(输入文件)。of=veracrypt.hash:指定 output file(输出文件)。bs=512:将 block size(块大小)设置为 512 字节。count=1:指定仅复制 1 个块。
dd if=myvolume.hc of=veracrypt.hash bs=512 count=1
命令将执行并显示操作摘要。
1+0 records in
1+0 records out
512 bytes copied, 0.00012345 s, 4.1 MB/s
现在,验证新创建的哈希文件是否确实是 512 字节大小。
ls -l veracrypt.hash
输出应该如下所示:
-rw-r--r-- 1 labex labex 512 Dec 01 12:35 veracrypt.hash
你已成功提取了 Hashcat 将用于攻击的哈希数据。
识别正确的 Hashcat 模式以用于 VeraCrypt
在此步骤中,你将学习如何找到正确的 Hashcat“哈希模式”。Hashcat 支持数百种不同的哈希类型,你必须准确告知它你要破解的类型。每种类型都由一个唯一的数字标识。
由于我们在创建卷时选择了 AES 加密和 SHA-512 哈希算法,因此我们需要在 Hashcat 中找到对应的模式。你可以通过搜索 Hashcat 的帮助输出来完成此操作。
使用以下命令显示 Hashcat 的帮助信息,并过滤出包含“VeraCrypt”的行。grep -i 命令执行不区分大小写的搜索。
hashcat --help | grep -i veracrypt
输出将列出所有与 VeraCrypt 相关的哈希模式。
...
13711 | VeraCrypt RIPEMD160 + XTS 512 bit | Operating System
13712 | VeraCrypt RIPEMD160 + XTS 1024 bit | Operating System
13713 | VeraCrypt RIPEMD160 + XTS 1536 bit | Operating System
13721 | VeraCrypt SHA512 + XTS 512 bit | Operating System
13722 | VeraCrypt SHA512 + XTS 1024 bit | Operating System
13723 | VeraCrypt SHA512 + XTS 1536 bit | Operating System
13731 | VeraCrypt SHA256 + XTS 512 bit | Operating System
13732 | VeraCrypt SHA256 + XTS 1024 bit | Operating System
13733 | VeraCrypt SHA256 + XTS 1536 bit | Operating System
13751 | VeraCrypt Whirlpool + XTS 512 bit | Operating System
13752 | VeraCrypt Whirlpool + XTS 1024 bit | Operating System
13753 | VeraCrypt Whirlpool + XTS 1536 bit | Operating System
...
查看列表。根据我们在步骤 1 中的选择(SHA512),我们卷的正确模式是 13721。你将在最后一步中使用此模式编号来告知 Hashcat 如何解析 veracrypt.hash 文件。
构建已知密码结构的掩码攻击
在此步骤中,你将为 Hashcat 攻击构建一个“掩码”(mask)。当你知道一些关于密码结构的信息时,掩码攻击会非常高效。对于我们的实验,我们知道密码是 LabEx2024。让我们假设我们只知道结构:单词 "LabEx" 后面跟着四位数字(例如年份)。
Hashcat 使用特殊的占位符或“字符集”(charsets)来定义掩码:
?l= 小写字母 (a...z)?u= 大写字母 (A...Z)?d= 数字 (0...9)?s= 特殊字符 (!,@,#, 等)
基于我们假设的结构(“LabEx” + 四位数字),掩码将是 LabEx?d?d?d?d。这告诉 Hashcat 尝试所有以字面字符串 "LabEx" 开头并以 0000 到 9999 的任何四位数字序列结尾的组合。
让我们进行一次模拟运行,看看这个掩码会生成哪些密码。-a 3 标志指定了掩码攻击,而 --stdout 告诉 Hashcat 将生成的候选密码打印到屏幕上,而不是执行实际攻击。
hashcat --stdout -a 3 LabEx?d?d?d?d
此命令将快速在你的终端打印数千个潜在密码,从 LabEx0000、LabEx0001 开始,一直到 LabEx9999。你可以随时按 Ctrl+C 来停止输出。
这证实了我们的掩码已正确构建,包含了目标密码 LabEx2024。
执行攻击以恢复卷密码
在最后一步中,你将组合所有部分来发起攻击并恢复 VeraCrypt 卷密码。你已经拥有了哈希文件 (veracrypt.hash)、哈希模式 (13721) 和攻击掩码 (LabEx?d?d?d?d)。
让我们组装最终的 Hashcat 命令:
-m 13721: 设置 VeraCrypt 的哈希模式(SHA512)。-a 3: 将攻击模式设置为掩码攻击。veracrypt.hash: 目标哈希文件。LabEx?d?d?d?d: 要使用的密码掩码。
现在,在你的终端中执行命令:
hashcat -m 13721 -a 3 veracrypt.hash LabEx?d?d?d?d
Hashcat 将开始运行。由于密码空间很小,攻击应该会非常快速地完成。你将看到状态更新,然后是最终结果。
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: VeraCrypt SHA512 + XTS 512 bit
Hash.Target......: veracrypt.hash
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Mask.......: LabEx?d?d?d?d [9]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: XXXXXX H/s (0.01ms) @ Accel:X Loops:X
Recovered........: 1/1 (100.00%) Digests
Progress.........: 10000/10000 (100.00%)
Rejected.........: 0/10000 (0.00%)
Restore.Point....: 10000/10000 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1
Candidates.#1....: LabEx0000 -> LabEx9999
Hardware.Mon.#1..: Util: 99%
veracrypt.hash:LabEx2024
All hashes have been recovered.
...
成功!veracrypt.hash:LabEx2024 这一行表明 Hashcat 已成功恢复了密码。
Hashcat 会自动将破解的密码保存到一个名为 hashcat.potfile 的文件中。你可以随时使用 --show 选项查看恢复的密码:
hashcat -m 13721 --show veracrypt.hash
这将再次输出破解的哈希和密码。
veracrypt.hash:LabEx2024
恭喜你,你已成功使用 Hashcat 破解了一个 VeraCrypt 卷密码!
总结
在这个实验中,你通过针对 VeraCrypt 加密卷,获得了密码安全分析的实践经验。
你成功地执行了密码恢复过程的关键步骤:
- 使用 VeraCrypt 的命令行工具创建了一个加密容器。
- 提取了离线攻击所需的 512 字节哈希数据。
- 使用了 Hashcat 的帮助系统来识别目标文件的正确哈希模式。
- 基于已知的密码结构构建并测试了有针对性的掩码攻击。
- 执行了攻击,成功恢复了卷的密码。
这些技能在道德黑客和数字取证领域是基础性的,展示了如何测试密码策略和结构中的弱点。理解这些攻击向量是构建更强防御的第一步。


