Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

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

dockerscan

最全面的 Docker 安全扫描器

查看仓库
1.7k2475120小时32分前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
<div align="center">

<img src="https://assets.kitploit.com/production/public/readmes/1309/3345979faae1cdabbe2912dfcaf46221df5cb53697630a8e8dcc5eebf814e949.png" alt="DockerScan Logo" width="200">

# DockerScan v2.0

### *最全面的 Docker 安全扫描器*

[![License](https://img.shields.io/badge/license-Proprietary-blue.svg)](LICENSE)
[![Go Version](https://img.shields.io/badge/go-1.21+-00ADD8.svg?logo=go)](https://golang.org/)
[![Version](https://img.shields.io/github/v/release/cr0hn/dockerscan?label=version)](https://github.com/cr0hn/dockerscan/releases)
[![CI/CD](https://img.shields.io/badge/CI/CD-Manual-blue.svg)](https://github.com/cr0hn/dockerscan/actions/workflows/dockerscan.yml)
[![Test Coverage](https://img.shields.io/badge/coverage-92%25-brightgreen.svg)](https://github.com/cr0hn/dockerscan)
[![Go Report Card](https://img.shields.io/badge/go%20report-A+-brightgreen.svg)](https://goreportcard.com/report/github.com/cr0hn/dockerscan)
[![Downloads](https://img.shields.io/github/downloads/cr0hn/dockerscan/total.svg)](https://github.com/cr0hn/dockerscan/releases)

**作者:[Daniel Garcia (cr0hn)](https://cr0hn.com)** | [GitHub](https://github.com/cr0hn/dockerscan) | [网站](https://cr0hn.com)

---

[功能](#-功能) •
[安装](#-安装) •
[快速开始](#-快速开始) •
[文档](#-文档) •
[使用场景](#-使用场景) •
[新特性](#-v20-新特性) •
[贡献](#-贡献)

</div>

---

## 📑 目录

- [概述](#-概述)
- [功能](#-功能)
- [v2.0 新特性](#-v20-新特性)
- [安装](#-安装)
- [快速开始](#-快速开始)
- [用法](#-用法)
  - [私有仓库认证](#-私有仓库认证)
- [安全扫描器](#-安全扫描器)
- [输出格式](#-输出格式)
- [使用场景](#-使用场景)
- [对比](#-与其他工具对比)
- [架构](#-架构)
- [贡献](#-贡献)
- [参考](#-参考)
- [许可证](#-许可证)
- [作者](#-作者)

---

## 🎯 概述

**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 (Python) | v2.0 (Go) |
|------|---------------|-----------|
| **语言** | Python 3.5+ | Go 1.21+ |
| **性能** | 约 500 个镜像/小时 | 约 5000 个镜像/小时 |
| **内存使用** | 200-500 MB | 50-100 MB |
| **分发方式** | pip install + 依赖 | 单个二进制文件 |
| **安全扫描器** | 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 标志 > 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/
```
#### 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/
```
#### 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"
```
#### 验证下载(可选但推荐)```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
```
### 选项三:Go 安装```bash
go install github.com/cr0hn/dockerscan/v2/cmd/dockerscan@latest
```
---

## 🚀 快速开始

### 首次设置

在扫描之前,下载CVE数据库(每日更新,压缩后约30MB):```bash
# Download latest CVE database from GitHub
dockerscan update-db
```
> **提示**: 数据库每天通过 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
```
---

## 📖 用法

### 命令行选项```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
```
### 🔐 私有仓库认证

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"
}
```
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 }}
```
#### 方法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
```
#### 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
```
#### 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=<service-principal-id>
export DOCKER_PASSWORD=<service-principal-password>
dockerscan myregistry.azurecr.io/myapp:v1.0
```
#### 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"]
# }
```
### 故障排除:身份验证

#### 常见问题

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

### 秘密检测

查找硬编码的秘密:```bash
dockerscan --scanners secrets webapp:prod
```
发现:
- 云凭证(AWS、GCP、Azure)
- API 密钥(40+ 种服务)
- 私钥和证书
- 数据库凭证
- Docker 注册表认证
- 高熵字符串(潜在未知密钥)

### 漏洞扫描

检测已知 CVE:```bash
dockerscan --scanners vulnerabilities node:16
```
- 检查项:
    - 关键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
    }
  }
}
```
### 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

      - 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 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
  }
'
```
### 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/
```
### 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 v2.0 | Trivy | Clair | Snyk | Grype |
|---------|----------------|-------|-------|------|-------|
| **CIS Benchmark 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 工具

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
```
**nvd2sqlite 功能:**
- ⚡ **4 个并行下载工作线程**,加快下载速度
- 🔄 **自动重试,带指数退避**,应对速率限制(HTTP 429)
- 📦 **下载至临时目录**,随后按顺序处理
```

---

[Read more](https://github.com/cr0hn/dockerscan)
下载工具