我不明白彩虹表攻击的这一部分。
在我所有的谷歌搜索中,它都说黑客在密码哈希上使用了彩虹表。
但是黑客首先是如何获得密码哈希的呢?
我已经从上一个已关闭的问题中改写了这个问题: 当黑客已经可以访问用户密码数据库时,如何对密码进行加盐处理?
如果黑客已经有了密码哈希,他就不能用它们来破解系统吗?
我不明白彩虹表攻击的这一部分。
在我所有的谷歌搜索中,它都说黑客在密码哈希上使用了彩虹表。
但是黑客首先是如何获得密码哈希的呢?
我已经从上一个已关闭的问题中改写了这个问题: 当黑客已经可以访问用户密码数据库时,如何对密码进行加盐处理?
如果黑客已经有了密码哈希,他就不能用它们来破解系统吗?
如何:
绝大多数情况涉及不安全的数据库/备份(几乎涵盖所有技术:S3、mongodb、cassandra、mysql 等....)。这些通常是由于配置错误、错误的默认设置或粗心造成的。
泄露了哪些数据:
这些通常至少提供对数据库中包含的部分或全部数据的只读访问权限,包括用户名和散列和加盐密码。
这些转储包括大量私人用户记录。明文密码(或使用简单的哈希,例如md5
)甚至更成问题,因为该数据可用于撞库攻击(通过在不同网站上尝试相同的用户名/密码组合),可能访问更多数据。
如何处理密码哈希:
如果攻击者可以访问散列和加盐密码,他们不能只将其提供给服务器进行身份验证。在登录时,服务器计算hash(salt + plaintext_password)
并将其与存储在数据库中的值进行比较。如果攻击者试图使用哈希,服务器只会计算hash(salt + incoming_hash)
,从而导致错误的值。
可能会带来很多麻烦的一种情况是仅限客户端的密码散列。如果客户端计算并发送到hash(salt + plaintext_password)
登录端点,则存储的哈希可用于登录。仅这一点就表明这样做是多么危险。有一些算法可以将一些工作卸载到客户端(例如SCRAM),但它们涉及更彻底的客户端-服务器交换以完全防止这种情况。
密码存储安全性担心攻击者从存储的值中获取真正的密码。它不关心针对服务器的其他攻击向量。
如果黑客已经有了密码哈希,他就不能用它们来破解系统吗?
除非您谈论的是 Windows 环境中的 NTLM 哈希(在某些条件下),否则攻击者需要破解它们。并非所有系统都允许使用加密哈希进行身份验证。
对散列密码执行密码分析包括生成字符序列,使用相同的方法散列它们并比较结果(您可能需要使用其他信息,如用户名在计算中用作盐)。就是这么简单。而且按照设计(1)也非常低效。
彩虹表是一种方法,您可以通过该方法预先计算要散列的明文表(可能使用 salting(2))。给定一个你想破解的哈希,你只需查找纯文本密码。它几乎是即时的。这是一种权衡,您在破解时刻之前将计算时间花费在存储费用上。复杂的是,彩虹表也需要很长时间来构建 (2) 并且会占用大量存储空间(GB 到 TB,但没有真正的限制)。
(1) 哈希算法如果需要大量计算能力来计算是有效的,这意味着一次计算(登录时)相对便宜,但大量计算需要很长时间才能完成,因此降低了有效性暴力破解;
(2) 如果散列算法中涉及加盐(通常是这样,而且是正确的),基于彩虹表的密码分析会失去效率,因为每个盐元素都需要一个表。由于经常将用户名用作盐,因此您需要为每个用户名生成一个表……如果您事先知道的话。这仍然有用,例如为“管理员”帐户保留预先计算的表格;
嗯,第一件事是……什么是彩虹桌?
彩虹表是最常见 X# 密码的哈希值列表。'Password'、'Password123'、'baseball'、'batman1' 等 - 使用目标系统使用的散列算法对它们进行散列。
然后,检查受损 SQL 表中的任何列是否与 Rainbow 表中的任何条目匹配。条目 '73def92a987efa98b987da' 匹配用户 'bob bobson' - 你查看你的彩虹表并看到该条目对应于 'letmein',所以你破解了 bob 的密码。实际上,您不会只是破解bob 的密码 - 您会破解所有拥有该密码的人,因为 hash('letmein') 对他们所有人来说都是一样的。
就是这样 - Rainbow Tables 不是针对特定帐户的。它们是一种获得最低挂果的方法。你可能只用你的表破解了 20% 的密码……但这意味着你破解了 20% 的帐户!. 当您可以快速入侵数千个安全性最弱的帐户时,为什么还要尝试破解特定帐户?
那么(适当的)盐腌有什么作用呢?它为每个帐户应用不同的值。Bob 的密码前面有一个盐 '123';爱丽丝的盐前缀为“468”。因此,即使他们使用相同的密码,他们的散列条目也不相同——彩虹表也无济于事。Salting 可以防止黑客试图同时入侵每个人的帐户,并迫使他们一次只做一个记录。
(顺便说一句,这就是为什么你会看到安全人员尖叫着说Never Reuse A Salt。因为如果所有记录都使用相同的盐?那么攻击者可以使用固定的盐重新计算 Rainbox 表,然后再一次能够同时攻击每个人的帐户。)