一句话回答: 中间人对抗式(AiTM,adversary-in-the-middle)攻击是一种高级钓鱼:一个假站点把你输入的一切——包括你的一次性验证码——实时转发给真站点,然后窃取你已登录的会话。因为它在你输入的瞬间就捕获了码,AiTM 能击败短信和 App 型 OTP。可靠的防御是抗钓鱼登录,如通行密钥或硬件密钥,它们在密码学上与真站点绑定、无法被转发。

大多数钓鱼偷走你的密码就到此为止——而 2FA 救了你。AiTM 钓鱼是更可怕的进化:它坐在你和真站点之间,把你的凭证和验证码实时传过去,于是你信赖的第二因子也被一并卷走。下面讲清它怎么运作、以及到底什么能挡住它。
一、AiTM 如何击败 OTP
经典钓鱼在假页面上抓密码,但在 2FA 处撞墙。AiTM 用一个实时转发(反向代理)拆掉那堵墙:
- 你点了钓鱼链接,落到一个完美镜像真站点的假页面。
- 你输入密码——代理立刻把它转给真站点。
- 真站点索要你的 OTP;假页面把这个请求转达给你。
- 你输入码——代理在它过期前实时转发。
- 真站点返回一个有效会话 cookie,攻击者窃取它以保持登录。
因为码在你输入的那一刻就被用掉,它的短过期帮不上忙。攻击者没破解 OTP——他让你实时把它送了出去。
二、为什么它能破码、却破不了通行密钥
关键区别在于一个因子绑定在什么上:
| 因子 | 能扛住 AiTM? |
|---|---|
| 短信 OTP | 否——被实时转发 |
| 验证器 App 码 | 否——被实时转发 |
| 推送批准 | 常常否——你批准了被代理的登录 |
| 通行密钥/硬件密钥 | 是——绑定在真域名上 |
任何你能读出并重输的码,都能被代理转发。而通行密钥或硬件密钥不同:它在密码学上核验真实网站的身份,所以在假域名上它干脆拒绝认证。这就是「抗钓鱼」的含义。
三、如何保护自己
- 输入任何东西前先看域名——AiTM 活在仿冒 URL 上。地址不对,就停下。
- 关键账号用通行密钥或硬件密钥;它们在假站点上无法工作,这恰是重点。
- 对邮件/消息里的登录链接保持警惕——直接访问站点,而不是点进去。
- 留意意外的会话提示和重新认证请求,可疑就上报。
对付撞库这类大多数日常威胁,验证码仍然保护你——AiTM 是「抗钓鱼因子最要紧」的那个特定场景。
四、如果你用在线号码收码,这意味着什么
AiTM 盯的是你被骗去访问的登录页,而非你的码所走的通道——所以它是钓鱼问题,不是送达问题。无论你的码到达 SIM,还是你无 SIM 卡在线收,风险都一样,防御也一样:只在「你自己导航过去、且核验过域名」的站点上输入码。
结论:对短信码本就该挡的日常威胁,它依然够用。对「有针对性钓鱼确实值得担心」的账号,加一个抗钓鱼因子——并且在输入任何码(无论是不是在线收的)之前,总是先确认你在真站点上。
常见问题
Q:AiTM 真能绕过 2FA 吗? 对码型和推送型 2FA,能——因为它把你的码实时转给真站点。它绕不过通行密钥或硬件密钥,后者绑定在真域名上。
Q:我怎么知道一个站点是不是 AiTM 假站? 最大的破绽是 URL——AiTM 用仿冒域名。总是核验地址,用手输或书签抵达站点,而不是点链接。
Q:因为 AiTM,我该停用短信码吗? 不该。短信码仍能挡住撞库等常见攻击。对高风险目标,加一个像通行密钥这样的抗钓鱼因子,并对你所在的域名保持警觉。
小结
AiTM 钓鱼把你的密码和一次性码实时转给真站点、窃取你的会话——这正是「任何你能重输的码(含短信)都可能被它击败」的原因。可靠的防御是像通行密钥这样、绑定真域名的抗钓鱼因子,再加上「输入任何码前先核验站点」的习惯,无论你是怎么收到那个码的。