蛮力与拒绝服务

信息安全 蛮力 拒绝服务
2021-09-07 01:00:12

我今天提出了一个问题,我觉得这很有趣。

您有一个带有管理面板的应用程序。您知道一些帐户,因为它们是标准的。你想要两件事:

  • 你想防止暴力攻击
  • 您想防止拒绝服务

目前,用户帐户在 5 次尝试后被锁定。这意味着您必须通过电子邮件重置密码。这减少了成功的蛮力攻击的机会。

另一方面,风险在于,由于存在一些默认帐户,因此有人故意不断发送错误密码以继续禁用这些帐户。这将导致对管理帐户的一种拒绝服务。

我的解决方案是让管理面板只能通过 VPN 访问。因此,您首先需要访问 VPN,然后才能尝试登录面板。

但如果这不是一个选项,你能做什么?(除了持续阻止执行暴力攻击的 IP)

4个回答

对于一个简单的解决方案,我会说每个 IP 地址的每个用户实现指数级增长的延迟。

用户x的 IP abcd尝试 1 和 2 之间所需的延迟:1 秒

...尝试 2 和 3:2 秒

...尝试 3 和 4:4 秒

...

...尝试 7 和 8:1 分 4 秒

这样,对手就无法从 IP 地址或个人用户进行 DoS 访问,并且您已经非常有效地减轻了暴力攻击,因为延迟很快变得不合理。即使他们可以访问大量 IP 地址,也可能不足以暴力破解密码密钥空间,只有一些字典单词。

允许使用相同密码的暴力破解用户,但是如果您看到失败的请求数量,您可能应该无论如何都应该标记它(因为多次错误尝试的用户可能并不少见,但多个尝试错误的用户快速连续来自同一个 IP 地址是可疑的)。

正确的方法是使用每个 IP 的速率限制,并在登录时为有大量无效登录尝试的用户帐户引入验证码。CAPTCHA 不需要特别强大,因为它主要用于防止非目标路过式攻击。这种方法的好处之一是它可以防止单用户多密码攻击和多用户单密码攻击,而不会导致 DoS 条件。

但是,我建议不要无限期地增加超时。如果攻击者与用户在同一个网络上,他们可能拥有相同的面向公众的 IP 地址,从而允许他们通过不断发送错误的登录请求来使用户永远超时。这在很大程度上可能是一个相当模糊的案例,但请考虑大学和学校网络。相反,速率限制不会对前 2 次失败的尝试施加延迟,第 3 次尝试为 5 秒,第 3 次为 15 秒,所有后续尝试为 30 秒。

一个有趣的案例是来自大量源 IP 的多用户单密码攻击,例如通过 Tor。这可能会破坏大多数这些机制。我见过的防止此类攻击场景的最佳方法之一是监控全局登录失败率,并在检测到大规模攻击时引入站点范围的速率限制和验证码。

对于固定的管理员帐户,最好有一个单独的登录屏幕。这可以得到更严格的监控和控制,并允许您避免大多数路过尝试的问题。

另一个增加密码猜测尝试成本的有用机制是客户端工作量证明功能。我在一些网站上看到过这些,我认为它们非常整洁。本质上,服务器发送一个挑战值c,客户端必须计算一个盐值s,使得 的第一个nsha1(c || s)为零。n可以以与在密钥派生算法中调整迭代计数相同的方式调整 的值客户端必须计算s(通过蛮力)满足条件的值,并将其发送回服务器。然后,服务器可以简单且廉价地验证s是正确的。在客户端实现这一点通常在 JavaScript 中完成。对于合法用户来说,这应该会在登录时造成不超过一秒的延迟,但对于使用自己的系统尝试数千个密码的攻击者来说,这会增加时间和功耗方面的成本。此外,在将僵尸网络或其他恶意软件用作这些密码尝试的平台的情况下,高 CPU 使用率更有可能提醒用户他们的机器出现问题。

对于管理员帐户,您是对的,需要 VPN 是正确的方向。
更好的是,需要对管理员用户进行多因素身份验证。

这些总是好主意。


也就是说,如果由于某种原因它不可行,并且您被常规的公共密码登录所困扰,那么一切都不会丢失。

假设您的管理员帐户都受强密码策略的约束,直接暴力破解将需要很多很多很多很多次尝试。尝试通过您的登录表单通过互联网暴力破解密码将花费非常非常非常非常非常长的时间 - 只有在可以并行运行许多登录尝试时才可行,使用许多电脑。
这里的关键因素是速度

因此,解决方案是减慢重复登录尝试的速度,而无需实际停止真正的用户(在蛮力进行的同时尝试使用相同的帐户登录)。
不,甚至不要考虑尝试 CAPTCHA - 虽然这些确实有一些微小的影响,但它远不足以将攻击流减慢一个数量级(最好的选择可能是 20% 左右 - 不够慢) .

一个更有效(和更简单)的解决方案是速率限制
即一分钟内不超过 5 次登录尝试。或者50。甚至500。
这也可以看成是一种自动解除锁定机制,延时很短。
数学仍然对您有利 - 您可以根据预期的威胁以任何您想要的速度限制它),并且您仍然可以为真正的用户登录留出余地。

在多次锁定之后,您可能希望对每个 IP 实施更长的锁定 - 但要小心这种方法,因为 IP 地址通常不会与特定用户对齐(通过共享 IP、漫游 IP 等)。因此,如果必须,请使用它,但要轻柔。

此外,请确保在多次锁定后提醒管理员,允许进一步手动响应。

我可以建议一个低技术的解决方案吗?没有默认帐户。在 linux/windows 上删除 root 和管理员是我做的第一件事。我不能对未知的管理面板说话,但这可能是一种选择。