kariemoorman/dockeraudit
GitHub: kariemoorman/dockeraudit
一个用 Go 编写的容器全栈安全审计工具包,覆盖 Docker、K8s 和 Terraform 的配置合规检查与漏洞扫描。
Stars: 0 | Forks: 0
dockeraudit
容器安全审计工具包
符合 CIS Docker Benchmark v1.8+、NIST SP 800-190 和 DoDI 8510.01 RMF 控制项。
## 徽章 ## 功能特性 - **80 项安全控制**: - 包含跨 11 个领域的安全控制,并映射到 CIS、NIST 800-53、NIST 800-190、ISO 27001、SOC 2 和 DISA CCI 合规标准。 - **Docker 扫描**: - 审计 Images、Dockerfiles 和 Docker Compose 配置,检查配置错误、敏感信息和其他安全漏洞。 - **Kubernetes Manifest 扫描**: - 审计 k8s manifests,检查配置错误、敏感信息和其他安全漏洞。 - **Terraform 配置扫描**: - 审计 terraform 文件,检查配置错误、敏感信息和其他安全漏洞,包括云资源(例如:AWS: ECR, EKS, S3, ECS, RDS, ElastiCache, DynamoDB)。 - **敏感信息检测**: - 76+ 个正则表达式模式,具备置信度评分和误报抑制功能。 - **漏洞检测**: - 通过 `--scanner` 标志使用 Trivy 和 Snyk 进行 CVE 扫描。 - **自动保存报告**: - 每次扫描都会在 `scans/` 目录下写入一份带有时间戳的副本,用于审计追踪。 - 5 种输出格式 - table (TXT)、JSON、Markdown、SARIF (GitHub Security)、JUnit (CI/CD)。 - **CI/CD 就绪**: - 可通过 `--fail-on` 阈值配置退出代码,支持将 SARIF 上传至 GitHub Security 选项卡。 ## 快速开始 ``` # 扫描 Docker image dockeraudit image nginx:latest # 扫描目录中的 Dockerfile 和 Compose file dockeraudit docker Dockerfile docker-compose.yml dockeraudit docker ./app/ ./infra/ --fail-on critical --scanner snyk dockeraudit docker ./ --format sarif -o results.sarif --scanner trivy # 扫描 Kubernetes manifest dockeraudit k8s ./manifests/ # 扫描 Terraform file dockeraudit terraform ./infrastructure/ # 一次性扫描所有内容 dockeraudit scan \ --images nginx:latest \ --docker ./ \ --k8s ./k8s/ \ --tf ./terraform/ \ --format markdown ``` ## 安装说明 ### 从源码安装 需要 **Go 1.25+**。 ``` git clone https://github.com/kariemoorman/dockeraudit.git cd dockeraudit make build ``` ### Go Install ``` go install github.com/kariemoorman/dockeraudit/cmd/dockeraudit@latest ``` ### 从 GitHub Releases 安装 从 [RELEASES](https://github.com/kariemoorman/dockeraudit/releases) 页面下载适用于 Linux、macOS 和 Windows 的预编译二进制文件: ``` # Linux (amd64) curl -sSfL \ https://github.com/kariemoorman/dockeraudit/releases/latest/download/dockeraudit_linux_amd64.tar.gz \ | tar -xz -C /usr/local/bin dockeraudit # macOS (Apple Silicon) curl -sSfL \ https://github.com/kariemoorman/dockeraudit/releases/latest/download/dockeraudit_darwin_arm64.tar.gz \ | tar -xz -C /usr/local/bin dockeraudit # 验证 dockeraudit --version ``` ## 使用方法 ### 命令 | Command | Description | |---------|-------------| | `scan` | 在单次运行中执行所有适用的扫描器 | | `image` | 扫描 Docker 镜像以发现加固问题 | | `docker` | 扫描 Dockerfiles 和 Docker Compose 文件 | | `k8s` | 扫描 Kubernetes manifests 以发现安全配置错误 | | `terraform` | 扫描 Terraform 文件以发现容器安全问题 | | `report controls` | 列出所有带有合规映射的加固控制项 | | `completion` | 生成 shell 补全脚本 (bash/zsh/fish/powershell) | ### 全局标志 | Flag | Default | Description | |------|---------|-------------| | `--verbose` | `false` | 将扫描进度打印到 stderr | | `--config` | `.dockeraudit.yaml` | 配置文件路径 | | `--version` | | 打印版本信息 | ### 通用标志 (所有扫描命令) | Flag | Default | Description | |------|---------|-------------| | `-f, --format` | `table` | 输出格式: `table`, `json`, `markdown`, `sarif`, `junit` | | `-o, --output` | `scans/` | 将结果写入文件路径 | | `--fail-on` | `high` | 在严重等级阈值退出非零值: `critical`, `high`, `medium`, `low`, `any` | | `--exclude-check` | | 排除特定的控制 ID (例如: `IMAGE-001,RUNTIME-010`) | | `--include-check` | | 仅包含特定的控制 ID | | `-s --scanner` | `[trivy,snyk]` | 使用的漏洞扫描器 (trivy, snyk, none)| ### `scan` 命令标志 | Flag | Description | |------|-------------| | `-i, --images` | 要扫描的 Docker 镜像 | | `-d, --docker` | Dockerfile/Compose 文件或目录 | | `-k, --k8s` | Kubernetes manifest 文件或目录 | | `-t, --tf` | Terraform 文件或目录 | | `--daemon` | 扫描本地 Docker daemon 配置 | | `--runtime` | 扫描所有运行中的容器 | | `--timeout` | 扫描超时时间(秒)(默认:300) | ### `image` 命令标志 | Flag | Description | |------|-------------| | `--eol-file` | 自定义生命周期结束 (EOL) 镜像定义 JSON 的路径 | | `--timeout` | 每个镜像的超时时间(秒)(默认:180) | ### 示例 ``` # 扫描并输出 JSON 到文件 dockeraudit image nginx:latest --format json -o results.json # 并行扫描多个 image dockeraudit image nginx:latest postgres:16 redis:7 # 在 CI 中仅对 critical 发现失败 dockeraudit scan --k8s ./manifests/ --fail-on critical # 排除特定检查 dockeraudit image myapp:latest --exclude-check IMAGE-001,IMAGE-008 # 为 GitHub Security tab 生成 SARIF dockeraudit scan --images myapp:latest --format sarif -o results.sarif # 列出所有可用的 control dockeraudit report controls # 按 domain 筛选列出 control dockeraudit report controls --domain Database ``` ## 安全控制 dockeraudit 评估跨 **11 个安全领域** 的 **80 项控制**: | Domain | Controls | What It Covers | |--------|----------|----------------| | **Host** | 6 | 最小化 OS、补丁、防火墙、SELinux/AppArmor、auditd、Bottlerocket | | **Daemon** | 8 | Docker socket、TCP/端口 2375 暴露、userns-remap、content trust、日志轮转 | | **Image** | 16 | Digest 锁定、层中的敏感信息、SUID 文件、非 root USER、EOL 镜像、调试工具、包验证绕过、递归 COPY、多阶段构建 | | **Runtime** | 16 | 特权模式、capabilities、只读 rootfs、host namespaces、资源限制、健康检查、seccomp、AppArmor/SELinux、automountSA、ulimits、重启策略 | | **Network** | 2 | 网络策略、IMDSv2 强制执行 | | **Secrets** | 3 | 外部密钥管理器、环境变量中无明文、AI/API 密钥检测 | | **Supply Chain** | 3 | 镜像签名、漏洞扫描、不可变标签 | | **Monitoring** | 2 | 集中式日志、审计日志转发 | | **Database** | 12 | 管理工具、启动标志、认证配置、服务类型、加密、备份、注解 | | **Kubernetes** | 3 | Namespace 隔离、Pod anti-affinity/topology spread、IaC 漏洞扫描 (trivy/snyk) | | **Terraform** | 9 | S3 公共访问/版本控制、ECS 特权/非 root/只读 rootfs、安全组入口、KMS 加密、CloudTrail 日志、IaC 漏洞扫描 (trivy/snyk) | 每项控制均映射到合规框架: - **CIS Docker Benchmark** 章节 - **NIST SP 800-53** 控制族 - **NIST SP 800-190** 章节 - **ISO 27001** 附录 A 控制 - **SOC 2** 信任标准 - **DISA CCI** 标识符 运行 `dockeraudit report controls` 获取完整列表。 ## 输出格式 ### Table (默认) 输出到终端的可读性彩色表格。 ### JSON 机器可读的 JSON,包含所有发现、状态、严重程度、控制元数据和合规映射。 ``` dockeraudit image nginx:latest -f json -o results.json ``` ### SARIF 静态分析结果交换格式,用于与 GitHub Code Scanning、Azure DevOps 和其他兼容 SARIF 的工具集成。 ``` dockeraudit scan --images myapp:latest -f sarif -o results.sarif ``` ### JUnit JUnit XML 格式,用于 Jenkins、GitLab CI 和类似系统中的 CI/CD 测试报告。 ``` dockeraudit image nginx:latest -f junit -o results.xml ``` ### Markdown Markdown 格式的报告,适用于 Pull Request 评论或文档。 ``` dockeraudit k8s ./manifests/ -f markdown -o report.md ``` ## 自动保存报告 每次扫描都会自动将带有时间戳的报告保存到 `scans/` 目录: ``` scans/dockerAudit_report_docker_20260304_063938.txt scans/dockerAudit_report_k8s_20260304_064027.txt scans/dockerAudit_report_terraform_20260304_064119.txt ``` 这提供了无需显式使用 `--output` 标志的审计追踪。当指定了 `--output` 时,将跳过自动保存。 ## 配置文件 dockeraudit 支持使用 YAML 配置文件设置默认选项。CLI 标志始终覆盖配置文件中的值。 **配置文件发现顺序:** 1. 由 `--config` 标志指定的路径 2. 当前工作目录中的 `.dockeraudit.yaml` 3. 当前工作目录中的 `.dockeraudit.yml` ``` # .dockeraudit.yaml format: table fail-on: high verbose: false exclude-check: - IMAGE-001 - RUNTIME-010 include-check: # when set, only these controls run - RUNTIME-001 - RUNTIME-002 eol-file: custom-eol.json ``` | Option | Type | Default | Description | |--------|------|---------|-------------| | `format` | string | `table` | 输出格式: `table`, `json`, `markdown`, `sarif`, `junit` | | `fail-on` | string | `high` | 退出非零值的阈值: `critical`, `high`, `medium`, `low`, `any` | | `verbose` | bool | `false` | 将扫描进度打印到 stderr | | `exclude-check` | list | (empty) | 要从结果中排除的控制 ID | | `include-check` | list | (empty) | 仅包含这些控制 ID (在 `exclude-check` 之前应用) | | `eol-file` | string | (empty) | 自定义生命周期结束 (EOL) 镜像定义 JSON 的路径 | **示例配置:** ``` # CI/CD (strict) # Development (relaxed) # Compliance audit format: sarif format: table format: json fail-on: critical fail-on: any fail-on: low verbose: true exclude-check: verbose: true - IMAGE-001 - IMAGE-008 ``` 完整参考请见 [.dockeraudit.example.yaml](.dockeraudit.example.yaml)。 ## CI/CD 集成 ### GitHub Actions ``` - name: Install dockeraudit run: | curl -sSfL \ https://github.com/kariemoorman/dockeraudit/releases/latest/download/dockeraudit_linux_amd64.tar.gz \ | tar -xz -C /usr/local/bin dockeraudit - name: Scan run: | dockeraudit scan \ --images myapp:${{ github.sha }} \ --k8s ./k8s/ \ --format sarif \ --output results.sarif \ --fail-on critical - name: Upload SARIF uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: results.sarif ``` ### GitLab CI ``` dockeraudit: stage: security image: alpine:3.22 before_script: - | curl -sSfL \ https://github.com/kariemoorman/dockeraudit/releases/latest/download/dockeraudit_linux_amd64.tar.gz \ | tar -xz -C /usr/local/bin dockeraudit script: - dockeraudit k8s ./k8s/ --format json -o report.json --fail-on high artifacts: paths: [report.json] when: always allow_failure: true ``` ## Shell 补全 生成 shell 补全脚本: ``` # Bash dockeraudit completion bash > /etc/bash_completion.d/dockeraudit # Zsh dockeraudit completion zsh > "${fpath[1]}/_dockeraudit" # Fish dockeraudit completion fish > ~/.config/fish/completions/dockeraudit.fish # PowerShell dockeraudit completion powershell > dockeraudit.ps1 ``` ## 许可证 本项目基于 BSD 许可证授权。详情请见 [LICENSE](LICENSE)。标签:ATTACK-Python-Client, AWS, CIS Benchmark, Claude, CVE检测, DevSecOps, Docker, Dockerfile, DPI, EC2, ECS, EVTX分析, Go, IaC, LLM应用, NIST SP 800-190, Ruby工具, SARIF, Snyk, Terraform, Web截图, 上游代理, 云安全监控, 子域名突变, 安全防御评估, 容器安全, 对称加密, 日志审计, 活动识别, 自动化审计, 请求拦截, 镜像扫描, 静态分析