如何使用字典破解Office密码
Kent Ickler//
TLDR:我们使用自定义字典破解Microsoft Office文档加密,然后在LinkedIn哈希数据库中使用自定义字典进行攻击。
背景
最近我收到几个关于更好方法破解加密Excel文件的问题。问题来自BHIS的扩展社区,他们使用商业密码恢复工具,并利用分布式CPU和GPU处理能力。问题是他们仍然获得荒谬的慢哈希速度,使得暴力破解不适用。
在讨论我们在John the Ripper(JTR)和Hashcat上的典型哈希破解流程时,用户回应说:“我15年前用过那个……人们还在用吗?”
是的……是的,我们仍然在用。
事实上,JTR和Hashcat至今都有活跃的开发。
公平地说,我不能说商业软件是否更快(更好、更快、更强),但我会说,如果它包括专业支持并且你正在处理复杂的事情,那总是很好的。Black Hills Information Security系统管理员有一个信条:我们既不支持专有也不支持开源;我们支持安全意识。商业软件肯定可以有它的利基,快速调查密码恢复软件显示了一些有趣的提供,特别是在分布式工作负载方面,开源社区难以找到显著增长。
Office加密
慢哈希破解是Microsoft Office应用程序在存储密码哈希和加密文档方面所做的努力的结果。加密方法比早期Office版本复杂得多。Office 2013加密使用128位AES和SHA-512算法。用于创建哈希的处理能力越多,尝试多个组合以找到匹配哈希就越困难。
未来研究
有趣的是,Microsoft还在所有Office 2013加密文档中留下了一个后门,允许使用主密钥。Microsoft甚至制作了DocRecrypt工具,允许IT管理员通过使用域上的证书签名服务来解密或重新加密Office文档,而无需原始密码。这些和其他攻击向量已被社区研究,并可能产生完全绕过哈希破解加密文档的潜在攻击向量。
设置加密文档
首先,我创建了一个Excel文档并填充了一些虚构数据。
现在,我将“使用密码加密”
让我们尝试使用一个我认为可能在常见字典中的密码:buckeye31。
(旁注,我使用了“shuf -n 1 rockyou.txt”)
保存文档后,我尝试再次打开它以验证其加密。
我们不想实际破解Excel文件本身——我们只想破解用于加密Excel文件的密码哈希。为此,我们需要一个工具来读取Excel文件,并为我们提供文件加密处理中使用的密码的明文哈希。通常,我会参考Hashcat-Utils,但所需的工具不在那里。由于我们在同一破解系统上编译了JTR,我将使用JTR的office2john.py。
Office2john.py [EXCEL FILE] > hash.txt
Office2John.py识别了哈希并确定它使用MS Office 2013的加密方法,因此尽管使用Office 2016,哈希机制看起来仍然相同。我可以从这里开始使用JTR,但我仍然偏爱Hashcat,尽管必须查找哈希类型代码,如果我只使用JTR就不需要。我需要将JTR Office 2013哈希切割成Hashcat能理解的东西,并从Hashcat的帮助文件中找到哈希方法代码。
为了转换这个JTR格式的字符串以便Hashcat能正确读取,我需要从office2john.py创建的行中删除前导“EncryptedBook.xlsx”。我们可以使用Hashcat的–username标志,但我更喜欢创建一个干净的哈希列表文件。所以我会使用cut:
Cut hash.txt -d”:” -f 2 >hashhc.txt
现在,让我们给Hashcat一些上下文:
使用hashcat64.bin –help,我可以找到Office 2013的哈希方法代码是9600
很快,我想在我们的HashCat设备上检查9600哈希方法的基准:
Hashcat64.bin -m 9600 -b
47,178 h/sec 并不好,但肯定比几百好。
现在,我使用的密码在rockyou.txt中(事实上,我是从该文件中随机提取的)。让我们看看rockyou.txt有多大:
14,344,393。不计开销,大约5分钟。
开始吧:
hashcat64.bin -m 9600 hasheshc.txt /opt/wordlists/rockyou.txt -o hashes.pot
四分钟后……
不奇怪,密码在rockyou.txt中被找到。
但如果我们只知道它有一些小写字母后跟几个数字呢?
hashcat64.bin -m 9600 -a 3 hasheshc.txt ?l?l?l?l?l?l?d?d -o hashes.pot
七天。哇,痛。
等等……如果我们只知道它是8个字符但其他一无所知呢?
hashcat64.bin -m 9600 -a 3 hasheshc.txt ?a?a?a?a?a?a?a?a -o hashes.pot
好吧。
重点是,如果你使用字典,可以节省大约4577年,或者……一个8字符的字母数字密码对于MS Office加密来说显然相当好。
另一种方法呢?
我不是一个大足球迷,但如果我知道Excel文件的作者是,我可能会尝试构建一个自定义字典。我将使用cewl在这个Wikipedia页面上查找关于大学足球的关键词,以帮助我构建字典文件。
cewl –depth 0 -w customdict.txt https://en.wikipedia.org/wiki/List_of_college_team_nicknames_in_the_United_States
这生成了一个1626个单词的自定义字典。
让我们也添加所有大写和小写:
cp customdict.txt customdict.more.txt
cat customdict.txt | tr ‘[:upper:]’ ‘[:lower:]’ » customdict.more.txt
cat customdict.txt | tr ‘[:lower:]’ ‘[:upper:]’ » customdict.more.txt
现在我们有4878个单词。
让我们更进一步,运行hashcat-utils的expander来扩展所有这些单词。
(注意,我必须重新编译expander以扩展到8个字符……)
cat customdict.more.txt | /opt/hashcat-utils/src/expander.bin > customdict.more.expanded.txt
392,322个单词。现在怎么办?
现在,让我们使用Hashcat的混合字典攻击在单词列表末尾添加几个数字:
hashcat64.bin –session HashBlog1 -a 6 -m 9600 hashhc.txt customdict.more.expanded.txt ?d?d -o hash.pot
然后……
27秒后,我们有了赢家。
字典对于处理密集型哈希来说是最佳选择。
如果你像大多数人一样不使用随机字母数字和符号,任何人知道的关于你的任何事情,包括你的体育偏好,都可以用在单词列表中以减少破解只有你(认为你)知道的密码的停机时间。
等等,这一切都是虚构的,你一开始就知道密码。没有人会实际使用那些密码……
只是为了好玩,让我们在已知的LinkedIn ~60M哈希发布上测试我们的custom.more.expanded.txt单词字典。由于它使用SHA1并且哈希将非常快,我们将在字典中的每个单词末尾添加几个字母数字。
hashcat64.bin -a 6 -m 100 68_hash.txt customdict.more.expanded.txt ?a?a -o test.pot
我们用大学足球来源的字典击中了~60百万LinkedIn哈希的1.27%,耗时22秒。
链接
DigINinja的CeWL:https://digi.ninja/projects/cewl.php
John the Ripper: http://www.openwall.com/john/
Hashcat: https://hashcat.net/hashcat/
Hashcat-utils: https://github.com/hashcat/hashcat-utils
Microsoft Office Document Encryption: https://technet.microsoft.com/en-us/library/cc179125.aspx
相关博客
Black Hills Information Security Hashcat博客:
https://www.blackhillsinfosec.com/tag/hashcat/
Black Hills Information Security密码破解设备构建:
https://www.blackhillsinfosec.com/build-password-cracker-nvidia-gtx-1080ti-gtx-1070/
Black Hills Information Security:如何破解密码保护的MS Office文档密码:
https://www.blackhillsinfosec.com/crack-passwords-password-protected-ms-office-documents/