AI在企业级漏洞预警中的应用
原创 aerfa21 2026-09-19 16:13 浙江

漏洞预警的瓶颈从来不是"不知道有漏洞",而是从通告到确认受影响的转化。本文分享AI驱动的"监测→内化→应用→验证"四阶段闭环实践,以及CVE-2026-42945排查脚本从能跑到敢在上万台机器上跑的三轮迭代。关键认知:AI备好判断输入、落成执行动作。
漏洞预警真正的瓶颈,从来不是"不知道有漏洞",而是从看到通告到确认自己受影响之间那段转化。
这篇文章基于两个已经落地的成果展开:一张《漏洞预警流程 - - AI 驱动四阶段闭环体系》流程图,和一份针对 Nginx CVE-2026-42945 的批量排查脚本(迭代到 v1.0.2)。前者是体系流程,后者是流程里"应用"环节被真正跑起来的一个切片。
数据速览
先把全篇要用到的数字摆出来,后面每一节都在解释它们是怎么来的:
对象 → 规模
预警场景全景
7 类业务场景,其中"漏洞预警"是打磨最久的一类
预警流程
4 个阶段 → 3 个团队并行 → 11 个动作节点 → 4 条 PS 备注
监测信源
5 类(奇安信 CERT / CVE / NVD / 微软安全公告 / Chrome 安全更新)
内化产出
4 项(漏洞原理、漏洞细节、POC 分析、是否启动应急响应)
排查脚本
153 行 → 4 个检测步骤 → 3 个联合判定条件 → 2 类运行环境 → 3 轮修复
成熟度定位
排查脚本 L2(条件自动判定)|内化研判 L0(人工)|整体由最低环节决定
一漏洞预警的瓶颈,从来不在"信息"
做安全的人都有一个共同感受:漏洞信息永远是过量的。
奇安信 CERT、CVE / NVD、微软安全公告、Chrome 安全更新,再加上各种商业与开源情报源,每天推过来的通告数以百计。真正稀缺的从来不是"漏洞线索",而是三样东西:
- 判断力
——这个漏洞对我方资产到底成不成立?
- 时间
——从看到通告到确认影响范围,能不能压缩到小时级?
- 一致性
——同一个人、不同时间、面对不同漏洞,能不能给出同样质量的结论?
传统做法是"人工盯 + 人工查":信息靠人刷,判断靠经验,排查靠临时写命令。结果是监测环节堆满了信息,内化环节堵在了一个人身上,应用环节的排查动作又高度重复、质量参差。
我们先把场景盘清楚了,才敢谈 AI
在动手做任何自动化之前,我先做了一件事:把 AI 可能介入的安全业务场景全部列出来,形成一张全景图。结论是 7 类:
1. 业务场景:漏洞预警——针对商业或开源软件的 0day / Nday 漏洞监测与响应
优质监测渠道 奇安信 CERT、CVE、NVD、微软、Chrome
内化阶段要产出什么 漏洞原理、漏洞细节、POC
2. 业务场景:投毒预警——针对商业或开源软件的投毒信息
优质监测渠道 墨菲安全、悬镜安全、OSSF 项目
内化阶段要产出什么 软件名称与版本、IOC、C2
3. 业务场景:APT 追踪——针对 APT 组织的技战法
优质监测渠道 TG、公众号
内化阶段要产出什么 TTPs、恶意样本
4. 业务场景:攻击事件——针对知名企业被攻击事件做自省
优质监测渠道 TG、公众号
内化阶段要产出什么 TTPs、企业安全建设启发
5. 业务场景:敏感信息泄露——针对公司代码、账号的外部监测
优质监测渠道 GitHub、码云、CSDN、语雀、公众号
内化阶段要产出什么 ——
6. 业务场景:安全技术分享——会议、文章等内容内化
优质监测渠道 TG、公众号
内化阶段要产出什么 安全工具、技术手法、攻击思路、建设经验
7. 业务场景:产品漏洞信息——针对公司自身产品的漏洞与利用信息
优质监测渠道 公众号、CSDN、先知
内化阶段要产出什么 ——
这七类场景有一个共同的形状:前端是海量、非结构化的信息,后端是可以标准化的动作。这个形状恰好就是 AI 最擅长补位的地方 - - 读得比人快,记得比人全,但判断必须由人兜底。
本文聚焦第一类,也是我们打磨最久的一类:漏洞预警。
二流程:AI 驱动的四阶段闭环
我们把漏洞预警拆成了四个阶段:监测 → 内化 → 应用 → 验证。

图 1:漏洞预警流程 - - AI 驱动四阶段闭环体系(监测 → 内化 → 应用 → 验证)
先把全局看清,再逐个阶段展开:
① 监测
关键动作 5 类信源聚合
主要产出 待研判漏洞清单
AI 的落点 去重、降噪、相关性排序
必须由人兜底的地方 信源准入标准
② 内化
关键动作 提取原理 / 细节 / POC
主要产出结构化利用条件表
AI 的落点 通读公告与 POC、抽取条件字段
必须由人兜底的地方是否启动应急响应
③ 应用
关键动作 3 团队并行、11 个动作节点
主要产出 受影响清单、工单、BAS 用例
AI 的落点 把利用条件翻译成可执行排查逻辑
必须由人兜底的地方 影响范围与修复优先级确认
④ 验证
关键动作 3 层验证 + 回退机制
主要产出 闭环 / 回退修复
AI 的落点 结果比对与回归
必须由人兜底的地方 闭环判定
① 监测:信源聚合与降噪
渠道是固定的五类:奇安信 CERT、CVE / NVD、微软安全公告、Chrome 安全更新,以及微信公众号开源情报源。
这一步 AI 的价值不在"抓取"(抓取是工程问题),而在降噪和初筛:同一漏洞被多个渠道重复推送时去重、把与我们技术栈无关的通告降权、把"影响面大且可落地"的通告前置。人不再需要逐条读完全部通告,只需要读被排到前面的那几条。
② 内化:把通告翻译成"可判断的结论"
这是整个流程里最关键、也最难的一环,流程图上专门用红字标注了:需要人工参与。内化要产出四样东西:
- 漏洞原理:它到底是怎么触发的;
- 漏洞细节:触发它需要满足哪些前置条件;
- POC 代码的提取与分析:有没有可验证的 PoC,PoC 说明了什么;
- 是否启动应急响应的判断。
AI 在这里承担的是"重活中的体力活":通读公告与 PoC、把散落在正文/附件/引用链接里的利用条件结构化地抽出来(版本区间、配置要求、认证前提、是否需要特定编译选项),并给出一个初步研判。
而人承担的是"重活中的判断活":是否启动应急响应的标准是什么。这是流程图里反复强调、也是我们至今仍在持续明确的问题——这个标准不能交给模型去猜。
一个关键认知:AI 不是把"研判"这个环节自动化掉了,而是把研判的输入准备好了。以前研判的人要花两小时读材料,现在读一份已经被整理好的结论摘要,再把时间花在真正需要经验的那一步。
③ 应用:三个团队并行,11 个动作节点
这是流程里最"重"的一段,也是最容易被 AI 提效的一段。三个团队并行推进,各自面向不同的资产面:
安全运营团队
面向 全域网络资产
动作节点 4 步:② 受影响范围初评 → ③ 受影响范围确定 → ④ 推动受影响修复 → ⑤ 修复后漏洞验证
内部蓝军团队
面向 "这个漏洞打不打得进来"
动作节点 3 步:① 漏洞分析与研判 → ② 漏洞利用武器化 → ③ 丰富 BAS 用例库
产品安全团队
面向 产品线
动作节点 4 步:② 受影响范围初评 → ③ 受影响范围确定 → ④ 推动受影响修复 → ⑤ 修复后漏洞验证
三支队伍的差异,其实在"用什么工具去确认范围"这一句上:
安全运营团队(全域网络资产)
- 受影响范围初评:查询 CAASM 平台 / 联动 OPS,通过名称、版本信息初步判断可能受影响的资产;
- 受影响范围确定:使用 CAASM 平台 / 联动 OPS,通过 POC 扫描、主机信息收集确定实际受影响范围,并针对性输出防御或检测方法;
- 推动受影响修复:通过 CAASM 平台工单、POC 扫描结果生成工单,推送给资产责任人,提醒按 SLA 修复;
- 修复后验证:再次通过 POC 扫描、主机信息收集验证修复情况。
内部蓝军团队(面向"打不打得进来")
- 漏洞分析与研判:分析和复现漏洞,输出利用条件、难易程度、POC,以及是否启动应急响应;
- 漏洞利用武器化:直接或结合历史漏洞,做成实战渗透的武器;
- 丰富 BAS 用例库:转化为 BAS 格式的验证 POC,加入常态化安全有效性验证。
产品安全团队(面向产品线)
- 受影响范围初评:查询 SDL 平台组件及工单,通过名称、版本信息初步判断可能受影响的资产;
- 受影响范围确定:使用 CAASM 平台 / 组织产线安全专员,通过漏洞利用条件、POC 等确定实际受影响范围;
- 推动受影响修复:通过 wiki / SDL 平台创建漏洞工单,推送给产品安全专员,提醒按 SLA 修复;
- 修复后验证:使用检查配置、POC 等方式验证修复情况。
流程图上还压着 4 条 PS 备注,它们恰恰是"纸面流程"和"真实流程"的差距所在:
暂无 POC 等无法用 POC 直接验证的场景,先用人工跟进全流程闭环;
需关注安全产品检测规则更新、或自研检测规则更新;
外部客户侧的修复需视实际情况而定,影响大、舆论声音大走 PSIRT 流程;
需关注实验局中安全产品的自身安全情况。
AI 在"应用"环节的落点,就是把内化阶段产出的"利用条件",直接变成可在资产上批量执行的排查动作。下一节的脚本,就是这一段的具体实现。
④ 验证:闭环,以及回退
验证有三层:
各细分场景 / 团队验证对应的漏洞修复情况;
BAS 验证新漏洞的安全防护(监测)效果;
- 验证通过 → 闭环;不通过 → 回退到修复阶段。
注意第 3 条——流程里明确写了回退路径。一个没有回退的流程,闭环是假的。
同时有一个容易被忽略的 PS:需关注安全产品检测规则更新,或自研检测规则更新。 一个漏洞的闭环,不只意味着"资产修好了",还意味着"我们下次能不能更早发现它"。
三案例:CVE-2026-42945 排查脚本是怎么迭代出来的
流程讲完,来看一个真实切片——一份 153 行的 Nginx 批量排查脚本,从能跑,到敢在上万台机器上跑。

图 2:把通告里的自然语言翻译成判定逻辑 —— 三条件联合判定 + 4 步检测
3.1 从"通告"到"判定条件":一次翻译
通告给出的信息是描述性的:某版本区间的 Nginx,在特定 rewrite 配置下,叠加 ASLR 关闭的环境,存在可利用风险。
人类读这段话,会立刻明白"要同时满足三个条件才真正有风险"。但要把它变成机器能跑的逻辑,需要一次翻译:
通告里的自然语言 → 翻译成的可执行判定
某版本区间的 Nginx
提取 nginx -v 版本号,与 0.6.27 ~ 1.30.0 做区间比较
特定 rewrite 配置
grep -rE 'rewrite.*\?.*\$[1-9]' 匹配配置文件
ASLR 关闭
读 /proc/sys/kernel/randomize_va_space,为 0 即关闭
三条件同时成立才有风险
三个结果做逻辑与,输出最终结论
这一步就是 AI 最直接的用武之地:把通告读成条件表,再把条件表写成代码。 人只需要复核条件表对不对——复核一张表,比复核 153 行代码便宜得多。
3.2 脚本长什么样:4 步检测
翻译完条件,脚本的结构几乎是自然浮现的:
[1/4] 检查对象:内核 ASLR
判定方式 读 /proc/sys/kernel/randomize_va_space
空值 / 异常处理 非 0 即视为已开启,利用难度高
[2/4] 检查对象:宿主机 Nginx
判定方式 版本区间 + 高危 rewrite 配置
空值 / 异常处理 无 nginx 则明确输出"未安装",不报错
[3/4] 检查对象:Docker 可用性
判定方式docker ps 探测,失败降级 sudo
空值 / 异常处理 无权限则标记"跳过容器检测"
[4/4] 检查对象:容器内 Nginx
判定方式 逐容器重复同一套判定
空值 / 异常处理 无运行中容器则直接给出结论收尾
值得注意的是:判定逻辑(版本区间 + 配置匹配 + ASLR)在宿主机和容器两条路径上是同一套,只是执行方式从本机命令换成了 docker exec。逻辑复用,才能保证两个环境的结论可比。
3.3 版本区间判定:一个典型"看起来简单"的坑
第一版最容易写错的就是版本比较。字符串比较会把 1.9.0 判定为大于 1.30.0,直接导致漏报。最终采用的是 sort -V 的版本序比较:
LOW_VER="0.6.27" HIGH_VER="1.30.0" IN_RANGE=0 if [[ $(echo -e "$VER\n$LOW_VER" | sort -V | head -n1) == "$LOW_VER" && \ $(echo -e "$VER\n$HIGH_VER" | sort -V | tail -n1) == "$HIGH_VER" ]]; then IN_RANGE=1 echo " → 版本落在漏洞影响区间" else echo " → 版本不在漏洞区间,安全" fi逻辑是:把目标版本和上下界一起排序,如果目标版本排序后既不小于下界、又不大于上界,就落在区间内。
这类"边界条件"是 AI 辅助写脚本时最该被要求穷举的部分——六个用例一次列全:正常版本、区间下界、区间上界、比下界小、比上界大、多段版本号(如 1.9.0 vs 1.30.0)。
3.4 v1.0.2:三个被真实环境打出来的问题
脚本头部留了一行版本说明,很能说明问题:
# 版本:v1.0.2 修复空配置误判文案、日志/tmp无权限问题、宿主机+容器全覆盖三个修复,对应三类典型的"在实验室里想不到、一上生产就暴露"的问题。
问题一:空配置被误判为"有风险"。
早期版本里,grep 没匹配到内容时返回空,脚本却依然打印了"发现高危配置",制造了误报。修复方式是先判空,再下结论:
CONF_DETAIL=$(grep -rE 'rewrite.*\?.*\$[1-9]' \ /etc/nginx/ /usr/local/nginx/ 2>/dev/null | grep '\.conf') if [ -z "$CONF_DETAIL" ]; then echo "无高危配置" else echo "发现高危配置" echo "$CONF_DETAIL" [ "$ASLR" -eq 0 ] && RISK=1 fi注意这里还藏着第二个细节:只有当"配置命中"和"ASLR 关闭"同时成立时才置风险位,而不是看到配置就报风险。这是对"三条件联合判定"的忠实实现——流程的严谨性,最终要靠代码的严谨性来承载。
问题二:日志写不进去。
早期把日志写在工作目录,遇到权限受限的机器直接 Permission denied,整个排查中断。改为写 /tmp 并同时输出到终端:
LOGFILE="/tmp/nginx_scan_$(hostname)_$(date +%Y%m%d%H%M%S).log" exec > >(tee -a "$LOGFILE") 2>&1日志文件名里带上主机名和时间戳,是为了多台机器并发执行后,回收日志时不会互相覆盖——这是一个"批量执行"场景才会浮现的需求,单机测试永远遇不到。
问题三:只查了宿主机,漏了容器。
这是最致命的一类遗漏。现在很多服务跑在容器里,宿主机上根本没有 nginx 命令,脚本会直接输出"宿主机未安装 Nginx"然后收尾,看起来一切正常,实际风险全在容器里。
修复后的脚本做了两件事。一是自动兼容 sudo docker:
DOCKER_CMD="docker" if ! docker ps &>/dev/null; then echo "[INFO] 当前用户无docker权限,尝试sudo..." if sudo docker ps &>/dev/null; then DOCKER_CMD="sudo docker" else echo "[WARN] 无Docker权限,跳过容器检测" DOCKER_CMD="" fi fi二是遍历所有运行中容器,对每个容器重复同一套"版本区间 + 高危配置"判定,把宿主机和容器的结论合并到同一个风险位上。同时,无 Docker 的场景下走一条干净的收尾分支,直接给出结论,而不是让脚本在半路报错。
最终输出被收敛成一句话,让非脚本作者也能直接读结论:
⚠️ 【有风险】存在:版本命中 + 高危rewrite配置 + ASLR关闭 ;✅ 【安全】所有宿主机/容器Nginx均不满足全部漏洞利用条件3.5 复盘:AI 做了什么,人做了什么
回头看,AI 在这份脚本上的贡献可以拆成四件很具体的事:
条件翻译
AI 负责 把通告里的自然语言利用条件,翻译成"版本 / 配置 / 环境"判定表
人负责 确认条件表与真实利用路径一致
边界穷举
AI 负责 列出 6 个版本比较用例,以及"grep 无输出""无 docker 权限""无运行中容器"等空值分支
人负责 判断哪些边界在真实资产上会出现,甚至做一些必要的测试
代码审查
AI 负责 识别"空字符串被当成命中"这类逻辑漏洞,以及权限、路径等环境依赖
人负责 决定修复优先级
文档化
AI 负责 把每轮修复原因写进脚本注释,让 v1.0.2 成为可追溯的变更记录
人负责 - -
应急响应判定
AI 负责不参与
人负责 决定这个漏洞要不要启动应急响应
结论文案
AI 负责 生成结论与输出格式
人负责 确认给谁看、能不能被直接读懂
分工非常清楚:AI 负责把条件变成代码,人负责确认条件本身是对的。
四方法论:给自动化定级,别用最高那一环代表整体
有了流程,还差一个坐标系:这套东西到底自动化到了什么程度? 我们用一个四级模型来定位。
4.1 四级成熟度
L0 人工
特征 人执行、人判断
人的角色 全流程
典型风险 效率低、一致性差
L1 AI 辅助
特征 AI 产出草稿或摘要,人执行、人判断
人的角色 判断 + 执行
典型风险 把 AI 草稿直接当结论
L2 条件自动判定
特征 判定条件固化进工具,自动出结论
人的角色 定义条件、复核结论
典型风险 条件错则全错;误报
L3 闭环自动回退
特征 检测 → 工单 → 复测 → 回退全自动
人的角色 定义标准、处置异常
典型风险 错误被自动扩散

图 3:自动化成熟度分级 —— 排查脚本在 L2,内化研判仍在 L0
4.2 本案例的位置:一个流程,三种级别
把前面两个成果放进这个坐标系,会发现一件有意思的事——同一个流程里,不同环节的成熟度并不一样:
排查脚本(版本 / 配置 / ASLR 判定)
级别L2
依据 三个判定条件已固化,自动出结论
内化研判(是否启动应急响应)
级别L0
依据 流程图上红字明确"需要人工参与",标准尚未书面化
修复后复测
级别L2
依据 复用同一脚本,但"是否闭环"的判断仍在人
工单流转与回退
级别L1
依据 生成环节半自动,回退路径仍靠人推动
所以最重要的一句话是:整体成熟度由最低的那一环决定。 排查做到了 L2,不代表漏洞预警做到了 L2 - - 木桶的短板仍然卡在"是否启动应急响应"那一步。
这也是我们不去宣传"漏洞预警已实现自动化"的原因:局部 L2 是事实,整体 L2 是夸大。
4.3 什么时候可以升级
往上升一级之前,先回答三个问题:
自检问题 → 答案是"否"时该怎么办
判定条件能否枚举完?
不能 → 留在 L1,别硬做 L2
结论错了的代价能否承受?
不能 → 必须保留人在环
有没有回退路径?
没有 → 不要做 L3
对照本案例:判定条件能枚举(版本 + 配置 + ASLR 三个条件);错了的代价可控(脚本只出结论,不自动处置);有回退路径(验证不通过退回修复)。三个条件都满足,所以排查环节做到 L2 是合适的。
而"是否启动应急响应"这一环,恰恰卡在第一个问题上——标准还没定义清楚,条件就枚举不完,所以它只能留在 L0。 这不是技术能力不够,是业务判断还没收敛。
五沉淀:AI 的 5 个可复用能力,和 4 条不能越的边界
把上面的流程和案例抽象一层,AI 在漏洞预警中稳定的价值点有五个:
- 信息抽取
——从通告、PoC、情报里抽取版本区间、前置条件、IOC、TTPs 等结构化字段;
- 条件翻译
——把"利用条件"翻译成可执行的检测逻辑,这是从"内化"到"应用"的关键一跳;
- 代码生成
——批量排查脚本、扫描规则、BAS 用例的初稿生成;
- 边界自检
——主动穷举空值、异常版本、权限缺失、环境差异等分支,这是最容易被人类作者忽略的部分;
- 批量落地
——同一份逻辑同时覆盖宿主机与容器、同时适配多台机器,把一次性排查变成可复用工具。
对应的,也有必须守住的边界:
- 应急响应的启动标准必须由人定义,不能由模型推断,否则流程会失去一致性;
- 模型可能给出似是而非的 CVE 编号、版本号、PoC 细节,所有事实性内容必须回到官方公告核对;
- 版本比较、区间判定这类"看起来简单"的逻辑,恰恰是误报漏报的高发区,必须用真实数据回归验证;
- 暂无 POC、或像微软这类无法用 POC 直接验证的场景,仍以人工跟进全流程闭环为主——这是流程图上明确写下的 PS。
六这套方法能迁移到另外 6 类场景吗
能,而且迁移成本比想象中低 - - 因为 7 类场景共享同一个骨架:监测 → 内化 → 应用 → 验证,变的只是"内化阶段要产出哪些字段"。
漏洞预警
内化阶段抽取什么 原理、细节、POC、利用条件
应用阶段的动作大致是什么 范围排查 → 推修复 → 验证(已跑通)
投毒预警
内化阶段抽取什么 软件名称与版本、IOC、C2
应用阶段的动作大致是什么 依赖清单比对 → 定位投毒版本 → 阻断
APT 追踪
内化阶段抽取什么 TTPs、恶意样本
应用阶段的动作大致是什么 映射到检测规则 → 补 BAS 用例
攻击事件
内化阶段抽取什么 TTPs、企业安全建设启发
应用阶段的动作大致是什么 自查同类弱点 → 整改
敏感信息泄露
内化阶段抽取什么 泄露主体、仓库、时间
应用阶段的动作大致是什么 定位责任人 → 下架 → 溯源
安全技术分享
内化阶段抽取什么 工具、手法、思路、建设经验
应用阶段的动作大致是什么 评估可用性 → 试点落地
产品漏洞信息
内化阶段抽取什么 受影响产品与版本
应用阶段的动作大致是什么 走 PSIRT / 产线流程
只要"内化"这一步能把非结构化信息压成固定字段,"应用"和"验证"就能被标准化。 这也是我们坚持先把漏洞预警这一类做扎实的原因 - - 它是这套骨架最完整的样本。
七落地清单:如果你也要做,先做这 11 件事
- 信源先固定(5 类足够),先解决去重与排序,别急着上模型;
内化阶段强制产出"利用条件表",字段固定,不产出不算完成;
- 应急响应的启动标准由人定义并书面化,不允许模型推断;
每一条利用条件,都必须有对应的可执行检测逻辑,否则它只是描述;
脚本必须穷举四类分支:空值、异常版本、权限缺失、环境差异;
排查动作必须同时覆盖宿主机与容器两类运行环境;
结论输出要能被非作者直接读懂:一句话结论 + 命中明细 + 日志路径;
每一轮修复写进版本注释,保留可追溯的变更记录;
验证环节必须留回退路径,验证不通过能退回修复阶段;
暂无 POC / 无法用 POC 验证的场景,老老实实人工跟进闭环;
先给流程逐环节定级(L0–L3),不要用排查环节的成熟度代表整体成熟度。
结语
漏洞预警这件事,AI 的价值不在于"替人做判断",而在于把判断的输入准备好、把判断的结论落成动作。
流程上,它把"监测 → 内化 → 应用 → 验证"四阶段里最耗人力的信息处理和重复动作接了过去;工具上,它让一份排查脚本可以在几轮迭代内,从"能跑"变成"敢在几万台机器上跑"。
CVE-2026-42945 的脚本从最初版本迭代到 v1.0.2,改的其实只有三件事:别误报、别中断、别漏查。这三件事,恰好就是漏洞预警从"看起来做了"到"真的做了"之间的距离。
而流程图上那句红字依然成立 - -最关键和最难的环节是漏洞分析与研判,需要人工参与。AI 让我们更快地走到这一步,但这一步,仍然需要人。
📎 领取资料
本文那张《漏洞预警流程 —— AI 驱动四阶段闭环体系》全景流程图,提供可编辑源文件(drawio 格式),可直接改成你所在团队的组织架构与流程节点。
在公众号后台回复全景图,即可获取。