Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
dockerscan — 最全面的 Docker 安全扫描器 | Kitploit
工具/GitHubGitHub/cr0hn/dockerscan
漏洞扫描器容器安全配置审计云安全DevSecOps秘密检测供应链安全
GitHubcr0hn/dockerscan

dockerscan

最全面的 Docker 安全扫描器

查看仓库
1.7k24711小时53分前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
DockerScan Logo

DockerScan v2.0

最全面的 Docker 安全扫描器

License Go Version Version CI/CD Test Coverage Go Report Card Downloads

作者:Daniel Garcia (cr0hn) | GitHub | 网站


功能 • 安装 • 快速开始 • 文档 • 使用场景 • 新特性 • 贡献


📑 目录

  • 概述
  • 功能
  • v2.0 新特性
  • 安装
  • 快速开始
  • 用法
    • 私有仓库认证
  • 安全扫描器
  • 输出格式
  • 使用场景
  • 对比
  • 架构
  • 贡献
  • 参考
  • 许可证
  • 作者

🎯 概述

DockerScan v2.0 是一款面向 Docker 容器和镜像的下一代安全扫描器,完全用 Go 语言重写。它基于最新 2024-2025 年的研究成果、行业标准(CIS Benchmark、NIST SP 800-190)以及生产环境中发现的真实攻击模式,整合了多种安全扫描技术。

为什么选择 DockerScan v2.0?

  • ✅ 最全面:在一个工具中整合 5 种以上安全扫描技术
  • ✅ 最新研究:基于 2024-2025 年的供应链攻击和 CVE
  • ✅ 生产就绪:支持 SARIF 输出用于 CI/CD,提供退出码用于自动化
  • ✅ 极速:采用 Go 语言编写,支持并发扫描
  • ✅ 可扩展:插件架构,支持自定义扫描器
  • ✅ 免费开源:BSD-3 许可证

🌟 功能

🛡️ 安全扫描模块

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 多种密钥模式(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 安全仪表板
  • 美观的 CLI - 带表情符号的颜色编码严重级别
  • 退出码 - 对 CI/CD 友好(0=干净,1=警告,2=严重)

🚀 性能

  • ⚡ 比 Python 替代方案快 10 倍
  • 🔄 Go 协程并发扫描
  • 💾 低内存占用(约 50-100MB)
  • 📦 单个二进制文件 - 无需依赖

🆕 v2.0 新特性?

DockerScan v2.0 是从头开始的完全重写。以下是 v1.x 的变更:

主要变化

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 标志 > ENV 变量 > 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 管道
  • 🧹 减少误报 - 通过熵过滤改进密钥检测

为何重写?

  1. 性能 - Go 通过协程提供 10 倍更快的扫描速度
  2. 现代威胁 - 纳入了 2024-2025 年的攻击模式
  3. 企业就绪 - SARIF 输出、退出码、单二进制分发
  4. 可扩展性 - 清晰的插件架构,支持自定义扫描器
  5. 可维护性 - 类型安全、更好的错误处理、更易贡献

📦 安装

选项 1:下载预构建二进制文件(推荐)

预编译的二进制文件通过 GitHub Actions 为每个版本标签自动构建并发布。

支持的平台:

  • Linux:amd64、arm64、386
  • macOS:amd64(Intel)、arm64(Apple Silicon)
  • Windows:amd64、arm64、386
  • FreeBSD:amd64

Linux(amd64)```bash

curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan chmod +x dockerscan sudo mv dockerscan /usr/local/bin/

root@kitploit:~
#### Linux (arm64)```bash
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 (Intel)```bash

curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-darwin-amd64 -o dockerscan chmod +x dockerscan sudo mv dockerscan /usr/local/bin/

root@kitploit:~
#### macOS (Apple Silicon)```bash
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)```powershell

Invoke-WebRequest -Uri "https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-windows-amd64.exe" -OutFile "dockerscan.exe"

root@kitploit:~
#### 验证下载(可选但推荐)```bash
# 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: 从源代码构建```bash

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

root@kitploit:~
### 选项三:Go 安装```bash
go install github.com/cr0hn/dockerscan/v2/cmd/dockerscan@latest

🚀 快速开始

首次设置

在扫描之前,下载CVE数据库(每日更新,压缩后约30MB):```bash

Download latest CVE database from GitHub

dockerscan update-db

root@kitploit:~
> **提示**: 数据库每天通过 GitHub Actions 更新。请定期运行 `update-db` 以获取最新的 CVE 数据。

### 基本扫描```bash
# 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

root@kitploit:~
---

## 📖 用法

### 命令行选项```bash
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

示例```bash

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

root@kitploit:~
### 🔐 私有仓库认证

DockerScan 支持三种与私有仓库进行认证的方法:

#### 方法一:Docker 配置文件(推荐本地使用)

最便捷的方法——使用你现有的 Docker 凭据:```bash
# 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 登录的所有注册表。

完全支持凭据助手。 DockerScan 原生通过以下方式解析凭据:

  • credsStore — 全局凭据助手(例如 macOS 上 Docker Desktop 的 osxkeychain,Windows 上的 wincred,Linux 上的 pass)
  • credHelpers — 按注册表的凭据助手(优先级高于 credsStore)
  • 自动回退 — 如果指定的助手二进制文件未安装,DockerScan 会回退到 config.json 中的明文 auths 块

在 macOS 上的 Docker Desktop 中,这无需额外配置即可直接使用:```json { "credsStore": "osxkeychain" }

root@kitploit:~
DockerScan 会透明地调用 `docker-credential-osxkeychain` 来获取令牌,因此您无需显式传递凭据。

#### 方法 2:环境变量(推荐用于 CI/CD)

最适合自动化环境和 CI/CD 流水线:```bash
# 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):```yaml

  • name: Scan private image env: DOCKER_USERNAME: ${{ secrets.REGISTRY_USERNAME }} DOCKER_PASSWORD: ${{ secrets.REGISTRY_TOKEN }} run: dockerscan ghcr.io/${{ github.repository }}:${{ github.sha }}
root@kitploit:~
#### 方法3:命令行参数(不推荐)

仅用于快速测试(凭据在进程列表中可见):```bash
dockerscan --registry-user myuser --registry-password mytoken ghcr.io/myorg/app:v1

安全警告: 此方法会将凭证暴露在你的 shell 历史记录和进程列表中。请改用环境变量或 Docker 配置。

特定注册表示例

Docker Hub(私有仓库)```bash

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

root@kitploit:~
#### GitHub 容器注册表 (GHCR)```bash
# 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 Elastic Container Registry (ECR)```bash

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

root@kitploit:~
#### Google 容器注册表 (GCR) / 制品注册表```bash
# 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 Container Registry (ACR)```bash

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= export DOCKER_PASSWORD= dockerscan myregistry.azurecr.io/myapp:v1.0

root@kitploit:~
#### GitLab Container Registry```bash
# 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

自托管/私有仓库```bash

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"]

}

root@kitploit:~
### 故障排除:身份验证

#### 常见问题

**1. "需要身份验证" 错误**```bash
# Make sure you're logged in
docker login <registry>

# Or set environment variables
export DOCKER_USERNAME=your-username
export DOCKER_PASSWORD=your-token

2. "未授权:认证失败" 错误

  • 验证你的凭据是否正确
  • 检查你的令牌是否已过期(特别是云提供商)
  • 确保你的账户拥有拉取该镜像的权限

3. AWS ECR "授权令牌已过期"```bash

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

root@kitploit:~
**4. Docker Hub 上的速率限制**
- 进行身份验证以提高速率限制(免费帐户每 6 小时 200 次拉取)
- 考虑使用 Docker Hub Pro 帐户以获得更高限制

**5. 自签名证书的证书错误**
- 将 CA 证书添加到系统信任存储区
- 或配置 Docker 以信任该注册表(参见 Docker 文档)

---

## 🔍 安全扫描器

### CIS Docker 基准

针对 CIS Docker 基准 v1.7.0 的自动化合规性检查:```bash
dockerscan --scanners cis nginx:latest

Checks include:

  • 容器用户不是root用户
  • 未安装不必要的包
  • 存在HEALTHCHECK指令
  • 使用特定版本标签(而非:latest)
  • 最小化暴露端口
  • 无特权容器
  • 限制Linux能力
  • 应用Seccomp/AppArmor配置文件
  • 只读根文件系统
  • 以及70多项其他检查...

供应链安全

检测真实世界中的供应链攻击:```bash dockerscan --scanners supplychain suspicious-image:1.0

root@kitploit:~
检测:
- 无镜像容器(仅文档攻击)
- 加密货币挖矿程序(xmrig、claymore等)
- 后门库(xz-utils案例)
- 未签名/未验证的镜像
- 文档中的钓鱼尝试
- 连接到矿池、C2服务器

### 秘密检测

查找硬编码的秘密:```bash
dockerscan --scanners secrets webapp:prod

发现:

  • 云凭证(AWS、GCP、Azure)
  • API 密钥(40+ 种服务)
  • 私钥和证书
  • 数据库凭证
  • Docker 注册表认证
  • 高熵字符串(潜在未知密钥)

漏洞扫描

检测已知 CVE:```bash dockerscan --scanners vulnerabilities node:16

root@kitploit:~
- 检查项:
    - 关键Docker CVE(2024-2025)
    - 容器逃逸漏洞
    - BuildKit远程代码执行漏洞
    - 生命周期结束的基础镜像
    - 易受攻击的包

### 运行时安全

审计运行时配置:```bash
dockerscan --scanners runtime running-container

分析内容:

  • Linux 能力(CAP_SYS_ADMIN 等)
  • Seccomp 配置文件
  • AppArmor/SELinux 策略
  • 命名空间隔离
  • 特权模式使用

📁 输出格式

JSON 输出```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 } } }

root@kitploit:~
### SARIF Output

兼容 GitHub Security、Azure DevOps、VS Code:```json
{
  "$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:```yaml name: Docker Security Scan

on: [push]

jobs: security-scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3

root@kitploit:~
  - 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
root@kitploit:~
**GitLab CI:**```yaml
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. 安全审计```bash

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 } '

root@kitploit:~
### 3. **部署前验证**```bash
# 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. 合规性报告```bash

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/

root@kitploit:~
### 5. **开发者工作流**```bash
# 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?

  • 最全面:唯一结合 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

root@kitploit:~
### CVE 数据库与 nvd2sqlite 工具

DockerScan 使用本地 SQLite 数据库进行 CVE 查找。该数据库通过 GitHub Actions **每日自动更新**并托管在仓库中,因此您始终可以获取最新的 CVE 数据。

#### 数据库特性

- 🗄️ **预构建数据库** - 开箱即用,无需手动设置
- 🔄 **每日更新** - GitHub Action 每天在 UTC 时间 00:00 更新数据库
- 📅 **2.5 年的 CVE 数据** - 涵盖从 2022 年中期至今的 CVE
- ⚡ **快速查找** - 使用优化索引的 SQLite
- 🌐 **托管于 GitHub** - 通过 `update-db` 命令自动下载

#### 更新数据库```bash
# 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)

对于高级用户,你可以直接从 NVD 构建 CVE 数据库:```bash

Build the tool

make build # Builds both dockerscan and nvd2sqlite

Download CVEs (last 2.5 years by default)

./bin/nvd2sqlite --output data/cve-db.sqlite --verbose

With NVD API key (10x faster - 50 req/30sec vs 5 req/30sec)

NVD_API_KEY=your-key ./bin/nvd2sqlite --output data/cve-db.sqlite --verbose

Custom date range

./bin/nvd2sqlite --output data/cve-db.sqlite
--start-date 2023-01-01
--end-date 2024-12-31

root@kitploit:~
**nvd2sqlite 功能:**
- ⚡ **4 个并行下载工作线程**,加快下载速度
- 🔄 **自动重试,带指数退避**,应对速率限制(HTTP 429)
- 📦 **下载至临时目录**,随后按顺序处理
- 🗄️ **SQLite 输出**,带索引表,支持快速查询

---

### 可扩展性

添加新扫描器很简单:```go
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 设计为可扩展的。

如何贡献

  1. Fork 仓库
  2. Create 一个功能分支 (git checkout -b feature/amazing-scanner)
  3. Add 你的扫描器到 internal/scanner/
  4. Write 测试 (我们保持 90% 以上覆盖率)
  5. Commit 你的更改 (git commit -am 'Add amazing scanner')
  6. Push 到分支 (git push origin feature/amazing-scanner)
  7. Open 一个 Pull Request

开发```bash

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

root@kitploit:~
### 添加新扫描器

我们特别欢迎:
- 与漏洞数据库集成(NVD、GitHub 安全公告)
- Kubernetes 安全扫描
- 容器镜像仓库安全
- Docker Compose 安全分析
- IaC 扫描(Dockerfile)

---

## 📚 参考

### 标准与基准

- [CIS Docker 基准 v1.7.0](https://www.cisecurity.org/benchmark/docker) - 互联网安全中心
- [NIST SP 800-190](https://csrc.nist.gov/publications/detail/sp/800-190/final) - 应用容器安全指南
- [OWASP Docker 安全备忘单](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)

### 研究与 CVE

- [400 万恶意无镜像容器](https://thehackernews.com/2024/04/millions-of-malicious-imageless.html) - The Hacker News,2024 年 4 月
- [使用容器镜像的供应链攻击](https://www.aquasec.com/blog/supply-chain-threats-using-container-images/) - Aqua Security
- [CVE-2024-21626: runc 容器逃逸](https://nvd.nist.gov/vuln/detail/CVE-2024-21626) - NIST NVD
- [CVE-2024-23651: BuildKit 远程代码执行](https://nvd.nist.gov/vuln/detail/CVE-2024-23651) - NIST NVD
- [xz-utils 后门(2024 年 3 月)](https://www.openwall.com/lists/oss-security/2024/03/29/4) - OpenWall

### 工具与项目

- [Trivy](https://github.com/aquasecurity/trivy) - 漏洞扫描器
- [Docker Bench Security](https://github.com/docker/docker-bench-security) - CIS 基准脚本
- [Cosign](https://github.com/sigstore/cosign) - 容器签名与验证
- [SARIF 规范](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) - 静态分析结果格式

---

## 📄 许可协议

本项目采用 **DockerScan 专有源代码可用许可协议**。

### 这意味着什么

✅ **您可以(免费):**
- 免费使用 DockerScan 进行内部安全扫描
- 在您的 **CI/CD 流水线**和安全工作流程中使用
- **修改、复刻并贡献**回社区
- 用于**教育和研究**目的
- 作为**专业服务中的工具**(咨询、安全审计、渗透测试)
- **集成**到其他产品中作为辅助组件

❌ **您不得(未经明确书面许可或商业许可):**
- 提供**作为商业 SaaS 的 Docker 扫描**
- **销售 DockerScan 托管实例**
- 构建一个**主要基于 DockerScan 的商业平台**
- 创建**以 DockerScan 为主要产品的付费管理服务**

### 为什么采用此许可协议?

该许可协议通过以下方式保护项目的可持续性:
- ✅ 授予**自由**,允许为合法目的使用软件
- ❌ 防止**有害的搭便车行为**,即公司通过将其作为服务提供获利而不回馈社区
- 💰 通过竞争性用途的商业许可确保项目保持**可持续性**
- 🔓 保持**源代码可用**,以实现透明度和社区贡献

**这不是开源** - 它是**源代码可用**,对商业竞争性使用有限制。

### 商业许可

**适用于:**
- SaaS 或托管服务
- 使用 DockerScan 作为主要功能的商业平台
- 作为商业产品转售或再分发
- 以 DockerScan 为核心产品的托管服务

**商业许可联系方式:**

📧 邮箱:cr0hn [at] cr0hn.com
🌐 网站:https://cr0hn.com
💼 为企业与初创公司提供灵活许可条款

完整法律条款请参见 [LICENSE](https://github.com/cr0hn/dockerscan/blob/HEAD/LICENSE) 文件。

---

## 👤 作者

<div align="center">

### **Daniel Garcia (cr0hn)**

[![Website](https://img.shields.io/badge/Website-cr0hn.com-blue?style=for-the-badge&logo=google-chrome)](https://cr0hn.com)
[![GitHub](https://img.shields.io/badge/GitHub-cr0hn-black?style=for-the-badge&logo=github)](https://github.com/cr0hn)
[![Twitter](https://img.shields.io/badge/Twitter-@ggdaniel-1DA1F2?style=for-the-badge&logo=twitter)](https://twitter.com/ggdaniel)

**安全研究员 | 开源开发者 | Docker 安全专家**

</div>

---

## 🙏 致谢

特别感谢:
- Docker 安全社区
- CIS 提供的 Docker 基准
- NIST 提供的 SP 800-190
- 发现 2024 年供应链攻击的安全研究员
- DockerScan 的所有贡献者和用户

---

## 📞 支持

- **问题**:[GitHub Issues](https://github.com/cr0hn/dockerscan/issues)
- **讨论**:[GitHub Discussions](https://github.com/cr0hn/dockerscan/discussions)
- **安全**:报告漏洞至 [email protected]

---

<div align="center">

**⭐ 如果您觉得 DockerScan 有用,请给仓库点个星标! ⭐**

*让 Docker 安全面向所有人*

[⬆ 返回顶部](#-dockerscan-v20)

</div>
下载工具
功能v1.x (Python)v2.0 (Go)
语言Python 3.5+Go 1.21+
性能约 500 个镜像/小时约 5000 个镜像/小时
内存使用200-500 MB50-100 MB
分发方式pip install + 依赖单个二进制文件
安全扫描器2 个模块5 个模块
CIS 基准部分完整 v1.7.0(80 项以上检查)
供应链❌ 不支持✅ 基于 2024 年研究
密钥模式10 种模式40 种以上模式
CVE 检测基础2024-2025 年 CVE
运行时安全❌ 不支持✅ 完整能力审计
SARIF 输出❌ 不支持✅ 完全支持
CI/CD 集成手动原生(退出码、SARIF)
功能DockerScan v2.0TrivyClairSnykGrype
CIS Benchmark v1.7✅ 全面(80+ 项检查)❌❌部分❌
供应链检测 (2024)✅ 是❌❌❌❌
密钥扫描✅ 40+ 种模式基础❌✅❌
CVE 数据库✅ 2024-2025 年 CVE✅✅✅✅
运行时安全✅ 全面❌❌❌❌
SARIF 输出✅✅❌✅✅
速度 (Go语言)⚡ 非常快⚡ 非常快🐌 慢⚡ 快⚡ 非常快
可扩展性✅ 插件系统有限有限❌有限
退出码✅ 支持 CI/CD✅部分✅✅
成本🆓 免费🆓 免费🆓 免费💰 付费层级🆓 免费
离线模式✅✅❌❌✅
许可证专有·源码可用Apache-2.0Apache-2.0专有Apache-2.0