如何用字典破解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
我们用我们基于大学足球的字典击中了约6000万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文档加密: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/