一家中型SaaS公司去年遭遇的事情,值得所有做身份验证的人重新思考。

他们有速率限制。失败尝试后有验证码。10次失败后账户锁定。按大多数检查清单,他们的安全姿态算是"合理"的。

打开网易新闻 查看精彩图片

47天内,230万组凭证对被测试。零次锁定触发。零次验证码弹出。零条告警。

原因不是零日漏洞,不是什么 exotic bypass。而是某种结构简单到一旦看见就无法忽视的东西——你会从此用不同眼光审视自己的认证实现。

速度差

暴力破解和凭证填充防御的整个架构,建立在一个假设上:攻击很快。

N次失败后锁定。按IP限流。检测异常请求量。全都假设攻击者很急。

他们不急了。

转变逐渐发生,然后突然完成:凭证填充操作从spray-and-pray进化成威胁情报现在所称的低速分布式测试。攻击被分散到:

数千个住宅代理IP(不是WAF监控的数据中心段)

数天或数周,而非数小时

每个IP一两次尝试,永远达不到单IP阈值

人类真实的时序模式,包括睡眠周期,以击败行为分析

数学简单且残酷:用5万个凭证,每个IP尝试1次,分散在72小时内,正态分布时序,你会遇到以下控制:

IP速率限制(单IP)——从未触发

账户锁定(单账户N次失败)——从未触发

基于速度的异常检测——从未触发

失败尝试后验证码——从未触发

SIEM告警——从未触发

这不是假设。这是暗网IAB(初始访问代理)论坛和犯罪社区中记录的操作手法。规模化执行的工具已经商品化、廉价,且以"反检测"为主要卖点主动销售。

你实际在记录什么

当低速凭证填充操作针对你的端点运行时,你的日志通常显示:

失败登录适度上升,在正常方差范围内

IP分布多样,主要是住宅段

正常的User-Agent字符串(工具会轮换)

没有明显的地理聚集——住宅代理跨越合法地理区域

尝试时序与有机流量模式无异

没有特定仪器,你看不到的是:每凭证对的尝试比例,以及被测试账户之间的关系。攻击看起来像噪音,因为它就是被设计成噪音。

凭证生态问题

工程导向的安全内容中,这部分讨论得不够多:

针对你端点测试的凭证并非凭空出现。它们来自数据泄露市场——而这些市场现在已经极其高效。