在使用非 CentOS 的 Linux 操作系统时(为什么不包含 CentOS 后面说明)经常遇到一种情况:明明操作系统发行版已经修复了某个 CVE,但是在使用安全扫描工具扫描的时候还是会提示存在某个 CVE,这是什么原因呢? 是操作系统发行版修复问题还是安全工具扫描问题?其实是两者的思路不同引起的,下面我们来分别介绍两者的情况(仅包含通用方案,特定的定制化方案不包含在内)。
安全扫描逻辑
在说安全扫描工具的扫描逻辑之前,先讲述一下纰漏 CVE 的形式。此处我们以漏洞CVE-2020-8622这个BIND漏洞为例,在BIND上游版本中发现 9.0.0至9.11.21存在拒绝服务的漏洞,此时上游社区就会发布该漏洞的描述及解决方案——更新修复版本及补丁:
CVE: CVE-2020-8622
Document version: 2.0
Posting date: 20 August 2020
Program impacted: BIND
Versions affected: BIND 9.0.0 -> 9.11.21, 9.12.0 -> 9.16.5, 9.17.0 -> 9.17.3, also affects 9.9.3-S1 -> 9.11.21-S1 of the BIND 9 Supported Preview Edition
......
Solution:
Upgrade to the patched release most closely related to your current version of BIND:
BIND 9.11.22
BIND 9.16.6
BIND 9.17.4
BIND Supported Preview Edition is a special feature preview branch of BIND provided to eligible ISC support customers.
......
同时下面这个图是国家信息安全漏洞库纰漏该漏洞的描述信息

由此可以看出从官方权威渠道获取的处理方式均为更新软件版本到某个特定的版本进行修复,这也是目前安全扫描工具常用的扫描思路 —— 扫描当前系统中版本号是否大于等于已修复版本,如果发现现有系统中存在带有该漏洞的官方版本号,那么从安全角度就会将该风险告知给用户。
操作系统运营逻辑
从操作系统角度来讲,作为软件生态与硬件连接的桥梁,稳定是非常重要的指标,比肩于安全、性能。而开源软件之间存在着非常复杂的依赖与被依赖的关系,这就面临着当一个操作系统发行版在发布之前需要对上万个开源软件版本之间的兼容性进行测试验证,保证相互之间能够很好的调用与被调用而不出现功能异常。但是当一个bug或安全漏洞被纰漏或发现时,如果针对某个开源软件进行升级(哪怕是小版本的),那就意味着操作系统软件间的稳定性平衡被打破了,需要投入更多的精力去保障完整的稳定性(特别是基础系统软件),而这与快速修复安全漏洞的目标又是相悖的,所以操作系统发行商选择了另外一种运营方式 —— 开源软件版本不变,针对CVE进行修正。
从稳定出发,操作系统发行商选择了在自己已经能够控制的兼容性的版本上进行最小化修改,针对安全漏洞进行修复,而不是进行开源版本的升级。这样做有2个好处:
- 操作系统稳定性得以延续
在进行一个发行版本发布之前,针对开源软件的兼容性、稳定性测试是一个重头戏,需要投入大量精力才能保证一个发行版本的稳定。不对软件版本进行升级,只有限修复,修复后针对修改的点进行稳定性验证,发行时大部分稳定性验证结果都可以直接继承,保证了操作系统稳定运行
- 现网升级风险降低
针对开源软件的变更,对于自身的影响是可控的,但是操作系统作为一个关联紧密的工程化软件集合,一个点的调整可能会影响到操作系统上层客户业务的运行状态。比如客户目前正在使用当前发行版本中A软件1.0版本的B接口,且适配与测试都已经通过,现网运行稳定。但是A 1.0版本发现了一个CVE漏洞,此时需要升级至 A 1.5 来解决该问题,如果1.0 至 1.5 只修改了这个CVE漏洞,那客户不会有感知,但是可能A 1.3 版本针对B接口的函数逻辑做了调整,这时候客户的业务可能整体都会受到影响,但是如果只修复CVE漏洞,并将修改内容详细描述给客户,这样变更风险就非常可控。
综上,对于软件升级来说,操作系统必须对自己的稳定性负责,所以选择了自行修复并运营。
了解了上游社区对CVE修复方案以及安全软件扫描的逻辑,同时又对操作系统运营有了进一步理解,出现文章开篇提到的问题也就可以解释了。最重要的原因就是两者运营思路不同,上游社区追求的是不断的技术演进与推行,操作系统发行版追求的运营思路是稳定、安全、可靠,因此两者之间需要一定的融合。当然目前有一个发行版本融合的就特别好,那就是CentOS,因为经过10多年的应用,CentOS目前已经成为了Linux发行版的事实标准,所以在安全扫描逻辑中会将CentOS的修复版本一并加入到扫描结果对比中,这也是为什么CentOS的一些修复漏洞是能够识别到的原因。
当然,不论是安全扫描工具,还是操作系统补丁修复,都是为了能够给客户提供一个安全、稳定的运行环境,当出现差异时只要有手段保证业务是安全的、可靠的就好,用户业务被保护才是最重要的。