最近在弄Windows的补丁管理,遇到一个问题是无法从CVE号快速的定位哪些机器安装了补丁,所以通过Windows提供的API建立一个自动化的CVE&KB数据库任务。
调用Microsoft Security Update API,每月12日解析json落库到本地:https://portal.msrc.microsoft.com/en-us/developer。
json解析出来后得到两个数据库表,一个是产品号product_id和产品名称product_name的表,如下:
product_id:11763
product_name:Microsoft 365 Apps for Enterprise for 64-bit Systems
一个是CVE、KB、受影响产品号的表:
CVE: CVE-2020-0909
CVSS 分数: 7.5
受影响产品号: [11498, 11499, 11569, 11571, 11572, 11454, 11645, 11647, 10735, 10853, 10816, 10855, 10048, 10482, 9318, 9344, 10051, 10049, 10378, 10379, 10483, 10543, 11713, 11715]
KB号:['KB4556812', 'KB4556853', 'KB4556846', 'KB4556860', 'KB4556826', 'KB4556852', 'KB4556813', 'KB4556843', 'KB4556799', 'KB4556854', 'KB4556840', 'KB4551853', 'KB4556836', 'KB4556807']
cvrf_id: 2020-May
表结构:
CREATE TABLE IF NOT EXISTS `win_cve_db` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`cve` char(128) NOT NULL COMMENT 'CVE id',
`score` char(10) COMMENT '各产品的CVSS Score平均值',
`product_id_list` text COMMENT '漏洞影响范围,以productid集表示',
`kb_list` varchar(1024) COMMENT '漏洞对应补丁号合集',
`cvrf_id` char(128) COMMENT 'cvrf id',
`dt` char(128) NOT NULL COMMENT '数据日期',
PRIMARY KEY (`id`,`dt`)
) CHARSET=utf8mb4 COMMENT='Windows漏洞与KB补丁关系库'
CREATE TABLE IF NOT EXISTS `win_product_name` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`product_id` char(128) NOT NULL COMMENT 'product_id,不需要比较大小,所以set为字符串的格式',
`product_name` varchar(1024) NOT NULL COMMENT 'product_id对应产品名',
`dt` char(128) NOT NULL COMMENT '数据日期',
PRIMARY KEY (`id`,`dt`)
) CHARSET=utf8mb4 COMMENT='product_id对应产品名'
之后就可以通过CVE来查某台服务器是否安装了修复该漏洞的补丁了。
参考: