52

使用NLP生成个性化的Wordlist用于密码猜测爆破

 4 years ago
source link: https://www.tuicool.com/articles/ZZrMvi2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径

我编写了一个名为 Rhodiola 的工具,该工具可以分析目标数据(例如目标的tweets),并检测其中最常用的主题,以此来构建一个用于密码猜测/暴破的个性化的Wordlist。这是一个为密码猜测攻击创建新方法的实验性项目。

介绍

密码可以说是自互联网诞生以来,我们数字帐户的最主要的一种安全机制。因此,密码往往也是攻击者的首要目标之一。攻击者可以使用两种主要方法来查找目标的密码。攻击者可以事先准备好一个钓鱼网站,诱骗目标输入他们的密码到网站中。或者,攻击者可以通过暴破的方式强制执行密码猜测攻击。密码猜测攻击可以分为两大类:在线攻击和离线攻击。

在线密码猜测攻击是攻击者将用户名/密码组合发送到HTTP,SSH等服务的地方,并尝试通过检查服务的响应来识别正确的组合。离线密码猜测攻击通常是针对散列形式的密码进行的。攻击者必须使用合适的加密散列函数计算密码的散列,并将其与目标散列进行比较。对于在线和离线攻击,攻击者通常都需要有一个密码wordlist。大多数Web应用程序都有密码复杂性规则,用户必须使用至少一个数字,大写/小写字母和特殊字符。此外还有许多预防措施,例如IP阻止,账户冻结等。因此,减少攻击次数对攻击者来说非常重要。

掩码攻击

掩码攻击是将暴破池减少到可接受大小的主要方法之一。掩码攻击是指指定一个固定的密码结构,并根据该结构生成候选密码。例如,使用纯暴破的方法破解“Julia1984”,我们需要计算13.537.086.546.263.552个不同的组合。但是如果我们设置一个具有其结构的掩码,我们可以将组合池减少到237.627.520.000。当然,这对于在线攻击来说仍然是个天文数字。通常我们是无法通过互联网向应用程序发送两千亿次请求的。

Sherlock 的方法

但是,纯暴力攻击和掩码攻击并不是密码猜测的唯一方法。还有一种基于智能猜测的方法。例如,在Sherlock的Hound of Baskerville episode中,Sherlock Holmes一次就猜中了正确的密码。但在现实生活中我们怎么能做到呢?

Nj2EFzA.jpg!web

让我们假设以上是目标发送的tweet,而我们就是Sherlock Holmes。我们可以做出以下推断:目标的女儿叫Julia,并且目标非常爱她的女儿,因为他/她发布了关于她的推文。目标最喜欢的作家是George Orwell,他最受欢迎的书是1984。所以把它们组合起来,就是“Julia1984”,就这么简单?

根据卡内基梅隆大学和卡尔顿大学的实验,大多数人都会根据个人爱好,工作,宗教,体育,电子游戏等主题来作为他们的密码组合。[1][2]这意味着大多数用户密码都包含有意义的单词,并且与密码的所有者相关。所以在理论上,我们可以成为一个密码破解的sherlock holmes。让我们来验证一下。

Myspace 和 Ashley Madison Wordlists 分析

当我们用PACK(密码分析和破解工具包)分析泄露的Myspace和Ashley Madison密码列表并生成最常用的掩码时,我们可以看到几乎95%的密码是由序列的字母字符组成的。所以这些词很有可能都是有意义的。以下是一些常见的掩码:

?l?l?l?l?l?l: 7%

?l?l?l?l?l?l?l?l: 7%

?l?l?l?l?l?l?l: 6%

?l?l?l?l?l?l?d?d: 4%

?l?l?l?l?l?l?l?l?l: 4%

由于Ashley Madison和Myspace的wordlists大多数都是由序列的字母字符组成,因此它们很有可能是有意义的单词。如果它们是有意义的,我们就可以使用有意义的词来填充掩码,而不是强制的暴力破解。第一步是了解字母序列在英语中是否是一个有意义的单词。如果字母序列在英语词典中列出,我们就可以说它是一个英语单词。我用Wordnet作为词典。分析显示,几乎百分之四十的单词列表都包含在Wordnet词典中,因此它们是有意义的英语单词。

在确认Wordnet中包含字母序列后,因此它是一个英语单词,我们需要做词性标记(POS标记)。英语中有八大词类:名词、代词、动词、形容词、副词、介词、连词和感叹词。词性标注是将文本中的一个词标记为与特定词性相对应的过程。NLTK Python库用于POS标记。

为了了解哪个词类在密码中出现的最多,我们再次分析了Myspace和Ashley Madison的wordlists。用于分析的脚本代码你可以在 此处获取 。结果显示大多为单数名词(约占32%)

如果我们使用牛津英语词典中的所有单词,则组合池将为171,476。如果我们使用“?l?l?l?l?l?l”掩码暴破所有六字符字母的字符串,组合池将为308.915.776。 因此,尝试词典中的所有英语单词将比使用掩码快1801倍。但是对于在线攻击来说,171,476仍然是一个很大的数字。

Sherlock 的方法(再次)

那么让我们回顾一下迄今为止我们已掌握的事实。首先,我们的分析显示人们偏向使用有意义的单词作为他们的密码。第二,根据各大学的研究,我们知道密码主要基于个人主题。因此,Sherlock Holmes的方法在理论上是可行的。但这能在实践中做到吗?Sherlock Holmes所做的是分析关于目标的个人主题。然后,他将这些组合在一起并想出了一个候选密码。

但在现实生活中我们能做到吗?为此,我们需要有关目标的信息和从该信息中提取出候选密码的算法。我们需要像Sherlock Holmes那样的目标数据源,我们可以找出目标的兴趣爱好和其他兴趣领域。显然,这些信息我们可以在一些社交媒体找到,例如在Twitter上人们就倾向于撰写关于他们的兴趣爱好和其他兴趣领域的帖子。由于tweets存在字符限制,因此用户会更专注地写东西。这也使得我们的信息收集工作变得轻松。免去了我们可能需要处理大型/乱码文本的过程。因此,让我们使用Twitter作为我们的数据源,并尝试构建我们的个性化wordlist生成算法。

算法构建

下载和清洗 Tweet 数据

首先,我们需要通过Twitter的API从目标收集推文。由于我们的目标是识别用户的个人主题并生成相关的单词,因此我们需要从下载的推文中删除不必要的数据(停用词)。NLTK的stopwords扩展和自定义列表都被使用。列表包含高频词,如“the,a,an,to,that,i,you,we,they”。这些字在处理数据之前被删除。我们还删除了动词,因为密码大多包含名词。

biqURbF.jpg!web

识别最常用的名词和专有名词

上面我们分析过,几乎32%的用户密码都包含单数名词。因此,我们的第一个目标是确定最常用的名词和专有名词。用户最感兴趣的主题可以用它们来识别。用NLTK的词性标记功能来识别最常用的名词和专有名词。例如上面的tweet,名词是:作者和女儿。专有名词是:George Orwell 和 Julia。

配对相似词

在某些情况下,名词可以一起使用。 要创建有意义的单词对,我们需要分析它们的语义相似性。 为此,NLTK的路径相似性[16]与Wordnet上的第一个名词含义(n.01)一起用于所有已识别的名词。路径相似性基于在is-a(上位词/下位词)分类法中连接的最短路径,返回表示两个词有多相似的分数。得分在0到1的范围内。如果相似度得分高于0.12,我们的算法就可以对它们进行配对。

查找相关的辅助词

研究人员发现密码中最常用的语义主题是位置和年份。因此,应该能找到与用户兴趣领域相关的位置和年份。wiki被用于这两项工作。我们的算法访问每个专有名词的wiki页面,用正则解析年份,并使用其硬编码城市列表识别城市名称。在上面的示例推文中,当我们向wiki发送“George Orwell”时,我们的算法将解析诸如London,1984等词。

组合

最后一步是整合我们所有获取的数据。从示例Tweet中我们获取到了George Orwell这个专有名词,我们将它发送到wiki,它返回给我们了1984。除此之外,我们还有另一个专有名词Julia。所以,当我们把所有的数据组合在一起时,我们的单词列表中的某个地方就会有正确的密码“Julia1984”。因此,我们可以像Sherlock Holmes一样破解密码,而不是面对那数以百万计的组合。

Rhodiola

Rhodiola是用Python 2.7编写的,主要基于NLTK和textblob库。通过一个给定的Twitter句柄(如果你没有,你也可以用你自己的数据。请查看Github页面了解有关详情),它可以自动编译一个包含以下元素的个性化wordlist:最常用的名词和专有名词,配对名词和专有名词,与检测到的专有名词相关的城市和年份。 例如:

6f6vAvF.jpg!web

有关其详细用法,请查看Github页面: https://github.com/tearsecurity/rhodiola

总结

由于人们更倾向于使用他们感兴趣领域的单词来作为其密码组合,并在Twitter上公开这些兴趣领域,因此攻击者可以通过分析目标的推文来创建针对性的wordlist。除了Twitter之外,任何其他的社交媒体平台都有可能成为攻击者精准创建wordlist的有效数据来源。因此,用户应避免使用社交媒体中公开主题中的单词。最好使用存储在密码管理器中的随机密码。

*参考来源: utkusen ,FB小编secist编译,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK