保护 ASP.NET 核心免受撞库

Secure ASP.NET Core against credential stuffing

ASP.Net Core 通过在固定次数的登录尝试后锁定帐户来防止暴力猜测密码。

但是是否有一些针对凭据填充的保护措施,攻击者尝试多次登录,但总是使用不同的用户名?锁定帐户无济于事,因为每次尝试都会更改帐户。 但也许有一种方法可以锁定 IP 以防止多次登录尝试或其他一些防止凭据填充的好主意?

我建议对 Redis 使用速度检查,这基本上只是限制某些 IP。此外,一些欺诈者还会轮换 IP,您还可以检测到何时登录更频繁(比如正常的 10 倍)并开始阻止所有登录时间 window。我写了一篇博客 post 详细介绍了上面的一些内容。代码全部在节点中,但我确实给出了一些高级示例,说明我们如何在 Precognitive(我目前的工作)中阻止欺诈。在接下来的几个月里,我将在我的帐户接管系列中 post 继续构建代码。

https://medium.com/precognitive/a-naive-demo-on-how-to-stop-credential-stuffing-attacks-2c8b8111286a

IP 限制是良好的开端,但遗憾的是它无法阻止大量现代撞库攻击。精明的凭据填充器的策略在过去几年中不断发展,变得越来越复杂。

要真正有效地阻止撞库,您需要关注的不仅仅是 IP。攻击者会轮换 IP 和 User-Agent,他们还会欺骗 User-Agent 值。一种有效的防御策略基于对异常 IP 和用户代理 activity 的实时分析来识别和阻止攻击,加上额外的组件来增强特异性(例如基于浏览器或基于移动应用程序的指纹识别) ).

我写了一篇博客 post 研究 2020 年的两次撞库攻击,我称之为攻击 A(低复杂性)和攻击 B(高复杂性)。

攻击 A(低复杂性示例)具有以下特征:

  • ~150,000 次登录尝试
  • 1 个不同的用户代理(广泛使用的 Chrome 版本)
  • ~1,500 个不同的 IP 地址(85% 来自大多数应用程序用户所在的美国)

高复杂性示例攻击 B 具有以下特征:

  • ~60,000 次登录尝试
  • ~20,000 个不同的用户代理
  • ~5,000 个不同的 IP 地址(>95% 来自美国,>99% 来自美国和加拿大)

您可以看到,对于攻击 A,每个 IP 地址大约有 100 次登录尝试。 IP速率限制可能在这里有效,具体取决于限制。

但是,对于攻击 B,每个 IP 地址只有 12 次登录尝试。很难说 IP 速率限制对这种情况有效。

这是我的 post 更深入的数据:https://blog.castle.io/how-effective-is-castle-against-credential-stuffing/

完全披露:我在 Castle 工作,我们提供基于 API 的产品来防止撞库。