如何准确获取已安装软件包对应的CPE标识?
已安装软件包与对应CPE的可靠映射方案
直接使用发行版自带的软件包包名检索CPE库无法得到有效结果,核心原因是发行版包名由各发行版维护团队自定义,和CPE规范中登记的官方厂商名、产品名没有强制命名对齐规则,比如Debian/Ubuntu系的Apache服务包命名为apache2、RHEL/CentOS系命名为httpd,但NVD等官方CPE库中该产品统一登记为cpe:/a:apache:http_server,直接字符串匹配必然失效。可落地的解决思路按准确率从高到低排序如下:
- 优先复用各Linux发行版官方维护的CPE映射数据集
主流发行版在发布安全公告、维护漏洞补丁的过程中,已经完成了自有仓库内全量软件包与对应CPE、CVE的绑定工作,这部分数据准确率最高,不需要自行做名称匹配:- RHEL/Fedora/CentOS系:可直接查询RPM包元数据,或读取发行版官方发布的OVAL漏洞定义数据,数据中已经将
httpd包直接映射到Apache http_server对应的CPE条目,同时会标注发行版向后移植补丁后的版本对应关系,避免版本匹配错误 - Debian/Ubuntu系:可通过APT查询包的安全追踪元数据,或读取发行版官方维护的CVE追踪库数据,
apache2包已预绑定对应Apache官方的CPE条目,无需额外做名称转换
- RHEL/Fedora/CentOS系:可直接查询RPM包元数据,或读取发行版官方发布的OVAL漏洞定义数据,数据中已经将
- 跨发行版场景下采用「包名归一化+别名规则+CPE字典匹配」的流程
如果需要做跨发行版的通用映射能力,不要直接拿原始包名检索CPE库,按以下步骤处理:- 先对原始包名做清洗,去掉版本号、发行版后缀、CPU架构标识、编译选项后缀,提取核心软件标识,例如将
apache2-2.4.52-1ubuntu4.1.amd64清洗为核心标识apache,将httpd-2.4.37-43.el8.x86_64清洗为核心标识httpd - 维护一套通用的包名别名映射规则,将不同发行版的同软件异名统一映射到CPE标准的厂商、产品名,例如规则可定义
apache2、httpd统一对应CPE厂商apache、产品http_server;firefox、firefox-esr统一对应CPE厂商mozilla、产品firefox - 用归一化后的厂商、产品名匹配官方CPE字典,同时结合包版本号校验CPE的版本适用区间,排除同名不同类软件的误匹配
- 先对原始包名做清洗,去掉版本号、发行版后缀、CPU架构标识、编译选项后缀,提取核心软件标识,例如将
- 采用成熟主机扫描工具的内置映射规则做兜底
主流开源主机漏洞扫描工具已经积累了覆盖全主流发行版的包名到CPE的映射规则库,不需要从零搭建规则体系:直接调用这类工具的本地包扫描能力,读取扫描结果中输出的CPE字段即可,扫描Ubuntu的apache2包、RHEL的httpd包时,工具会直接输出统一的cpe:/a:apache:http_server条目,自动处理不同发行版的命名差异。
注意:不要直接使用公共CPE搜索引擎的全文检索能力做匹配,这类搜索引擎默认对CPE的厂商、产品字段做精确匹配,没有内置发行版包名的别名关联逻辑,自然无法通过
apache2、httpd检索到对应CPE结果。
内容的提问来源于stack exchange,提问作者kavat
相关产品推荐
相关产品推荐

