Cómo verificar la seguridad de contenedores Docker sin complicaciones
Hace poco, investigadores de seguridad encontraron más de cuatro millones de contenedores vacíos de marcador de posición y cientos de miles de imágenes con cryptominers ocultos en Docker Hub. Nos hemos acostumbrado a extraer imágenes base o dependencias de terceros con un único comando docker pull, rara vez pensando en lo que podría estar oculto dentro de las capas — no solo un paquete vulnerable, sino un token de acceso incrustado a la infraestructura de otra persona o un script de escape de sandbox.
Para el escaneo de imágenes, la gente suele recurrir a Trivy, Grype o Clair. Hacen un trabajo decente encontrando CVEs conocidos en paquetes del sistema, pero a menudo pasan por alto cosas sutiles como una configuración de runtime deficiente, claves API filtradas y nuevos vectores de ataque que apuntan a las cadenas de suministro.
El proyecto dockerscan del investigador de seguridad español Daniel Garcia (cr0hn) resuelve este problema con una auditoría integral. La primera versión de la herramienta fue escrita en Python en 2017 y funcionaba lentamente, pero en la segunda versión el autor reescribió completamente el motor en Go, aumentó la velocidad diez veces y combinó el escaneo de vulnerabilidades, la detección de secretos y la auditoría de configuración en un único binario.
Qué hay dentro del nuevo DockerScan
En lugar de ejecutar tres utilidades diferentes en secuencia para verificar imágenes, dockerscan ejecuta diagnósticos completos en múltiples áreas a la vez.
La herramienta combina cinco módulos de análisis:
- CIS Docker Benchmark v1.7.0. Verifica más de 80 parámetros de seguridad, incluyendo ejecución como root, puertos abiertos innecesarios, directiva HEALTHCHECK faltante y permisos correctos de archivos del sistema.
- Detector de ataques a la cadena de suministro. Busca rastros de campañas populares de años recientes: miners ocultos (como xmrig), backdoors en bibliotecas del sistema (siguiendo el incidente de xz-utils), texto de phishing y contenedores sin capas reales.
- Detección de secretos incrustados. Reconoce más de 40 formatos de claves y tokens (AWS, GCP, OpenAI, Stripe, claves SSH privadas, cadenas de conexión a bases de datos). Los tokens desconocidos se capturan mediante cálculo de entropía de Shannon con un umbral superior a 4.5.
- Base de datos de vulnerabilidades CVE. Rastrea vulnerabilidades peligrosas de escape de contenedores (CVE-2024-21626 en runc), problemas de BuildKit e imágenes base desactualizadas. La base de datos se compila desde la instantánea oficial de MITRE cvelistV5, por lo que la utilidad no supera los límites de la API del NVD.
- Auditoría de seguridad en runtime. Verifica capacidades peligrosas de Linux (por ejemplo, CAP_SYS_ADMIN), perfiles de Seccomp y AppArmor, y flags de aislamiento de namespaces.
En la versión 2.1.0, el autor corrigió un error importante en las builds anteriores de v2.0.x que causaba que el escaneo de vulnerabilidades de paquetes devolviera silenciosamente cero resultados. Ahora la coincidencia de versiones de paquetes sigue las reglas de dpkg considerando los backports de distribución.
Inicio rápido y ejecución de verificaciones
La utilidad se distribuye como un binario listo para usar en Linux, macOS y Windows. Sin dependencias que instalar.
La instalación en Linux amd64 toma tres líneas:
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Antes de la primera ejecución, descarga la base de datos local de CVE:
dockerscan update-db
La base de datos se actualiza diariamente mediante GitHub Actions y pesa aproximadamente 30 MB comprimida. Después de eso, puedes apuntar el escáner a cualquier imagen local o remota:
dockerscan nginx:latest
Si solo te interesan verificaciones específicas, por ejemplo detección de secretos y cumplimiento del CIS Benchmark, puedes limitar los módulos con el flag --scanners:
dockerscan --scanners cis,secrets ubuntu:22.04
Para scripts de automatización, el modo silencioso -q y el filtrado por severidad son útiles:
dockerscan -q --only-critical my-app:prod
Trabajando con registros privados
Un problema común con muchos escáneres es la autenticación incómoda con repositorios privados. Dockerscan soporta todos los escenarios populares: Docker Hub, GHCR, AWS ECR, Google Artifact Registry, Azure ACR y GitLab.
Si ya estás autenticado mediante docker login, la utilidad extrae automáticamente los tokens de ~/.docker/config.json. También soporta ayudantes de credenciales del sistema (osxkeychain en macOS, wincred en Windows y pass en Linux).
Para pipelines de CI/CD, es más conveniente pasar las credenciales mediante variables de entorno:
export DOCKER_USERNAME=ci-bot
export DOCKER_PASSWORD=ghp_secret_token_here
dockerscan ghcr.io/my-org/private-service:v1.2.0
La utilidad devuelve códigos de salida claros: 0 para un informe limpio, 1 cuando se encuentran problemas de nivel Alto y 2 cuando se detectan vulnerabilidades críticas. Esto permite detener inmediatamente la construcción del pipeline al encontrar un error peligroso.
Integración en CI/CD e informes
Los resultados de Dockerscan se guardan en formatos JSON y SARIF. El formato SARIF es entendido nativamente por GitHub Security, GitLab y Azure DevOps, por lo que los problemas encontrados se muestran inmediatamente en la interfaz de pull request.
Ejemplo de paso para GitHub Actions:
name: Security Scan
run: |
./dockerscan update-db
./dockerscan -q myapp:${{ github.sha }}
name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: dockerscan-report.sarif
Licencia y limitaciones
La licencia del proyecto merece atención especial. El autor eligió un modelo Source-Available. El código fuente está completamente abierto, la utilidad puede usarse gratuitamente para necesidades internas de la empresa, incorporada en pipelines personales de CI/CD y utilizada en auditorías y pentests. Solo una cosa está prohibida: empaquetar dockerscan en un SaaS comercial y venderlo como servicio de escaneo en la nube de pago sin el permiso del autor.
¿Vale la pena cambiarse a DockerScan
Si necesitas un análisis estático rápido de imágenes combinado con verificaciones de permisos de contenedores y detección de tokens filtrados, dockerscan cubre todas estas tareas con un único comando. La utilidad consume aproximadamente 50-100 MB de RAM y funciona notablemente más rápido que las soluciones antiguas en Python.
La herramienta es ideal para ingenieros de DevOps y especialistas en seguridad para auditorías regulares de imágenes de producción y agregar verificaciones estrictas a los pipelines de despliegue. La mejor manera de comenzar es ejecutarlo contra un par de tus propios contenedores en funcionamiento para ver el número real de advertencias ocultas del CIS Benchmark.
Proyectos relacionados