OpenSCAP + Red Hat OVAL 离线漏洞扫描
1. 这是什么
OpenSCAP 是红帽主导的开源安全合规框架,oscap 是它的命令行工具。它本身不含漏洞数据,需要喂给它 OVAL 定义文件(一种 XML,描述「什么条件下算有漏洞」)。
和 Trivy 的区别:
| Trivy | OpenSCAP + OVAL | |
|---|---|---|
| 漏洞数据 | 自带打包好的漏洞库(trivy-db) | 外挂 OVAL XML,需自行更新 |
| 部署成本 | 要带二进制 + 1.4 GB 漏洞库 | 系统可能已预装,只带几 MB XML |
| 输出 | 表格 / JSON / SARIF | XML + 自带 HTML 报告 |
| 误报率 | 较低(数据做过归一化) | 较高(OVAL 是"判定式",大量不适用项会被报出来) |
适用场景:不想引入新二进制、想快速拿到一个可读报告时用它;定位是交叉验证,不是主力交付。
2. 怎么下载
2.1 oscap 本体
国产系统上优先用系统源装(最简单,不用考虑编译):
# 检查是否已预装 rpm -q openscap && oscap --version # 没有就装(需目标机能访问系统源) sudo yum install -y openscap
上游地址(目标机是 x86_64/aarch64 源码编译或其他发行版时用):
官网:
https://www.open-scap.org/源码发布:
https://github.com/OpenSCAP/openscap/releases
> 离线机没有源时,把 openscap 及其依赖的 RPM 从安装介质里取出来:
> find /media -name 'openscap*.rpm',然后 sudo yum localinstall -y oscap*.rpm。
2.2 OVAL 漏洞定义(下载地址已实测)
Red Hat 官方 OVAL 数据源,RHEL8 基础系统(对应麒麟 V10 的生态位置):
目录索引:https://www.redhat.com/security/data/oval/v2/RHEL8/ 更新索引:https://www.redhat.com/security/data/oval/v2/feed.json
两个常用文件(rhel-8.oval.xml.bz2 是正解,另一个更全但噪声也更多):
| 文件 | 大小 | 说明 |
|---|---|---|
rhel-8.oval.xml.bz2 | 1.85 MB | 只含已发布修复的漏洞定义 —— 推荐 |
rhel-8-including-unpatched.oval.xml.bz2 | 7.05 MB | 含未修复项,报得更多也更杂 |
下载并解压:
BASE=https://www.redhat.com/security/data/oval/v2/RHEL8 curl -fL -o rhel-8.oval.xml.bz2 "$BASE/rhel-8.oval.xml.bz2" bunzip2 -k rhel-8.oval.xml.bz2 ls -lh rhel-8.oval.xml* # rhel-8.oval.xml 解压后约 40~60 MB
> 实测:这两个文件最近更新于 2026-10-11,Red Hat 基本每天滚更,建议每次扫描前重新拉一份。
3. 怎么部署
# ① 装 oscap(能联网的机器) sudo yum install -y openscap # ② 取 OVAL 定义并解压 BASE=https://www.redhat.com/security/data/oval/v2/RHEL8 mkdir -p oscap-offline && cd oscap-offline curl -fL -o rhel-8.oval.xml.bz2 "$BASE/rhel-8.oval.xml.bz2" bunzip2 -k rhel-8.oval.xml.bz2 # ③ 打包带走 cd .. && tar -czf oscap-offline.tar.gz oscap-offline sha256sum oscap-offline.tar.gz # ④ 离线机上解包即可用,不需要安装步骤 tar -xzf oscap-offline.tar.gz && cd oscap-offline oscap --version
不需要常驻服务、不需要改配置。OVAL 是纯数据文件,扫描是只读的,不改动系统、不需要重启。
4. 部署完怎么用
# 基本用法:一条命令同时出机读结果和 HTML 报告 sudo oscap oval eval \\ --results results.xml \\ --report report.html \\ rhel-8.oval.xml
产出的 report.html 可以直接双击打开、交给客户。results.xml 是可解析的原始结果。
常用筛选
# 只看「有漏洞」,不看「合规通过」 sudo oscap oval eval --results results.xml rhel-8.oval.xml | grep -i 'false\\|true' | sort | uniq -c # 按漏洞 ID 统计(每个 CVE 的判定次数) grep -oE 'oval:com\.redhat\.oval:def:[0-9]+' results.xml | sort | uniq -c | sort -rn | head # 只评估单条定义(排查某个具体漏洞时用) oscap oval info rhel-8.oval.xml sudo oscap oval eval --id oval:com.redhat.oval:def:20230001 rhel-8.oval.xml
怎么读结果
oscap 的判定结果是 true / false / not applicable / unknown:
true= 符合"有漏洞"的条件,需要处理false= 已修复或不满足条件not applicable= 这条定义跟本机无关(包没装)。这类通常占比最大,要过滤掉unknown= 缺数据判不了,一般忽略
⚠ 只统计 true,不要被总条数吓到。一份 RHEL8 OVAL 有几万条定义,绝大多数是 not applicable。