使用 OpenSCAP 扫描 Docker 主机并生成合规报告

解读

面试官抛出这道题,核心想验证三件事:

  1. 你是否真正落地过容器安全治理,而不是只会 docker run
  2. 对国内等保 2.0、关基、金融行业合规基线是否熟悉,能把技术动作映射到合规条款;
  3. 能否把一次扫描做成可闭环、可审计、可集成到 CI/CD 的工程化方案,而不是跑一条命令交差。
    因此,回答必须体现“主机+容器+镜像”三维一体扫描思路,并给出可复现、可交付、可审计的完整链路。

知识点

  1. OpenSCAP 生态:

    • oscap 命令行工具(RedHat/CentOS 系自带,Debian 需 apt install libopenscap8);
    • SCAP Security Guide(SSG),国内镜像源如清华、中科大同步;
    • DS(DataStream) 文件格式,内含 XCCDF、OVAL、CPE、CVE 四块内容;
    • ARF 结果格式,满足《GB/T 36627-2018 信息安全技术 安全审计产品技术要求》对“不可抵赖”存储的要求。
  2. 国内常用基线:

    • CIS Docker Benchmark v1.5.0(等保 2.0 三级 70% 条款直接引用);
    • 等保 2.0 主机安全扩展要求 中“容器和虚拟化安全”章节;
    • 工信部《电信和互联网行业数据安全合规评估要点》 对镜像仓库的扫描要求。
  3. 扫描范围:

    • Docker 主机 OS(宿主机内核参数、systemd 服务、文件权限);
    • Docker 守护进程配置/etc/docker/daemon.json、TLS 认证、userns-remap、audit 规则);
    • 容器运行时(特权容器、Capabilities、Seccomp、AppArmor/SELinux 标签、挂载传播);
    • 镜像(CVE、软件包签名、基标签)。
  4. 关键参数:

    • --profile 指定基线,如 xccdf_org.ssgproject.content_profile_cis
    • --rule 单条调试,快速定位失败项;
    • --remediate 自动修复(生产慎用,需二次评审);
    • --stig-viewer 输出 DISA STIG 兼容 XML,方便甲方运维平台导入。
  5. 报告呈现:

    • 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 文件,生成趋势图,供内审部抽查。

拓展思考

  1. 大规模 Swarm/K8s 场景下,DaemonSet 化扫描器比 SSH 批量脚本更稳:

    • openscap-container 镜像做 DaemonSet,宿主机 /var/run/docker.sock 挂只读,避免 SSH 密钥分发;
    • 扫描结果直接写 Kafka topic,消费端落地到Elasticsearch,对接 Grafana 做实时合规大盘。
  2. 国内云厂商安全产品联动:

    • 阿里云云安全中心已支持 OpenSCAP ARF 导入,可把自建 IDC 扫描结果同步到资产合规模块,实现混合云统一视图
    • 腾讯云容器安全服务 TCSS 提供 CIS Docker 一键修复 API,可调用其接口对失败项进行白屏化批量纠偏,减少人工干预。
  3. 性能与稳定性:

    • 扫描宿主机内核模块时,OVAL 探针会触发 modinfo 系统调用,CPU 瞬时 30%+,建议在夜间业务低峰通过 systemd timer 执行;
    • 对**超大镜像(>5 GB)**做 CVE 扫描时,先 docker saveoscap 会打爆磁盘,可改用 CRI-O + overlayfs diff 扫描,只分析新增层,时间缩短 70%。
  4. 合规左移:

    • Dockerfile 构建阶段引入 openscap-dockerfile 工具,提前检测 USER rootADD https:// 等非合规指令,构建即失败,比运行后扫描成本更低;
    • 结合 Sigstore Cosign 做镜像签名,把扫描报告摘要写进 In-Toto attestation,实现“镜像-报告-签名”三位一体,满足《关键信息基础设施安全保护条例》第 19 条“供应链可追溯”要求。