破解加密的LastPass数据库

最近,LastPass泄露了电子邮件地址、家庭住址、姓名和加密的用户数据库。

在这篇文章中,我将演示攻击者如何利用Hashcat等工具,来破解使用弱密码加密的数据库。
在这里插入图片描述
来源:unsplash.com

更新: 修正了一些错误并增加了更多说明。

在这篇文章中,我将从技术的角度详细讲解攻击者可以用偷来的加密数据库做什么,特别是他们如何使用Hashcat等工具来破解数据库,并获得敏感的登录凭证。

为了模拟被盗的数据,我将使用我的LastPass测试账户,从MacOS上的Chrome浏览器扩展中提取一个加密的数据库。在这之后,我将使用字典攻击来暴力破解使用了弱密码或易猜测密码加密的数据库。

发生了什么?

The Verge发表了一篇文章,对该泄露事件做了精彩总结。LastPass自己也发布了一篇博文。简而言之就是,2022年8月,LastPass遭遇数据泄露,用户数据和源代码被盗。LastPass没有很好地让公众(和用户)知道此次的泄露实际上有多糟糕。

什么被偷了?

  • 用户数据库的备份
  • 公司名称、终端用户名、账单地址、电子邮件地址、电话号码和IP地址
  • 源代码和其他知识产权

攻击者可以用偷来的数据库做什么?

这看情况而定,有很多事情需要考虑。我想到的几件事是:

  • 加密的数据库在云端是如何存储的?
  • 用户是否使用弱密码或易猜测密码来加密数据库?
  • 密钥的迭代是怎样的(默认或自定义)?
  • 其他未提及的因素?

而且,由于我不知道被偷的数据是什么样的,也不知道它可能是如何被加密的,我只能根据我所接触到的数据进行理论分析。其中包括浏览器扩展所使用的SQLite数据库和里面的数据。

在接下来的章节中,我将演示如何从Chrome浏览器扩展中提取加密的数据库,并提取出具体信息,然后用Hashcat进行破解。

LastPass浏览器扩展

在Chrome浏览器上,每个扩展都有一个独特的ID。LastPass扩展使用hdokiejnpimakedhajhdlcegeplioahd作为ID。你可以通过访问地址栏中的URL chrome-extension://hdokiejnpimakedhajhdlcegeplioahd/vault.html来确认。你将会看到数据库的登录页面。
在这里插入图片描述
你可以把它看作是一个在你的浏览器中使用HTML和JavaScript的本地网站。

提取加密的数据库

所有扩展程序都有自己的文件夹,根据操作系统的不同,这些文件夹存储在系统本地的不同位置。

LastPass文档指出,在Windows系统上使用Chrome浏览器的设备会将数据库存储在以下PATH中。

%LocalAppData%\Google\Chrome\User Data\Default\databases\chrome-extension_hdokiejnpimakedhajhdlcegeplioahd_0

在macOS系统上,位置略有不同。
在这里插入图片描述

**注意:**我在Chrome上使用两个配置文件,因此你看到的是Profile 1而不是Default

LastPass SQLite数据库

在这个文件夹中,一个名为1的SQLite文件,其版本为:SQLite version 3039004应该存在。这就是加密的数据库被存储并被扩展使用的地方。

➜  file 1
1: SQLite 3.x database, last written using SQLite version 3039004, file counter 21, database pages 22, cookie 0x5, schema 4, largest root page 11, UTF-8, vacuum mode 1, version-valid-for 21

然后,你可以使用DB Browser for SQLite这样的工具来查看数据库内容。我还把它复制到桌面,并把文件重命名为LastPass-vault-macos-chrome.sqlite,这样更容易记住。

所有数据都存储在一个名为LastPassData的表中。
在这里插入图片描述

要使用Hashcat破解LastPass数据库,你需要有3样东西。

  1. 密钥值
  2. 迭代次数
  3. 帐户的电子邮件地址(在数据库中经过散列)

它们要保持这样的格式:KEY:ITERATION:EMAIL

密钥值

要检索密钥值,就要搜索 type 列,其中值为key,然后在data列中选择第二行,例如:T4vInfZ+6MGDeEendq4gvA==,如下图。
在这里插入图片描述

你也可以执行以下SQL查询:

SELECT substr(data, -24) FROM LastPassData WHERE type = 'key';

它是base64编码的,你可以通过解码获得十六进制值。

echo "T4vInfZ+6MGDeEendq4gvA==" | base64 -d | xxd -p

我们现在有了第1样东西:4f8bc89df67ee8c1837847a776ae20bc

迭代次数

要检索迭代次数,就要搜索type列,其中值为accts,然后在 data 列中搜索 ; 前的几个字符。LastPass在2018年将默认的迭代次数从5000次改为100100次。

你也可以执行以下SQL查询:

SELECT SUBSTR(data,0,INSTR(data,';')) FROM LastPassData WHERE type = 'accts';

我们现在也有了第2样东西:100100

电子邮件

该数据库包含一个哈希的电子邮件地址值。但我们知道,攻击者已经有了这些信息,因为最近LastPass的泄露包括电子邮件地址。鉴于本博客的目的,我不打算分享我使用的电子邮件地址。

格式化的哈希值

满足以上所有要求的哈希值应该是这样的:

4f8bc89df67ee8c1837847a776ae20bc:100100:test@example.com

用Hashcat破解LastPass数据库

作为理论验证,我使用M1芯片的MacBook Air来破解密码。它的速度只有1110 H/s(每秒的哈希值),但它确实有效。另一方面,如果攻击者利用多GPU设备设置和优化的驱动程序,就很容易达到2,000,000+ H/s的速度。

为了演示用弱密码暴力破解数据库,我下载了流行的rockyou.txt字典,并把我的数据库的主密码明文存储在里面。然后,我设置了以下Hashcat选项:

hashcat -a 0 -m 6800 LastPass-hash.txt ~/Downloads/rockyou.txt

  • -a 0 字典攻击
  • -m 6800 LastPass 哈希算法
  • LastPass-hash.txt 哈希格式化 (KEY:ITERATION:EMAIL)
  • rockyou.txt 明文密码字典+我的主密码

在这里插入图片描述

就这样,数据库里面存有的所有明文密码数据都成功恢复了。

有用的链接和参考资料


本文翻译自:Cracking encrypted Lastpass vaults

作者:Naz Markuta,发布时间:2022年12月23日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值