chrome 密码泄漏了, 才知道用 chrome 保存密码等于裸奔

2022-08-14 12:31:38 +08:00
 juejinloop

前几天电脑中毒了,虽然第一时间重装系统,但是隔天依然收到一大堆网站登录的 gamil 验证邮件,谷歌帐号也提示风险操作。密码管理一直用的 chrome 自带的,考虑是 chrome 保存的密码泄漏,于是连夜改了所有帐号密码,能二验的全部添加二验。然而第二天早上还是发现一台小鸡被人在 vps panel 里重装了 windows 系统,还好有数据备份,然后又改所有小鸡的 ssh 登陆密码。因为之前谷歌帐号开了二次验证,还好谷歌帐号没被登录。吃了这个惨痛的教训,我开始研究 chrome password manger 的安全问题,才发现 chrome 保存密码等于裸奔。

一篇解释如何获取 chrome 保存的密码的文章: https://ohyicong.medium.com/how-to-hack-chrome-password-with-python-1bedc167be3d

如果用 chrome 自带的密码管理保存密码,任何一个运行在你电脑上的程序,不需要管理员权限,都能解密并读取本地保存的密码。因为 chrome 的密码保存在本地加密的 sqlite 中,同时加解密密钥也明文保存在本地文件里,任何程序都能读取。

加密 sqlite 文件路径: C:\Users<PC Name>\AppData\Local\Google\Chrome\User Data\Default\Login Data

解密密钥文件路径 C:\Users<PC Name>\AppData\Local\Google\Chrome\User Data\Local State

额外说明一点是解密需要用到 win32 提供的 API CryptUnprotectData 函数,这个函数保证解密是和加密在同一台电脑(用户)进行的,所以如果直接复制硬盘的浏览器数据到其他电脑上是解密不了的,但是只要你的 Windows 登录了,任何程序只要想都可以解密 chrome 的密码然后上传。

现在考虑转 bitwarden 中。

58770 次点击
所在节点    信息安全
294 条回复
Helsing
2022-08-15 00:05:14 +08:00
看了一遍评论,很佩服某些人的洗地和对国外软件犯错的宽容度之高。要是国产软件,别说这么严重的安全问题,可能一个小问题就已经被喷出翔了……
patrickyoung
2022-08-15 00:12:34 +08:00
复习一下身份认证的三个要素:
- something you know
- something you have
- something you are

1. 你的终端是 something you have ,那么你主动运行了解密的程序,算是一种授权
2. Windows 系统账户登陆密码是 something you know ,你主动输入了密码 ( Windows 10 登陆状态下通过浏览器查看明文,需要二次输入账户密码。但是用了系统的 DPAPI CryptUnprotectData 函数解密是没问题的,你的终端都 Compromise 了,就好比:你家里已经进了贼,你跟贼说,别看这里。或者说:你家里已经进了贼 = 你已经把钥匙 /密码给了贼,然后你说 “贼,别看我小本本”,可能吗?是 Google 家的工程师是 SB 还是楼主半瓶醋?

你告诉我一下,如果你的终端已经 Compromise 什么有用? Master Key 加密后( 1Password )在本地的缓存密码同样是可以解密的,那按你的逻辑类推,1Password 只是用了不是系统从你的账户密码 Derive 出的 Key 而已,其他的都是使用了同样是公开的算法和 API ,网上有大把的解密程序,是不是 1Password 这样都不安全?

3. 你或许会说 Windows 有问题,为什么调用这种函数不二次验证?那么系统 Keychain , 也就是 @ysc3839 提到的 Credential Manager 里面的东西也是用这个函数加密的。系统里还有大量的需要加密的数据,这个过程是用户无感知的,如果每次都要这样验证对应的 Windows Desktop Session Token 对应的 Password ,那么我估计你下一个帖子就是微软的工程师是 SB 。

@juejinloop 至于你说 Linux / Mac 的就更是扯淡了,Mac 的系统 Keychain 依然是需要二次验证密码 / touch id / face id 。Linux 默认的 Chrome 密钥存储依赖于 org.freedesktop.secrets 的实现,狭义来说,目前 API 完善,使用广泛的就是 Gnome Keyring 和 KDE Kwallet ,也是类似的算法。也不是明文存储。

不要把其他家的工程师和 Security and Compliance 团队当 SB 。
ST0RMTR00PER
2022-08-15 00:13:21 +08:00
难道重点不是为什么会中毒吗?上网二十年都没中度过。
patrickyoung
2022-08-15 00:15:59 +08:00
@juejinloop 来,我告诉你,BitWarden 的 Desktop Client ,在你登陆解锁之后默认的 Vault Lockout 是 Never ,而且默认的 Clear Clipboard 也是 Never ,意味着什么?意味着只要你打开系统,解锁 Bitwarden 之后就是可以被任何人随意读取操作的,甚至你复制了密码,都会被任何能读取剪贴板的程序读取。

那么按照你的逻辑,Windows 下任何应用都可以读取 Clipboard ,在你的终端 Compromised 的情况下,任何人有权随时使用 RAT 操作你的电脑,接下来 Bitwarden 也是不安全的。

建议别用密码管理器,用脑子记着,忘了就自己认栽。
param
2022-08-15 00:32:28 +08:00
文件系统上有种东西叫做权限。
通常来说,你利用 nginx 的漏洞 hack 进了去了,也读不到 mysql 的存储文件,因为通常 nginx 会用一个特定的用户来运行,而这个特定的用户并没有权限读取 mysql 的数据文件。
有人提到从内存中 dump 数据的,只要有权限的区分,chrome 的数据存在专有的内存空间中,其他应用就没办法读取得到。
在 Android 上,微信 QQ 能随便读到 chrome 的内容吗?不能。因为给 chrome 存储数据的区域是 chrome 特有的,只能给 chrome 来读写,其他应用无法读取。

所以:
1. 要怪 chrome 没有利用好权限机制
2. 要怪 windows 没有良好的权限机制提供给 chrome 去使用
3. 要怪使用者自己没有做好权限控制。我看楼上有些人说用火绒可以自己加权限规则,2022 年了,这种权限机制还要靠第三方应用来实现吗?

以上说的只是运行第三方不可信程序时的应对方式,而楼主提到的「中毒」,应该是说已经被拿到最高权限的意思了吧?拿到最高权限,怎么控制权限都没用。

想象一种情况是,公安收走了你的设备,将硬盘数据拷了出来,而如果是 android ,只要对方无法解锁,那么数据还是安全的。而像 windows 这种,按照楼主的说法,也并不是完完全全的明文,还是需要调解密接口的吧,是不是只要 windows 不解锁,也一样无法解密呢?
dototototo
2022-08-15 00:34:51 +08:00
没有实际在 Chrome 上保存过密码,如果真如楼主所说的这般,我会想到那些明文存储用户密码被脱裤的大厂们。
yvkino
2022-08-15 00:57:28 +08:00
webauthn 何时才能普及
int80
2022-08-15 01:45:05 +08:00
@shequ2046 照你这逻辑,为什么还要有密码呢,全上 2fa 不就行了?
ysc3839
2022-08-15 01:48:45 +08:00
@paradoxs 是的,但那仅仅对商店应用有效,非商店应用只能限制访问桌面、下载等几个特定的文件夹。
Osk
2022-08-15 01:52:33 +08:00
一直知道 Windows 上 chrome 不安全, 所以基本没有使用浏览器记录密码.

另外, edge 针对这个问题做过改进:
1. 填充密码时需要认证(Windows 账户密码), 但上面有人说了, 这是防 edge 自己的?

2. 使用主密码, 填充前需要输入主密码.
ysc3839
2022-08-15 01:59:25 +08:00
@patrickyoung @param 我觉得本质的问题还是传统桌面操作系统没有应用级别的权限隔离,默认以用户身份运行就是用户授权了。Android 没有这个问题,正是因为它有应用级别的沙盒。
macOS 的 Keychain 就有“允许某程序访问该条目”的功能,一定程度上能缓解这种问题。
iseki
2022-08-15 02:13:47 +08:00
早就知道这个问题了,除了那种每次使用前要你输入主密钥或者过一次 Windows Hello 之类的东西,都不安全……
所以个人很反感电脑上运行国产 /其他看着就不太行的软件,Windows 没有对应用程序的隔离,这个问题就没什么办法
3dwelcome
2022-08-15 02:13:57 +08:00
楼主你要这样想,病毒能读取你的 C:\Users<PC Name>\AppData 信息,肯定也能读取你的磁盘,你的代码,你公司的 SSH 远程帐号。

被盗几个帐号不吓人,公司服务器被黑了,公司代码被盗了,那你可是要背大锅的。
3dwelcome
2022-08-15 02:19:51 +08:00
@ysc3839 感觉 chrome 可以申请用 windows 管理员运行,读写账号密码,只有超级管理员才有访问权限。

那么普通的病毒 exe 如果没有人工提权,敏感文件也是没办法读取的。
ysc3839
2022-08-15 03:31:40 +08:00
@3dwelcome 感觉这么做治标不治本,还是没有解决不同应用隔离的问题。而且微软员工曾经说过 UAC 不是安全机制,只有管理员和非管理员用户分开才能保证安全,那么这种做法对于大多数用户来说就是无效的。
https://devblogs.microsoft.com/oldnewthing/20160816-00/?p=94105
https://web.archive.org/web/20111216020913/http://channel9.msdn.com/Forums/Coffeehouse/473037-UAC-controversy-the-last-episode/773c9d79f8df4fa8bc489deb00e05c3d
yagamil
2022-08-15 04:03:24 +08:00
平时一些交易类的网站,邮箱不会用 chrome 保存密码,论坛这种就使用自带的 chrome 保存密码。这种泄露了无伤大雅的网站就随缘了吧。 也许人家网站已经被人拖过 x 次库了。
huangsen365
2022-08-15 04:09:27 +08:00
所以 Chrome 默认自带了“建议设置复杂密码”随机复杂 然后 不要全部所有网站平台系统服务共用相同密码… 最后加上结合 MFA 验证码手机短信之类的… 不然 你保存在哪里还不是一样明文保存?
NIIIIIIIIIICE
2022-08-15 08:21:42 +08:00
enpass 好用
estk
2022-08-15 08:31:51 +08:00
win64 或者 mac 也可以被读取吗?
那个密码的密钥是跟着谷歌账号走吧?换电脑登陆谷歌账号密码也同步
MEIerer
2022-08-15 08:39:05 +08:00
感觉使用谨慎点就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/872745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX