156

首先,一点背景知识:我正在为 CodeIgniter 实现一个 auth+auth 系统,这已经不是什么秘密了,到目前为止我赢了(可以这么说)。但是我遇到了一个非常重要的挑战(大多数身份验证库完全错过的挑战,但我坚持要正确处理它):如何智能地处理大规模、分布式、可变用户名暴力攻击

我知道所有常用的技巧:

  1. 限制每个 IP/主机的失败尝试次数并拒绝违规者访问(例如 Fail2Ban) -由于僵尸网络变得更加智能,这不再有效
  2. 将上述内容与已知的“坏”IP/主机(例如 DenyHosts)的黑名单相结合——这依赖于僵尸网络落入第一名,而他们越来越不这样做
  3. IP/主机白名单与传统身份验证相结合(遗憾的是,对于动态 IP 用户和大多数网站的高流失率无用)
  4. 在 N 分钟/小时内设置站点范围内的失败尝试次数限制,并在此之后限制(暂停)所有登录尝试数分钟/小时(问题是 DoS 攻击您成为僵尸网络的小游戏)
  5. 没有登录/密码选项的所有用户的强制性数字签名(公钥证书)或 RSA 硬件令牌(毫无疑问,这是一个坚如磐石的解决方案,但仅适用于封闭的专用服务)
  6. 强制执行的超强密码方案(例如 >25 个带有符号的无意义字符 - 再次,对于普通用户来说太不切实际了)
  7. 最后,验证码(在大多数情况下都可以工作,但对用户来说很烦人,而且对坚定、足智多谋的攻击者几乎毫无用处

现在,这些只是理论上可行的想法。有很多垃圾想法使网站大开(例如,微不足道的 DoS 攻击)。我想要的是更好的东西。更好的是,我的意思是:

  • 它必须对 DoS 和蛮力攻击是安全的(+),并且不引入任何可能允许稍微狡猾的机器人继续在雷达下运行的新漏洞

  • 它必须是自动化的。如果它需要人工操作员来验证每个登录或监控可疑活动,那么它在现实世界中是行不通的

  • 它必须适用于主流 Web 使用(即非程序员可以执行的高流失率、高容量和开放注册)

  • 它不能将用户体验阻碍到临时用户会感到恼火或沮丧(并可能放弃该网站)的程度

  • 它不能涉及小猫,除非它们真的是非常安全的小猫

(+)所谓“安全”,我的意思是至少与偏执的用户保密密码的能力一样安全

所以 - 让我们听听吧!你会怎么做?你知道我没有提到的最佳实践吗(哦,请说你知道)?我承认我确实有自己的想法(结合 3 和 4 的想法),但在让自己尴尬之前,我会让真正的专家发言;-)

4

16 回答 16

71

将原始帖子中的方法 3 和 4 组合成一种“模糊”或动态白名单,然后——这就是诀窍——不阻止非白名单 IP,只是将它们限制在地狱和回来

请注意,此措施用于阻止这种非常特定类型的攻击。当然,在实践中,它可以与其他最佳实践方法结合使用来进行身份验证:固定用户名限制、每个 IP 限制、代码强制强密码策略、不受限制的 cookie 登录、在保存之前对所有密码等效项进行哈希处理,从不使用安全问题等

关于攻击场景的假设

如果攻击者针对可变用户名,我们的用户名限制不会触发。如果攻击者正在使用僵尸网络或访问较大的 IP 范围,我们的 IP 节流将无能为力。如果攻击者预先抓取了我们的用户列表(通常可能在开放注册 Web 服务上),我们就无法根据“未找到用户”错误的数量检测到正在进行的攻击。如果我们在系统范围内实施限制性(所有用户名、所有 IP)限制,任何此类攻击都会在攻击期间加上限制期间对我们的整个站点进行 DoS。

所以我们需要做点别的。

对策第一部分:白名单

我们可以相当肯定的是,攻击者无法检测和动态欺骗我们数千名用户的 IP 地址(+)。这使得白名单变得可行。换句话说:对于每个用户,我们存储用户之前(最近)登录的(散列的)IP 列表。

因此,我们的白名单方案将起到锁定“前门”的作用,用户必须从他公认的“好”IP 之一连接才能登录。对这个“前门”进行暴力攻击几乎是不可能的(+)。

(+) 除非攻击者“拥有”服务器、我们所有用户的盒子或连接本身——在这种情况下,我们不再有“身份验证”问题,我们有一个真正的特许经营规模的拉动-plug FUBAR 情况

对策之二:全系统限制无法识别的IP

为了使开放注册 Web 服务的白名单工作,用户经常切换计算机和/或从动态 IP 地址连接,我们需要为从无法识别的 IP 连接的用户打开“猫门”。诀窍是设计那个门,让僵尸网络卡住,让合法用户尽可能少地受到打扰。

在我的方案中,这是通过对未经批准的 IP 设置非常严格的最大登录尝试失败次数来实现的,例如 3 小时(根据服务类型,使用更短或更长的时间段可能更明智),并且使该限制全局化,即。适用于所有用户帐户。

使用这种方法,即使是缓慢的(尝试之间 1-2 分钟)蛮力也会被检测到并快速有效地阻止。当然,一个非常慢的蛮力仍然可能被忽视,但是太慢的速度会破坏蛮力攻击的目的。

我希望通过这种节流机制实现的是,如果达到最大限制,我们的“猫门”会关闭一段时间,但我们的前门仍然对通过常规方式连接的合法用户开放:

  • 通过从他们认可的 IP 之一连接
  • 或者通过使用持久登录 cookie(从任何地方)

在攻击期间会受到影响的唯一合法用户 - 即。在激活限制时 - 将是没有持久登录 cookie 的用户,他们从未知位置或使用动态 IP 登录。这些用户将无法登录,直到限制消失(这可能需要一段时间,如果攻击者在限制的情况下保持他的僵尸网络运行)。

为了让这一小部分用户能够挤过原本密封的猫门,即使机器人仍在敲门,我会使用带有验证码的“备份”登录表单。因此,当您显示“对不起,但您目前无法从该 IP 地址登录”消息时,请包含一个链接,上面写着“安全备份登录 - 仅限人类(机器人:不撒谎 ”。开个玩笑,当他们单击该链接时,给他们一个 reCAPTCHA 身份验证的登录表单,绕过站点范围的限制。这样,如果他们是人类并且知道正确的登录名+密码(并且能够读取验证码),他们将永远不会被拒绝服务,即使他们是从未知主机连接并且不使用自动登录 cookie。

哦,只是澄清一下:由于我确实认为 CAPTCHA 通常是邪恶的,因此“备份”登录选项只会在节流处于活动状态时出现。

不可否认,像这样的持续攻击仍然会构成 DoS 攻击的一种形式,但是在所描述的系统到位后,它只会影响我怀疑的一小部分用户,即不使用“记住我” cookie 并且碰巧在攻击发生时登录并且没有从他们的任何常用 IP 登录并且无法读取验证码。只有那些可以对所有这些标准说不的人——特别是机器人和真正不幸的残疾人——才会在机器人攻击期间被拒之门外。

编辑:实际上,我想了一种方法,让即使是受到验证码挑战的用户在“锁定”期间也能通过:代替或作为备份验证码登录的补充,为用户提供一次性使用的选项,用户特定的锁定代码发送到他的电子邮件,然后他可以使用它来绕过限制。这肯定超过了我的“烦恼”阈值,但由于它仅用作一小部分用户的最后手段,而且它仍然比被锁定在您的帐户之外更好,所以它是可以接受的。

(另外,请注意,如果攻击比我在此处描述的讨厌的分布式版本更复杂,则不会发生这种情况。如果攻击仅来自几个 IP 或仅攻击几个用户名,它将在更早的时候被挫败,并且没有站点范围的后果)


所以,这就是我将在我的 auth 库中实施的对策,一旦我确信它是合理的并且我没有错过一个更简单的解决方案。事实是,有很多微妙的方法可以在安全方面做错事,而且我不会做出错误的假设或无可救药的错误逻辑。因此,请高度赞赏任何和所有反馈、批评和改进、细微之处等。

于 2009-01-27T07:17:56.303 回答
17

几个简单的步骤:

将某些常用用户名列入黑名单,并将其用作蜜罐。管理员、访客等...不要让任何人使用这些名称创建帐户,因此,如果有人确实尝试将其登录,您就会知道这是某人在做他们不应该做的事情。

确保在网站上拥有真正权力的任何人都拥有安全密码。要求管理员/版主使用更长的密码,混合字母、数字和符号。拒绝普通用户的简单密码并给出解释。

您可以做的最简单的事情之一是告诉人们何时有人尝试登录他们的帐户,如果不是他们,则给他们一个链接以报告事件。他们登录时的一条简单消息,例如“有人试图在星期三凌晨 4:20 登录您的帐户等等等等。如果这不是您,请单击此处。” 它使您可以保留一些有关攻击的统计信息。如果您发现欺诈性访问突然增加,您可以加强监控和安全措施。

于 2009-01-28T01:04:32.110 回答
11

如果我正确理解暴力攻击的 MO,那么会不断尝试一个或多个用户名。

有两个我认为我还没有在这里看到的建议:

  • 我一直认为标准做法是在每个用户每次错误登录后有一个短暂的延迟(一秒左右)。这可以阻止蛮力,但我不知道一秒钟的延迟会阻止字典攻击多长时间。(10,000 个单词的字典 == 10,000 秒 == 大约 3 小时。嗯。不够好。)
  • 而不是整个站点的减速,为什么不使用用户名限制。每次错误尝试都会使油门变得越来越苛刻(我猜是有限制的,所以真正的用户仍然可以登录)

编辑:回应对用户名限制的评论:这是一个特定于用户名的限制,不考虑攻击的来源。

如果用户名受到限制,那么即使是协调的用户名攻击(多 IP、每个 IP 单一猜测、相同的用户名)也会被捕获。即使攻击者在超时期间可以自由尝试另一个用户/通行证,个人用户名也受到限制。

从攻击者的角度来看,在超时期间,您可能能够第一次猜测 100 个密码,并迅速发现每个帐户的一个错误密码。您可能只能对同一时间段进行 50 秒的猜测。

从用户帐户的角度来看,破解密码仍然需要相同的平均猜测次数,即使猜测来自多个来源。

对于攻击者来说,破解 100 个帐户的努力与破解 1 个帐户的努力相同,但由于您不是在整个站点范围内进行限制,因此您可以非常快速地提高限制。

额外改进:

  • 检测猜测多个帐户的 IP - 408 请求超时
  • 检测猜测同一帐户的 IP - 在大量(例如 100 次)猜测后出现 408 请求超时。

UI 想法(可能不适合这种情况),这也可能对上述内容进行细化:

  • 如果您可以控制密码设置,那么向用户展示他们的密码强度会鼓励他们选择更好的密码。
  • 如果您可以控制登录页面,在对单个用户名进行少量(例如 10 次)猜测后,提供验证码。
于 2009-01-26T15:44:27.313 回答
9

身份验证的三个因素:

  1. 用户知道某事(即密码)
  2. 用户东西(例如,钥匙扣)
  3. 用户某物(即视网膜扫描)

通常,网站只执行策略#1。甚至大多数银行也只执行策略 1。相反,它们依赖于“知道其他东西”的方法来进行双因素身份验证。(即:用户知道他们的密码和他们母亲的娘家姓。)如果可以的话,添加第二个身份验证因素的方法并不太难。

如果您可以生成大约 256 个随机字符,您可以将其构建在 16×16 的表格中,然后要求用户在单元格 A-14 的表格中为您提供值。当用户注册或更改密码时,给他们表格并告诉他们打印并保存。

这种方法的困难在于,当用户忘记密码时,你不能只提供标准的“回答这个问题并输入新密码”,因为这也容易受到暴力破解。此外,您无法重置它并通过电子邮件向他们发送新的电子邮件,因为他们的电子邮件也可能被泄露。(参见:Makeuseof.com 和他们被盗的域名。)

另一个想法(涉及小猫)是 BOA 所说的 SiteKey(我相信他们为这个名字注册了商标)。简而言之,您让用户在注册时上传一张图片,当他们尝试登录时,请他们从 8 或 15 个(或更多)随机图片中挑选他们的图片。因此,如果用户上传了他们小猫的照片,理论上只有他们知道在所有其他小猫(或鲜花或其他任何东西)中哪张照片是他们的。这种方法唯一真正的漏洞是中间人攻击。

另一个想法(虽然没有小猫)是跟踪用户访问系统的 IP,并要求他们在从他们拥有的地址登录时执行额外的身份验证(验证码、选择小猫、从该表中选择密钥)之前没有。此外,与 GMail 类似,允许用户查看他们最近登录的位置。

编辑,新想法:

另一种验证登录尝试的方法是检查用户是否来自您的登录页面。您无法检查推荐人,因为它们很容易被伪造。您需要在用户查看登录页面时在 _SESSION var 中设置一个密钥,然后在提交登录信息时检查以确保该密钥存在。如果 bot 没有从登录页面提交,它将无法登录。您还可以通过在过程中使用 javascript 来促进这一点,或者通过使用它来设置 cookie,或者在表单加载后向表单添加一些信息。或者,您可以将表单分成两个不同的提交(即,用户输入他们的用户名,提交,然后在新页面上输入他们的密码并再次提交。)

在这种情况下,关键是最重要的方面。生成它们的常用方法是用户数据、他们的 IP 和提交时间的某种组合。

于 2009-01-27T00:15:20.933 回答
7

我之前在如何限制 PHP 中的用户登录尝试中回答了一个非常相似的问题。我将在这里重申建议的解决方案,因为我相信你们中的许多人会发现查看一些实际代码很有用。请记住,由于现在 CAPTCHA busters 中使用的算法越来越准确,因此使用 CAPTCHA 可能不是最佳解决方案:

您不能简单地通过将限制链接到单个 IP 或用户名来防止 DoS 攻击。见鬼,你甚至不能用这种方法真正阻止快速登录尝试。

为什么? 因为为了绕过您的限制尝试,攻击可以跨越多个 IP 和用户帐户。

我在其他地方看到过,理想情况下,您应该跟踪整个站点的所有失败登录尝试,并将它们与时间戳相关联,也许:

CREATE TABLE failed_logins(
    id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(16) NOT NULL,
    ip_address INT(11) UNSIGNED NOT NULL,
    attempted DATETIME NOT NULL
) engine=InnoDB charset=UTF8;

根据给定时间内登录失败的总数确定某些延迟。您应该基于从您的failed_logins表格中提取的统计数据,因为它会根据用户数量以及他们中有多少人可以回忆(和输入)他们的密码而随时间变化。


10 failed attempts = 1 second
20 failed attempts = 2 seconds
30 failed attempts = reCaptcha

查询每次失败登录尝试的表,以查找给定时间段内失败的登录次数,例如 15 分钟:


SELECT COUNT(1) AS failed FROM failed_logins WHERE attempted > DATE_SUB(NOW(), INTERVAL 15 minute);

如果在给定时间段内的尝试次数超过您的限制,则强制限制或强制所有用户使用验证码(即 reCaptcha),直到在给定时间段内的失败尝试次数小于阈值。

// array of throttling
$throttle = array(10 => 1, 20 => 2, 30 => 'recaptcha');

// assume query result of $sql is stored in $row
$sql = 'SELECT MAX(attempted) AS attempted FROM failed_logins';
$latest_attempt = (int) date('U', strtotime($row['attempted']));
// get the number of failed attempts
$sql = 'SELECT COUNT(1) AS failed FROM failed_logins WHERE attempted > DATE_SUB(NOW(), INTERVAL 15 minute)';
// assume the number of failed attempts was stored in $failed_attempts
krsort($throttle);
foreach ($throttle as $attempts => $delay) {
    if ($failed_attempts > $attempts) {
        // we need to throttle based on delay
        if (is_numeric($delay)) {
            $remaining_delay = time() - $latest_attempt - $delay;
            // output remaining delay
            echo 'You must wait ' . $remaining_delay . ' seconds before your next login attempt';
        } else {
            // code to display recaptcha on login form goes here
        }
        break;
    }
}

在某个阈值下使用 reCaptcha 可以确保最大限度地减少来自多个方面的攻击,并且正常的站点用户不会因为合法的失败登录尝试而经历明显的延迟。我不能保证预防,因为它已经扩展到验证码可以被破坏。有替代解决方案,也许是“命名这种动物”的变体,它可以很好地替代。

于 2010-07-19T11:21:08.533 回答
6

我不得不问你是否对这个问题进行了成本效益分析;听起来您正试图保护自己免受攻击者的攻击,该攻击者拥有足够的网络存在来猜测多个密码,每个 IP 可能发送 3-5 个请求(因为您已经解除了 IP 限制)。这种攻击需要多少(大约)成本?它是否比您要保护的帐户的价值更昂贵?有多少庞大的僵尸网络想要你拥有的东西?

答案可能是否定的——但如果是的话,我希望你能从某种安全专家那里得到帮助;编程技能(和 StackOverflow 分数)与安全知识的相关性并不强。

于 2009-01-28T22:40:02.603 回答
5

将 Jens 的方案总结为伪状态转换图/规则库:

  1. 用户 + 密码 -> 输入
  2. 用户 + !password -> 拒绝
  3. 用户 + known_IP(user) -> 前门,// never throttle
  4. 用户 + 未知 IP(用户)-> catflap
  5. (#denied > n) 通过 catflaps(site) -> 节流 catflaps(site)// slow the bots
  6. catflap + 油门 + 密码 + 验证码 -> 输入// humans still welcome
  7. catflap + 油门 + 密码 + !captcha -> 拒绝// a correct guess from a bot

观察:

  • 切勿节流前门。Elbonian 州警察在你家里有你的电脑,但无法审讯你。蛮力是您计算机上一种可行的方法。
  • 如果您提供“忘记密码?” 链接,然后您的电子邮件帐户将成为攻击面的一部分。

这些观察涵盖了与您试图反击的攻击不同类型的攻击。

于 2009-01-28T22:14:23.170 回答
4

看起来您正试图防御缓慢的分布式蛮力。您对此无能为力。我们使用的是 PKI,没有密码登录。它会有所帮助,但如果您的客户每隔一段时间就有机会使用工作站,那么这不是很适用。

于 2009-01-26T10:04:21.757 回答
3

免责声明:我在一家双因素公司工作,但我不是来阻止它的。这里有一些观察。

Cookie 可以通过 XSS 和浏览器漏洞窃取。用户通常会更改浏览器或清除其 cookie。

源 IP 地址同时是动态可变的和可欺骗的。

验证码很有用,但不能验证特定的人。

多种方法可以组合成功,但好的口味当然是为了。

密码复杂性很好,任何基于密码的东西都严重依赖于具有足够熵的密码。恕我直言,写在安全物理位置的强密码比内存中的弱密码更好。人们知道如何评估纸质文件的安全性比知道如何计算他们的狗名中的有效熵要好得多,因为它们将狗名用作三个不同网站的密码。考虑让用户能够打印出包含一次性使用密码的大页面或小页面。

诸如“你的高中吉祥物是什么”之类的安全问题大多是“你知道的东西”的另一种糟糕的形式,其中大多数在公共领域很容易被猜到或直接出现。

正如您所指出的,限制失败的登录尝试是在防止暴力攻击和易于 DoSing 帐户之间进行权衡。激进的锁定策略可能反映了对密码熵缺乏信心。

无论如何,我个人并不认为在网站上强制密码过期有什么好处。攻击者一旦获得您的密码,他就可以更改密码并尽可能轻松地遵守该策略。也许一个好处是,如果攻击者更改帐户密码,用户可能会更快注意到。如果在攻击者获得访问权限之前以某种方式通知用户,那就更好了。在这方面,诸如“自上次登录以来的 N 次失败尝试”之类的消息很有用。

最好的安全性来自第二个身份验证因素,它相对于第一个身份验证是带外的。就像您说的那样,“您拥有的东西”中的硬件令牌很棒,但是许多(不是全部)具有与其分发相关的实际管理开销。我不知道任何适合网站的生物识别“你是什么”解决方案。一些双因素解决方案与 openid 提供程序一起使用,一些具有 PHP/Perl/Python SDK。

于 2009-07-29T05:33:09.667 回答
1
  1. 在输入正常密码之前要求一次性密码怎么样?这会很明显有人在他们有很多机会猜测主密码之前就在攻击?

  2. 保持登录失败的全局计数/比率 - 这是攻击的指标 - 在攻击期间对登录失败更严格,例如更快地禁止 IP。

于 2009-01-26T10:37:30.897 回答
1

我的最高建议是简单地确保让用户了解他们的帐户的错误登录尝试 - 如果向用户提供有人实际上试图进入他们的帐户的证据,他们可能会更加认真地对待他们的密码强度.

实际上,我发现有人入侵了我兄弟的 myspace 帐户,因为他们试图进入我为他设置的 gmail 帐户并使用“通过电子邮件重置我的密码”功能......进入了我的收件箱。

于 2009-06-10T15:59:56.780 回答
0

我不相信有一个完美的答案,但我倾向于在感应到攻击时试图混淆机器人的基础上接近它。

我的脑海中浮现:

切换到备用登录屏幕。它有多个确实出现的用户名和密码空白,但只有一个在正确的位置。字段名称是随机的——会话密钥与登录屏幕一起发送,然后服务器可以找出哪些字段是什么。成功或失败都会被丢弃,因此您无法尝试重放攻击——如果您拒绝密码,他们将获得一个新的会话 ID。

任何在错误字段中提交数据的表单都被假定为来自机器人——登录失败、期间以及该 IP 被限制。确保随机字段名称永远不会与合法字段名称匹配,这样就不会误导使用记住密码的东西的人。

接下来,另一种验证码怎么样:您有一系列不会对人类造成问题的问题。但是,它们不是随机的。当攻击开始时,每个人都会收到问题 #1。一个小时后,问题#1 被丢弃,不再使用,每个人都得到问题#2,依此类推。

由于问题的一次性性质,攻击者无法探测下载数据库以放入他的机器人中。他必须在一小时内向他的僵尸网络发送新指令,才能有能力做任何事情。

于 2009-01-27T01:17:42.787 回答
0

由于有几个人将 CAPTCHA 作为后备人工机制,我添加了一个较早的 StackOverflow 问题和关于 CAPTCHA 有效性的线程。

reCaptcha 是否被破解/被黑/OCR'd/被击败/被破坏?

使用 CAPTCHA 不会限制您的限制和其他建议的改进,但我认为将 CAPTCHA 作为后备的答案的数量应该考虑那些希望破坏安全性的人可用的基于人的方法。

于 2009-03-05T22:25:37.127 回答
0

您还可以根据用户密码的强度进行节流。

当用户注册或更改他们的密码时,您会计算他们密码的强度等级,比如 1 到 10 之间。

诸如“密码”之类的得分为 1,而“c6eqapRepe7et*Awr@ch”可能得分为 9 或 10,得分越高,启动节流所需的时间就越长。

于 2011-01-27T04:11:08.673 回答
0

当我问这个问题时,我通常听到的第一个答案是更改端口,但忘记这一点,只需禁用 IPv4。如果您只允许来自 IPv6 网络的客户端,您将不再祈祷简单的网络扫描,攻击者将求助于 DNS 查找。不要在与你的 Apache(AAAA)/Sendmail(MX->AAAA)/你给每个人 (AAAA) 的地址相同的地址上运行。确保您的区域不能被 xferd,等待您允许任何人下载您的区域?

如果机器人发现你的服务器设置了新的主机名,只需在你的主机名前加上一些乱码,然后更改你的地址。保留旧名称,甚至设置 **honeypot 名称以使僵尸网络超时。

** 测试您的反向(PTR)记录(在 ip6.arpa 下),看看它们是否可以用于在有记录的 /4 上归零,而在没有记录的 /4 上。IE 通常 ip6.arpa 将在一个地址中有大约 32 个“.”,但尝试丢失最后几个可能会避开具有记录的网络块与其他没有记录的网络块。如果您更进一步,则可以跳过大部分地址空间。

在最坏的情况下,用户将不得不设置 IPv6 隧道,这不像他们必须通过 VPN 进入 DMZ 那样远……尽管有人想知道为什么这不是第一个选择。

Kerberos 也很酷,但恕我直言,LDAP 很糟糕(NISPlus 在技术上有什么问题?我读过 Sun 决定用户想要 LDAP,因此他们放弃了 NIS+)。Kerberos 在没有 LDAP 或 NIS 的情况下也能正常工作,只需逐个主机管理用户。使用 Kerberos 为您提供了一个易于使用(即使不是自动化的)PKI。

于 2015-01-12T07:55:28.560 回答
0

这里有点晚了,但我在想,假设一个困难的情况 - 攻击者使用大量随机 IP、随机用户名和随机密码,从 10,000 个最受欢迎的列表中选择。

你可以做的一件事,特别是如果系统似乎受到攻击,因为系统上有很多错误的密码尝试,特别是如果密码是低熵的,那就是问一个次要问题,比如你父母的名字是什么,例如. 如果攻击者尝试使用密码“password1”攻击一百万个帐户,他们很有可能会得到很多,但他们获得正确名称的几率会大大降低成功率。

于 2015-11-23T23:52:53.130 回答