密码管理器的攻防博弈

作为一个会每天访问Freebuf网站的人,或者说是一个对信息安全感兴趣的人,肯定会知道一位用户所有的网络账号不应该都使用相同的密码,这也是一个最基本的安全常识。可是那然后呢?

Clipboard Image.png

  前言

那么为了让每一个账号都能拥有一个健壮的密码,你可能就需要用到密码管理器了。也许当你第一次使用密码管理器的时候,你心里会有些忐忑不安,毕竟你将所有的密码都放在了这一个地方,而你又可以跨设备跨平台地通过云端来同步自己的密码,这种便捷性肯定会让每一个用户对密码管理器的安全产生质疑。

悲剧的是,你的质疑是对的。在这篇标题为《密码管理器:攻击与防御》【点我下载】的论文中,作者David Silver告诉了我们很多密码管理器中都存在严重的安全漏洞,而这些漏洞与密码自动填写有着密切的联系。虽然这是一篇发表于2014年的论文,其中描述的很多攻击向量可能已经失效了,但是本文是我研读完这篇论文之后所得到的启发,也许我的这些观点和看法可以给大家带来很多灵感,而且我认为这些攻击方法的变种版本目前仍然是有效的。

简而言之,请各位不要再使用表单自动填写功能了!了!了!重要的事情说三遍…

坐在咖啡店角落里的黑客

这种攻击者可以主动发动中间人攻击,即拦截并修改目标网络中通信双方的任意网络流量数据。但是在这种攻击场景中,用户并不需要明确地访问或登录任何一个页面,攻击者仍然可以窃取用户的登录凭证。

Clipboard Image.png

比如说,攻击者只需要在某家咖啡店建立一个伪造的WiFi热点,当你连接至该热点之后,你的密码就全部到攻击者的手中了。这种攻击方法非常简单,攻击者只需要一个临时的网络路由器就可以发动攻击,而且这种情况在现实场景中也会经常发生。在大多数情况下,用户根本无需与钓鱼网站进行任何交互,攻击者可以在用户毫不知情的情况下窃取所有的密码。

Sweep攻击

基本上,任何支持密码表单自动填写的密码管理器都无法抵御Sweep攻击。当目标用户连接到了一个由攻击者控制的流氓WiFi热点之后,攻击就悄悄发生了…

当用户启动浏览器之后,浏览器会被重定向至一个标准的热点登录页面,并询问用户是否同意WiFi使用条款。对于公共WiFi热点来说,这种情况很常见,而且绝大多数用户都会选择同意。但是用户可能压根就不知道这个页面中存在不可见的HTML元素,而这个隐藏元素已经完成了所有的攻击。

换句话说,当你正在阅读这个已经加载完成了的WiFi登录页面时,你绝大多数的登录凭证早就已经“不翼而飞”了。在测试环境下,我们每秒钟大约可以从目标设备中提取出十个密码。

以下是三种Sweep攻击者在登录页面中最常用的密码窃取技术:

  1. 在页面中嵌入一个不可见的iFrame,然后再让这个iFrame指向任意站点的任意页面。当浏览器加载完所有的frame之后,攻击者就可以在每一个frame中注入一个登录表单和JavaScript脚本。此时,一个拥有密码表单自动填写功能的密码管理器就会毫不犹豫地将相应的密码填写进去。比如说,攻击者想要窃取目标用户的QQ号和微博账号,那么他就可以在这个隐藏的iFrame元素中嵌入两个frame,然后分别让每一个frame指向包含QQ登录表单和微博登录表单的页面,如果此时用户的密码管理器中保存了QQ密码和微博密码的话,攻击也就成功了。
  2. 除了iFrame之外,攻击者还可以使用多重窗口来实现攻击。攻击者可以在用户获得WiFi网络使用权之前强制弹出一个窗口,然后提醒用户允许所有的弹窗。虽然相比iFrame来说,弹窗的形式可能比较容易吸引注意,但我们可以通过注入恶意JS代码或将窗口放置屏幕边缘来尽量增加它的隐蔽性。当攻击者成功获得密码之后,可以立刻关闭这些窗口。
  3. 第三种方法就是使用一系列的重定向链接。当用户请求某个页面时,攻击者可以将用户请求重定向至另一个网站(例如攻击者希望窃取的密码所属站点),然后通过注入恶意JS代码向页面添加一个登录表单,并隐藏页面的其他内容。当密码管理器自动填写了密码之后,密码就会被自动提取出来,然后浏览器又会被重定向至下一个目标站点,然后以此类推,不断地往下,最后才会加载用户当初所要访问的那个页面。然而,这一切对于用户来说,他们只会感觉这个WiFi网络速度很慢…

在2014年的时候,也就是这篇论文发表的时候,研究人员对下图所示的密码管理器进行了测试,结果如下:

Clipboard Image.png

  注入

Sweep攻击要求攻击者具备发动中间人攻击和修改目标站点的能力,当用户访问的目标页面正好是登录页面的时候,攻击就会非常简单了。实际上,只要是目标页面与登录页面是同源的,就已经足够了,因为所有的密码管理器都会自动将保存的密码与域名进行绑定,并且会忽略掉登录页面的实际路径。

另外一种网站比较容易受攻击的情况就是,使用HTTP来加载登录表单,然后使用HTTPS来提交表单内容,这是一种非常不好的实践方式。根据2013年10月份的一项调查数据,AlexaTop 500的网站中有17%的网站其登录表单是存在这种问题的。虽然现在已经是2017年了,但我认为这种现象依旧存在。

任何一个HTTPS页面如果通过HTTP来获取动态内容的话,那么这个页面就是不安全的,而目前大多数浏览器都会屏蔽这些页面。在这种情况下,即便登录页面使用的是HTTPS,该网站任何页面中的XSS漏洞都将有可能被正常触发。实际上,攻击者只需要利用一个XSS漏洞就能完成攻击,而且完全不需要搭建流氓WiFi热点,攻击者只需要欺骗用户去访问他们所控制的恶意页面即可。

由错误的证书所导致的HTTPS通信异常也有可能允许攻击者利用一个修改后的登录页面(使用自签名证书)来发动攻击。浏览器会检测到这种异常,但用户往往会直接忽略警告。

密码提取

当伪造页面中的JS脚本获取到了用户密码之后,提取密码的过程就非常简单了。一种方法是加载一个不可见的iFrame,然后将用户凭证通过参数来传递。另一种方法是修改登录表单的action参数,然后将用户凭证通过表单提交至攻击者控制的站点。

如果密码管理器没有自动填写密码的话,该怎么办呢?

目前为止,本文所描述的全部攻击方法可以正常工作的前提就是:用户无需直接与登录表单进行交互,密码管理器的密码自动填写功能可以正常工作并自动填写密码。但是,论文中介绍的密码提取技术与登录表单是如何填写的没有多大关系。简而言之,只要表单中填写了密码,我们就可以获取到,无论这个密码是用户手动输入的还是系统自动填写的。

论文作者介绍的是一种点击劫持攻击,该技术在本文的这种攻击场景下能够正常工作,但唯一不足之处就是一次只能提取出一个账户密码。关于该技术的详细内容请参阅论文原文【传送门】。

应对措施

最有效的防御措施就是采用Secure Filling(安全填写),如果你想体验Secure Filling,那么你将需要一个修改版的浏览器以及一个可以与之协同工作的修改版密码管理器。

如果登录页面是通过HTTP加载,并使用HTTPS提交,那么当这个登录表单填写完成之后,就没有任何一款浏览器或密码管理器能够保证用户密码的安全了。因为JavaScript脚本不仅可以直接从表单中读取出密码,还可以修改表单的action属性,并将密码发送给攻击者。Secure Filling技术的作用就在于,如果攻击者向登录页面注入了恶意JS代码的话,只要表单是通过HTTPS提交的,那么用户密码就是安全的。

Clipboard Image.png

  Secure Filling技术要求:

  1. 当密码管理器首次保存用户名和密码时,需要保存此时登录表单中的action参数值。
  2. 当密码管理器自动填写完登录表单之后,禁止JS代码访问该表单(因此需要一个修改版的浏览器)。
  3. 在密码自动填写的过程中,如果用户名或密码文本域被修改了,那么密码管理器会放弃填写,并清除已填写的内容。
  4. 当填写完成的表单提交,并且该运行的JS代码全部运行完成之后,浏览器需要检测当前表单的action参数值是否与一开始保存的表单action相同,只有在参数值相同的时候浏览器才会真正提交表单数据。

结束语

这些问题已经上报给了相关的密码管理器服务商,并且厂商也修改了各自密码管理器的自动填写策略。由于本论文所发现的问题,LastPass将不再对iFrame中的密码文本域进行自动填写,1Password也不再自动填写HTTP页面中的密码表单了。

本文转自d1net(转载)

时间: 2024-11-01 05:18:04

密码管理器的攻防博弈的相关文章

谁是互联时代的最佳密码管理器?

  好像称赞KeePass Password Safe已经持续了好多年了,这是一款开源免费的存储软件,可以用来存储你网页中全部密码与相关笔记.你可以在不同的设备上同步你的KeePass,我们同样建议读者可以将其数据库存储到Dropbox中.不过我们最近十分好奇与KeePass相比,另一款著名的浏览器密码管理器LastPass作为一站式的解决方案,是否在使用上更高级一些.为此在这个月,我们邀请了两位试用者来进行一次针锋相对的测试. 第一轮对决:设置 KeePass是一款很直截了当的数据库.在选择你

Ubuntu15.04安装Enpass安全密码管理器教程

  Enpass 桌面版完全免费,如果要使用移动版本的话,会有相应的购买费用.默认情况下 Enpass 采用 256-bit AES 算法对用户数据进行加密存储,提供了从其它密码管理应用导入数据的导向功能,我们可以非常方便的垮平台进行数据导入.现在我们就来看看,如何在Ubuntu 15.04中安装Enpass安全密码管理器. Ubuntu 15.04安装Enpass 1使用如下命令添加 Enpass 安装源 echo "deb http://repo.sinew.in/ stable main&

3款开源的密码管理器 拿走不谢

使用一款安全开源的密码管理器来储存唯一.复杂的密码来保护你数据及账户的安全. 为你使用的每个站点和服务维护一份唯一.复杂的密码是安全专家每年给公众最常提的建议. 然而不管说过多少遍,几乎每周我们都能听到 XX 网站又被黑了的新闻,问题是这些网站的用户们就爱用一些像"12345"或"password"这样的口令来保护他们的账号. 或许用户对经典的密码做了足够的变形,符合了网站所要求的最低的密码规则.但不幸的是,"Pa$$w0rd!"也不是真正意义上

Linux 下的密码管理器:Keeweb

如今,我们依赖于越来越多的线上服务.我们每注册一个线上服务,就要设置一个密码;如此,我们就不得不记住数以百计的密码.这样对于每个人来说,都很容易忘记密码.我将在本文中介绍 Keeweb,它是一款 Linux 密码管理器,可以为你离线或在线地安全存储所有的密码. 当谈及 Linux 密码管理器时,我们会发现有很多这样的软件.我们已经在 LinuxAndUbuntu 上讨论过像 Keepass 和 Encryptr,一个基于零知识系统的密码管理器 这样的密码管理器.Keeweb 则是另外一款我们将在

密码管理器反而导致密码泄露,LastPass扩展成罪魁祸首

3月22日讯 密码库LastPass已经对其高危安全漏洞进行修复,各恶意网站此前已经利用这些漏洞窃取到数百万条受害者密码内容. 密码管理器反而导致密码泄露,LastPass扩展成罪魁祸首-E安全 这项安全漏洞由一名来自谷歌Project Zero项目安全团队的白帽黑客Tavis Ormandy所发现.他通过研究指出,LastPass Chrome扩展中存在一个可利用的内容脚本,将导致恶意网页能够从该管理器内提取到密码内容. 谷歌Chrome插件LastPass的作用在于将用户的密码存储于云端.其

密码管理器OneLogin遭遇黑客攻击,企业客户敏感数据已被泄漏

本文讲的是密码管理器OneLogin遭遇黑客攻击,企业客户敏感数据已被泄漏,OneLogin是一家为用户提供SSO(单点登录)服务的公司,近日该公司发生了黑客入侵事件. OneLogin首席安全官Alvaro Hoyos在一篇简短的博客文章中表示,他们已经意识到其美国用户的数据遭到了攻击者"未经授权的访问",并已经向相关用户发出了安全通知. Hoyos表示,公司已经在发现问题的第一时间,采取行动阻断了未经授权的访问行为,并正在与执法部分进行合作彻底调查此次事件. 该公司最初发布的博客文

小心你的密码管理器 LastPass曝出安全漏洞

今天,各种各样的金融账户.网络帐户.个人信息都需要用到密码,但对于大多数人来说,常用的密码十分有限,而且一旦使用长一些.复杂一些的新密码后,往往一段时间过后便被忘的一干二净.所以,目前有数以百万计的人依靠密码管理器来保存他们的密码,并帮助他们保障其各类网络帐户的安全.不过,密码管理器也不是万能的,近期一款流行的免费密码管理器--LastPass就被曝出了安全漏洞,使用它的用户需要多多注意了. 警惕密码管理器漏洞 上周,来自Google(谷歌)安全团队的研究人员Tavis Ormandy,发现了L

在线密码管理器LastPass被黑

本文讲的是 在线密码管理器LastPass被黑,在线密码管理器LastPass公司在上周五公布了其网络被黑事件,LastPass用户将会看到建议修改主密码的弹出框. 经过深入调查公司安全团队检测到的"可疑活动",LastPass公司在周一发布的一篇博客帖子中透露了此次遭受攻击事件.调查并未发现有任何迹象显示攻击者盗取了用户密码库中的加密数据,LastPass用户账户也并未被侵入者染指.即便如此,攻击者依然偷取了账户电子邮件地址.密码提示信息.用户服务器salt值和身份认真散列值. 后两

比LastPass、1Password更安全的密码管理器,Horcrux是怎么实现的?

本文讲的是比LastPass.1Password更安全的密码管理器,Horcrux是怎么实现的?, 弗吉尼亚大学的两位研究人员设计了一款新的密码管理器Horcrux,和现有密码管理器机制很是不同. 研究人员称Horcrux是密码管理器产品里的"偏执狂",因为它在安全.隐私以及处理用户密码上有独特的设计,相比LastPass和1Password等主流密码管理器要更可靠. 它们之间有两个主要区别. 虚拟表单 第一个是在网页插入用户账号密码的方式,现在的密码管理器都是直接填写. "