Windows 7 密码哈希安全

信息安全 密码学 密码 视窗 哈希
2021-09-05 01:33:16

我最近遇到了一些消息 来源,它们表明通过检查密码哈希很容易破解 Windows 用户帐户密码。

我知道这些哈希以两种格式存储在SAM文件中: LMNTLMLM 是不安全的(从 Vista 开始,没有存储有意义的,对吧?)。然而,NTLM 在密码学上也很弱,也可以被快速破解。

无论如何,即使使用我认为“强”的密码,我也看到它们在几分钟内就被破解了——只需将计算机从闪存驱动器重新启动到 Linux,然后运行一个程序从哈希。在我看来,这似乎是一个巨大的漏洞。

关于防止这种情况我能在网上找到的唯一一件事是使用更长的密码,以确保较弱的 LM 哈希没有意义——但 NTLM 仍然很弱。

有人知道如何防范此类攻击吗?

3个回答

在所有这些答案中,我正在考虑从被盗散列中恢复密码(或等效密码)的问题,该散列存储在攻击者可以获得读取访问权限的服务器中。

NTLM 散列很弱,但没有旧的 LM 散列那么弱。

旧的 LM 哈希包括几个资本弱点:

  • 不区分大小写。
  • 限制为 14 个字符。
  • 将密码分成两个 7 个字符的部分,分别进行哈希处理。

最后一个弱点允许非常有效的破解(无论选择密码时是否小心);有关详细信息,请参阅此答案

较旧的 NTLM 只是通过密码计算的MD4 。这一次,密码区分大小写,并且可能很长。关于真正的最大密码长度存在一些争议,显然可以达到 127 个字符左右。由于 MD4 是通过密码的 UTF-16 编码计算的,理论上可以使用整个Unicode范围,但是由于用户需要定期输入密码(并且没有视觉反馈),因此使用超出可打印 ASCII 集的字符正在寻找麻烦。

NTLM 散列的弱点在于它是无盐的,而且 MD4速度很快(MD4 也以多种方式被密码破解,但不是用于密码散列的原始原像抗性;为此,MD4 与以往一样强大曾是)。MD4 实际上比 MD5 快。最近的 GPU每秒将计算数十亿个 MD4 实例。这使得攻击者可以轻松探索大量潜在密码(即所谓的字典攻击)。唯一的防御措施是从更广泛的集合中选择您的密码。

让我们对其进行一些数学运算:由于 NTLM 是无盐的,因此一组专门的攻击者可能会发现构建一个大彩虹表是值得的有各种可能的优化,但通常情况下,事情会是这样的:

  • 有一个安全参数,称为t这是彩虹表中链条的平均长度。
  • 如果表所涵盖的密码集大小为N,则存储需求约为10*N/t字节(每个排序链端 10 字节是合理的估计)。
  • 构建表需要大约1.7*N次散列函数调用的成本。
  • 用表攻击一个密码需要计算大约t 2倍的散列函数,并在表中进行t次查找。

如果将表拆分为一百多个机械硬盘,则每秒可以进行大约 10000 次查找。如果攻击者真的有动机,他可能希望每个密码花费一小时左右,这意味着查找的最大t为 3600000(假设为 2 22);相应的 CPU 成本下降到每秒大约 2 32 个哈希,这对于最近的几个 GPU 是可行的。100 个磁盘允许 300 TB 存储(我说的是 3 TB 磁盘,现在是现成的),这使可能的N达到大约 2 67这是相当大的,但在技术上是可行的。我们的攻击者组可以购买一百个 GPU(以及一个 空调机组)并在几个月内完成计算该表。

因此,为了打败我们有动机的对手,我们需要从大于N的集合中随机选择密码。如果我们的可能密码集合的大小超过 2 77,并且我们的密码是在该集合中随机且均匀地选择的(即密码熵为 77 位或更多),那么攻击者只有 1/1000 的机会破解给定密码他的桌子。这应该足以劝阻他。

我们如何获得 77 位熵?如果我们将自己限制为字母(大写和小写)和数字,以便可以在任意键盘上输入密码,那么每个字符的熵可以少于 6 位。因此,13 个字符就足够了是不是膨胀了?只有13个!无需使用大量密码。但请注意小字体:那是13 个完全随机的字母或数字毫无疑问,让人类选择这些字符,甚至生成十几个 13 个字符的密码并让他选择他最喜欢的一个。您拿起生成器,生成一个密码,然后学习它。脑力劳动是使用像 NTLM 这样的无盐快速密码散列机制的代价。

(当然,上面描述的攻击者组是现实的。您可能希望稍微增加复杂性,以便您的密码对于明天的攻击者来说也将是强大的;所以将其设置为 14 或 15 个字符更安全。)

一般来说,在大多数系统上,较长的密码总是更好。

NTLM 当然有彩虹表(例如,http://www.freerainbowtables.com/en/tables2/

但是,从暴力破解的角度来看,您应该在被锁定之前限制失败的登录尝试次数。这可以使用本地策略进行设置。3 次尝试失败,然后您将其阻止。

物理安全胜过一切。阻止 BIOS 引导 cd 或 usb 并在盒子上加锁。当然,我重申上面的评论,使用全盘加密,甚至多因素。您无法在 Linux 中神奇地挂载加密驱动器,您需要知道密码和/或密钥。

冷启动和邪恶的女仆需要有人真正投入时间来破坏你的机器。在您本地的家用电脑上,您很可能会被骗下载恶意软件,或者您拥有未打补丁的软件,他们只会获得 root(咳咳,管理员),而不关心破解您的密码。

如果您有真正的秘密资料,请进行全盘加密并将重要资料放在二级加密容器中。

我曾经听一个唯一的计算机人说,唯一安全的计算机是用斧头切碎然后烧毁的计算机。:-)

这里有几件事需要考虑。Microsoft 已将两种算法用于 Windows 系统上的帐户数据库:

LM(局域网管理员)

NTLM(NT 局域网管理器)

对您的系统具有物理访问权限的攻击者可以很容易地转储所有本地帐户的 SAM(安全帐户管理器)数据库的内容,然后使用 Ophcrack(http://ophcrack.sourceforge.net)之类的东西来运行彩虹​​表攻击哈希值。

但是,您需要确定实际风险是什么:攻击者能够破解密码和/或攻击者能够访问系统。这很重要,因为没有必要破解密码(猜测它的值)来破坏系统。许多其他工具只是用攻击者选择的东西替换 SAM 数据库中的哈希值。这会危及系统,但不一定会危及密码本身。整个磁盘加密作为第一道防线解决了这两个问题:您的攻击者无法在他们用来在 SAM 数据库中乱搞的任何工具中安装卷。如果你走这条路,很多商业供应商都会提供解决方案。Truecrypt ( http://www.truecrypt.org/) 提供极好的免费程序。Bitlocker 或任何集成操作系统的加密解决方案几乎毫无价值,因为它们很容易受到冷启动攻击。

较新的解决方案之一是自加密驱动器,需要引导到自己的固件才能访问。