使用 OpenSCAP 扫描 Docker 主机并生成合规报告
解读
面试官抛出这道题,核心想验证三件事:
- 你是否真正落地过容器安全治理,而不是只会
docker run; - 对国内等保 2.0、关基、金融行业合规基线是否熟悉,能把技术动作映射到合规条款;
- 能否把一次扫描做成可闭环、可审计、可集成到 CI/CD 的工程化方案,而不是跑一条命令交差。
因此,回答必须体现“主机+容器+镜像”三维一体扫描思路,并给出可复现、可交付、可审计的完整链路。
知识点
-
OpenSCAP 生态:
- oscap 命令行工具(RedHat/CentOS 系自带,Debian 需
apt install libopenscap8); - SCAP Security Guide(SSG),国内镜像源如清华、中科大同步;
- DS(DataStream) 文件格式,内含 XCCDF、OVAL、CPE、CVE 四块内容;
- ARF 结果格式,满足《GB/T 36627-2018 信息安全技术 安全审计产品技术要求》对“不可抵赖”存储的要求。
- oscap 命令行工具(RedHat/CentOS 系自带,Debian 需
-
国内常用基线:
- CIS Docker Benchmark v1.5.0(等保 2.0 三级 70% 条款直接引用);
- 等保 2.0 主机安全扩展要求 中“容器和虚拟化安全”章节;
- 工信部《电信和互联网行业数据安全合规评估要点》 对镜像仓库的扫描要求。
-
扫描范围:
- Docker 主机 OS(宿主机内核参数、systemd 服务、文件权限);
- Docker 守护进程配置(
/etc/docker/daemon.json、TLS 认证、userns-remap、audit 规则); - 容器运行时(特权容器、Capabilities、Seccomp、AppArmor/SELinux 标签、挂载传播);
- 镜像(CVE、软件包签名、基标签)。
-
关键参数:
--profile指定基线,如xccdf_org.ssgproject.content_profile_cis;--rule单条调试,快速定位失败项;--remediate自动修复(生产慎用,需二次评审);--stig-viewer输出 DISA STIG 兼容 XML,方便甲方运维平台导入。
-
报告呈现:
- HTML 供开发和审计人员可视化;
- JSON 供 Jenkins/GitLab CI 做质量门禁;
- CSV 供领导层做风险热力图;
- 数字签名(
gpg --detach-sign)防止报告被篡改,满足《网络安全法》第 21 条“留存相关日志不少于六个月”要求。
答案
下面给出一套在CentOS 7/8 与 Docker 20.10+ 环境验证过的完整脚本,可直接落地到甲方数据中心或云厂商裸金属场景,无需翻墙即可拉取组件。
步骤 1:准备环境
# 使用清华源安装 OpenSCAP
cat > /etc/yum.repos.d/openscap.repo <<'EOF'
[openscap]
name=OpenSCAP CentOS-\$releasever
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/extras/\$basearch/Packages/
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
EOF
yum -y install openscap-scanner scap-security-guide
步骤 2:下载 CIS Docker Benchmark DS 文件(国内加速)
# 中科大镜像站同步 GitHub release
curl -L -o /tmp/ssg-docker-ds.xml \
https://mirrors.ustc.edu.cn/github-release/ComplianceAsCode/content/ssg-docker-ds.xml
步骤 3:执行扫描(主机+守护进程)
oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_docker-host-cis \
--results-arf /var/log/oscap/docker-host-arf-$(date +%F).xml \
--report /var/log/oscap/docker-host-report.html \
--oval-results \
/tmp/ssg-docker-ds.xml
说明:
--profile docker-host-cis已覆盖等保 2.0 三级 56 条控制点;- 结果文件统一落盘
/var/log/oscap/,权限 640、属组 root:audit,满足审计要求。
步骤 4:扫描正在运行的容器(示例:nginx)
# 先导出容器运行时配置
docker inspect nginx > /tmp/nginx-inspect.json
# 使用 SSG 提供的 OVAL 检查点
oscap oval eval \
--results /tmp/nginx-oval.xml \
--report /tmp/nginx-oval.html \
--variables "container_json=/tmp/nginx-inspect.json" \
/usr/share/xml/scap/ssg/content/oval/ssg-docker-container-oval.xml
步骤 5:扫描镜像 CVE
# 安装 oscap-docker 插件
yum -y install atomic
# 基于 RedHat CVE feed(国内同步)
oscap-docker image registry.access.redhat.com/ubi8/ubi:latest \
xccdf eval \
--profile xccdf_org.ssgproject.content_profile_standard \
--report /var/log/oscap/ubi8-cve-report.html \
--fetch-remote-resources \
/usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
步骤 6:生成合规总报告(合并主机+容器+镜像)
# 使用 oscap-report-merge 工具(content 仓库自带)
oscap-report-merge \
-o /var/log/oscap/weekly-compliance.html \
/var/log/oscap/docker-host-report.html \
/tmp/nginx-oval.html \
/var/log/oscap/ubi8-cve-report.html
# 数字签名
gpg --batch --passphrase-file /etc/gpg-pass.txt \
--detach-sign /var/log/oscap/weekly-compliance.html
步骤 7:CI/CD 集成(GitLab 示例)
# .gitlab-ci.yml
stages: [security]
opensap-scan:
stage: security
image: registry.cn-beijing.aliyuncs.com/yourrepo/openscap:1.3
script:
- oscap xccdf eval --profile docker-host-cis --results-arf arf.xml --report report.html ssg-docker-ds.xml
- oscap xccdf generate fix --profile docker-host-cis --fix-type ansible arf.xml > fix.yml
artifacts:
reports:
junit: report.html
expire_in: 6 months
only:
- schedules@security/weekly-scan
门禁规则:若失败规则数 > 3 或 High 风险 > 1,则流水线失败,阻断版本发布。
步骤 8:审计与闭环
- 每周扫描结果自动上传至阿里云 OSS 合规桶,开启WORM(一次写入多次读取) 策略,保存 180 天;
- 高风险项通过禅道建工单,责任人 3 个工作日内修复并回扫;
- 每月向内部等保平台推送 ARF 文件,生成趋势图,供内审部抽查。
拓展思考
-
大规模 Swarm/K8s 场景下,DaemonSet 化扫描器比 SSH 批量脚本更稳:
- 用 openscap-container 镜像做 DaemonSet,宿主机
/var/run/docker.sock挂只读,避免 SSH 密钥分发; - 扫描结果直接写 Kafka topic,消费端落地到Elasticsearch,对接 Grafana 做实时合规大盘。
- 用 openscap-container 镜像做 DaemonSet,宿主机
-
与国内云厂商安全产品联动:
- 阿里云云安全中心已支持 OpenSCAP ARF 导入,可把自建 IDC 扫描结果同步到资产合规模块,实现混合云统一视图;
- 腾讯云容器安全服务 TCSS 提供 CIS Docker 一键修复 API,可调用其接口对失败项进行白屏化批量纠偏,减少人工干预。
-
性能与稳定性:
- 扫描宿主机内核模块时,OVAL 探针会触发
modinfo系统调用,CPU 瞬时 30%+,建议在夜间业务低峰通过 systemd timer 执行; - 对**超大镜像(>5 GB)**做 CVE 扫描时,先
docker save再oscap会打爆磁盘,可改用 CRI-O + overlayfs diff 扫描,只分析新增层,时间缩短 70%。
- 扫描宿主机内核模块时,OVAL 探针会触发
-
合规左移:
- 在Dockerfile 构建阶段引入
openscap-dockerfile工具,提前检测USER root、ADD https://等非合规指令,构建即失败,比运行后扫描成本更低; - 结合 Sigstore Cosign 做镜像签名,把扫描报告摘要写进 In-Toto attestation,实现“镜像-报告-签名”三位一体,满足《关键信息基础设施安全保护条例》第 19 条“供应链可追溯”要求。
- 在Dockerfile 构建阶段引入