我有一个使用 LUKS + Ext4 加密的 USB 记忆棒。我忘记了密码...
但是,我知道密码中将包含哪些单词,并且有这些单词的所有排列的列表。大约有 10,000 种排列。
我不用手动一一尝试每一个排列(这将是一个漫长、缓慢且令人痛苦乏味的过程),是否有可能使这个过程自动化?我知道这听起来像是某种恶意的暴力攻击,但事实并非如此。如果我想要这样的东西,我可以轻松地从互联网上下载一些狡猾的软件。
相反,我想使用在我的计算机上安全的东西,专门为我定制的脚本(或任何安全的解决方案)。
这可能吗?
答案1
执行此攻击的最有效方法是使用开膛手约翰的卢克斯2约翰提取哈希值,然后使用 John(“LUKS”哈希格式)或 hashcat(哈希模式 14600)对其进行攻击。
这样做的优点是可以扩展到您拥有的核心数量(具有 John CPU 支持或 hashcat OpenCL CPU 支持)或 GPU 数量(具有 hashcat OpenCL GPU 支持)。
它还利用比使用本机接口更快的任何攻击方加密效率。这些效率有时比简单地一遍又一遍地尝试正常解锁要快得多。
这还为您提供了这些工具支持的全套攻击模式(单词列表、规则、掩码、混合等)。
答案2
好吧,在最天真的情况下,你可以粗略地做类似的事情
for a in 'fo' 'foo' 'fooo'
do
for b in 'ba' 'bar' 'baar'
do
for c in 'bz' 'baz' 'bazz'
do
echo -n "$a$b$c" | cryptsetup open /dev/luks luks \
&& echo "'$a$b$c' is the winner!" \
&& break 3
done
done
done
它会按顺序遍历所有拼图... foobarbz foobarbaz foobarbazz ... 等等。 (如果您有可选的片段,请添加 '' 空字符串。如果您的片段是随机顺序的,那么您自己考虑一下)。
为了优化性能,您可以:
cryptsetup
继续从 stdin 读取密码的补丁(github 上的 lukscrackplus 就是一个这样的例子,但它已经过时了)- 生成完整的单词列表,
split
将其放入单独的文件中,并运行多个这样的循环(每个核心一个,甚至可能跨多台机器) - 使用不同/更快的加密后端(例如荨麻而不是 gcrypt)编译 cryptsetup,上次我对其进行基准测试时差异很大
- 找到一个不同的实现来暴力破解 LUKS
但是,如果可能性太少(无需优化就可以在一天内完成)或可能性太多(无论进行多少优化都不会成功),那么优化可能就没有意义。
同时检查:
- 您使用了错误的键盘布局吗?
- LUKS 标头是否完好无损?
(对于 LUKS1,没有办法确定,但如果你hexdump -C
知道并且没有随机数据,那么就不需要浪费时间)
这里也有一个类似的问题:https://security.stackexchange.com/q/128539
但如果你真的能够将范围缩小很多,那么这种朴素的方法也能发挥作用。
答案3
是的。我几乎遇到了这个问题。我写了一个脚本,循环遍历所有可能性,直到其中一个可行。不过我的是truecrypt
一卷。唯一的问题是是否有一些速率限制,但只有当您将支票转交给网站或类似网站时才会出现这种情况。凭借您拥有的体积,做到这一点相对容易。
但这也是非常暴力的。您刚刚将选择范围缩小到了一小部分,所以这并不难做到。
答案4
是的,正如之前的答案,这hashcat
是最好的选择之一。由于 LUKS 不存储任何哈希值,因此我们需要从您的 USB 驱动器获取加密的数据样本(标头)。我们将只处理该样本。
sudo dd if=/dev/{USB_LUKS_partition} of=/tmp/data_sample.luks bs=512 count=4079
Hashcat
有多种破解密码的选项,从直接暴力破解到字典攻击、基于规则的攻击和掩码攻击。在这种情况下,我们有password_candidates.txt:
hashcat -m 14600 -a 0 -w 3 /tmp/data_sample.luks password_candidates.txt
这应该会在几秒钟内为您提供密码。总帐