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