二进制漏洞扫描:识别 Backport 补丁,消除误报
二进制漏洞扫描是指直接在运行中进程的机器代码里验证 CVE 补丁是否存在,而不是拿包的版本号做匹配。它能让扫描工具穿透 Backport 补丁——这是 Linux 漏洞报告中最大的误报来源——只报告真正仍可被利用的漏洞。
每一次版本匹配扫描,交给安全团队的都是同一份东西:一份红色告警清单,大多数工程师凭经验就能猜到里面多半是误报——但要逐条证明,真实风险就被淹没在人工核查里。OpenResty XRay 直接检测运行中的二进制,补上了这个缺口。
为什么版本匹配漏洞扫描会失效:三类叠加代价
主流 Linux 发行版——RHEL、Rocky Linux、Debian、Ubuntu LTS——普遍采用 Backport 策略:当上游组件发现安全漏洞时,发行版维护者会将补丁移植回当前使用的版本,而不升级版本号,以此保持 ABI 兼容性和系统稳定性。结果是,一个标注为 openssl-3.5.1 的包可能已经包含了数十个 CVE 的修复补丁,但从版本号来看,它与一个完全未打补丁的 openssl-3.5.1 毫无区别。这种单一依赖版本号的判断方式,给工程团队带来三类叠加代价:
误报噪声持续累积。 发行版每个 LTS 周期内会积累大量 Backport 补丁,每一个被修复但版本号未变的 CVE,都会在下一次扫描中重新出现在报告里。随着时间推移,误报数量只增不减。
人工澄清消耗安全团队的核心精力。 针对每条告警,工程师需要查阅发行版 changelog、对照 CVE 数据库、判断补丁是否已经覆盖——这些工作本质上是在弥补扫描工具的能力缺口,而非真正的安全分析。
真实风险被稀释,优先级管理失效。 当一份报告中 90% 的告警都是误报时,剩余 10% 的真实漏洞很容易被忽视。漏洞管理的核心价值——帮助团队聚焦最高风险——在噪声中消解殆尽。
传统版本匹配扫描的根本问题不在于工具质量,而在于它依赖了一个在 Backport 生态中根本不可靠的信号:版本号。
OpenResty XRay 的二进制漏洞扫描如何工作:证据优先模型
OpenResty XRay 从根本上绕开了版本号这个不可靠的信号。它的扫描对象不是包管理器的元数据,而是正在运行的进程本身。
当 OpenResty XRay 评估某个 CVE 是否影响当前系统时,它不会去查询组件的版本字符串,而是直接检测运行中进程所加载的库文件,验证与该 CVE 对应的补丁特征是否实际存在。
换句话说:我们不看版本号说什么,只看二进制代码里实际有没有漏洞补丁。
这一方法天然兼容 Backport 场景。无论发行版以何种方式打入补丁——版本号变没变、changelog 有没有记录——只要补丁实际存在于二进制代码中,OpenResty XRay 就会将该 CVE 标记为已修复;反之,则如实报告漏洞仍然存在。
运行时二进制扫描 vs 静态文件系统扫描
OpenResty XRay 的扫描基于运行时动态追踪,这一点决定了它与静态扫描工具在覆盖范围上的本质差异:
| 维度 | 传统静态扫描 | OpenResty XRay 运行时扫描 |
|---|---|---|
| 扫描对象 | 文件系统上的包与文件 | 正在运行的进程及其已加载依赖 |
| 漏洞判定依据 | 版本号与 CVE 数据库匹配 | 二进制代码中的补丁特征验证 |
| Backport 感知 | 不感知,产生误报 | 感知,准确反映实际修复状态 |
| 自编译/第三方组件 | 依赖包管理器,存在盲区 | 来源无关,只要运行即可扫描 |
需要特别说明的是,运行时扫描意味着 OpenResty XRay 的扫描范围严格限定于当前正在运行的进程及其已加载的依赖库。未启动的服务、未加载的库文件不在扫描范围之内。这一特性在实际使用中需要纳入考量:确保扫描时目标服务处于运行状态,是获得完整扫描结果的前提。
XRay 扫描哪些库的 CVE
OpenResty XRay 当前支持对以下关键依赖库的漏洞扫描:
| 类别 | 组件 |
|---|---|
| 核心加密库 | OpenSSL、LibreSSL |
| 压缩库 | zlib、bzip2 |
| 系统基础库 | glibc、musl |
| 其他关键依赖 | libcurl、libxml2、pcre2 |
覆盖范围持续扩展,如需对特定依赖库的支持,可联系 OpenResty.Inc 团队确认。
实战案例:Rocky Linux 双版本 OpenSSL 场景下的二进制漏洞扫描
以下演示在 Rocky Linux 生产环境中进行,该环境同时运行两套 OpenSSL:系统自带的 OpenSSL 3.5.1(含发行版 Backport 补丁)以及 OpenResty Plus 自行编译内置的 OpenSSL 1.1.1w。这一场景在实际生产环境中极为常见,也是传统扫描工具最容易产生混乱判断的典型配置。
场景环境说明
操作系统:Rocky Linux
系统 OpenSSL:
/usr/lib64/libcrypto.so.3.5.1
/usr/lib64/libssl.so.3.5.1
(来源:系统包管理器,含发行版 Backport 补丁)
自编译 OpenSSL:
/usr/local/openresty-plus/openssl111/lib/libcrypto.so.1.1
/usr/local/openresty-plus/openssl111/lib/libssl.so.1.1
(来源:OpenResty Plus 内置编译,版本 1.1.1w)
其他系统库:
/usr/lib64/libpcre2-8.so.0.11.0
(来源:系统包管理器)
扫描结果总览解读
OpenResty XRay 漏洞扫描的具体调用命令请参考产品文档。以下展示扫描触发后的输出结果。
OpenResty XRay 会自动发现当前系统中所有正在运行的进程,枚举其加载的依赖库,并对每个受支持的组件逐一执行二进制证据验证。整个过程无需人工指定扫描路径,也无需依赖包管理器数据库。
扫描完成后,OpenResty XRay 以组件为单位输出结果,每条记录包含:库文件路径、CVE 编号、漏洞状态。
状态以可视化方式区分:
- 🟢 绿色背景:该 CVE 已通过补丁修复(Patched)——二进制证据确认补丁特征存在
- 🔵 蓝色背景:该 CVE 仍然存在(Vulnerable)——二进制证据未发现补丁特征
以下为本次扫描的代表性结果:
系统 OpenSSL 3.5.1(发行版包)
库文件:/usr/lib64/libcrypto.so.3.5.1
/usr/lib64/libssl.so.3.5.1
CVE-2025-11187 ✅ Patched
CVE-2025-15467 ✅ Patched
CVE-2025-15468 ✅ Patched
CVE-2025-15469 ✅ Patched
CVE-2025-66199 ✅ Patched
CVE-2025-68160 ✅ Patched
CVE-2025-69418 ✅ Patched
CVE-2025-69419 ✅ Patched
CVE-2025-69420 ✅ Patched
CVE-2025-69421 ✅ Patched
CVE-2026-22795 ✅ Patched
CVE-2026-22796 ✅ Patched
CVE-2026-2673 🔵 Vulnerable
交叉验证:与发行版 changelog 对齐
OpenResty XRay 的扫描结论是否可信?我们通过发行版自身的 changelog 直接验证。
对系统 OpenSSL 包执行以下命令:
rpm -q --changelog openssl-libs | head -20
输出如下:
* Fri Jan 16 2026 Dmitry Belyavskiy <dbelyavs@redhat.com> - 1:3.5.1-7
- Fix CVE-2025-11187 CVE-2025-15467 CVE-2025-15468 CVE-2025-15469
CVE-2025-66199 CVE-2025-68160 CVE-2025-69418 CVE-2025-69419 CVE-2025-69420
CVE-2025-69421 CVE-2026-22795 CVE-2026-22796
Resolves: RHEL-142068
Resolves: RHEL-142002
...
changelog 中列出的所有 CVE,在 OpenResty XRay 扫描结果中全部标记为 Patched,两份记录完全吻合。
点击任意一个漏洞,即可查看详细描述信息:
唯一标记为 Vulnerable 的 CVE-2026-2673,在 changelog 中同样找不到对应的修复记录——该漏洞严重等级较低,发行版维护团队评估后选择暂不 Backport。OpenResty XRay 如实反映了这一现状:既不会因为版本号已是最新就误判为已修复,也不会因为发行版暂未处理就将其掩盖。
这正是二进制证据验证的双重价值所在:对 Backport 补丁不误报,对发行版主动选择不修的漏洞不漏报。扫描结论与发行版实际发布的二进制补丁状态严格对应。
从告警疲劳到精准:可持续的漏洞扫描实践
看不见的风险是最难管理的风险。OpenResty XRay 将这部分原本不可见的依赖纳入统一的漏洞扫描视图,是其在包管理器之外提供的核心增量价值。
漏洞管理的本质不是生成报告,而是建立一套让工程团队持续信赖、持续使用的信号体系。误报率高的工具会系统性地训练出「告警疲劳」——当每条告警都需要人工二次核查时,响应速度下降,流程名存实亡,真实的高危风险反而在噪声中被延误处理。
OpenResty XRay 基于二进制证据的验证机制,从源头消除了 Backport 场景下的结构性误报,使每一条漏洞告警都对应二进制层面实际存在的风险,无需再做真伪初筛。
与此同时,OpenResty XRay 提供的不是「系统安装了什么」的包管理器视图,而是「系统正在运行什么」的运行时视图——当一个存在已知漏洞的 EOL 组件(如 OpenSSL 1.1.1w)正在处理生产流量、却对所有静态扫描工具完全不可见时,这一差异直接决定了真实攻击面是否被纳入保护范围。精准的扫描结果,是漏洞管理从专项任务演化为可持续安全运营能力的前提条件。
常见问题
二进制漏洞扫描如何消除误报?
二进制漏洞扫描会检测加载到运行进程中的机器代码,寻找 CVE 补丁本身的二进制特征。只要补丁存在于二进制中,该 CVE 就会被标记为已修复——无论包声称的版本号是什么。这样就消除了发行版 Backport 静默打补丁却不升版本号所导致的整类误报。
OpenResty XRay 扫描的是 OpenResty 本身,还是它的依赖库?
OpenResty XRay 扫描的是加载到运行进程中的共享库——目前覆盖 OpenSSL、LibreSSL、zlib、bzip2、glibc、musl、libcurl、libxml2 和 pcre2。本文案例中,OpenResty Plus 内置的 EOL 版本 OpenSSL 1.1.1w,正是包管理器扫描完全看不到的典型场景。覆盖范围仍在持续扩展,如需支持特定依赖库,请联系 OpenResty Inc. 团队。
运行时扫描和静态扫描有什么区别?
静态扫描读取磁盘上的包和文件,拿版本号去匹配 CVE 数据库。运行时扫描则直接附加到主机上正在运行的进程,验证其加载的二进制中是否存在补丁。两者的取舍是:静态扫描能看到运行时看不到的非活跃文件;而运行时扫描能看到从未经过包管理器的自编译、内置二进制,并能准确反映 Backport 后的真实补丁状态。
为什么基于版本号的扫描工具在 Backport 补丁场景下容易出问题?
基于版本号的扫描工具依赖漏洞数据库来判断某个版本是否已打补丁。一旦数据库不全——缺少发行版的 Backport 记录、覆盖不到非发行版编译的二进制、或新披露的 CVE 尚未收录——工具就只能回退到看版本字符串,从而产生误报。二进制扫描则直接在运行中的机器代码里验证补丁是否存在,不依赖数据库完整性。
关于 OpenResty XRay
OpenResty XRay 是一款动态追踪产品,它可以自动分析运行中的应用,以解决性能问题、行为问题和安全漏洞,并提供可行的建议。在底层实现上,OpenResty XRay 由我们的 Y 语言驱动,可以在不同环境下支持多种不同的运行时,如 Stap+、eBPF+、GDB 和 ODB。
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!


















