行业新闻与博客

彩虹桌:网络罪犯使用密码金的途径

尽管大多数有关密码的文章都集中在安全性的用户方面,但是我们将通过看彩虹表来翻转脚本。我们将详细介绍它们的含义,工作方式以及如何缓解这种密码安全威胁

尽管它们听起来像是某些 80年代动画女主角的家具,但彩虹桌比其活泼的名字所暗示的要严肃得多。它们既是对以数字方式存储密码哈希的企业的威胁,也是研究人员和执法人员出于不同原因的优势。彩虹表攻击是网络犯罪分子使用密码分析来有效破解他们发现或被盗的密码文件或数据库中的密码哈希的一种方式。

但是什么是彩虹桌,为什么要关心它们呢?我们将说明什么是彩虹表,彩虹表如何工作以及为什么彩虹表攻击即使对于哈希存储密码的企业来说也是一个问题。然后,我们将与您分享彩虹表的“ k 石”,它可以帮助您缓解这种威胁。

让我们将其散列出来。

什么是彩虹桌?

好的,彩虹表是一个非常复杂的话题,在我尝试将其分解为最简单的术语时,请耐心等待。关于哪些彩虹表在线(和不在线)存在很多误解。它们本质上是功能强大的资源,可启用密码破解尝试,即彩虹表攻击

从最基本的意义上讲,彩虹表是网络犯罪分子通过快速密码分析来破解未加盐的哈希密码的一种方式。(盐是随机的,唯一的数字,您可以在散列并存储密码之前将其应用于纯文本密码,以使密码更安全。但是不用担心,我们将在本文的后面讨论盐化。)它们很大查找数据库表,可用于称为彩虹表攻击的加密攻击中。每个表都包含预先计算的密码哈希组合,有助于从其哈希表中发现密码的纯文本版本。如果这听起来像哈希表,请坚持该想法。从某种意义上说,这是一种密码破解方法,但这是不同的。

现在,要为 Rainbow 表创建这些密码哈希组合,您首先必须计算很多预先计算的密码哈希“链”。这些长度恒定的链是通过使用与链的每个部分交替的两个特定功能创建的:

  1. 单向散列函数(本质上是不可逆的数学过程,将纯文本数据映射到固定长度的散列输出-我们将在本文后面更深入地讨论散列函数),以及
  2. 散列减少功能(将散列减少为纯文本数据)。

这些顺序的链相互连接并相互连接以形成更长的链。但是,唯一可以保留的是每个链的起点和终点(即,每个链的第一个和最后一个条目,或者密码和匹配的哈希值)。因此,一条链看起来像这样:

彩虹链外观的基本图示。它由密码,哈希函数,哈希值和归约函数的交替部分组成。但是,要创建彩虹表,您仅保留链的第一个和最后一个值,并丢弃其余数据。要使用彩虹表攻击破解密码哈希值,您可以重建被丢弃的中间数据,这些数据最终导致了所讨论的哈希。

您可以计算链,但只保留第一个和最后一个值。现在,请记住,在这些链中可能有成千上万甚至潜在的数百万对。但是,同样,您只保存链的第一个和最后一个条目。中间的其他所有东西都像上周的剩菜一样乱扔。

如何节省仅部分工作是有益的?

等一下,如果您只保留第一个和最后一个条目并删除中间的所有内容,那不是使该表无用吗?不,这恰恰相反。一切都与您如何组织产生差异的数据有关。彩虹表的创建者 Philippe Oechslin 在 2005(ISC)2 上发表的文章对此进行了更多解释:

“使用彩虹表,您必须计算所有密码的哈希值,但只存储其中很小的一部分,例如万分之一。诀窍是按照这样的顺序来组织密码和哈希:使用您选择存储的数据,您可以按一万次哈希操作的顺序快速重新创建所有密码和哈希。因此,您减少了内存量并增加了破解时间,因此,在时间内存方面进行了权衡。”

第一个和最后一个密码和哈希组合的存储实际上是创建彩虹表的原因。因此,您必须完成创建所有链条并将其组织的过程,以便仅将每个链结的第一个和最后一个条目保存在表中。您可以在需要时重建链条,这将使您找回所有丢失的信息。但这可以节省您的操作时间和存储空间。

链越长,表越小,但查找速度也越慢。同样,链条越短,表越大,查找速度也越快。因此,这意味着如果将彩虹表的大小加倍,则破解速度可以提高三倍。这是时间记忆权衡背后的基本概念。

根据 Oechslin 在 2005年的文章:

“要进行折衷工作,必须将链和密码组织在一起。为此,您需要定义一个简化函数,将哈希映射到密码。您可以选择所需的任何函数,只要它以哈希作为输入并生成密码作为输出即可。从密码开始,您现在可以使用哈希函数根据密码生成哈希,然后使用归约函数根据此哈希生成新密码。重新开始,直到拥有一万个密码和哈希值链。”

我们将跳入更多有关彩虹表瞬时工作的信息。但首先,让我们谈谈他们的工作以及为什么它们对好人和坏人都如此有用。

分解彩虹表的功能

Rainbow 表对于想要使用散列来破解复杂密码的网络犯罪分子很有用。其他方法(例如使用字典(蛮力)攻击和哈希表)可能对尝试破解更简单的密码更有用。但是它们也要花费大量时间和资源。

2020年12月,我直接通过电子邮件与 Oechslin 联络,请他分享他对什么是彩虹桌及其用途的见解。Oechslin 是瑞士 IT 安全咨询公司 ObjectifSécurité的创始人。这就是他用外行的话描述彩虹桌的方式:

“彩虹表使预先完成密码破解的所有艰苦工作成为可能,并将结果存储在一个智能且紧凑的表结构中。需要破解密码的那一天,您可以拿走您(或其他人)准备的彩虹表,并大大加快破解速度。”

因此,网络罪犯可以使用这些表将预先计算的哈希与组织可以访问的密码哈希(例如其系统密码文件)的存储文档中存储的哈希进行比较。如果成功,他们可以使用这些哈希值反向映射密码哈希,以访问原始密码的纯文本(可读)版本。

因此,rainbow 表基本上是大量的查找表,与使用传统的密码破解方法相比,它们可以更快地破解复杂的密码。

松散地说,这有点像您在学校学习基础乘法的方式(在“通用核心数学标准”在立法者眼中甚至是瞬息万变之前)。还记得乘法表吗?您可能使用了这些预先计算的值表之一来学习如何计算和存储基本乘法方程式的答案。这样,您可以简单地调用脑中的 8×12,而不必先进行脑中的所有中间计算(8×2、8×3、8×4…等等)。

乘法表的说明
基本乘法表的示例。

但是与上面的表(已保存所有可能的组合)不同,rainbow 表只需要存储一个很小的百分比即可,例如 100,000 个中的 10 个。这是因为您将只存储每个链的第一个和最后一个密码,而丢弃链的其余数据。

在某些情况下,网络犯罪分子可能会使用多个彩虹表。他们可以同时执行此操作,也可以顺序使用这些表(这样做的好处是顺序的彩虹表速度更快)。

彩虹表 vs 表

现在,在研究彩虹表时,往往会吸引很多人的是哈希表的概念。Rainbow 表经常与哈希表混淆,因为是的,它们都涉及哈希。虽然相似,但它们不是同义词:前者比后者复杂得多,并且用于不同的功能。

  • 哈希表-哈希表是一个表,其中包含每个可能的哈希,这些哈希可以从与通过特定哈希算法哈希的特定参数(长度,字符组成,数字等)匹配的可能密码中生成。这种穷举搜索方法非常耗时且耗费资源。例如,要为每个可能的八个字符的密码存储具有哈希值的表,将花费大量空间。
  • 彩虹表-一个或多个预先计算的纯文本表和匹配的散列值,需要较少的表条目和散列计算。Rainbow 表仅存储链数据的第一个和最后一个值,所需的存储量更少。要以这种方式破解密码哈希,请重新生成导致哈希值的链数据。因此,彩虹破解比暴力破解更快,资源占用更少,只需几秒钟或几分钟即可破解密码,否则将花费更多时间。

那么,您什么时候可以使用另一个,为什么呢?哈希表是非常简单的密码。(例如,您可以使用哈希表来扫描数据库,以查找与最常用的 10,000 个密码之一匹配的密码。另一方面,Rainbow 表非常适合尝试破解更难或更复杂的密码的哈希值。

公司是否经常以明文形式存储密码?

幸运的是,没有。不幸的是,有些做法确实如此,这可能会导致很多问题(包括识别盗窃和财务欺诈)。但是,当网站允许人们保存密码时,通常他们实际上所做的就是存储这些密码的哈希摘要。在这种情况下,明文密码不是:

  • 上传到任何数据库,以及
  • 对雇员或黑客可见(因为哈希发生在后端并生成哈希摘要)。 

例如,Windows 不在操作系统(OS)和活动目录(AD)中存储明文密码。它们存储密码哈希,而不是以前使用两个哈希之一创建的密码哈希:

  • LM Hash(LanManager) —较旧且更不安全的哈希算法,容易受到密码破解技术的攻击。
  • NTLM Hash(NT LanManager) —较新的哈希算法,它更能抵抗密码破解技术(但仍然是可靠的)。

Microsoft 建议禁用 Windows 操作系统和服务器操作系统中的 LM 密码哈希存储。请参阅 Microsoft 的 LM 密码哈希存储防止文章,以获取更多信息。剧透警报:微软对 LM 哈希的使用导致了 Oechslin 开发彩虹表。但是,我们将在本文后面详细讨论所有这些内容。

网络罪犯如何访问密码列表

您会看到,组织经常允许用户在服务器上存储他们的密码,或更准确地说,是密码哈希摘要。哎呀,也许您的公司就是其中之一。这里的想法是,因为密码是经过密码哈希处理的(意味着将明文映射到特定长度的密文以使其无法读取),所以它们是安全的。但是,正如您很快就会学到的那样,并非所有事情总是那么简单。

但是,在世界范围内某人将如何访问您的密码哈希列表?有很多不同的方法:

  • 上载数据库时,您忘记(或忽略)了使用密码保护数据库的安全。
  • 网络罪犯可能利用这些漏洞来访问您的 Active Directory(AD)。到达那里后,他们可以搜索并提取您的密码哈希值,以创建一个列表,可以将密码破解技术应用于该列表。
  • 他们可以通过网络钓鱼攻击来欺骗或操纵用户,以访问他们被授权访问的系统。

需要帮助吗?联系我们的支持团队 在线客服