3、漏洞情报获取:CVE与CVSS评分体系、漏洞数据库(NVD、CNNVD)、开源情报源(OSS-Fuzz、GitHub Advisory)
做补丁管理,最怕什么?
怕漏洞来了你不知道。更怕的是,你知道漏洞来了,却搞不清它到底有多严重,该不该立刻停下手头的活去修。
这一章,我们就聊聊漏洞情报怎么获取。说白了,就是回答三个问题:漏洞叫什么?有多严重?去哪查?
3.1 CVE编号:漏洞的“身份证”
CVE,全称 Common Vulnerabilities and Exposures。你可以把它理解成每个漏洞的身份证号。
没有CVE编号,你在团队里喊“那个谁谁谁的什么漏洞”,别人根本不知道你在说哪个。有了CVE编号,比如 CVE-2024-3094,大家一看就懂,沟通成本瞬间降下来。
核心要点:CVE编号本身不包含严重程度信息,它只是一个唯一标识符。严重程度要看CVSS评分。
我个人习惯,在内部漏洞跟踪表里,第一列永远是CVE编号。没有编号的漏洞,我会标记为“待分配”,并尽快去MITRE或NVD申请。为什么?因为后续所有的补丁、公告、讨论,都是围绕这个编号展开的。
3.2 CVSS评分体系:别被“高危”两个字吓到
CVSS,全称 Common Vulnerability Scoring System。目前主流是CVSS v3.1,v4.0也已经开始推广了。
这个评分体系,说白了就是一套标准化的打分规则。它把漏洞的严重程度量化成0到10分:
| 评分范围 | 严重等级 | 我的建议 |
|---|---|---|
| 0.0 | None | 忽略,但保持监控 |
| 0.1 - 3.9 | Low | 记录在案,定期回顾 |
| 4.0 - 6.9 | Medium | 纳入常规补丁周期 |
| 7.0 - 8.9 | High | 优先处理,尽快评估 |
| 9.0 - 10.0 | Critical | 立即响应,连夜修复 |
但这里有个坑。CVSS分数是“理论最大风险”,不是“你环境里的实际风险”。
避坑指南:我曾经遇到一个CVSS 9.8的远程代码执行漏洞,团队差点通宵。结果一排查,发现那个服务只在内网暴露,而且有严格的网络ACL。实际风险远低于理论分数。所以,别只看分数,要看攻击向量(AV)、攻击复杂度(AC)、权限要求(PR)这些子指标。
举个例子,一个漏洞如果攻击向量是“网络”(AV:N),攻击复杂度是“低”(AC:L),不需要权限(PR:N),那确实很危险。但如果攻击向量是“本地”(AV:L),那它再高分,你也得先让人能登录到机器才行。
3.3 漏洞数据库:NVD与CNNVD
有了CVE编号和CVSS分数,接下来去哪查详细信息?
3.3.1 NVD(美国国家漏洞数据库)
NVD是美国的官方漏洞库,数据最全、更新最快。它基于CVE,但额外提供了CVSS评分、影响评估、CPE(通用平台枚举)等信息。
我个人习惯,每天上班第一件事就是刷NVD的RSS Feed。你可以按时间、按产品、按厂商过滤。比如我只关注 cpe:2.3:a:apache:http_server 相关的漏洞。
小技巧:NVD提供了API接口,你可以写个脚本定时拉取新漏洞,然后自动匹配你的资产清单。我之前的团队就是这么干的,每天自动生成一份“影响我们系统的漏洞日报”。
3.3.2 CNNVD(中国国家漏洞数据库)
CNNVD是国内官方的漏洞库。它的特点是:
- 对国内产品(如华为、阿里、腾讯)的漏洞收录更及时
- 提供中文描述,方便给非技术同事看
- 部分漏洞有CNNVD自己的编号,和CVE编号对应
嗯,这里要注意。CNNVD的更新速度有时比NVD慢一点。我建议两个库都看,互为补充。
3.4 开源情报源:OSS-Fuzz与GitHub Advisory
除了官方数据库,开源社区的情报源也非常重要。很多时候,漏洞在官方发布之前,社区里就已经有风声了。
3.4.1 OSS-Fuzz
OSS-Fuzz是Google发起的模糊测试项目。它持续对大量开源项目进行自动化测试,一旦发现崩溃或内存错误,就会生成报告。
这个源的价值在于:它发现的往往是0-day漏洞。因为模糊测试不依赖已知的漏洞模式,而是通过随机输入去撞。
我记得有一次,OSS-Fuzz报了一个libpng的堆溢出。当时官方还没发布CVE,但我们已经从报告里拿到了POC(概念验证代码)。我们立刻评估了影响范围,提前打了补丁。等CVE公开时,我们已经修完了。
我的做法:订阅OSS-Fuzz的邮件列表,或者用它的API。重点关注与你使用的开源库相关的报告。哪怕只是“疑似漏洞”,也值得跟进。
3.4.2 GitHub Advisory Database
GitHub Advisory Database是GitHub官方的安全公告库。它整合了NVD、GitHub Security Advisories、以及社区贡献的数据。
它的优势在于:
- 直接关联GitHub仓库,能看到受影响的版本范围和修复commit
- 支持Dependabot自动检测,如果你的项目依赖了有漏洞的包,它会自动提醒你
- 提供“建议行动”,比如升级到哪个版本
你想想看,如果你用GitHub托管代码,这个源几乎是零成本的。只要开启Dependabot alerts,它就会自动扫描你的依赖树。
3.5 知识体系总览
下面这张图,帮你理清这几个情报源之间的关系:
3.6 我的日常情报获取流程
最后,分享一下我个人的日常操作流程,供你参考:
- 早晨8:30:刷NVD RSS Feed,看过去24小时新增的CVE。重点关注CVSS >= 7.0的。
- 9:00:检查GitHub Dependabot alerts,看有没有影响我们项目的漏洞。
- 9:30:扫一眼OSS-Fuzz的邮件列表,看有没有我们依赖的库的崩溃报告。
- 每周一:汇总所有情报,生成一份“本周需关注漏洞清单”,发给团队。
- 每月初:回顾CNNVD,看有没有国内厂商的漏洞被遗漏。
自动化建议:别手动做这些。写个脚本,把NVD API、GitHub API、OSS-Fuzz的RSS整合到一起,每天自动生成一份报告。我之前的脚本大概200行Python,跑了好几年,省了不少事。
好了,这一章的内容就这些。记住,情报获取是补丁管理的第一步。源越多,信息越全,你越不容易被0-day打个措手不及。