什么是CPE?
在网络安全领域,CPE(Common Platform Enumeration,通用平台枚举)是一种标准化的标识符体系,用于唯一标识和描述信息技术系统中的硬件、操作系统、应用程序及其他软件组件。它由美国国家标准与技术研究院(NIST)维护,是网络安全漏洞管理和资产识别的关键工具。

CPE的核心作用
CPE的命名格式
CPE遵循以下结构化语法(符合CPE 2.3标准):
|
Plain Text |
示例
cpe:2.3:a:microsoft:office:2019::en
表示:Microsoft Office 2019英文版(应用程序类)。
cpe:2.3:o:linux:linux_kernel:5.4.0
表示:Linux内核5.4.0(操作系统类)。
NVD Configurations
在网络安全领域,NVD Configurations(美国国家漏洞数据库配置)是指美国国家漏洞数据库(National Vulnerability Database, NVD)中针对软件或硬件系统的配置项(Configuration Items, CIs)及其关联漏洞的标准化描述。它是NVD提供的一种结构化数据,用于帮助组织识别和管理与系统配置相关的安全风险。
数据示例(CVE-2019-6110):
|
JSON |
含义解释
逻辑运算符operator
operator 表示逻辑运算符,用于组合多个CPE匹配条件(cpeMatch),决定如何判断一个系统是否受漏洞影响。主要有两种取值:AND/OR
|
JSON |
|
JSON |
版本边界条件
受漏洞影响标记vulnerable
表示当前CPE标识的产品或版本是否受漏洞影响
ES搜索引擎
基础库平台采用Elasticsearch数据库作为安全漏洞的搜索引擎
索引结构和CPE预处理
elasticsearch的索引,类似传统数据库的table,以下是cpe_math的索引
|
JSON |
爬虫脚本会将原始的Configurations字段进行拆分充足,将所有的叶子节点进行解析,将cpe拆分为类型、厂商、产品、版本等字段,将版本边界条件转为统一数据格式,并取出vulnerable字段拼凑成一个独立的cpe_match,如上述漏洞的第一个节点如下:
|
JSON |
这里有2个问题要说明:
|
Python |
首先仍然按照惯例进行拆分,比如3.5.alpha,会拆分为[3,5,alpha],然后将数字部分进行格式化,非数字部分进行保留,结果是00003:00005:alpha,这样做的结果是3.5.alpha < 3.5.beta 3.6.alpha > 3.5.beta
可以看到这是一个在windows和mac_os_x平台上的adobe软件漏洞,但是二者均受漏洞影响,如果严格按照2者同时存在才能匹配到,那么adobe:acrobat的cpe也无法匹配到该漏洞
匹配规则
|
字段 |
匹配规则 |
示例 |
|
类型(part) |
精确匹配,支持通配符 |
|
|
厂商(vendor) |
精确匹配,支持通配符 |
|
|
产品(product) |
精确匹配,支持通配符 |
如输入cpe:2.3:o:microsoft:windows_*,可匹配windows10 windows11等多个产品 |
|
版本(version) |
1.将版本号进行解析后格式化,然后每个版本部分进行精确匹配,不支持通配符 2.对于漏洞CPE中,版本为*的部分,继续比较版本边界条件,输入的版本号需要满足版本范围 |
如输入cpe:2.3:a:openbsd:openssh:7.4,则必须满足以下所有条件 1. 类型字段为a 2. 厂商字段为openbsd 3. 产品名称为openssh 4. 版本号为00007:00004 或者 版本号为*且满足边界条件(无边界条件则自动满足) 5. vulnerable为true |
|
更新/补丁版本 |
精确匹配,支持通配符 |
|
|
版本类型 |
精确匹配,支持通配符 |
|
|
语言 |
精确匹配,支持通配符 |
|
|
其他 |
精确匹配,支持通配符 |
|
匹配语句DSL
|
JSON |