The Most Comprehensive Docker Security Scanner
| Files | Last commit | Last update |
|---|---|---|
| 1 month ago | ||
| 9 years ago | ||
| 1 month ago | ||
| 20 hours ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 7 months ago | ||
| 9 months ago | ||
| 1 month ago | ||
| 9 months ago | ||
| 9 months ago | ||
| 9 months ago | ||
| 1 month ago | ||
| 9 months ago | ||
| 2 months ago | ||
| 2 months ago | ||
| 1 month ago |
目录
Warning
2.0.6 及更早版本会静默报告零个软件包 CVE。 一个查询 bug 导致软件包漏洞检查在每次扫描时均失败,并且错误被丢弃,因此旧版本二进制文件无论镜像或数据库如何,始终显示 0 个软件包 CVE 发现结果。强烈建议升级到 v2.1.0 或更高版本——这是第一个软件包 CVE 检测真正有效的版本。
概述
DockerScan v2 是新一代 Docker 容器与镜像安全扫描工具,采用 Go 语言完全重写。它融合了多种安全扫描技术,这些技术基于 2024-2025 年的最新研究成果、行业标准(CIS 基准、NIST SP 800-190)以及在生产环境中发现的真实攻击模式。
为何选择 DockerScan v2?
- 全面覆盖:集成 5 种以上安全扫描技术于一体
- 前沿研究:基于 2024-2025 年供应链攻击与 CVE 漏洞
- 生产可用:提供 SARIF 输出用于 CI/CD,支持退出码实现自动化
- 极速性能:采用 Go 语言编写,支持并发扫描
- 高度可扩展:插件架构支持自定义扫描器
- 源码开放:供内部、教育、研究及非竞争商业用途免费使用(详见许可协议)
功能特性
安全扫描模块
1. CIS Docker 基准 v1.7.0
全面的合规性检查,包含 80 多项自动化控制:
- 主机配置安全(13 项检查)
- Docker 守护进程强化(18 项检查)
- 文件与目录权限(9 项检查)
- 容器镜像最佳实践(13 项检查)
- 运行时安全验证(31 项以上检查)
- 安全运营合规性
2. 供应链攻击检测
基于 2024 年真实攻击活动:
- 无镜像容器检测 - 识别无实际层的恶意容器(Docker Hub 上已发现 400 多万个)
- 加密货币挖矿程序检测 - 检测挖矿恶意软件(已发现 12 万多次恶意镜像拉取)
- 后门库检测 - 捕获受感染的依赖项(如 xz-utils、liblzma 事件)
- 镜像签名验证 - 使用 Notary/Cosign 验证签名
- 钓鱼内容检测 - 扫描文档中的社会工程学内容
- 恶意网络目标 - 识别 C2 服务器、矿池、Tor 节点
3. 高级密钥检测
40 多种密钥模式,包括现代 API(2024 年更新):
- 云服务提供商:AWS、GCP、Azure 凭证
- 版本控制:GitHub、GitLab、Bitbucket 令牌
- AI/ML API:OpenAI、Anthropic、Hugging Face 密钥
- 支付服务:Stripe、PayPal、Square 密钥
- 通信服务:Slack、SendGrid、Twilio、Mailchimp
- 身份验证:JWT 令牌、OAuth 令牌
- 加密货币:私钥(RSA、SSH、PGP、EC、DSA)、证书
- 数据库:PostgreSQL、MySQL、MongoDB 连接字符串
- Docker:仓库身份验证令牌
- 熵值分析:通过香农熵计算检测未知密钥(阈值 >4.5)
4. CVE 与漏洞扫描
关键 2024-2025 年 CVE 漏洞检测:
- CVE-2024-21626 - runc 容器逃逸(CVSS 8.6)
- CVE-2024-23651 - BuildKit 缓存投毒远程代码执行(CVSS 9.1)
- CVE-2024-23652 - BuildKit 竞争条件(CVSS 7.5)
- CVE-2024-23653 - BuildKit 权限提升
- CVE-2024-8695/8696 - Docker Desktop 远程代码执行(CVSS 8.8)
- CVE-2025-9074 - Docker Desktop 本地访问漏洞
- 生命周期结束基础镜像检测
- 已知漏洞包扫描
5. 运行时安全分析
容器运行时强化检查:
- Linux 能力审计 - 检测危险能力(CAP_SYS_ADMIN、CAP_NET_ADMIN 等)
- Seccomp 配置文件验证 - 确保系统调用过滤已启用
- AppArmor/SELinux 检查 - 强制访问控制验证
- 特权容器检测 - 识别具有主机完全访问权限的容器
- 命名空间隔离 - PID、IPC、网络、用户命名空间检查
- 容器逃逸指标 - 检测常见逃逸技术
报告与集成
- JSON - 适用于自动化的机器可读输出
- SARIF - 原生集成于:
- GitHub 安全选项卡
- Azure DevOps
- VS Code 扩展
- GitLab 安全仪表板
- 美观的命令行界面 - 带有表情符号的彩色编码严重级别
- 退出代码 - 适合 CI/CD(0=无问题,1=警告,2=严重)
性能
- 比 Python 替代方案快 10 倍
- 借助 Go 协程实现并发扫描
- 低内存占用(约 50-100MB)
- 单一二进制文件 - 无依赖项
v2.1.0 中的新功能
2.1.0 版本(发布于 2026-07-13)全面改进了 CVE 数据管道和软件包漏洞匹配:
- 基于 MITRE cvelistV5 构建的 CVE 数据库 - 数据库现在从 MITRE cvelistV5 的官方每日快照生成,而非 NVD API。无 NVD API 依赖、无需 API 密钥且无速率限制。
- 端到端修复的软件包 CVE 检测 - 软件包到 CVE 的匹配围绕 dpkg 风格的版本比较器(Debian Policy 5.6.12)重写,具有每个(供应商、产品)的版本范围以实现精确匹配。
- 供应商验证的别名匹配 - 匹配现在携带
vendor_verified发现元数据。仅名称匹配会被标记为如此并包含修复注意事项,因此您可以区分供应商验证的匹配与启发式匹配。 - 派生的修复信息 -
FixedVersion从匹配的版本范围派生,并包含反向移植披露元数据(match_basis、distro_revision),因此发行版反向移植的修复不会被报告为易受攻击。 - 来自 NVD 的可选 CVSS 增强 - 可通过
--enrich-from-nvd、--enrich-only和--enrich-timeout从 NVD API 提取 CVSS 分数的尽力而为增强步骤。它是非阻塞的,在 CI 中可以安全跳过(绝不会导致构建失败)。
v2.0 中的新功能?
DockerScan v2.0 是一次彻底的从头重写。以下是与 v1.x 相比的变化:
主要变化
| 功能 | v1.x(Python) | v2.0(Go) |
|---|---|---|
| 语言 | Python 3.5+ | Go 1.21+ |
| 性能 | ~500 个镜像/小时 | ~5000 个镜像/小时 |
| 内存使用 | 200-500 MB | 50-100 MB |
| 分发 | pip 安装 + 依赖项 | 单一二进制文件 |
| 安全扫描器 | 2 个模块 | 5 个模块 |
| CIS 基准 | 部分支持 | 完整 v1.7.0(80+ 项检查) |
| 供应链 | 不可用 | 基于 2024 年研究 |
| 密钥模式 | 10 种模式 | 40+ 种模式 |
| CVE 检测 | 基础级 | 2024-2025 年 CVE |
| 运行时安全 | 不可用 | 完整功能审计 |
| SARIF 输出 | 不可用 | 完全支持 |
| CI/CD 集成 | 手动 | 原生(退出代码、SARIF) |
v1.x 版本保留功能
- 攻击工具 - 镜像植入恶意代码功能(将于 v2.1 版本推出)
- 仓库操作 - 推送、拉取、删除操作(将于 v2.1 版本推出)
- 网络扫描 - Docker 仓库发现(将于 v2.1 版本推出)
v2.0.5 版本新增功能
- 私有仓库认证 - 全面支持扫描私有仓库中的镜像(修复 #24)
- 多仓库支持 - Docker Hub、GHCR、ECR、GCR、ACR、GitLab 以及自托管仓库
- 多种认证方式 - 环境变量(CI/CD)、CLI 标志(测试)、Docker 配置文件(无缝集成)
- 智能认证优先级 - CLI 标志 > 环境变量 > Docker 配置(自动选择)
- 增强错误信息 - 仓库特定提示(ECR 令牌过期、速率限制、证书问题)
- 全面测试 - 64 个测试用例,91.2% 覆盖率,通过真实私有仓库测试
- 完整文档 - 所有主要云仓库和认证方法的示例
v2.0.4 版本新增功能
- CVE 数据库集成 - 包含 NVD 数据的本地 SQLite 数据库(2.5 年的 CVE 记录)
- 每日自动更新 - GitHub Action 每天更新 CVE 数据库
- 并行 CVE 下载 - 4 个工作进程加快数据库构建(nvd2sqlite)
- 退避重试机制 - 针对速率限制的 NVD API 请求自动重试
--from-file标志 - 从本地文件安装 CVE 数据库(离线/隔离环境)- 安静模式(
-q) - 为 CI/CD 流水线抑制横幅显示 - 减少误报 - 通过熵值过滤改进敏感信息检测
为何重写?
- 性能 - Go 语言借助 goroutine 实现 10 倍扫描速度提升
- 现代威胁 - 整合 2024-2025 年攻击模式
- 企业就绪 - SARIF 输出、退出代码、单一二进制分发
- 可扩展性 - 清晰的插件架构支持自定义扫描器
- 可维护性 - 类型安全、更好的错误处理、更易于贡献
安装
选项 1:下载预构建二进制文件(推荐)
每个版本标签都会通过 GitHub Actions 自动构建并发布预编译的二进制文件。
支持的平台:
- Linux:amd64、arm64、386
- macOS:amd64(Intel)、arm64(Apple Silicon)
- Windows:amd64、arm64、386
- FreeBSD:amd64
Linux(amd64)
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Linux (arm64)
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-arm64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
macOS(英特尔)
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-darwin-amd64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
macOS(Apple Silicon)
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-darwin-arm64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Windows(PowerShell)
Invoke-WebRequest -Uri "https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-windows-amd64.exe" -OutFile "dockerscan.exe"
验证下载(可选但推荐)
# Download checksums
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/checksums.txt -o checksums.txt
# Verify (Linux/macOS)
sha256sum -c checksums.txt --ignore-missing
选项 2:从源代码构建
# Clone repository
git clone https://github.com/cr0hn/dockerscan
cd dockerscan/dockerscan-v2
# Build
make build
# Install
sudo make install
# Or build manually
go build -o bin/dockerscan ./cmd/dockerscan
选项 3:Go 安装
go install github.com/cr0hn/dockerscan/v2/cmd/dockerscan@latest
快速开始
首次设置
扫描前,请下载 CVE 数据库(每日更新,压缩后约 30MB):
# Download latest CVE database from GitHub
dockerscan update-db
提示:数据库通过 GitHub Actions 每日更新。定期运行
update-db以获取最新的 CVE 数据。
基础扫描
# Scan a Docker image
dockerscan nginx:latest
# Scan with specific scanners
dockerscan --scanners cis,secrets ubuntu:22.04
# Scan and save reports
dockerscan alpine:latest --output /tmp/reports
# Quiet mode (suppress banner)
dockerscan -q nginx:latest
示例输出
╔══════════════════════════════════════════════════════════════════════════╗
║ ██████╗ ██████╗ ██████╗██╗ ██╗███████╗██████╗ ███████╗ ██████╗ █████╗ ███╗ ██╗
║ ██╔══██╗██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗████╗ ██║
║ ██║ ██║██║ ██║██║ █████╔╝ █████╗ ██████╔╝███████╗██║ ███████║██╔██╗ ██║
║ ██║ ██║██║ ██║██║ ██╔═██╗ ██╔══╝ ██╔══██╗╚════██║██║ ██╔══██║██║╚██╗██║
║ ██████╔╝╚██████╔╝╚██████╗██║ ██╗███████╗██║ ██║███████║╚██████╗██║ ██║██║ ╚████║
║ ║
║ Advanced Docker Security Scanner v2.0.0 ║
║ ║
║ Author: Daniel Garcia (cr0hn) ║
║ Website: https://cr0hn.com ║
╚══════════════════════════════════════════════════════════════════════════════════════╝
🔍 Scanning image: nginx:latest
═══════════════════════════════════════════════════════════════════
SCAN RESULTS
═══════════════════════════════════════════════════════════════════
📊 Summary:
Total Findings: 47
Duration: 2.3s
🔴 By Severity:
Critical: 8
High: 15
Medium: 18
Low: 6
📁 By Category:
CIS-Benchmark: 12
Secrets: 8
Supply-Chain: 5
Vulnerability: 10
Runtime-Security: 12
📄 JSON report saved to: dockerscan-report.json
📄 SARIF report saved to: dockerscan-report.sarif
使用方法
命令行选项
dockerscan [COMMAND] [OPTIONS] <IMAGE>
Commands:
scan Scan a Docker image (default)
update-db Download or update the CVE database
Options: --from-file <path> Install from local SQLite file
version Show version information
help Show help message
Options:
-h, --help Show help message
-v, --version Show version
-q, --quiet Suppress banner output (quiet mode)
--scanners SCANNERS Comma-separated list of scanners to run
(default: all)
Options: cis,secrets,supplychain,vulnerabilities,runtime
--output DIR Output directory for reports (default: .)
--only-critical Show only critical/high severity findings
--verbose, -v Show scan progress (scanner names, findings count, image pull status). Output to stderr.
--debug Show verbose output plus internal errors and technical details. Output to stderr.
Authentication (for private registries):
--registry-user <username> Registry username
--registry-password <password> Registry password (not recommended, use env vars)
--registry <url> Registry URL (optional, auto-detected from image)
--docker-config <path> Path to Docker config file (default: ~/.docker/config.json)
Environment variables (recommended for CI/CD):
DOCKER_USERNAME or REGISTRY_USERNAME Registry username
DOCKER_PASSWORD or REGISTRY_PASSWORD Registry password or token
DOCKER_REGISTRY or REGISTRY Registry URL (optional)
Exit Codes:
0 No issues found
1 HIGH severity issues found
2 CRITICAL severity found
示例
# Scan with all scanners (default)
dockerscan myapp:latest
# Only run specific scanners
dockerscan --scanners secrets,supplychain redis:7
# Save reports to specific directory
dockerscan --output /var/reports postgres:14
# Only show critical issues
dockerscan --only-critical production-app:v1.0
# Ver progreso del scan (scanner names, findings count, image pull status)
dockerscan --verbose ubuntu:22.04
# Debug detallado (errores internos, detalles técnicos)
dockerscan --debug ubuntu:22.04
# Scan private registry images (see Authentication section below)
dockerscan ghcr.io/myorg/private-app:v1.0
私有仓库认证
DockerScan 支持三种私有仓库认证方法:
方法 1:Docker 配置文件(推荐本地使用)
这是最便捷的方法,可直接使用您现有的 Docker 凭证:
# First, authenticate with your registry using Docker
docker login ghcr.io
# Username: your-username
# Password: ghp_your-token-here
# Now DockerScan can use these credentials automatically
dockerscan ghcr.io/myorg/private-app:latest
DockerScan 会自动从 ~/.docker/config.json 读取凭据。这适用于所有通过 docker login 登录过的 registry。
完全支持凭据助手。 DockerScan 原生通过以下方式解析凭据:
credsStore— 全局凭据助手(例如,在使用 Docker Desktop 的 macOS 上为osxkeychain,在 Windows 上为wincred,在 Linux 上为pass)credHelpers— 按 registry 配置的凭据助手(优先级高于credsStore)- 自动回退 — 如果指定的助手二进制文件未安装,DockerScan 会回退到
config.json中的明文auths块
在 使用 Docker Desktop 的 macOS 上,无需额外配置即可直接使用:
{
"credsStore": "osxkeychain"
}
DockerScan 会自动调用 docker-credential-osxkeychain 来获取令牌,因此您无需显式传递凭据。
方法 2:环境变量(推荐用于 CI/CD)
最适用于自动化环境和 CI/CD 流水线:
# Set environment variables
export DOCKER_USERNAME=myusername
export DOCKER_PASSWORD=mytoken
# Scan private image
dockerscan ghcr.io/myorg/private-app:latest
# Or use alternative variable names
export REGISTRY_USERNAME=myusername
export REGISTRY_PASSWORD=mytoken
dockerscan myregistry.example.com/app:v1.0
CI/CD 示例(GitHub Actions):
- name: Scan private image
env:
DOCKER_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.REGISTRY_TOKEN }}
run: dockerscan ghcr.io/${{ github.repository }}:${{ github.sha }}
方法 3:命令行标志(不推荐)
仅用于快速测试(凭据会显示在进程列表中):
dockerscan --registry-user myuser --registry-password mytoken ghcr.io/myorg/app:v1
安全警告: 此方法会在您的 shell 历史记录和进程列表中暴露凭据。请改用环境变量或 Docker 配置。
特定仓库示例
Docker Hub(私有仓库)
# Using Docker config
docker login docker.io
dockerscan myusername/private-repo:latest
# Using environment variables
export DOCKER_USERNAME=myusername
export DOCKER_PASSWORD=dckr_pat_XXXXXXXXXXXXX
dockerscan myusername/private-repo:latest
GitHub 容器注册表 (GHCR)
# Using Docker config
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
dockerscan ghcr.io/myorg/myapp:v1.0
# Using environment variables
export DOCKER_USERNAME=myusername
export DOCKER_PASSWORD=ghp_XXXXXXXXXXXXXXXXXXXX
dockerscan ghcr.io/myorg/myapp:v1.0
AWS 弹性容器注册表 (ECR)
# Get login credentials from AWS
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin \
123456789012.dkr.ecr.us-east-1.amazonaws.com
# Scan ECR image
dockerscan 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
# Or use environment variables with ECR credentials
export DOCKER_USERNAME=AWS
export DOCKER_PASSWORD=$(aws ecr get-login-password --region us-east-1)
dockerscan 123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
谷歌容器镜像仓库(GCR)/制品仓库
# Authenticate with gcloud
gcloud auth configure-docker gcr.io
# Scan GCR image
dockerscan gcr.io/my-project/myapp:latest
# For Artifact Registry
gcloud auth configure-docker us-docker.pkg.dev
dockerscan us-docker.pkg.dev/my-project/my-repo/myapp:latest
# Or use service account JSON key
export DOCKER_USERNAME=_json_key
export DOCKER_PASSWORD="$(cat service-account-key.json)"
dockerscan gcr.io/my-project/myapp:latest
Azure 容器注册表 (ACR)
# Login with Azure CLI
az acr login --name myregistry
# Scan ACR image
dockerscan myregistry.azurecr.io/myapp:v1.0
# Or use service principal credentials
export DOCKER_USERNAME=<service-principal-id>
export DOCKER_PASSWORD=<service-principal-password>
dockerscan myregistry.azurecr.io/myapp:v1.0
GitLab 容器镜像仓库
# Using Docker config
docker login registry.gitlab.com
dockerscan registry.gitlab.com/mygroup/myproject/myapp:latest
# Using environment variables with deploy token
export DOCKER_USERNAME=gitlab+deploy-token-1
export DOCKER_PASSWORD=DEPLOY_TOKEN_HERE
dockerscan registry.gitlab.com/mygroup/myproject/myapp:latest
自托管/私有镜像仓库
# Standard authentication
docker login myregistry.example.com:5000
dockerscan myregistry.example.com:5000/myapp:latest
# With environment variables
export DOCKER_USERNAME=admin
export DOCKER_PASSWORD=secret
dockerscan myregistry.example.com:5000/myapp:latest
# Insecure registries (not recommended for production)
# Add to Docker daemon config: /etc/docker/daemon.json
# {
# "insecure-registries": ["myregistry.example.com:5000"]
# }
身份验证故障排除
常见问题
1. “需要身份验证”错误
# Make sure you're logged in
docker login <registry>
# Or set environment variables
export DOCKER_USERNAME=your-username
export DOCKER_PASSWORD=your-token
2. “unauthorized: authentication failed” 错误
- 验证您的凭据是否正确
- 检查您的令牌是否已过期(尤其是针对云服务提供商)
- 确保您的账户具有拉取镜像的权限
3. AWS ECR “authorization token has expired”
# ECR tokens expire after 12 hours - refresh them
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin \
123456789012.dkr.ecr.us-east-1.amazonaws.com
4. Docker Hub 的速率限制
- 进行身份验证以提高速率限制(免费账户为 200 次拉取/6 小时)
- 考虑使用 Docker Hub Pro 账户以获得更高的限制
5. 自签名证书的证书错误
- 将 CA 证书添加到系统信任存储中
- 或配置 Docker 信任该 registry(请参阅 Docker 文档)
安全扫描器
CIS Docker Benchmark
针对 CIS Docker Benchmark v1.7.0 的自动化合规性检查:
dockerscan --scanners cis nginx:latest
检查内容包括:
- 容器用户非 root
- 未安装不必要的软件包
- 存在 HEALTHCHECK 指令
- 使用特定版本标签(非
:latest) - 最小化暴露端口
- 非特权容器
- Linux capabilities 已受限
- 已应用 Seccomp/AppArmor 配置文件
- 只读根文件系统
- 以及 70 多项其他检查...
供应链安全
检测真实世界的供应链攻击:
dockerscan --scanners supplychain suspicious-image:1.0
检测内容:
- 无镜像容器(仅文档攻击)
- 加密货币挖矿程序(xmrig、claymore 等)
- 被植入后门的库(xz-utils 案例)
- 未签名/未验证的镜像
- 文档中的钓鱼尝试
- 与矿池、C2 服务器的连接
密钥检测
查找硬编码的密钥:
dockerscan --scanners secrets webapp:prod
可发现:
- 云凭证(AWS、GCP、Azure)
- API 密钥(40+ 种服务)
- 私钥和证书
- 数据库凭证
- Docker 仓库认证信息
- 高熵字符串(潜在的未知密钥)
漏洞扫描
检测已知 CVE:
dockerscan --scanners vulnerabilities node:16
检查内容:
- 严重 Docker CVE(2024-2025)
- 容器逃逸漏洞
- BuildKit 远程代码执行漏洞
- 生命周期结束的基础镜像
- 易受攻击的软件包
运行时安全
审计运行时配置:
dockerscan --scanners runtime running-container
分析内容:
- Linux 功能(CAP_SYS_ADMIN 等)
- Seccomp 配置文件
- AppArmor/SELinux 策略
- 命名空间隔离
- 特权模式使用情况
输出格式
JSON 输出
{
"target": {
"image_name": "nginx:latest"
},
"start_time": "2024-11-22T10:30:00Z",
"findings": [
{
"id": "CIS-4.1",
"title": "Container should not run as root",
"severity": "HIGH",
"category": "CIS-Benchmark",
"description": "Running containers as root increases attack surface...",
"remediation": "Use USER instruction in Dockerfile..."
}
],
"summary": {
"total_findings": 47,
"by_severity": {
"CRITICAL": 8,
"HIGH": 15
}
}
}
SARIF 输出
兼容 GitHub Security、Azure DevOps、VS Code:
{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "DockerScan",
"version": "2.0.0"
}
},
"results": [...]
}
]
}
使用场景
1. CI/CD 流水线集成
GitHub Actions:
name: Docker Security Scan
on: [push]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Install DockerScan
run: |
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
- name: Update CVE Database
run: ./dockerscan update-db
- name: Run Security Scan
run: ./dockerscan -q myapp:${{ github.sha }}
- name: Upload SARIF results
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: dockerscan-report.sarif
GitLab 持续集成:
docker-security-scan:
stage: test
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- wget https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -O dockerscan
- chmod +x dockerscan
- ./dockerscan update-db
- ./dockerscan -q $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
artifacts:
reports:
sast: dockerscan-report.sarif
2. 安全审计
# Comprehensive audit of production images
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do
echo "Scanning $image..."
dockerscan $image --output /audit-reports/
done
# Generate summary report
cat /audit-reports/*.json | jq -s '
{
total_images: length,
total_findings: map(.summary.total_findings) | add,
critical_findings: map(.summary.by_severity.CRITICAL // 0) | add
}
'
3. 部署前验证
# Fail deployment if critical issues found
dockerscan production-app:v2.0
exit_code=$?
if [ $exit_code -eq 2 ]; then
echo "❌ Critical vulnerabilities found. Deployment blocked."
exit 1
elif [ $exit_code -eq 1 ]; then
echo "⚠️ High severity issues found. Manual review required."
# Send notification...
else
echo "✅ No critical issues. Proceeding with deployment."
fi
4. 合规性报告
# Generate CIS compliance report
dockerscan --scanners cis --only-critical all-production-images:* > cis-compliance-report.txt
# Weekly security scan for compliance
0 0 * * 0 /usr/local/bin/dockerscan --scanners cis,vulnerabilities production-images:latest --output /compliance/weekly/
5. 开发者工作流
# Pre-commit hook
#!/bin/bash
# .git/hooks/pre-commit
docker build -t local-test:latest .
dockerscan --only-critical local-test:latest
if [ $? -ne 0 ]; then
echo "❌ Docker security scan failed. Fix issues before committing."
exit 1
fi
与其他工具的对比
| 功能 | DockerScan v2.0 | Trivy | Clair | Snyk | Grype |
|---|---|---|---|---|---|
| CIS 基准 v1.7 | 完整(80+ 项检查) | 不支持 | 不支持 | 部分支持 | 不支持 |
| 供应链检测(2024) | 支持 | 不支持 | 不支持 | 不支持 | 不支持 |
| 密钥扫描 | 40+ 种模式 | 基础支持 | 不支持 | 支持 | 不支持 |
| CVE 数据库 | 2024-2025 年 CVE | 支持 | 支持 | 支持 | 支持 |
| 运行时安全 | 完整支持 | 不支持 | 不支持 | 不支持 | 不支持 |
| SARIF 输出 | 支持 | 支持 | 不支持 | 支持 | 支持 |
| 速度(Go 语言) | 极快 | 极快 | 慢 | 快 | 极快 |
| 可扩展性 | 插件系统 | 有限 | 有限 | 不支持 | 有限 |
| 退出码 | 支持 CI/CD | 支持 | 部分支持 | 支持 | 支持 |
| 成本 | 免费 | 免费 | 免费 | 付费层级 | 免费 |
| 离线模式 | 支持 | 支持 | 不支持 | 不支持 | 支持 |
| 许可证 | 专有源码可用 | Apache-2.0 | Apache-2.0 | 专有 | Apache-2.0 |
为何选择 DockerScan?
- 最全面:唯一整合 CIS + 供应链 + 密钥 + CVE + 运行时的工具
- 最新研究:基于 2024-2025 年真实世界攻击案例
- 零配置:开箱即用
- 开发者友好:美观的 CLI 输出,附带可操作的修复建议
- 企业就绪:支持 SARIF + 退出码 + JSON 输出
架构
项目结构
dockerscan/
├── logo.png # Project logo
├── cmd/
│ ├── dockerscan/ # Main CLI application
│ │ └── main.go
│ └── nvd2sqlite/ # CVE database builder tool
│ └── main.go
├── data/ # CVE database (auto-updated daily)
│ ├── latest.db.gz # Compressed SQLite database
│ └── metadata.json # Database version info
├── internal/
│ ├── scanner/ # Extensible scanner framework
│ │ ├── scanner.go # Scanner interface & registry
│ │ ├── cis/ # CIS Benchmark implementation
│ │ ├── secrets/ # Secrets detection
│ │ ├── supplychain/ # Supply chain attacks
│ │ ├── vulnerabilities/ # CVE scanning
│ │ └── runtime/ # Runtime security
│ ├── report/ # Report generators
│ │ ├── json.go # JSON reporter
│ │ └── sarif.go # SARIF reporter
│ ├── models/ # Data models
│ │ └── models.go # Findings, scan results, etc.
│ └── config/ # Configuration
│ └── config.go # App config & banner
└── pkg/docker/ # Docker client wrapper
└── client.go
CVE 数据库与 nvd2sqlite-cvelistV5 工具
DockerScan 使用本地 SQLite 数据库进行 CVE 查询。该数据库通过 GitHub Actions 每日自动更新 并托管在代码仓库中,因此您始终能获取最新的 CVE 数据。
数据库基于 MITRE cvelistV5 数据集 构建(官方 CVE 列表,每日快照发布于 GitHub)。与 NVD API 不同,此数据源无速率限制、无需 API 密钥且不存在可用性问题:完整快照是一个由 GitHub CDN 提供的约 525 MB 的 zip 文件。
数据库特性
- 预构建数据库 - 即开即用,无需手动配置
- 每日更新 - GitHub Action 每天 UTC 时间 06:47 从 MITRE cvelistV5 午夜快照重建完整数据库
- 30 个月时间窗口 - 约 125,000 条 CVE 和 432,000 条受影响产品记录(schema_version 2)
- 快速查询 - 具有优化索引的 SQLite
- 托管于 GitHub - 通过
update-db命令自动下载
更新数据库
# Download latest database from GitHub (recommended)
dockerscan update-db
# Install from local file (for air-gapped/offline environments)
dockerscan update-db --from-file /path/to/cve-db.sqlite
注意:首次运行
dockerscan时,系统会提示您下载数据库。之后,您可以使用update-db定期更新数据库。
手动构建数据库(nvd2sqlite-cvelistV5)
对于高级用户,您可以直接从 MITRE cvelistV5 快照构建 CVE 数据库:
# Build the tool
go build -o bin/nvd2sqlite-cvelistV5 ./cmd/nvd2sqlite-cvelistV5
# Download the latest snapshot and build the database (last 30 months by default)
./bin/nvd2sqlite-cvelistV5 --output data/cve-db.sqlite --verbose
# Optionally enrich CVSS scores from the NVD API (best-effort, non-blocking)
./bin/nvd2sqlite-cvelistV5 --output data/cve-db.sqlite --enrich-from-nvd
# Custom date range
./bin/nvd2sqlite-cvelistV5 --output data/cve-db.sqlite \
--start-date 2023-01-01 \
--end-date 2024-12-31
# From an already-downloaded snapshot zip (offline / air-gapped)
./bin/nvd2sqlite-cvelistV5 --output data/cve-db.sqlite \
--input 2026-07-13_all_CVEs_at_midnight.zip.zip
nvd2sqlite-cvelistV5 功能:
- 无需 API 密钥,无速率限制 - 从 GitHub 的 CDN 单次下载 zip 文件
- 并行解析 - 每个 CPU 核心一个工作进程,几分钟内处理约 30 万条 CVE 记录
- 版本范围标准化 - 将自由文本 CNA 范围(
>=1.0, <2.0、逗号分隔列表、v前缀)转换为标准范围 - 可选 CVSS 增强 - 通过
--enrich-from-nvd/--enrich-only/--enrich-timeout进行尽最大努力的 NVD 查找 - SQLite 输出,带有用于快速查找的索引表
已弃用:先前的
cmd/nvd2sqlite工具(NVD API 2.0 数据源)仅作参考保留,不再使用或维护。NVD API 的速率限制以及频繁的 503 错误/超时问题导致每日自动构建不可靠。
可扩展性
添加新扫描器非常简单:
package myscan
import (
"context"
"github.com/cr0hn/dockerscan/v2/internal/models"
"github.com/cr0hn/dockerscan/v2/internal/scanner"
)
type MyScanner struct {
scanner.BaseScanner
}
func NewMyScanner() *MyScanner {
return &MyScanner{
BaseScanner: scanner.NewBaseScanner(
"my-scanner",
"Description of my scanner",
true, // enabled
),
}
}
func (s *MyScanner) Scan(ctx context.Context, target models.ScanTarget) ([]models.Finding, error) {
var findings []models.Finding
// Your scanning logic here...
return findings, nil
}
// Register in main.go:
// registry.Register(myscan.NewMyScanner())
贡献指南
欢迎贡献代码!DockerScan 的设计初衷就是具备可扩展性。
贡献步骤
- Fork 本仓库
- 创建功能分支(
git checkout -b feature/amazing-scanner) - 在
internal/scanner/目录下添加你的扫描器 - 编写测试(我们保持 90% 以上的代码覆盖率)
- 提交你的更改(
git commit -am 'Add amazing scanner') - 推送到分支(
git push origin feature/amazing-scanner) - 打开一个 Pull Request
开发
# Clone and setup
git clone https://github.com/cr0hn/dockerscan
cd dockerscan/dockerscan-v2
# Install dependencies
make deps
# Run tests
make test
# Run with coverage
make coverage
# Build
make build
# Format code
make fmt
# Lint
make lint
添加新扫描器
我们特别欢迎以下方面的贡献:
- 与漏洞数据库(NVD、GitHub Security Advisories)集成
- Kubernetes 安全扫描
- 容器仓库安全
- Docker Compose 安全分析
- IaC 扫描(Dockerfiles)
参考资料
标准与基准
- CIS Docker Benchmark v1.7.0 - 互联网安全中心
- NIST SP 800-190 - 应用容器安全指南
- OWASP Docker 安全速查表
研究与 CVE
- 400 万个恶意无镜像容器 - The Hacker News,2024 年 4 月
- 利用容器镜像的供应链攻击 - Aqua Security
- CVE-2024-21626:runc 容器逃逸 - NIST NVD
- CVE-2024-23651:BuildKit 远程代码执行 - NIST NVD
- xz-utils 后门(2024 年 3 月) - OpenWall
工具与项目
- Trivy - 漏洞扫描器
- Docker Bench Security - CIS 基准测试脚本
- Cosign - 容器签名与验证工具
- SARIF 规范 - 静态分析结果格式
许可协议
本项目采用 DockerScan 专有源代码可用许可协议 授权。
许可说明
您可以(免费):
- 免费使用 DockerScan 进行内部安全扫描
- 在您的 CI/CD 流水线 和安全工作流中使用
- 修改、分叉并向社区贡献代码
- 将其用于教育和研究目的
- 作为专业服务(咨询、安全审计、渗透测试)中的工具使用
- 将其集成到其他产品中作为辅助组件
您不可以(未经明确书面许可或商业授权):
- 提供Docker 扫描商业化 SaaS 服务
- 销售DockerScan 的托管实例
- 构建主要基于 DockerScan 的商业平台
- 创建以 DockerScan 为主要产品的付费托管服务
为何选择此许可协议?
本许可协议通过以下方式保障项目的可持续性:
- 赋予自由:允许将本软件用于合法目的
- 防止恶意搭便车:避免企业将其作为服务提供以牟利却不回馈贡献
- 确保可持续性:通过商业许可协议规范竞争性使用,保障项目存续
- 保持源代码开放:为透明化和社区贡献提供可能
本软件并非开源软件——它是源代码可获取的,但对商业竞争性使用设有限制。
商业许可
适用场景:
- SaaS 或托管服务
- 将 DockerScan 作为主要功能的商业平台
- 将其作为商业产品转售或再分发
- DockerScan 为核心服务内容的托管服务
商业许可咨询方式:
邮箱:cr0hn [at] cr0hn.com 网站:https://cr0hn.com 为企业和初创公司提供灵活的许可条款
完整法律条款详见 LICENSE 文件。
作者
致谢
特别感谢:
- Docker 安全社区
- CIS 提供的 Docker 基准测试
- NIST 的 SP 800-190 标准
- 发现 2024 年供应链攻击的安全研究人员
- DockerScan 的所有贡献者和用户
支持
- 问题反馈:GitHub Issues
- 讨论交流:GitHub Discussions
- 安全问题:请将漏洞报告发送至 cr0hn@cr0hn.com