Volver a actualizaciones
Nuevo releaseJul 20, 2026

dockerscan v2.1.0

El escáner de seguridad Docker más completo.

Compartir
Logotipo de DockerScan

DockerScan v2.0

El escáner de seguridad Docker más completo

Licencia Versión de Go Versión CI/CD Cobertura de pruebas Informe Go Descargas

Por Daniel Garcia (cr0hn) | GitHub | Sitio web


CaracterísticasInstalaciónInicio rápidoDocumentaciónCasos de usoNovedadesContribuir


📑 Tabla de Contenidos


🎯 Resumen

DockerScan v2.0 es un escáner de seguridad de última generación para contenedores e imágenes Docker, completamente reescrito en Go. Combina múltiples técnicas de escaneo de seguridad basadas en las investigaciones más recientes (2024-2025), estándares de la industria (CIS Benchmark, NIST SP 800-190) y patrones de ataques reales descubiertos en entornos de producción.

¿Por qué DockerScan v2.0?

  • Más completo: Combina 5+ técnicas de escaneo de seguridad en una sola herramienta
  • Últimas investigaciones: Basado en ataques a la cadena de suministro y CVEs de 2024-2025
  • Listo para producción: Salida SARIF para CI/CD, códigos de salida para automatización
  • Rápido como un rayo: Escrito en Go con escaneo concurrente
  • Extensible: Arquitectura de plugins para escáneres personalizados
  • Gratuito y de código abierto: Licencia BSD-3

🌟 Características

🛡️ Módulos de escaneo de seguridad

1. CIS Docker Benchmark v1.7.0

Verificación completa de cumplimiento con más de 80 controles automatizados:

  • ✅ Seguridad de configuración del host (13 comprobaciones)
  • ✅ Endurecimiento del demonio Docker (18 comprobaciones)
  • ✅ Permisos de archivos y directorios (9 comprobaciones)
  • ✅ Mejores prácticas de imágenes de contenedores (13 comprobaciones)
  • ✅ Validación de seguridad en tiempo de ejecución (31+ comprobaciones)
  • ✅ Cumplimiento de operaciones de seguridad

2. Detección de ataques a la cadena de suministro 🆕

Basado en campañas de ataque reales de 2024:

  • Detección de contenedores sin imagen - Identifica contenedores maliciosos sin capas reales (más de 4 millones encontrados en Docker Hub)
  • Detección de mineros de criptomonedas - Detecta malware de minería (más de 120K extracciones de imágenes maliciosas detectadas)
  • Detección de bibliotecas con puerta trasera - Captura dependencias comprometidas (incidentes xz-utils, liblzma)
  • Verificación de firmas de imágenes - Valida firmas usando Notary/Cosign
  • Detección de contenido de phishing - Escanea documentación en busca de ingeniería social
  • Destinos de red maliciosos - Identifica servidores C2, pools de minería, nodos Tor

3. Detección avanzada de secretos 🔑

Más de 40 patrones de secretos, incluyendo API modernas (actualización 2024):

  • Proveedores cloud: Credenciales de AWS, GCP, Azure
  • Control de versiones: Tokens de GitHub, GitLab, Bitbucket
  • APIs de IA/ML: Claves de OpenAI, Anthropic, Hugging Face
  • Pagos: Claves de Stripe, PayPal, Square
  • Comunicación: Slacks, SendGrid, Twilio, Mailchimp
  • Autenticación: Tokens JWT, tokens OAuth
  • Criptografía: Claves privadas (RSA, SSH, PGP, EC, DSA), certificados
  • Bases de datos: Cadenas de conexión de PostgreSQL, MySQL, MongoDB
  • Docker: Tokens de autenticación de registro
  • Análisis de entropía: Cálculo de entropía Shannon para secretos desconocidos (umbral >4.5)

4. Escaneo de CVE y vulnerabilidades 🚨

Detección de CVEs críticos de 2024-2025:

  • CVE-2024-21626 - Escape de contenedor runc (CVSS 8.6)
  • CVE-2024-23651 - Envenenamiento de caché BuildKit RCE (CVSS 9.1)
  • CVE-2024-23652 - Condición de carrera en BuildKit (CVSS 7.5)
  • CVE-2024-23653 - Escalada de privilegios en BuildKit
  • CVE-2024-8695/8696 - RCE en Docker Desktop (CVSS 8.8)
  • CVE-2025-9074 - Vulnerabilidad de acceso local en Docker Desktop
  • ✅ Detección de imágenes base al final de su vida útil
  • ✅ Escaneo de paquetes vulnerables conocidos

5. Análisis de seguridad en tiempo de ejecución ⚙️

Comprobaciones de endurecimiento de contenedores en ejecución:

  • Auditoría de capacidades de Linux - Detecta capacidades peligrosas (CAP_SYS_ADMIN, CAP_NET_ADMIN, etc.)
  • Validación de perfiles Seccomp - Asegura que el filtrado de llamadas al sistema esté habilitado
  • Comprobaciones AppArmor/SELinux - Verificación de control de acceso obligatorio
  • Detección de contenedores privilegiados - Identifica contenedores con acceso completo al host
  • Aislamiento de espacios de nombres - Comprobaciones de espacio de nombres PID, IPC, red, usuario
  • Indicadores de escape de contenedores - Detecta técnicas comunes de escape

📊 Informes e integración

  • JSON - Salida legible por máquina para automatización
  • SARIF - Integración nativa con:
    • Pestaña de seguridad de GitHub
    • Azure DevOps
    • Extensiones de VS Code
    • Paneles de seguridad de GitLab
  • CLI atractivo - Niveles de gravedad codificados por colores con emojis
  • Códigos de salida - Amigable con CI/CD (0=limpio, 1=advertencias, 2=crítico)

🚀 Rendimiento

  • 10x más rápido que alternativas en Python
  • 🔄 Escaneo concurrente con goroutines de Go
  • 💾 Bajo consumo de memoria (~50-100MB)
  • 📦 Binario único - Sin dependencias

🆕 Novedades en v2.0

DockerScan v2.0 es una reescritura completa desde cero. Esto es lo que cambió respecto a v1.x:

Cambios principales

Característicav1.x (Python)v2.0 (Go)
LenguajePython 3.5+Go 1.21+
Rendimiento~500 imágenes/hora~5000 imágenes/hora
Uso de memoria200-500 MB50-100 MB
Distribuciónpip install + dependenciasBinario único
Escáneres de seguridad2 módulos5 módulos
CIS BenchmarkParcialCompleto v1.7.0 (80+ comprobaciones)
Cadena de suministro❌ No disponible✅ Basado en investigación de 2024
Patrones de secretos10 patrones40+ patrones
Detección de CVEBásicaCVEs 2024-2025
Seguridad en tiempo de ejecución❌ No disponible✅ Auditoría completa de capacidades
Salida SARIF❌ No disponible✅ Soporte completo
Integración CI/CDManualNativo (códigos de salida, SARIF)

Lo que se conserva de v1.x

  • Herramientas ofensivas - Capacidades de troyanización de imágenes (próximamente en v2.1)
  • Operaciones de registro - Operaciones de push, pull, delete (próximamente en v2.1)
  • Escaneo de red - Descubrimiento de registros Docker (próximamente en v2.1)

Nuevo en v2.0.5 🔐

  • 🔑 Autenticación en registros privados - Soporte completo para escanear imágenes de registros privados (soluciona #24)
  • 🌐 Soporte multi-registro - Docker Hub, GHCR, ECR, GCR, ACR, GitLab y registros autogestionados
  • 🔐 Múltiples métodos de autenticación - Variables de entorno (CI/CD), flags de CLI (pruebas), archivo de configuración Docker (sin interrupciones)
  • 🎯 Prioridad de autenticación inteligente - Flags de CLI > Variables de entorno > Configuración Docker (selección automática)
  • 📝 Mensajes de error mejorados - Sugerencias específicas por registro (vencimiento de token ECR, límites de tasa, certificados)
  • 🧪 Pruebas exhaustivas - 64 casos de prueba, 91.2% de cobertura, probado con registro privado real
  • 📚 Documentación completa - Ejemplos para todos los registros cloud principales y métodos de autenticación

Nuevo en v2.0.4

  • 🗄️ Integración de base de datos CVE - Base de datos SQLite local con datos NVD (2.5 años de CVEs)
  • 🔄 Actualización automática diaria - Acción de GitHub actualiza la base de datos CVE cada día
  • Descarga paralela de CVEs - 4 trabajadores para compilaciones de base de datos más rápidas (nvd2sqlite)
  • 🔁 Reintento con retroceso - Reintento automático para solicitudes limitadas por tasa de la API NVD
  • 📦 Flag --from-file - Instalar base de datos CVE desde archivo local (sin conexión / aire aislado)
  • 🔇 Modo silencioso (-q) - Suprimir banner para pipelines CI/CD
  • 🧹 Menos falsos positivos - Detección de secretos mejorada con filtrado de entropía

¿Por qué la reescritura?

  1. Rendimiento - Go proporciona escaneo 10x más rápido con goroutines
  2. Amenazas modernas - Incorpora patrones de ataque de 2024-2025
  3. Listo para empresas - Salida SARIF, códigos de salida, distribución binaria única
  4. Extensibilidad - Arquitectura de plugins limpia para escáneres personalizados
  5. Mantenibilidad - Seguridad de tipos, mejor manejo de errores, más fácil de contribuir

📦 Instalación

Opción 1: Descargar binario precompilado (Recomendado)

Los binarios precompilados se construyen y publican automáticamente mediante GitHub Actions para cada etiqueta de versión.

Plataformas compatibles:

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

#### Verificar descarga (Opcional pero recomendado)```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

Opción 2: Compilar desde el código fuente```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

### Opción 3: Go Install```bash
go install github.com/cr0hn/dockerscan/v2/cmd/dockerscan@latest

🚀 Inicio rápido

Configuración inicial

Antes de escanear, descarga la base de datos de CVE (actualizada a diario, ~30 MB comprimidos):```bash

Download latest CVE database from GitHub

dockerscan update-db

> **Consejo**: La base de datos se actualiza diariamente mediante GitHub Actions. Ejecuta `update-db` periódicamente para obtener los últimos datos de CVE.

### Escaneo básico```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

Salida de ejemplo```

╔══════════════════════════════════════════════════════════════════════════╗ ║ ██████╗ ██████╗ ██████╗██╗ ██╗███████╗██████╗ ███████╗ ██████╗ █████╗ ███╗ ██╗ ║ ██╔══██╗██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗██╔════╝██╔════╝██╔══██╗████╗ ██║ ║ ██║ ██║██║ ██║██║ █████╔╝ █████╗ ██████╔╝███████╗██║ ███████║██╔██╗ ██║ ║ ██║ ██║██║ ██║██║ ██╔═██╗ ██╔══╝ ██╔══██╗╚════██║██║ ██╔══██║██║╚██╗██║ ║ ██████╔╝╚██████╔╝╚██████╗██║ ██╗███████╗██║ ██║███████║╚██████╗██║ ██║██║ ╚████║ ║ ║ ║ 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

---

## 📖 Uso

### Opciones de la línea de comandos```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

Ejemplos```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

### 🔐 Autenticación de Registro Privado

DockerScan admite tres métodos para autenticarse con registros privados:

#### Método 1: Archivo de Configuración de Docker (Recomendado para Uso Local)

El método más conveniente - utiliza sus credenciales existentes de 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 lee automáticamente las credenciales de ~/.docker/config.json. Esto funciona con todos los registros en los que haya iniciado sesión con docker login.

Los asistentes de credenciales son totalmente compatibles. DockerScan resuelve de forma nativa las credenciales a través de:

  • credsStore — asistente de credenciales global (p. ej., osxkeychain en macOS con Docker Desktop, wincred en Windows, pass en Linux)
  • credHelpers — asistentes de credenciales por registro (tiene prioridad sobre credsStore)
  • Retroceso automático — si el binario del asistente especificado no está instalado, DockerScan recurre al bloque auths en texto plano en config.json

En macOS con Docker Desktop, esto funciona de inmediato sin configuración adicional:```json { "credsStore": "osxkeychain" }

DockerScan llamará a `docker-credential-osxkeychain` de forma transparente para recuperar tokens, por lo que nunca necesitarás pasar credenciales explícitamente.

#### Método 2: Variables de Entorno (Recomendado para CI/CD)

Ideal para entornos automatizados y pipelines de 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

Ejemplo de 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 }}
#### Método 3: Banderas de línea de comandos (No recomendado)

Solo para pruebas rápidas (las credenciales son visibles en la lista de procesos):```bash
dockerscan --registry-user myuser --registry-password mytoken ghcr.io/myorg/app:v1

Advertencia de seguridad: Este método expone las credenciales en el historial del shell y en la lista de procesos. Use variables de entorno o la configuración de Docker en su lugar.

Ejemplos específicos de registro

Docker Hub (Repositorios privados)```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

#### Registro de Contenedores de 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 Container Registry (GCR) / Artifact Registry```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

#### 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

Registros Autoalojados/Privados```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"]

}

### Solución de problemas de autenticación

#### Problemas comunes

**1. Error "authentication required"**```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. Error "no autorizado: autenticación fallida"

  • Verifica que tus credenciales sean correctas
  • Comprueba si tu token ha expirado (especialmente para proveedores en la nube)
  • Asegúrate de que tu cuenta tenga permisos de extracción para la imagen

3. AWS ECR "el token de autorización ha expirado"```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. Límite de tasa en Docker Hub**
- Autentícate para aumentar los límites de tasa (200 descargas/6 horas para cuentas gratuitas)
- Considera usar una cuenta Docker Hub Pro para límites más altos

**5. Errores de certificados con certificados autofirmados**
- Agrega el certificado de CA al almacén de confianza del sistema
- O configura Docker para confiar en el registro (consulta la documentación de Docker)

---

## 🔍 Escáneres de seguridad

### CIS Docker Benchmark

Verificación automatizada de cumplimiento contra CIS Docker Benchmark v1.7.0:```bash
dockerscan --scanners cis nginx:latest

Las verificaciones incluyen:

  • El usuario del contenedor no es root
  • No hay paquetes innecesarios instalados
  • Instrucción HEALTHCHECK presente
  • Etiquetas de versión específicas (no :latest)
  • Puertos expuestos mínimos
  • Sin contenedores privilegiados
  • Capacidades de Linux restringidas
  • Perfiles Seccomp/AppArmor aplicados
  • Sistema de archivos raíz de solo lectura
  • Y más de 70 verificaciones adicionales...

Seguridad de la Cadena de Suministro

Detecta ataques reales a la cadena de suministro:```bash dockerscan --scanners supplychain suspicious-image:1.0

Detecta:
- Contenedores sin imagen (ataques solo con documentación)
- Minadores de criptomonedas (xmrig, claymore, etc.)
- Bibliotecas con puerta trasera (caso xz-utils)
- Imágenes sin firmar/verificar
- Intentos de phishing en documentación
- Conexiones a pools de minería, servidores C2

### Detección de Secretos

Encuentra secretos codificados:```bash
dockerscan --scanners secrets webapp:prod

Encuentra:

  • Credenciales de nube (AWS, GCP, Azure)
  • Claves API (más de 40 servicios)
  • Claves privadas y certificados
  • Credenciales de base de datos
  • Autenticación de registro Docker
  • Cadenas de alta entropía (posibles secretos desconocidos)

Escaneo de Vulnerabilidades

Detectar CVEs conocidos:```bash dockerscan --scanners vulnerabilities node:16

Checks for:
- CVEs críticas de Docker (2024-2025)
- Vulnerabilidades de escape de contenedores
- Vulnerabilidades RCE de BuildKit
- Imágenes base al final de su vida útil
- Paquetes vulnerables

### Seguridad en tiempo de ejecución

Auditar configuraciones en tiempo de ejecución:```bash
dockerscan --scanners runtime running-container

Analiza:

  • Capacidades de Linux (CAP_SYS_ADMIN, etc.)
  • Perfiles de Seccomp
  • Políticas de AppArmor/SELinux
  • Aislamiento de namespaces
  • Uso de modo privilegiado

📁 Formatos de Salida

Salida 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

Compatible con 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": [...]
    }
  ]
}

💼 Casos de Uso

1. Integración en el pipeline de 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. Auditorías de Seguridad```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. **Validación previa al despliegue**```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. Informes de Cumplimiento```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. **Flujo de trabajo del desarrollador**```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

📊 Comparación con otras herramientas

CaracterísticaDockerScan v2.0TrivyClairSnykGrype
CIS Benchmark v1.7✅ Completo (80+ verificaciones)Parcial
Detección de cadena de suministro (2024)✅ Sí
Escaneo de secretos✅ 40+ patronesBásico
Base de datos de CVE✅ CVEs 2024-2025
Seguridad en tiempo de ejecución✅ Completo
Salida SARIF
Velocidad (Go)⚡ Muy rápido⚡ Muy rápido🐌 Lento⚡ Rápido⚡ Muy rápido
Extensible✅ Sistema de pluginsLimitadoLimitadoLimitado
Códigos de salida✅ Listo para CI/CDParcial
Costo🆓 Gratuito🆓 Gratuito🆓 Gratuito💰 Planes de pago🆓 Gratuito
Modo sin conexión
LicenciaCódigo fuente disponible propietarioApache-2.0Apache-2.0PropietarioApache-2.0

¿Por qué elegir DockerScan?

  • Más completo: La única herramienta que combina CIS + Cadena de suministro + Secretos + CVE + Tiempo de ejecución
  • Investigación más reciente: Basado en ataques del mundo real de 2024-2025
  • Cero configuración: Funciona directamente
  • Amigable para desarrolladores: Salida CLI hermosa con remediación procesable
  • Listo para empresas: SARIF + códigos de salida + salida JSON

🏗️ Arquitectura

Estructura del proyecto```

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

### Base de datos CVE y herramienta nvd2sqlite

DockerScan utiliza una base de datos SQLite local para consultas CVE. La base de datos se **actualiza automáticamente a diario** mediante GitHub Actions y se aloja en el repositorio, por lo que siempre tiene acceso a los últimos datos CVE.

#### Características de la base de datos

- 🗄️ **Base de datos preconstruida** - Lista para usar, no requiere configuración manual
- 🔄 **Actualizaciones diarias** - La acción de GitHub actualiza la base de datos cada día a las 00:00 UTC
- 📅 **2.5 años de datos CVE** - Cubre CVE desde mediados de 2022 hasta el presente
- ⚡ **Consultas rápidas** - SQLite con índices optimizados
- 🌐 **Alojado en GitHub** - Se descarga automáticamente con el comando `update-db`

#### Actualización de la base de datos```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

Nota: La primera vez que ejecutes dockerscan, te pedirá descargar la base de datos. Después, puedes actualizarla periódicamente con update-db.

Construyendo la base de datos manualmente (nvd2sqlite)

Para usuarios avanzados, puedes construir la base de datos CVE desde NVD directamente:```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

**Características de nvd2sqlite:**
- ⚡ **4 trabajadores de descarga en paralelo** para descargas más rápidas
- 🔄 **Reintento automático con retroceso exponencial** para límite de tasa (HTTP 429)
- 📦 **Descargas al directorio temporal**, luego procesa secuencialmente
- 🗄️ **Salida SQLite** con tablas indexadas para búsquedas rápidas

---

### Extensibilidad

Añadir un nuevo escáner es simple:```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())

🤝 Contributing

¡Las contribuciones son bienvenidas! DockerScan está diseñado para ser extensible.

Cómo Contribuir

  1. Haz un fork del repositorio
  2. Crea una rama de funcionalidad (git checkout -b feature/amazing-scanner)
  3. Agrega tu escáner en internal/scanner/
  4. Escribe pruebas (mantenemos más del 90% de cobertura)
  5. Confirma tus cambios (git commit -am 'Add amazing scanner')
  6. Empuja a la rama (git push origin feature/amazing-scanner)
  7. Abre un Pull Request

Desarrollo```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

### Agregando Nuevos Escáneres

Especialmente damos la bienvenida a:
- Integración con bases de datos de vulnerabilidades (NVD, GitHub Security Advisories)
- Escaneo de seguridad de Kubernetes
- Seguridad de registros de contenedores
- Análisis de seguridad de Docker Compose
- Escaneo de IaC (Dockerfiles)

---

## 📚 Referencias

### Estándares y Benchmarks

- [CIS Docker Benchmark v1.7.0](https://www.cisecurity.org/benchmark/docker) - Center for Internet Security
- [NIST SP 800-190](https://csrc.nist.gov/publications/detail/sp/800-190/final) - Guía de Seguridad de Contenedores de Aplicaciones
- [OWASP Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)

### Investigación y CVEs

- [4 Millones de Contenedores Maliciosos sin Imagen](https://thehackernews.com/2024/04/millions-of-malicious-imageless.html) - The Hacker News, Abril 2024
- [Ataques a la Cadena de Suministro Usando Imágenes de Contenedores](https://www.aquasec.com/blog/supply-chain-threats-using-container-images/) - Aqua Security
- [CVE-2024-21626: Escape de Contenedor runc](https://nvd.nist.gov/vuln/detail/CVE-2024-21626) - NIST NVD
- [CVE-2024-23651: RCE en BuildKit](https://nvd.nist.gov/vuln/detail/CVE-2024-23651) - NIST NVD
- [Backdoor en xz-utils (Marzo 2024)](https://www.openwall.com/lists/oss-security/2024/03/29/4) - OpenWall

### Herramientas y Proyectos

- [Trivy](https://github.com/aquasecurity/trivy) - Escáner de vulnerabilidades
- [Docker Bench Security](https://github.com/docker/docker-bench-security) - Script de benchmark CIS
- [Cosign](https://github.com/sigstore/cosign) - Firma y verificación de contenedores
- [Especificación SARIF](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) - Formato de Resultados de Análisis Estático

---

## 📄 Licencia

Este proyecto está licenciado bajo la **DockerScan Proprietary Source-Available License**.

### Lo que esto significa

✅ **PUEDES (Gratuitamente):**
- Usar DockerScan **gratis** para escaneo de seguridad interno
- Usarlo en tus **tuberías CI/CD** y flujos de trabajo de seguridad
- **Modificar, bifurcar y contribuir** de vuelta a la comunidad
- Usarlo para **fines educativos y de investigación**
- Usarlo como **herramienta en servicios profesionales** (consultoría, auditorías de seguridad, pruebas de penetración)
- **Integrarlo** en otros productos donde sea un componente auxiliar

❌ **NO PUEDES (sin permiso expreso por escrito o licencia comercial):**
- Ofrecer **escaneo Docker como SaaS comercial**
- **Vender instancias alojadas** de DockerScan
- Construir una **plataforma comercial** basada principalmente en DockerScan
- Crear un **servicio administrado de pago** donde DockerScan sea la oferta principal

### ¿Por qué esta licencia?

Esta licencia protege la sostenibilidad del proyecto al:
- ✅ Conceder **libertad** para usar el software con fines legítimos
- ❌ Prevenir el **aprovechamiento dañino** donde empresas se benefician ofreciéndolo como servicio sin contribuir
- 💰 Asegurar que el proyecto siga siendo **sostenible** a través de licencias comerciales para usos competidores
- 🔓 Mantener el **código fuente disponible** para transparencia y contribuciones de la comunidad

**Esto NO es código abierto** - es **código disponible** con restricciones en uso comercial competitivo.

### Licencia Comercial

**Requerido para:**
- Ofertas SaaS o alojadas
- Plataformas comerciales que usen DockerScan como característica principal
- Reventa o redistribución como producto comercial
- Servicios administrados donde DockerScan sea la oferta central

**Contacto para licencias comerciales:**

📧 Correo electrónico: cr0hn [arroba] cr0hn.com
🌐 Sitio web: https://cr0hn.com
💼 Términos de licencia flexibles disponibles para empresas y startups

Consulte el archivo [LICENSE](https://github.com/cr0hn/dockerscan/blob/HEAD/LICENSE) para los términos legales completos.

---

## 👤 Autor

<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)

**Investigador de Seguridad | Desarrollador de Código Abierto | Experto en Seguridad Docker**

</div>

---

## 🙏 Agradecimientos

Agradecimientos especiales a:
- La comunidad de seguridad Docker
- CIS por el Docker Benchmark
- NIST por SP 800-190
- Los investigadores de seguridad que descubrieron los ataques a la cadena de suministro de 2024
- Todos los contribuyentes y usuarios de DockerScan

---

## 📞 Soporte

- **Incidencias**: [GitHub Issues](https://github.com/cr0hn/dockerscan/issues)
- **Discusiones**: [GitHub Discussions](https://github.com/cr0hn/dockerscan/discussions)
- **Seguridad**: Reportar vulnerabilidades a [email protected]

---

<div align="center">

**⭐ ¡Si encuentras útil DockerScan, por favor dale una estrella al repositorio! ⭐**

*Haciendo la Seguridad Docker Accesible para Todos*

[⬆ Volver Arriba](#-dockerscan-v20)

</div>

Categorías