1. 项目概述:为什么需要配置漏洞扫描Feed
在安全运维的日常里,我们常常面临一个困境:部署了Wazuh这样的安全监控平台,它能实时告警入侵行为、分析日志,但对于服务器上那些“静默”的漏洞——比如一个未打补丁的OpenSSL版本、一个存在已知CVE的Nginx——我们往往要等到外部扫描器触发或者出了事才后知后觉。Wazuh自带的漏洞检测器模块,就是为了解决这个“灯下黑”的问题。它不是一个主动向外爆破的扫描器,而是一个基于本地软件清单与权威漏洞数据库(Feed)进行比对的“审计员”。
所谓配置漏洞扫描Feed,本质上就是为Wazuh这位审计员提供最新、最全的“通缉令”名单。这个Feed包含了各大主流操作系统(如Canonical/Ubuntu, Debian, Red Hat, Windows等)和软件包的安全公告。Wazuh代理会定期收集所在主机上安装的所有软件及其版本信息,然后与Feed中的漏洞数据进行匹配,从而在管理界面中清晰地告诉你:哪台主机、哪个软件、存在哪个CVE漏洞、严重等级如何、以及是否有可用的修复方案。
我最初接触这个功能时,以为就是个简单的开关配置。但实际部署后发现,Feed的更新频率、源的选择、网络环境的适配以及后续的告警调优,每一步都有不少细节需要注意。一个配置得当的漏洞Feed,能让你的资产漏洞可视化管理能力提升一个档次;而配置不当,则可能导致漏报、误报或者管理端资源异常。接下来,我就结合自己的踩坑经验,把这套配置流程和核心要点拆解清楚。
2. 漏洞扫描Feed的核心原理与架构设计
2.1 Wazuh漏洞检测器的工作流程
理解配置之前,得先明白它怎么工作。Wazuh的漏洞检测并非在管理端(Server)进行复杂的端口扫描或漏洞利用,而是一个典型的“代理采集-中心比对”模式。
第一步:资产清点(Inventory)Wazuh代理(Agent)在启动时,以及后续按计划任务(默认每天),会运行系统命令,收集详细的软件安装清单。在Linux上,它通过rpm -qa、dpkg -l等包管理器命令获取所有已安装软件包及其版本号。在Windows上,则通过WMI或注册表查询已安装程序列表。这些数据被标准化后,发送到管理端。
第二步:数据标准化与存储管理端接收到代理上报的软件清单数据后,会对其进行解析和标准化处理,然后存储在本地的数据库中。这里的关键是,Wazuh会尝试将不同系统、不同包管理器格式的软件名称,映射到一个通用的CPE(通用平台枚举)格式或规范的软件名称上,以便与漏洞数据库进行匹配。
第三步:漏洞数据匹配这是Feed发挥作用的核心环节。管理端从预先配置的漏洞数据源(Feed)中,拉取最新的漏洞信息库。这个库通常是一个结构化的数据库,记录了某个软件的某个版本范围存在某个CVE漏洞。Wazuh将存储的资产清单与这个漏洞库进行比对。如果发现某个代理上报的软件版本,落在某个CVE影响的版本范围内,就会生成一条漏洞记录。
第四步:结果呈现与告警匹配结果会在Wazuh管理器的Web界面“安全事件”模块中,以特定规则ID(如#5502)的事件形式呈现,同时也会在“漏洞检测”专属的UI面板中,以更友好的方式展示,包括漏洞严重程度(CVSS评分)、是否有解决方案(如升级到某个版本)等信息。你可以根据这些信息生成报告,或配置更精细的告警规则。
整个流程的效能,高度依赖于漏洞Feed的质量和时效性。Feed数据陈旧,新的漏洞就检测不到;Feed数据不准确,就会产生大量误报。
2.2 漏洞Feed数据源解析
Wazuh官方支持并集成了多个权威的漏洞数据源,这也是其开箱即用能力的体现。主要分为两大类:
1. 操作系统厂商安全公告这是最核心、最准确的数据源,直接来自发行版维护团队。
- Canonical (Ubuntu): 使用
usn.ubuntu.com的安全通知(USN)。对于Ubuntu系统,这是首选且必配的源。 - Debian: 使用
security-tracker.debian.org的DSA(Debian安全公告)数据。 - Red Hat (包括CentOS, AlmaLinux, Rocky Linux): 使用
access.redhat.com的OVAL(开放漏洞评估语言)格式数据流。对于RHEL及其衍生版,这是关键源。 - Arch Linux: 使用
security.archlinux.org的CVE数据。 - Amazon Linux: 使用ALAS(Amazon Linux安全公告)数据。
- Microsoft (Windows): 使用MSRC(微软安全响应中心)的更新指南数据,通过MITRE的CVRF(通用漏洞报告框架)格式获取。这是检测Windows系统漏洞的关键。
2. 第三方漏洞数据库作为操作系统源的补充,提供更广泛的软件覆盖。
- National Vulnerability Database (NVD): 由美国国家标准与技术研究院(NIST)维护,是最全面的CVE漏洞数据库之一。Wazuh可以拉取NVD的JSON格式数据流。但请注意,NVD数据量巨大,且不直接提供针对特定操作系统发行版的修复建议,更多是作为通用参考。
- MITRE CVE: 最原始的CVE列表来源之一。
在实际配置中,我们通常不会启用所有源。一个合理的策略是:为主机所运行的操作系统启用对应的厂商源。例如,一台Ubuntu服务器,就启用Canonical源;一台CentOS服务器,就启用Red Hat源。对于NVD,可以作为跨平台通用软件的补充,但需要评估其带来的数据量和匹配精度影响。
3. 漏洞扫描Feed的详细配置实操
3.1 管理端(Wazuh Server)基础配置
所有配置的核心都在Wazuh管理端的配置文件/var/ossec/etc/ossec.conf中。在修改前,务必做好备份。
1. 定位并编辑漏洞检测器配置块使用你熟悉的编辑器(如vi或nano)打开主配置文件:
sudo vi /var/ossec/etc/ossec.conf找到<vulnerability-detector>这个配置块。如果不存在,你需要在<ossec_config>节点下添加它。一个完整的配置块骨架如下:
<ossec_config> <vulnerability-detector> <enabled>yes</enabled> <interval>5m</interval> <ignore_time>6h</ignore_time> <run_on_start>yes</run_on_start> <!-- 在这里添加具体的操作系统Feed源配置 --> </vulnerability-detector> </ossec_config><enabled>: 设为yes以启用漏洞检测模块。<interval>: 定义漏洞数据库(Feed)的更新检查频率。官方默认是5m(5分钟),但对于生产环境,这个频率可能过高,会导致不必要的API调用和内部处理开销。我个人的经验是,设置为1h或12h更为合适,因为各大漏洞源的更新通常以天为单位。<ignore_time>: 当代理首次上报或重新上报资产数据后,忽略其漏洞扫描的时间。设置为6h可以避免在资产数据刚更新后立即触发大量扫描事件。<run_on_start>: 设为yes,让Wazuh服务启动时立即运行一次漏洞检测。
2. 配置具体的操作系统Feed源在<vulnerability-detector>块内,为你的环境添加对应的操作系统源。以下是几个常见配置示例:
对于 Ubuntu/Debian 系统:
<!-- Ubuntu 源 --> <provider name="canonical"> <enabled>yes</enabled> <update_interval>1h</update_interval> </provider> <!-- Debian 源 --> <provider name="debian"> <enabled>yes</enabled> <update_interval>1h</update_interval> </provider>对于 Red Hat/CentOS/Rocky Linux 系统:
<!-- Red Hat 源 --> <provider name="redhat"> <enabled>yes</enabled> <update_interval>1h</update_interval> <os allow="8,9">CentOS Linux</os> <os allow="8,9">Red Hat Enterprise Linux Server</os> <os allow="8,9">Rocky Linux</os> <!-- 通过os标签指定匹配的操作系统名称和主版本号 --> </provider>注意:
<os allow>标签非常关键。allow后面的数字是操作系统的主版本号(如8,9)。后面的字符串需要与代理上报的系统名称完全匹配。你可以通过查看代理的syscollector日志或管理端的资产清单来确定精确的名称。配置错误会导致该源的漏洞匹配失败。
对于 Windows 系统:
<!-- Windows 源,通过MSU(微软更新) --> <provider name="msu"> <enabled>yes</enabled> <update_interval>1h</update_interval> </provider>启用NVD作为补充源:
<!-- NVD 源 --> <provider name="nvd"> <enabled>yes</enabled> <update_interval>1h</update_interval> </provider>启用NVD后,Wazuh会尝试下载整个NVD的CVE JSON数据流。首次下载和解析会消耗较多时间和磁盘空间(可能需要数GB),并且后续的增量更新也可能较慢。对于中小规模或专注操作系统漏洞的环境,可以考虑不启用NVD,以提升性能。
3. 保存并验证配置保存配置文件后,使用Wazuh的配置验证工具检查语法:
sudo /var/ossec/bin/verify-agent-conf如果没有输出错误,则说明语法正确。然后,重启Wazuh管理器服务以应用更改:
sudo systemctl restart wazuh-manager3.2 代理端(Wazuh Agent)的必要设置
代理端主要负责资产清点,大部分配置是默认开启的。但我们需要确认其正常工作。
1. 确认syscollector模块启用检查代理配置文件/var/ossec/etc/ossec.conf(在代理机器上),确保有以下模块配置:
<wodle name="syscollector"> <disabled>no</disabled> <interval>1h</interval> <scan_on_start>yes</scan_on_start> <hardware>yes</hardware> <os>yes</os> <network>yes</network> <packages>yes</packages> <ports all="no">yes</ports> <processes>yes</processes> </wodle>关键项是<packages>yes</packages>,这确保了软件包清单的收集。
2. 代理与服务器的通信确保代理与管理端的通信正常。在代理上可以运行:
sudo /var/ossec/bin/agent_control -i <你的Agent_ID>查看状态是否为“Active”。同时,检查代理日志/var/ossec/logs/ossec.log,看是否有关于syscollector的错误信息。
3.3 网络与存储考量
网络访问问题:Wazuh管理端需要能够访问外网以下载漏洞Feed。如果服务器处于内网,你需要配置HTTP/HTTPS代理。这可以通过在管理端的系统环境变量(如http_proxy,https_proxy)中设置,但更可靠的方式是在Wazuh的漏洞检测器配置中直接指定。
编辑/var/ossec/etc/ossec.conf,在<vulnerability-detector>块内或全局位置添加:
<vulnerability-detector> ... <download_timeout>300</download_timeout> <curl_max_size>104857600</curl_max_size> <!-- 100MB --> </vulnerability-detector>对于代理,需要在系统层面配置,确保curl或wget命令能通过代理访问互联网,因为Wazuh内部使用libcurl进行下载。
存储空间问题:漏洞数据库文件默认存储在/var/ossec/queue/vulnerabilities/目录下。特别是启用NVD源后,此目录可能会增长到几个GB。你需要确保该分区有足够的空间(建议预留10GB以上)。定期清理旧的漏洞数据可以通过自定义脚本实现,但Wazuh本身会管理数据的生命周期。
4. 配置验证、结果解读与性能调优
4.1 验证Feed下载与更新
配置完成后,如何知道Feed数据是否成功拉取?
1. 查看管理器日志最直接的方式是查看Wazuh管理器的日志:
sudo tail -f /var/ossec/logs/ossec.log | grep -i vulnerability你应当能看到类似以下的日志条目:
INFO: (5502): Vulnerability detector update finished. CVE database for Red Hat Enterprise Linux Server 8 was updated. INFO: (5502): Vulnerability detector update finished. CVE database for Canonical was updated.这表示对应源的漏洞数据库已成功更新。如果看到ERROR或Failed to download等信息,则需要检查网络连接或源地址是否可达。
2. 检查漏洞数据库文件你可以直接查看下载的数据文件:
sudo ls -lah /var/ossec/queue/vulnerabilities/cache/这个目录下应该有为每个已启用源生成的文件,例如canonical.db,redhat-8.db等。它们的修改时间应该与你配置的更新间隔相符。
4.2 在Web界面查看漏洞扫描结果
1. 安全事件视图登录Wazuh Dashboard,导航到Security Events模块。在搜索栏输入规则ID:5502。你将看到所有由漏洞检测器生成的事件。每条事件会包含主机名、受影响的软件包、CVE编号、严重等级和描述。
2. 漏洞检测专属面板Wazuh提供了更直观的漏洞管理界面。导航到Vulnerabilities模块。这里你可以:
- 按主机查看:列表显示所有代理,并汇总其漏洞数量(按严重性分类)。
- 按CVE查看:列出所有检测到的CVE,以及受影响的代理数量。
- 查看详情:点击任意漏洞,可以展开看到详细描述、CVSS评分、受影响的具体软件版本,以及最重要的——修复建议。例如,对于Ubuntu的漏洞,通常会直接给出需要升级到的安全版本号。
4.3 性能调优与高级配置
1. 调整扫描频率与时机
- 代理资产收集间隔 (
<interval>in syscollector): 默认1h。对于稳定的生产服务器,可以延长至12h或24h,减少资源消耗。 - 漏洞Feed更新间隔 (
<update_interval>in provider): 如前所述,从默认的5m调整为6h或12h是更合理的生产环境设置。 - 漏洞匹配扫描时机: 漏洞检测器通常在Feed更新后,会对所有代理的资产进行一次匹配扫描。你可以通过配置
<vulnerability-detector>中的<interval>来控制这个“检查并触发扫描”的频率,但注意它受限于Feed更新间隔。
2. 精细化控制扫描范围
- 排除特定软件包:如果你知道某些软件包会频繁产生误报(例如一些内部开发的不规范命名的包),可以在管理端配置中排除它们。
<vulnerability-detector> ... <provider name="canonical"> ... <exclude>my-internal-app-*</exclude> </provider> </vulnerability-detector> - 按操作系统版本过滤:在Red Hat等provider中,
<os allow>标签就是最直接的过滤控制,只对指定的系统和版本进行漏洞匹配。
3. 集成外部漏洞情报(高级)Wazuh的漏洞检测器支持自定义Feed源。你可以将内部漏洞扫描器(如Nessus, OpenVAS)的扫描结果,或者从其他商业漏洞情报平台获取的数据,转换成Wazuh支持的格式(如JSON),然后通过配置一个自定义的<provider>,让Wazuh拉取并集成这些数据。这需要一定的开发工作量,但能实现更统一的漏洞视图。
5. 常见问题排查与实战心得
5.1 典型问题速查表
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| Web界面“Vulnerabilities”模块无数据或数据陈旧 | 1. 漏洞检测器未启用。 2. Feed源配置错误或未匹配操作系统。 3. 代理 syscollector未正确上报包数据。4. 网络问题导致Feed无法更新。 | 1. 检查ossec.conf中<enabled>是否为yes,并重启服务。2. 检查日志中对应Feed源的更新成功记录。核对 <os allow>标签与代理实际系统名。3. 在代理上检查 /var/ossec/logs/ossec.log,搜索syscollector,看是否有包信息发送。重启代理wazuh-agent服务。4. 在服务器上尝试 curl或wget目标Feed源URL(如https://security-tracker.debian.org/tracker/data/json),测试连通性。 |
| 漏洞检测日志中出现大量下载失败或超时错误 | 1. 服务器无法访问互联网。 2. 目标漏洞源网站不稳定或访问慢(特别是NVD)。 3. 未配置代理或代理配置错误。 | 1. 检查服务器网络,确保能解析DNS并访问外部网络。 2. 考虑延长 <download_timeout>值(如到600秒)。对于NVD,可考虑使用镜像源或离线更新包(需手动处理)。3. 正确配置系统或Wazuh内的代理设置。 |
| 检测到的漏洞数量远少于预期,或已知漏洞未告警 | 1. 对应的操作系统Feed源未启用。 2. 软件包名称在资产清单和漏洞库中无法匹配。 3. Feed数据不是最新。 | 1. 确认主机系统对应的官方Feed已启用。 2. 这是一个常见难点。检查代理收集的包名(如 nginx-1.18.0)与漏洞库中匹配的包名是否一致。有时需要查看Wazuh内部的CPE映射规则。3. 检查 /var/ossec/queue/vulnerabilities/cache/下数据库文件的修改时间,确认更新成功。 |
服务器磁盘空间(/var分区)快速耗尽 | 启用了NVD等大型Feed源,且历史数据积累。 | 1. 监控/var/ossec/queue/vulnerabilities/目录大小。2. 如非必要,禁用NVD源。 3. 编写定时任务脚本,定期清理该目录下过时的 .db文件(需谨慎,建议先备份)。 |
5.2 实操心得与避坑指南
心得一:Feed源“少而精”优于“大而全”初期我总想启用所有Feed源以求覆盖全面,结果导致首次更新耗时极长,服务器负载增高,并且引入了大量与我的实际环境(主要是Ubuntu和CentOS)无关的漏洞数据,产生了噪音。最佳实践是:只启用你环境中实际存在的操作系统对应的官方源。例如,如果你的服务器全是CentOS 7/8,那么只启用Red Hat源并配置好对应的<os allow>即可。NVD源可以作为排查“漏网之鱼”的辅助工具,但不应作为主力。
心得二:<os allow>标签是匹配的关键在配置Red Hat系源时,我曾在<os allow>上栽过跟头。我有一批主机显示系统名为CentOS Linux release 7.9.2009 (Core),我最初配置了<os allow="7">CentOS</os>,结果漏洞检测始终不工作。后来查看日志和资产清单发现,Wazuh内部标准化的系统名可能是CentOS Linux。正确的做法是:先去Wazuh Web界面的“Agents”列表,点击具体代理,查看“Inventory” -> “Syscollector” -> “OS”信息,里面会明确写出用于匹配的os_name和os_major。用这两个值来配置<os allow>标签,才能确保精确匹配。
心得三:合理规划更新频率,避开业务高峰漏洞Feed更新和匹配扫描会消耗CPU和I/O资源。将<update_interval>和syscollector的<interval>设置为午夜或业务低峰期(例如04:00),是一个对生产环境友好的做法。你可以结合cron job和Wazuh的API,在特定时间触发资产收集和漏洞数据库更新,而不是依赖固定的短间隔轮询。
心得四:告警规则的精炼默认情况下,所有检测到的漏洞都会以规则5502产生事件。这可能会导致信息过载。我建议在Wazuh的规则文件(/var/ossec/etc/rules/local_rules.xml)中自定义更精细的告警规则。例如,只对CVSS评分高于7.0(高危及以上)的漏洞生成告警,或者将漏洞事件归类到特定的告警组,便于在SIEM中做关联分析。
<group name="vulnerability,"> <rule id="100100" level="10"> <if_sid>5502</if_sid> <field name="vulnerability.cvss.score">^7\.</field> <!-- 匹配7.x分 --> <description>High severity vulnerability detected: $(vulnerability.cve)</description> </rule> </group>配置Wazuh的漏洞扫描Feed,就像是为你的安全团队配备了一位不知疲倦的资产审计员。它不会替代主动扫描工具,但提供了持续、低成本、基于主机的漏洞可见性。把Feed源配准、更新频率调优、告警规则细化,这套机制就能成为你安全运维体系中扎实的一环。最关键的是,它促使你建立并维护一份准确的软件资产清单——这本身就是安全基础建设的重要一步。