Integración de DefectDojo¶
Este documento describe la integración de DefectDojo en la aplicación médica para la gestión de vulnerabilidades de seguridad.
¿Qué es DefectDojo?¶
DefectDojo es una plataforma open source para la gestión centralizada de vulnerabilidades de seguridad. Permite:
Consolidar resultados de múltiples herramientas de seguridad (SAST, DAST, SCA)
Priorizar vulnerabilidades basándose en riesgos
Automatizar flujos de trabajo de seguridad
Generar reportes y dashboards de seguridad
Integrarse con más de 180 herramientas de seguridad
Arquitectura de la Integración¶
La integración incluye los siguientes componentes:
┌─────────────────┐ ┌─────────────────┐
│ Aplicación Web │ 5001 ► │ Usuarios │
│ Flask │ │ │
└─────────────────┘ └─────────────────┘
┌─────────────────┐ ┌─────────────────┐
│ DefectDojo Nginx│ 8080 ► │ Usuarios │
│ (Proxy estático)│ │ │
└────────┬────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ DefectDojo │ │ PostgreSQL 15 │
│ (Puerto 8081) │ │ (Puerto 5432) │
└────────┬────────┘ └─────────────────┘
│
├─────────────────┐
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Celery Worker │ │ Celery Beat │
│ (Tareas async) │ │ (Tareas cron) │
└─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Redis 7 │
│ (Puerto 6379) │
└─────────────────┘
Servicios Docker¶
1. DefectDojo (Aplicación Principal)¶
Imagen:
defectdojo/defectdojo-django:latestPuerto interno:
8081Exposición: No se expone directamente; se atiende únicamente a través de Nginx (
defectdojo-nginx)Base de datos: PostgreSQL (servicio
defectdojo-db)Cache/Tareas: Redis (servicio
defectdojo-redis)
2. DefectDojo Nginx (Proxy y estáticos)¶
Imagen:
defectdojo/defectdojo-nginx:latestPuerto interno:
8080(no expuesto directamente)Función: Sirve los estáticos ya compilados y actúa como proxy hacia el servicio
defectdojo(alias internouwsgi:3031)Volúmenes: Comparte
defectdojo_staticpara los assets generados porcollectstaticPuerto:
8080(acceso público http://localhost:8080)
3. PostgreSQL Database¶
Imagen:
postgres:15-alpinePuerto:
5432Base de datos:
defectdojoUsuario:
defectdojoContraseña:
defectdojo_password(⚠️ Cambiar en producción)
4. Redis¶
Imagen:
redis:7-alpinePuerto:
6379Uso: Cache y broker de mensajes para Celery
5. Celery Worker¶
Imagen:
defectdojo/defectdojo-django:latestFunción: Procesa tareas asíncronas (análisis de escaneos, etc.)
6. Celery Beat¶
Imagen:
defectdojo/defectdojo-django:latestFunción: Ejecuta tareas programadas (sincronizaciones, limpiezas, etc.)
Instalación y Configuración¶
Requisitos Previos¶
Docker y Docker Compose instalados
Puerto 80 disponible (nginx principal)
Puertos internos: 5001 (Flask), 8080 (DefectDojo nginx), 5432 (PostgreSQL), 6379 (Redis)
Iniciar los Servicios¶
# Iniciar todos los servicios
docker-compose up -d
# Verificar que todos los servicios estén ejecutándose
docker-compose ps
# Ver logs de DefectDojo
docker-compose logs -f defectdojo
Inicialización de DefectDojo¶
La primera vez que se inicia DefectDojo, es necesario preparar la base de datos y crear el usuario administrador:
# Ejecutar migraciones
docker-compose exec defectdojo python manage.py migrate
# Crear un superusuario (ajusta las credenciales antes de ejecutarlo)
docker-compose exec defectdojo /bin/sh -c \
"DJANGO_SUPERUSER_USERNAME=admin \
DJANGO_SUPERUSER_EMAIL=admin@example.com \
DJANGO_SUPERUSER_PASSWORD=admin \
python manage.py createsuperuser --noinput"
💡 Usa el comando anterior para generar rápidamente
admin/adminy cambia la contraseña en el primer acceso.
Verificar el Estado¶
# Verificar salud de los servicios
docker-compose ps
# Verificar logs de PostgreSQL
docker-compose logs defectdojo-db
# Verificar logs de DefectDojo
docker-compose logs defectdojo
# Verificar logs de Celery
docker-compose logs defectdojo-celeryworker
Acceso a DefectDojo¶
Desde la Aplicación Web¶
Abre la aplicación en http://localhost:5001
Haz clic en el enlace “🔒 DefectDojo - Gestión de Vulnerabilidades” en el header
Se abrirá DefectDojo en una nueva pestaña
Acceso Directo¶
URL: http://localhost:8080
Credenciales iniciales (si usaste el comando anterior):
Usuario:
adminContraseña:
admin
Cambia la contraseña desde la interfaz (
Admin → Users → admin) o ejecuta:docker-compose exec defectdojo python manage.py changepassword admin
Configuración de DefectDojo¶
Variables de Entorno¶
Las variables de entorno están configuradas en docker-compose.yml:
environment:
DD_DATABASE_URL: postgresql://defectdojo:defectdojo_password@defectdojo-db:5432/defectdojo
DD_CELERY_BROKER_URL: redis://defectdojo-redis:6379/0
DD_CELERY_RESULT_BACKEND: redis://defectdojo-redis:6379/0
DD_SECRET_KEY: defectdojo_secret_key_change_in_production
DD_DEBUG: "True"
DD_ALLOWED_HOSTS: "*"
⚠️ IMPORTANTE: Cambiar DD_SECRET_KEY y las contraseñas en producción.
Uso de DefectDojo¶
1. Configuración Inicial¶
Accede a DefectDojo en http://localhost:8080
Inicia sesión con las credenciales del superusuario
Configura:
Products: Crea un producto para tu aplicación médica
Engagements: Crea un engagement para el proyecto
Scans: Configura escaneos de seguridad
2. Importar Resultados de Escaneos¶
DefectDojo puede importar resultados de múltiples herramientas:
SAST: Bandit, SonarQube, Semgrep, etc.
DAST: OWASP ZAP, Burp Suite, etc.
SCA: Snyk, WhiteSource, etc.
Y más de 180 herramientas
3. Gestión de Vulnerabilidades¶
Ver vulnerabilidades: Dashboard principal muestra todas las vulnerabilidades
Priorizar: Basado en severidad, explotabilidad, impacto
Asignar: Asignar vulnerabilidades a desarrolladores
Seguimiento: Rastrear el estado de remediación
4. Reportes¶
Genera reportes de:
Vulnerabilidades por severidad
Estado de remediación
Tendencias temporales
Cumplimiento normativo
Relación con el Análisis CWE-699¶
DefectDojo puede ayudar a gestionar las vulnerabilidades identificadas en el análisis CWE-699:
CWE-1287: Validación de tipo insuficiente
CWE-843: Confusión de tipos (NaN no validado)
CWE-1021: Falta de protección contra clickjacking
CWE-20: Validación de entrada
CWE-703: Manejo de excepciones
CWE-488: Exposición de datos entre sesiones
CWE-942: CORS demasiado permisivo
Puedes crear findings manualmente o importar resultados de herramientas de análisis estático que detecten estas vulnerabilidades.
Mantenimiento¶
Backup de la Base de Datos¶
# Crear backup
docker-compose exec defectdojo-db pg_dump -U defectdojo defectdojo > backup_$(date +%Y%m%d).sql
# Restaurar backup
docker-compose exec -T defectdojo-db psql -U defectdojo defectdojo < backup_YYYYMMDD.sql
Actualizar DefectDojo¶
# Detener los servicios
docker-compose stop defectdojo defectdojo-celeryworker defectdojo-celerybeat
# Actualizar las imágenes
docker-compose pull
# Reiniciar los servicios
docker-compose up -d
# Ejecutar migraciones si es necesario
docker-compose exec defectdojo python manage.py migrate
Reiniciar Servicios¶
# Reiniciar DefectDojo
docker-compose restart defectdojo
# Reiniciar Celery
docker-compose restart defectdojo-celeryworker defectdojo-celerybeat
# Reiniciar todos los servicios
docker-compose restart
Solución de Problemas¶
DefectDojo no inicia¶
Verificar que PostgreSQL esté ejecutándose:
docker-compose ps defectdojo-db
Verificar logs:
docker-compose logs defectdojo
Verificar conectividad a la base de datos:
docker-compose exec defectdojo-db psql -U defectdojo -d defectdojo -c "SELECT 1;"
Error de conexión a la base de datos¶
Verificar que las credenciales en
docker-compose.ymlcoincidanVerificar que el servicio PostgreSQL esté saludable:
docker-compose ps defectdojo-db
Puerto 80 ya en uso¶
Si el puerto 80 está en uso, modifica el puerto del nginx principal en docker-compose.yml:
nginx:
ports:
- "8080:80" # Cambiar 80 por otro puerto, por ejemplo 8080
Luego accede a DefectDojo en http://localhost:8080
Celery no procesa tareas¶
Verificar que Redis esté ejecutándose:
docker-compose ps defectdojo-redis
Verificar logs de Celery:
docker-compose logs defectdojo-celeryworker
Seguridad en Producción¶
⚠️ IMPORTANTE: Antes de desplegar en producción:
Cambiar contraseñas por defecto:
PostgreSQL password
DefectDojo secret key
Usuarios de DefectDojo
Configurar HTTPS:
Usar un proxy reverso (nginx, traefik)
Configurar certificados SSL/TLS
Restringir acceso:
Configurar firewall
Limitar acceso a DefectDojo solo a usuarios autorizados
Configurar
DD_ALLOWED_HOSTScorrectamente
Backups regulares:
Configurar backups automáticos de la base de datos
Almacenar backups en ubicación segura
Desactivar modo debug:
Cambiar
DD_DEBUG: "False"en producción
Recursos Adicionales¶
Documentación oficial: https://docs.defectdojo.com
Repositorio GitHub: https://github.com/DefectDojo/django-DefectDojo
Comunidad: https://github.com/DefectDojo/django-DefectDojo/discussions
API Documentation: https://demo.defectdojo.com/api/v2/swagger/
Soporte¶
Para problemas relacionados con DefectDojo:
Consulta la documentación oficial
Revisa los issues en GitHub: https://github.com/DefectDojo/django-DefectDojo/issues
Consulta la comunidad en las discusiones de GitHub