由于心脏出血,我应该更改所有密码吗
简短的回答:是的,所有密码。
长答案:乍一看,您只需要更改证书的密钥即可。但由于多种原因,所有密码都会受到影响。原因如下:
原因一:链式攻击
- 有人窃取了证书的密钥。从那时起,他就可以解密该网站的所有流量。
- 如果您登录该网站上的任何服务,您的密码就会被泄露。可能最常见的服务是 Webmail,所以让我们以它为例。
- 通过阅读您的电子邮件,攻击者发现了您正在使用的其他服务。
- 使用密码重置机制,攻击者只需重置所有密码,确认重置电子邮件并删除这些电子邮件。
- 攻击者现在可以访问您的所有服务。
- 网站所有者(其密钥被盗)意识到安全漏洞并修复它。该服务(我们假设 Webmail)不再易受攻击。
- 网站所有者通知您有关泄漏并要求您更改密码。
- 只要您没有注意到您无法再登录(因为他更改了密码),攻击者仍然可以使用所有其他服务。这意味着:对于您经常使用的服务,它更有可能检测到它被滥用。对于您不经常使用的服务,您不会注意到。
因此,您至少必须检查每个密码,无论它是否受到影响。
这个攻击向量的好处是:你会意识到这个问题。
原因2:访问数据库
- 有人窃取了证书的密钥。从那时起,他就可以解密该站点的所有流量。
- 如果网站管理员登录进行一些管理、审核或其他操作,攻击者现在拥有管理员密码。
- 使用该密码,攻击者可以访问数据库。
- 根据数据库的安全性,攻击者可以读取
- 用户名
- 明文密码(最坏情况)
- 易受攻击的密码哈希(例如 MD5 哈希,未加盐)(坏情况)
- 安全的加盐哈希(最好的情况)
- 攻击者根据哈希计算密码
- 网站所有者解决了问题
- 网站所有者通知您更改密码。
由于您作为用户无法知道密码在数据库中存储的安全程度,因此您需要考虑攻击者拥有密码(和用户名)。如果您将密码用于其他服务,这是一个问题。
坏事:您不知道自己是否受到影响,因为登录到其他服务仍然有效(对您和攻击者而言)。
唯一的解决方案:更改所有密码。
原因3:不仅秘密证书密钥被泄露
I looked at some of the data dumps
from vulnerable sites,
and it was ... bad.
I saw emails, passwords, password hints.
正如XKCD #1353所发布的:
因此,即使没有访问数据库且没有链式攻击,攻击者也可能已经获得了纯文本密码。
笔记
@Iszy 描述的第二个问题仍然存在:等待更改密码,直到服务修复 Heartbleed 问题。这是一个关键的关键问题,因为只有在您使用的所有服务都更新后,您才能可靠地更改所有密码。
不,您不必因为 heartbleed 而更改所有密码。您必须更改所有密码,因为每个人似乎都变成了一大群惊慌失措的羊;更改密码会给您一种在奔向最终目的地(很可能就在最近的悬崖边)时做一些有用的事情的温暖感觉。这就是羊的命运。
当你隐喻地坠入死亡时,你将有时间思考人类大脑在最需要它们的时候停止正常运作的惊人能力。
编辑:好的,只是为了完成它,这里有一些以更无聊的方式表达的注意事项。
心脏出血错误很严重。没有人对此提出异议(嗯,有些人有,但总有这样的人)。另一个答案详细解释了如何利用该错误来严重损害目标服务器的安全性。实际上,这意味着尽管该错误是只读缓冲区溢出,但这可能足以使其后果与写入缓冲区溢出(经典类型的缓冲区溢出)的后果相提并论。
然而,在整个令人心血的“辩论”中,三个明显的谬误在起作用(嗯,“辩论”可能不是正确的词;“恐慌的暴民”会更接近真相)。这些是:
谬误1:这个错误是例外的。这个是完全错误的。缓冲区溢出在管理良好和经验丰富的代码中相对不常见,但任何重要的 C 代码片段中都必须潜伏一些溢出。对于 Web 服务器,OpenSSL 以及 Apache(及其模块!)和内核中的溢出和其他漏洞(例如 use-after-free)是相关的。这样的事情经常发生,比如每年几次。正如耸人听闻的文章所声称的那样,不是每十年一次。
这种谬论是危险的,因为它让草率的管理员相信他们可以不定期应用安全补丁而侥幸逃脱;他们相信他们可以只是“反应性”,只有在新闻出现时才做某事。
谬误2:我们都在两年前被黑客入侵过。这取决于量化的暂停:如果某件事在理论上是可能的,只需假设它已经发生,无论它多么不可能。这通常以“不希望对安全性做出任何妥协”的正义主张来证明这一点,这与最佳实践和现实都背道而驰。每个安全功能都有成本,必须与预期的风险和后果相平衡。在这种情况下,有人声称该漏洞已经存在两年了,很明显它已被 <insert-name-here> 利用了两年。
声称心脏出血是服务器整个代码堆栈中的最后一个错误是荒谬的。经验表明,在某个地方总是至少还有一个错误。结果是,如果攻击者被“允许”比其他人早几年意识到错误,那么他们仍然可以控制您的服务器。如果您因为 heartbleed 错误而必须重置密钥或密码,那么按照相同的逻辑,您必须再次执行此操作。然后再次。这在实践中是站不住脚的。在某些时候,必须假设服务器可能没有受到攻击,尽管存在潜在的漏洞。替代方案是仅使用已证明的代码没有错误(有很大的机会;美国宇航局每行代码花费 20000 美元,以使其尽可能没有错误,但他们仍然有错误);或者根本不操作 Web 服务器(唯一没有错误的代码是不存在的代码)。
谬误3:重置密码会清理服务器。假设您坚信攻击者确实利用了 heartbleed 漏洞,并获得了您所有最深的秘密。你会怎么做?你重置密码和私钥,然后……就这样?只有当私钥和用户的密码是服务器中唯一的私人物品时,这种做法才有意义。那是什么样的服务器呢?为什么访问只包含公共数据的服务器需要密码?
正如另一个答案所说,攻击者可能已经利用该错误来“获得对数据库的访问权限”。此时整个数据库内容都在他手中,而不仅仅是散列密码;他也可能改变了其中的一部分,并植入了恶意代码(例如能够回来的后门)。这种攻击者可能实施的恶作剧是没有止境的。仅仅重置密码和更改证书密钥就像用拖把来处理泰坦尼克号客舱地板上的过多水分;它没有抓住重点。如果您真的相信可能已经发生了妥协,那么只有一件事要做:从轨道上对其进行核打击。如果你妥协,只需重置密码,就表明您并不认真相信自己的理由;您重置公共关系的密码,而不是因为实际可疑的攻击。
所以你有了它:对源于过度炒作的错误(严重,但仍然被过度炒作)的幻想攻击的无效对策,这让糟糕的系统管理员在他们的不良做法中感到安慰。绵羊先生,请见见克里夫夫人。我相信你们会相处得很好。
在易受 Heartbleed 影响的网站上更改密码仅在以下情况下有效:
- 该站点已被修补为 OpenSSL 的非易受攻击版本,或切换为使用不同的 SSL 实现。
- 新的 SSL 证书已颁发并应用于该站点。
- 该站点的旧 SSL 证书已被吊销。
作为最终用户,以上所有这些都超出了您的控制范围,最好等待网站所有者确认他们已完全缓解了该漏洞。
也就是说,遵循最佳实践(例如为所有网站使用复杂且唯一的密码)仍然有助于减轻密码泄露的影响。无论最新和最严重的漏洞新闻说什么,这都是您应该做的事情。它还有助于简化您自己对此类问题的响应,因为您只需要更改受影响网站上的密码,而不需要更改所有其他网站的密码。
是的,您应该始终更改所有密码。
您永远不知道何时有人可能泄露了您的密码。而且真的不确定今天没有发生最坏的情况,唯一明智的行动是采取一切可能的措施来保护自己。
明天也一样。