2021年12月,Apache Log4j2 被爆出一个远程代码执行漏洞。攻击者只需要往被攻击系统里发一段特定字符串,就能在服务器上运行任意代码。这个漏洞后来被命名为 Log4Shell,CVSS 评分满分 10 分。从漏洞公开到第一个大规模扫描出现,中间隔了不到 12 小时。更麻烦的是,在官方补丁发布之前,已经有攻击者在野外利用它了。
这就是 0day 漏洞的典型场景——厂商还没发布补丁,攻击者已经拿着武器在打了。中文里常说的“零日漏洞”,英文是 zero-day vulnerability。名字里的“零日”指的是厂商知道漏洞存在的那一天算起,留给防御方的时间是零天。你没有任何缓冲期,没有补丁,没有规则更新,甚至可能连这个漏洞的存在都不知道。
很多人把 0day 和普通漏洞混为一谈。区别不在技术层面,而在时间线上。一个漏洞被发现后,如果厂商已经发了补丁,那叫 Nday,N 是多少天取决于补丁发布多久了。你打上补丁就没事。0day 是你根本不知道要防什么。防火墙规则不知道怎么写,入侵检测系统没有对应签名,终端防护软件也没见过这种攻击模式。防御方处于完全的信息盲区。
2010 年的震网病毒(Stuxnet)用了四个 Windows 0day 漏洞。要知道,当时一个 Windows 0day 在黑市上能卖到几十万美元。一次性用四个,说明背后不是普通犯罪团伙,而是有国家资源支撑的行动。这件事之后,0day 漏洞正式从技术圈的话题变成了国家安全层面的议题。
0day 漏洞有一个完整的交易市场。卖方是安全研究员或者专门的漏洞挖掘团队。买方就复杂了——有做漏洞赏金项目的厂商,有政府背景的机构,有商业间谍软件公司,也有纯粹的犯罪组织。
价格差距很大。一个 Chrome 浏览器的 0day,如果只影响旧版本,可能几千美元。如果是能绕过所有缓解措施、影响最新版本的远程代码执行漏洞,价格能到 50 万到 250 万美元。iOS 的完整攻击链——从浏览器漏洞到内核提权再到持久化——报价超过 250 万美元。这些数字不是我编的,是 Zerodium 等漏洞收购平台公开过的价目表。
厂商自己也在买。微软、谷歌、苹果都有漏洞赏金计划,出价从几千到几十万美元不等。但厂商的出价通常低于黑市。这就产生了一个道德困境:一个安全研究员发现了 0day,卖给厂商拿 10 万美元,卖给漏洞经纪人拿 50 万美元,怎么选?大部分人嘴上说会卖给厂商,但真金白银面前,选择没那么轻松。
面对 0day,传统安全防护手段效果有限。杀毒软件靠特征库匹配,没见过的东西它不认识。防火墙靠规则,你不知道攻击流量长什么样,规则就没法写。就连行为检测也可能失效——高级 0day 攻击会刻意模仿正常操作,不触发异常告警。
Log4Shell 爆发的时候,很多企业的第一反应是关服务。因为没补丁,只能先断臂求生。有些公司直接把 Log4j 的 JNDI 功能禁用了,虽然会影响业务,但总比被入侵强。这种被动局面就是 0day 的常态——你只能等厂商出补丁,或者自己找到缓解措施。
更让人不安的是,有些 0day 漏洞可能已经被利用了几个月甚至几年才被发现。攻击者如果技术够好,可以一直潜伏,不触发任何告警。等发现的时候,数据早就被搬空了。
说实话,普通人直接遭遇 0day 攻击的概率不高。攻击者用 0day 是有成本的,他们通常盯着高价值目标——政府机构、大型企业、记者、异见人士。你手机里的照片和聊天记录,不值得花几十万美元的漏洞来偷。
但间接影响是躲不掉的。Log4Shell 影响了几亿台设备,从企业服务器到家用路由器都有。你用的网银、电商平台、社交软件,背后都可能跑着有漏洞的组件。厂商被攻破了,你的数据也就泄露了。所以及时更新系统、别用太老的设备,虽然听起来像废话,但确实有用。
0day 漏洞不会消失。只要软件还有代码,就会有 bug。只要 bug 能换钱,就会有人去找。这场猫鼠游戏没有终点。防御方能做的,是假设自己随时可能被 0day 打穿,然后提前想好:如果补丁还没来,我该怎么办。
```