凌晨三点,短信洞我盯着手机屏幕上那条“您的验证验证码是482913”的短信,后背发凉。码漏这不是短信洞我第一次收到这种短信,但这次不一样——我根本没在登录任何应用。验证紧接着第二条来了:“您的码漏账户正在尝试异地登录,若非本人操作请忽略。短信洞”第三条:“验证码已失效,验证请重新获取。码漏”我的短信洞手机像被无形的手操控着,每一条短信都精准地踩在我神经上。验证
这玩意儿叫“短信轰炸”,码漏但真正要命的短信洞不是轰炸,是验证验证码本身。2021年,码漏某电商平台被爆出验证码接口漏洞,攻击者用脚本无限次请求,绕过图形验证码直接撞库。当时有个安全研究员做了个测试,用一台普通笔记本,跑了不到两小时,就拿到了该平台三万多个真实手机号对应的验证码。不是破解,是接口根本没做频率限制——你发100次请求,它就回你100个验证码,其中总有几个能撞上用户正在操作的会话。
更蠢的是,很多开发者把验证码当成万能钥匙。注册要验证码,改密码要验证码,解绑手机号也要验证码,甚至支付确认也靠它。但验证码的本质是“你拥有这个手机号”,而不是“你是你”。手机号可以补卡,可以携号转网,甚至在某些黑产渠道,花几十块钱就能买到一张实名认证过的物联网卡。我认识一个做风控的朋友,他跟我说过一句糙话:“验证码就是门锁上的猫眼——看起来能看见外面,实际上谁都能从外面捅个铁丝进来。”
最典型的漏洞出在“回显”上。2022年某银行APP,用户找回密码时,系统会把验证码直接显眼地放在响应报文里。用Burp Suite抓个包,连解密都不用,明晃晃一串数字躺在JSON里。你说这是低级失误?但就是这种低级失误,让黑产团伙在三个月内盗刷了上百万。他们甚至不需要短信通道,只要知道你的手机号和身份证号,就能在凌晨四点——那时候银行风控系统最松懈——用脚本批量重置密码。
还有些漏洞藏在业务逻辑里。某社交平台允许用户用验证码登录,但验证码的有效期设成了15分钟。问题是,它把验证码绑定到了“设备指纹”上,而设备指纹可以伪造。攻击者先用自己的手机号注册,拿到验证码,再伪造目标用户的设备指纹,就能用同一个验证码登录目标账户。这操作听起来绕,但实际执行起来,就是几个Python函数的事。
我见过最讽刺的案例是某短信服务商自己的后台。他们给客户提供验证码发送API,结果API的鉴权密钥硬编码在JS文件里。任何人都能打开浏览器控制台,直接调用接口给任意手机号发验证码——而且不限制发送条数。那段时间,只要知道你的手机号,就能让你手机一晚上收两百条垃圾短信,顺便把你的短信通道打爆,让你收不到真正的验证码。这叫“短信轰炸”配合“验证码延迟”,双管齐下,让用户陷入“验证码永远收不到,因为收件箱被垃圾短信塞满”的死循环。
别以为运营商能兜底。GSMA的协议里,短信本身就是明文传输的。SS7信令漏洞存在十几年了,某些国家的黑客能直接截获你的短信。在国内,伪基站虽然被打击得厉害,但在偏远地区还是能收到“尊敬的客户,您的积分即将过期”这种钓鱼短信——点进去就是钓鱼页面,输入手机号后,真正的验证码会被转发到攻击者那边。
所以我的建议很粗暴:能用硬件密钥或TOTP(时间同步验证码)的地方,别用短信。那些“验证码登录”的便捷,本质上是用安全换便利。你每次点击“获取验证码”,都是在赌运营商、银行、APP开发商、短信通道商这四环里,没有一个环节出纰漏。赌赢了一百次,第一百零一次输一次,那就不是收条垃圾短信的事了。
写这篇的时候,我又收到一条验证码短信。这次是某游戏平台,我上次登录是半年前。我没点进去,直接删了。谁知道是哪个角落里的接口又在漏呢。