Saltar a contenido

Escaneo de Vulnerabilidades

Resumen

Esta guía explica cómo escanear vulnerabilidades en contenedores, imágenes Docker y dependencias de aplicaciones. Se enfoca en herramientas open-source como Trivy, Clair y Snyk, con integración en pipelines CI/CD.

Prerrequisitos

  • Conocimientos básicos de Docker y contenedores.
  • Acceso a un entorno con Docker instalado.
  • Familiaridad con pipelines CI/CD (GitHub Actions, GitLab CI).

Herramientas Principales

Trivy

Escáner rápido y versátil para vulnerabilidades en contenedores, imágenes, filesystem y repositorios.

Instalación

# Usando brew (macOS)
brew install trivy

# O descarga binaria
wget https://github.com/aquasecurity/trivy/releases/latest/download/trivy_$(uname -s)-$(uname -m).tar.gz
tar -xzf trivy_*.tar.gz
sudo mv trivy /usr/local/bin/

Uso Básico

# Escanear imagen Docker
trivy image nginx:latest

# Escanear contenedor corriendo
trivy container my-container

# Escanear filesystem
trivy fs /path/to/project

# Salida en JSON
trivy image --format json --output results.json nginx:latest

Integración en CI/CD

# .github/workflows/security-scan.yml
name: Security Scan
on: [push]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Trivy
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          scan-ref: '.'

Clair

Escáner estático de vulnerabilidades en imágenes de contenedores, desarrollado por Red Hat.

Instalación y Uso

Clair requiere una base de datos PostgreSQL y es más complejo de configurar. Se recomienda usar Trivy para casos simples.

# Usando Docker
docker run -d --name clair-db -e POSTGRES_PASSWORD=password postgres:13
docker run -d --name clair --link clair-db:postgres -p 6060:6060 quay.io/projectquay/clair:latest

Snyk

Herramienta comercial con versión gratuita, escanea vulnerabilidades en código, dependencias y contenedores.

Instalación

npm install -g snyk
snyk auth  # Autenticarse

Uso

# Escanear dependencias
snyk test

# Escanear imagen Docker
snyk container test nginx:latest

# Monitorizar proyecto
snyk monitor

Mejores Prácticas

  • Escaneo Regular: Integrar en pipelines para cada commit/PR.
  • Falsos Positivos: Configurar excepciones para vulnerabilidades no aplicables.
  • Actualizaciones: Mantener imágenes base actualizadas.
  • SBOM: Generar Software Bill of Materials para rastreo.

Ejemplos Avanzados

Script de escaneo completo

#!/bin/bash
# scan.sh

echo "Escaneando vulnerabilidades..."

# Trivy en imágenes
for image in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep -v '<none>'); do
  echo "Escaneando $image"
  trivy image "$image" --exit-code 1 --no-progress
done

# Snyk en dependencias
if [ -f "package.json" ]; then
  snyk test --severity-threshold=high
fi

echo "Escaneo completado"

Referencias