Docker Bench for Security社区贡献指南:如何提交自定义安全检查规则

Docker Bench for Security社区贡献指南:如何提交自定义安全检查规则

【免费下载链接】docker-bench-security The Docker Bench for Security is a script that checks for dozens of common best-practices around deploying Docker containers in production. 【免费下载链接】docker-bench-security 项目地址: https://gitcode.com/gh_mirrors/do/docker-bench-security

你是否在使用Docker Bench for Security时发现缺少特定场景的安全检查规则?作为容器安全领域最受欢迎的开源检测工具,Docker Bench for Security(以下简称DBFS)通过社区协作持续完善其安全检测能力。本文将详细介绍如何为DBFS项目贡献自定义安全检查规则,帮助你将实战经验转化为社区共同财富。读完本文后,你将掌握从环境搭建到规则提交的完整流程,包括测试编写、代码规范和PR提交流程。

开发环境准备

在开始编写自定义规则前,需要准备符合项目要求的开发环境。DBFS采用Shell脚本开发,核心检测逻辑分散在不同测试模块中。

首先通过国内镜像仓库克隆项目代码:

git clone https://gitcode.com/gh_mirrors/do/docker-bench-security.git
cd docker-bench-security

项目提供两种运行方式,本地直接执行脚本或通过Docker容器运行:

# 本地直接运行
sudo sh docker-bench-security.sh

# 容器化运行
docker build -t docker-bench-security .
docker run --net host --pid host --cap-add audit_control \
    -v /var/lib:/var/lib \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/lib/systemd:/usr/lib/systemd \
    -v /etc:/etc --label docker_bench_security \
    docker-bench-security

项目核心文件结构如下,安全检查规则主要位于tests/目录:

docker-bench-security/
├── docker-bench-security.sh  # 主程序入口
├── functions/                # 辅助函数库
└── tests/                    # 安全检查规则目录
    ├── 1_host_configuration.sh
    ├── ...
    └── 99_community_checks.sh  # 社区贡献规则存放位置

安全检查规则开发规范

DBFS的安全检查规则遵循统一的开发规范,确保代码质量和检测一致性。所有社区贡献的自定义规则必须放置在tests/99_community_checks.sh文件中,采用特定的命名和结构规范。

规则命名规范

社区贡献的检查规则采用C.x.x编号体系,其中:

  • C表示社区贡献(Community)
  • 第一位数字表示大类(如C.1表示示例检查)
  • 后续数字表示细分检查项(如C.5.3.1表示容器运行时相关检查)

函数命名必须遵循check_c_*格式,如check_c_5_3_1对应编号C.5.3.1的检查规则。

规则结构模板

每个检查规则需包含标准结构,以下是自动化检查的基础模板:

check_c_x_y() {
  local id="C.x.y"                  # 规则唯一标识符
  local desc="检查规则描述"          # 简洁描述检查目的
  local remediation="修复建议"       # 安全问题的修复步骤
  local remediationImpact="修复影响" # 修复操作可能带来的影响
  local check="$id - $desc"         # 检查项标题
  
  starttestjson "$id" "$desc"       # JSON日志初始化
  
  # 检查逻辑实现
  if [ 检查条件 ]; then
    pass -s "$check"                # 检查通过
    logcheckresult "PASS"
    return
  fi
  
  # 多级判断示例
  if [ 警告条件 ]; then
    warn -s "$check"                # 检查警告
    logcheckresult "WARN" "问题详情" "相关容器列表"
    return
  fi
  
  note -c "$check"                  # 信息提示
  logcheckresult "INFO"
}

上述模板中使用的核心函数来自项目的函数库:

  • pass()/warn()/note(): 结果输出函数,定义于functions/output_lib.sh
  • starttestjson()/logcheckresult(): JSON日志函数,用于生成机器可读报告

编写自定义检查规则实战

以下通过两个具体示例,演示如何编写不同类型的安全检查规则。

示例1:容器特权模式检查

假设需要添加一个检查容器是否启用特权模式的规则,这是一个典型的容器运行时安全问题。

check_c_5_4_1() {
  local id="C.5.4.1"
  local desc="Ensure containers are not running with privileged mode enabled"
  local remediation="Add --cap-drop=ALL or specific capabilities instead of using --privileged flag"
  local remediationImpact="May break containers requiring specific system capabilities"
  local check="$id - $desc"
  starttestjson "$id" "$desc"

  local fail=0
  local priv_containers=""
  
  # 遍历所有运行中的容器
  for c in $(docker ps -q --no-trunc); do
    # 检查容器是否启用特权模式
    if docker inspect --format '{{.HostConfig.Privileged}}' "$c" | grep -q "true"; then
      if [ $fail -eq 0 ]; then
        warn -s "$check"
        fail=1
      fi
      priv_containers="$priv_containers $(docker inspect --format '{{.Name}}' "$c" | sed 's/^\///')"
    fi
  done

  if [ $fail -eq 0 ]; then
    pass -s "$check"
    logcheckresult "PASS"
  else
    logcheckresult "WARN" "Privileged containers found" "$priv_containers"
  fi
}

此规则实现了以下功能:

  1. 遍历所有运行中的容器
  2. 使用docker inspect检查Privileged配置项
  3. 收集违规容器名称并生成警告报告
  4. 符合项目的JSON日志规范

示例2:镜像漏洞扫描检查

对于需要外部工具支持的检查(如镜像漏洞扫描),可实现为手动检查规则:

check_c_4_13() {
  local id="C.4.13"
  local desc="Ensure container images are scanned for vulnerabilities"
  local remediation="Implement automated image scanning using Trivy, Clair or Docker Scout"
  local remediationImpact="Adds scanning step to CI/CD pipeline, may increase build time"
  local check="$id - $desc"
  starttestjson "$id" "$desc"

  # 检查是否安装了扫描工具(以Trivy为例)
  if command -v trivy &> /dev/null; then
    info -c "$check"
    logcheckresult "INFO" "Trivy detected, consider adding to CI/CD pipeline"
    return
  fi
  
  note -c "$check"
  logcheckresult "NOTE" "No vulnerability scanning tool detected"
}

这类规则通常用于推荐最佳实践,而非强制执行特定配置,通过infonote级别提示用户。

规则集成与测试

编写完成的规则需要正确集成到项目框架中才能被执行,同时必须通过代码质量检查。

规则注册

社区贡献的检查规则需要在两个地方进行注册:

  1. tests/99_community_checks.shcommunity_checks()函数中添加调用:
community_checks() {
  check_c
  check_c_1
  check_c_1_1
  check_c_2
  # ... 现有规则 ...
  check_c_5_4_1  # 添加新规则调用
  check_c_4_13    # 添加新规则调用
  check_c_end
}
  1. functions/functions_lib.shcommunity_checks()函数中确保包含社区检查入口:
community_checks() {
  check_c
  check_c_1
  check_c_1_1
  check_c_2
  check_c_5_3_1
  check_c_5_3_2
  check_c_5_3_3
  check_c_5_3_4
  check_c_end
}

本地测试流程

新规则编写完成后,需进行全面测试确保质量:

  1. 代码规范检查:使用ShellCheck验证脚本语法
shellcheck tests/99_community_checks.sh
  1. 功能测试:运行修改后的DBFS并验证新规则
# 仅运行社区检查规则
sudo sh docker-bench-security.sh -c
  1. 结果验证:检查输出是否包含新规则及正确结果
grep "C.5.4.1" docker-bench-security.log

DBFS的典型执行日志输出如下,包含所有检查项的结果状态: Docker Bench安全检查日志示例

贡献代码提交流程

完成规则开发和测试后,即可按照开源项目规范提交贡献。

代码提交规范

提交代码需遵循项目的提交信息规范,格式如下:

check: add C.5.4.1 privileged mode check

- Detect containers running with --privileged flag
- Add remediation steps for capability management
- Fixes #123 (如关联issues)

所有提交必须签署DCO(Developer Certificate of Origin):

git commit -s -m "check: add C.5.4.1 privileged mode check"

Pull Request流程

  1. 创建分支:从main分支创建特性分支
git checkout -b feature/add-privileged-check
  1. 提交变更:确保仅包含相关变更,避免格式化等无关修改

  2. 创建PR:通过GitCode平台提交PR,PR描述需包含:

    • 检查规则的目的和依据
    • 测试方法和结果
    • 相关安全最佳实践文档链接
  3. 代码审查:项目维护者会进行代码审查,可能需要根据反馈进行修改

项目维护者信息可参考MAINTAINERS文件,PR将由核心团队成员审核。

社区贡献最佳实践

为提高贡献被接受的概率,建议遵循以下社区贡献最佳实践:

规则设计原则

  • 针对性:聚焦特定安全问题,避免过于宽泛的检查
  • 可操作性:提供清晰的修复建议,包含具体命令示例
  • 兼容性:考虑不同Docker版本和操作系统差异
  • 性能影响:避免资源密集型操作,对大规模环境友好

文档完善

优秀的社区贡献应包含完善的文档:

  • 在规则描述中引用权威安全标准(如CIS、NIST)
  • 提供修复步骤的具体命令示例
  • 说明检查规则的适用场景和局限性

持续改进

DBFS项目处于活跃开发中,贡献者应:

  • 关注CONTRIBUTING.md文档更新
  • 参与Issue讨论,帮助解决社区问题
  • 定期同步上游代码,避免分支冲突

总结与展望

通过本文介绍的方法,你可以将自己的容器安全实践转化为社区共享的检查规则,帮助全球Docker用户提升容器部署安全性。随着云原生技术的发展,DBFS项目将持续扩展其检查覆盖范围,未来可能支持Kubernetes环境检查、镜像供应链安全等新兴领域。

如果你在贡献过程中遇到问题,可通过项目Issue系统寻求帮助。期待你的贡献能让Docker生态更加安全!

点赞收藏本文,关注容器安全系列文章,下期将带来"Docker Bench规则编写高级技巧"。

【免费下载链接】docker-bench-security The Docker Bench for Security is a script that checks for dozens of common best-practices around deploying Docker containers in production. 【免费下载链接】docker-bench-security 项目地址: https://gitcode.com/gh_mirrors/do/docker-bench-security

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值