如何创建字典以防止弱密码?

信息安全 密码 密码策略
2021-09-01 21:16:54

我的任务是针对用户的密码添加“字典检查”以防止密码弱。不幸的是,这与我得到的指导差不多,我需要一些帮助来理解它的含义。下载标准英语词典文件并将密码与列表中的单词进行比较会非常容易,但当然该策略要求最少 8 个字符、大小写字母各 1 个、2 个数字和 1 个标点符号所以在字典中永远找不到密码。

我应该如何以明智的方式解释这一点,而不仅仅是恶意地遵守和使用标准的英语词典?我应该用它来禁止Tr0ub4dor&3类型的密码吗?我应该逐字拒绝包含字典单词的密码吗?(这似乎很愚蠢,因为那里有 diceware 密码......)

2个回答

实际的“字典创作”

即确定您的基本词典和通用规则是否会产生他们想要的密码

首先,要意识到当我们谈论密码破解时,“字典”是指一个基本密码候选列表,它们可以单独使用,或者——更有效地——作为基于规则的攻击的一部分。

Hashcat 论坛有一个词表位置列表为了防止链接失效,其中一些是:

http://www.skullsecurity.org/wiki/index.php/Passwords

  • 从这里开始

    • phpbb 列表非常棒,只有 184,389 个单词

    • Rockyou 列表是一个很好的下一步,14,344,391 字

      • 在不同的地方也有不同大小和其他标准的过滤rockyou变体;如果你愿意,可以环顾四周。

http://hashcrack.blogspot.de/p/wordlist-downloads_29.html

  • 包括指向更大的 Purehate 和 Xploitz 列表以及许多站点的链接

http://packetstormsecurity.org/Crackers/wordlists/

  • 许多旧的备用名单;如果您愿意,可以将它们一起折腾,这些已经存在很长时间了。

http://www.md5this.com/tools/wordlists.html

  • 几种语言的单词表,加上一个巨大的英文单词表。

有关规则回字典攻击可以做什么的一些指导,请查看Hashcat了解它支持的规则类型,并注意当您拥有明文用户密码时,应用许多规则非常简单、非常快速。撤销”; 即,给定一个实际的密码,它可以很容易地来自一个基本的破解字典单词加上一些规则吗?

例如:

  • 您可以使用简单的 UPPER() 等效项和全大写字典来处理所有大写/小写规则 - 如果找到它,它就很弱。(杰奎琳)
  • 纯粹为了满足长度最小值而添加/添加数字是一种简单的模式匹配 - 如果最后/前 N 个字符是数字,并且剩余长度不够,那么它很弱。(里迪克123)
  • 从开头/结尾删除 N 个数字,将其大写,然后检查字典中的余数 (JacQueLine12)
  • 以上,但 N-1 个数字和/或符号 (#1JacQueLine)
  • 以上,但日期格式。(JacQueLine02121995)
  • 如果最后/前N-1个字符是数字,最后/第一个是符号,剩下的长度不够,就是弱。(!JacQueLine1)
  • 一次取出一个字符,看看它是否与字典匹配。(杰奎琳)
  • 结合其中的一些。
  • 扭转所有这些。

将非常常见的字典单词作为子集进行模式匹配,拉出该子字符串,然后再次搜索;找出组合攻击中键空间的限制

正确马电池主食

  • 正确:第 1813 个最常用的英语单词,phpbb 上的第 16828 行,Ubuntu 美式英语 small 上的第 9871 行。
  • horse:第 1291 个最常用的英语单词,phpbb 上的第 14820 行(horses 在第 1723 行!),Ubuntu 美式英语 small 上的第 21607 行。
  • 电池:第 3226 个最常用的英文单词,phpbb 上的第 7775 行,Ubuntu 美式英语 small 上的第 3644 行。
  • 主食: 6个字符,全部小写,不在前5000个最常用的单词中。phpbb 上的第 40524 行(订书钉在第 3852 行!),Ubuntu 美式英语小版上的第 42634 行。

  • 因此,correcthorsebattery会通过拉出前 4000 个英文单词来拉出所有三个单词,因此适合 4000^3 的键空间。 correcthorsebatterystaple通过了该测试,甚至达到了 4000^4 名(仅因为订书钉)。

许多破解者从暴力破解小密码开始,然后是小词表和大规则集,然后是大词表——据我所知,最大的超过 30GB,几乎包括在给定流行论坛上发现的任何人破解的所有密码,加上许多其他大型词汇表。

为自己找到一个快乐的媒介——足够快、足够高性能、足够大并且有足够的“规则”来删掉破解软件的前几次快速通道——如果你使用的 PBKDF2 有足够的(数十万次)迭代,或者 BCrypt 或SCrypt 具有足够高的工作因子,那么只有小字典 + 大规则集和大字典 + 小规则集将是几年的实际攻击。


减少用户反感

你会在某种程度上激怒用户群,就像你说他们需要满足你的复杂性规则时所做的一样。

当你说“密码”、“密码”、“P@$$w0rd”、“P@$$w0rd1”、“P@$$w0rd123”,甚至“P@$$w0rd123!”时 是错误的密码,你会惹恼他们。当您说“Jennifer2007”是一个错误密码时,他们会感到沮丧(也许 Jennifer 也会感到沮丧!)。尽你所能管理他们的挫败感,并简单地接受一些。就我个人而言,我会建议你明确一点——告诉他们他们的密码是已知破解词典中的一个单词加上两个数字,这是正常的破解规则!

请注意,添加此密码的一个主要目的是让用户了解什么是弱密码,以便他们有一些了解以减轻他们的挫败感。

作为教育的一部分,也许向他们展示一些您生成的通过您自己的测试的替代方案,如果您不及格他们的密码,所以一定要让用户知道他们击中了哪个特定规则,无论是“密码是密码猜测单词列表中的一个单词攻击者”或“密码是攻击者使用的密码猜测词表中的一个词,加上一个切换大小写规则,最后加上一个数字”。

1) 完全随机的密码

2) 完全随机的密码翻译成泡泡或其他可发音的子集

3) 正确的horsebatterystaple 类型密码,但使用更长且不常见的单词。以Ubuntu美式英语疯狂词典为例,减去美式英语小词典中的所有单词,选出N个长度至少为7个字符的单词。这使您没有任何真正简短的单词,也没有最常用的单词。

4) 1、2 和/或 3 的混合。

然后,如果他们愿意,您的用户可以简单地选择您向他们展示的内容(当然,通过 HTTPS,您可以使用最好的密码套件)。

就个人而言,我也强烈建议提高你的长度限制;我会推荐大约 14 个,但对于大多数用户群来说,这太长了。至少尝试 12 甚至 10 个,这样一个完全随机的密码可能在最小长度和字符集下具有少量价值。

其中大部分来自我对我应该拒绝明显糟糕的密码的回答吗?,虽然这个答案有更多的数学和解释为什么涉及。

实际上,我认为这是一个好主意。在讨论密码破解时,字典不是字典,而是要迭代的单词和短语的集合。

那些清单

在这种情况下,常用密码字典将是一个好的开始。

我推荐以下内容:

  • 前 100 个(200、300,任何适用于您的组织的)密码。这可以使用诸如cewl. 如果您的组织名为“SuperGames”,人们可能拥有“supergames@123”或“!1qAz@2WsX”之类的密码。虽然第二个密码与您的组织没有任何关系,但遗憾的是,它是一个根本不安全的通用密码。
  • 使用crunch.创建这些密码的突变
  • 获取一些密码列表。rockyou.txt并且unix_passwords.txt是一个好的开始。两者都可以在 Kali 上找到,以及其他。

防御性

最终,将取决于您的管理层向您的最终用户发送通信。但是,这通常是“旋转的”(因为与大多数营销点击诱饵不同,我认为这是一件好事),因为它可以提高数据的安全性。这也会产生副作用,鼓励用户考虑安全性、他们使用的密码,而不是重复使用密码。