通过 VPN 打开熟悉的网站,却遇到额外的验证,最诱人的解释是隧道被检测到了。确实有东西被检测到,但那不是你。网站对一组信号打分,其中之一就是源地址,而这个地址与陌生人共享,他们可能在一分钟前制造了登录失败。把这一决定读成关于你连接的判决,是误解了评分的目的。

源地址能确定什么,不能确定什么

IP 地址描述的是某一时刻穿过网络的一条路径。它不能识别一个人、一台设备,甚至一个账户;在运营商级 NAT 或繁忙的 VPN 池中,它可能同时代表数千个互不相关的会话。把地址当作身份的网站,实际上是把它当作声誉,而声誉是一种统计陈述,不是事实。

两个人可以共用一个出口,却给出相反的证据:一个人用第二因素成功登录,另一个人尝试了四十个密码。地址完全相同,因此任何只以地址为依据的规则都无法区分他们,而由此触发的任何反应都会同时落在两人身上。

这并不是说应当忽视地址。这是说应当记住这个信号衡量的到底是什么,因为 VPN 登录周围大多数令人意外的行为,来自在错误的粒度上施加控制,而不是来自错误的观察。

为什么封锁出口会惩罚陌生人

地址级封锁实施起来便宜,瞄准起来却很昂贵。它的波及范围是该地址背后的每一个会话,这也是共享地址和 NAT 行为在运维文档中有自己历史的原因:同样的推理也出现在 IETF 关于共享源地址以及基于地址的过滤之附带影响的工作中。

SignalWhat it provides evidence aboutWhat it cannot settle
Source address and its reputationThe network path, and how that path behaved recently for othersWhich account or person is behind the request
Authenticator resultWhether the account claim was proved at the required strengthWhether the account's owner initiated it
Request timing and volumeWhether the pattern looks automated or burst-likeWhether the intent was malicious or a shared client
Application event historyWhat this account has done while signed inAnything about requests that never authenticated

想想封锁造成的两种失败。同一出口背后的合法客户被拒绝服务,并提交一张比滥用本身代价更高的支持工单。真正的攻击者则换到数千个池中的下一个出口,除了一次重连之外什么也没花,就继续下去。

缺的一步是相称性。反复的登录失败、一波自动化请求,以及认证后的权限违规,是三种不同的事件,只有第二种才可能是地址形态的问题。把同一套全站网络封禁套用到这三种情况上,正是安全控制变成支持队列的方式。

把决定放在证据所在之处

账户级控制会跨越地址跟随账户,这才对应你真正关心的实体。速率限制、反复失败后的等待期,以及敏感操作的分步认证,都作用于账户或操作,而不是网络路径。这与你实际保护的实体更匹配。它也消除了攻击者去寻找新出口地址的动机。

NIST 的认证指南把这些当作风险评估的输入,并把地址、地理位置和请求时间列为信号,这正是应当借用的框架:信号为决定提供信息,而不替代认证器。请把这份清单读作输入,而不是一份该封禁什么的菜单。认证器仍然负责证明,其他信号只决定在它周围设置多少摩擦。

两项设计约束可以防止账户级方案变成它自己的故障。速率限制需要一条安全的复核路径,让用户能够报告错误分类而不必公开凭据;分步验证也绝不应能用密码,或交给未核实支持联系人的一次性验证码来回答。

公平策略从外面看是什么样

写下每项控制支撑的是哪个决定,然后检查控制的粒度是否匹配。地址控制回答的是关于某个网络流量的问题;账户控制回答的是关于某个账户的问题;应用事件回答的是关于认证后行为的问题。把三者都点名的策略是可审计的,只点名 VPN 流量的策略则不是。

然后衡量结果,而不是规则数量。未授权尝试应当下降,合法用户应当保有一条受支持的路径,每千次登录的支持联系次数不应上升。如果一个封锁改善了第一个数字,却毁掉了另外两个,那它是把问题搬走了,而不是解决了。

接受 VPN 连接与执行滥用控制是相容的目标。行得通的版本把源地址当作若干输入之一,施加与证据相符的最窄控制,并为被误分类的人留一条诚实的路径。行不通的版本把地址当作嫌疑人,然后称其为策略。

相关文章