Skip to content

0-day 漏洞是什么:补丁出现前的那段危险窗口

看到“某软件曝出 0-day,已遭在野利用”的新闻时,很多人的第一反应是:这是不是一种谁都防不住的超级漏洞?

我以前也会把注意力全放在“0”上,后来接触过几次真实的漏洞处置,才发现真正麻烦的不是这个数字,而是它代表的时间差:

攻击者已经知道门在哪里,守门的人还没有一把现成的锁。

先说结论:0-day 不是一种具体的漏洞类型,而是漏洞所处的阶段。 它可能是内存破坏、权限绕过、身份认证缺陷,也可能只是一个普通的逻辑错误。真正让它危险的,是厂商和防守方还没有准备好正式修复方案。


日常讨论里,0-day vulnerability、0-day exploit 和 0-day attack 经常被当成一回事,其实它们分别对应问题、工具和行动。

名词它是什么一个简单类比
0-day vulnerability厂商尚未修复,通常也尚未掌握的安全缺陷门锁里一个没人公开的结构缺陷
0-day exploit利用这个缺陷达成特定效果的方法或代码针对缺陷做出来的开锁工具
0-day attack攻击者实际使用 exploit 入侵目标真的拿工具去开别人家的门

NIST 对 zero-day attack 的定义很短:利用此前未知的硬件、固件或软件漏洞发起攻击。

这句话里最重要的是“此前未知”。但在现实新闻中,“0-day”也常被用来指补丁尚未出现、攻击已经发生的漏洞,即使厂商刚刚知道它。不同团队的用词边界并不完全一致,所以看公告时不要只盯标签,要继续确认三件事:

  1. 厂商是否已经确认;
  2. 是否有修复版本或缓解措施;
  3. 是否已经观察到真实攻击。

这里的“0”不是漏洞存在了零天,而是厂商可用于准备修复的时间几乎为零。

一个缺陷可能已经安静地躺在代码里五年,只是在某一天被研究人员或攻击者发现。对维护者来说,计时从“知道它”的那一刻才真正开始。

flowchart LR
    A[缺陷进入软件] --> B[有人发现缺陷]
    B --> C{先被谁发现}
    C -->|研究人员或厂商| D[协调披露与修复]
    C -->|攻击者| E[秘密开发利用方式]
    E --> F[在野攻击]
    D --> G[发布公告与补丁]
    F --> G
    G --> H[进入 N-day 阶段]
    H --> I[用户完成更新]

这条时间线有两个经常被忽略的空档:

  • 披露窗口:发现者已经报告,厂商正在修,但公众还不知道细节;
  • 补丁缺口(patch gap):厂商已经发布修复,下游产品或最终用户还没有真正装上。

Google Project Zero 使用过“90+30”的披露模型:给厂商 90 天修复,如果提前修好,再留出最多 30 天推动补丁被用户采用。这是一个研究团队的政策,不是所有漏洞都必须遵守的行业法律,但它说明了一件事:发布补丁不等于风险已经消失。


普通漏洞最直接的处理方式是升级。0-day 暴露时,稳定补丁可能还在开发或测试,团队只能先做临时缓解。

如果安全产品依赖已知恶意文件、固定请求特征或公开的攻击代码,新手法刚出现时就可能漏掉。行为检测、权限边界和网络隔离在这个阶段会更重要。

厂商要分析影响版本、定位根因、开发补丁、做兼容性测试;攻击者只需要找到一条可用路径。修复工作通常比破坏工作更慢。

不过,0-day 也不是魔法。一个漏洞能不能变成事故,还取决于:

  • 漏洞组件是否真的安装并启用;
  • 攻击者能否接触到入口;
  • 是否需要登录、用户点击或特定配置;
  • 进程拥有什么权限;
  • 后续横向移动是否被隔离。

未知漏洞无法被直接打补丁,不代表系统只能原地挨打。


4. 从漏洞到事故,中间还有一条链

Section titled “4. 从漏洞到事故,中间还有一条链”

新闻标题常把“存在漏洞”直接写成“数据已经泄露”,但真实攻击通常要经过多步:

接触入口 → 触发缺陷 → 获得初始能力 → 扩大权限 → 访问目标数据或业务

防守的意义,就是让这条链尽可能早地断掉。

例如,一个面向公网的文档解析服务出现未知漏洞:

  • 如果解析进程运行在隔离容器里,攻击者拿到的能力会受限;
  • 如果容器没有云平台凭证,后续扩张会更难;
  • 如果出站网络默认关闭,恶意载荷难以继续下载或回传;
  • 如果关键操作有审计日志,团队更容易发现异常。

所以安全工程不只是“等补丁”。最小权限、分段隔离、凭证治理、可观测性和备份,平时看起来很琐碎,遇到 0-day 时却是最后几层缓冲。


5. 没补丁时,工程团队先做什么

Section titled “5. 没补丁时,工程团队先做什么”

我会按下面的顺序处理,而不是一上来就在全公司群里转发“高危预警”。

第一步:确认自己是否真的受影响

Section titled “第一步:确认自己是否真的受影响”
  • 盘点产品、版本、插件和依赖;
  • 确认漏洞功能是否启用;
  • 找到哪些实例暴露在公网或不可信网络;
  • 阅读厂商公告原文,不用二手截图替代。

没有资产清单,后面的每一步都只能靠猜。

在正式补丁出现前,常见的临时动作包括:

  • 暂停或关闭有问题的功能;
  • 将服务从公网撤下,只允许可信来源访问;
  • 用防火墙、网关或访问控制阻断已知入口;
  • 隔离高风险实例,限制它访问内部系统;
  • 轮换可能暴露的凭证。

CISA 的漏洞响应建议也把限制访问、隔离系统、调整配置和增强监控列为无法立即打补丁时的可选措施。

临时缓解不是永久修复。每个 workaround 都要记录负责人、实施时间和撤销条件,否则几个月后很容易变成没人敢动的历史配置。

  • 保留网关、身份认证、主机和应用日志;
  • 关注异常进程、异常子进程和异常出站连接;
  • 检查短时间内新增的账号、密钥和计划任务;
  • 为高风险资产设置更短的告警周期。

不要只找某个固定 IOC。0-day 的具体攻击样本可能变化很快,行为上的异常通常更耐用。

第四步:准备补丁,而不是等补丁

Section titled “第四步:准备补丁,而不是等补丁”

提前确认:

  • 谁负责测试;
  • 哪些业务可以先灰度;
  • 失败时怎么回滚;
  • 哪些系统必须停机;
  • 如何证明补丁真的覆盖了全部实例。

补丁发布后的前几个小时,不应该再从“谁来处理”开始讨论。


打补丁只能阻止同一入口再次被利用,不能自动赶走已经进入系统的攻击者。

补丁完成后至少再做四件事:

  1. 验证版本:不要只看发布平台显示“任务成功”,要从实际运行实例确认版本;
  2. 检查入侵痕迹:回看漏洞公开前后的异常登录、进程、文件和网络行为;
  3. 处理持久化:轮换凭证,检查新增账号、密钥、启动项和计划任务;
  4. 恢复临时措施:确认正式修复有效后,再有计划地撤掉 workaround。

如果已经发现被利用的证据,就应当进入事件响应流程,而不是把它继续当成一次普通升级。


个人用户不需要研究漏洞利用细节,最有效的动作反而很朴素:

  • 开启操作系统、浏览器和常用软件的自动更新;
  • 更新后按要求重启,别让补丁一直停在“等待安装”;
  • 少装来源不明的浏览器扩展和破解软件;
  • 对突然出现的文档、链接和安装包保持怀疑;
  • 为重要账号开启多因素认证;
  • 重要资料保留一份不与电脑长期直连的备份。

如果厂商明确建议暂时停用某个功能,就先停用。这个阶段追求的不是完美体验,而是少暴露几天。


不一定。它描述的是未知或未修复状态,不直接等于影响程度。一个只能在本地、需要高权限才能触发的 0-day,可能不如一个正在公网批量利用的已知漏洞紧急。

不一定。CVE 是公开漏洞的统一标识,不代表补丁已经可用,也不代表攻击已经停止。

“安全软件可以自动拦住所有 0-day”

Section titled ““安全软件可以自动拦住所有 0-day””

做不到。行为检测、沙箱和隔离能降低风险,但没有产品能对所有未知缺陷给出保证。

补丁需要被真正部署,已入侵的系统还需要排查和清理。

自动更新、减少插件、开启多因素认证和保留备份,不能消灭 0-day,却能明显降低它变成严重事故的概率。


0-day 最值得记住的不是“神秘攻击”四个字,而是三个时间点:

厂商知道了吗?补丁出来了吗?我的设备真的更新了吗?

安全团队要做的,也不是预测所有未知漏洞,而是让系统在某一层被打穿后,仍然有下一层可以挡住它。