Shift Left Security
Práctica de integrar pruebas y controles de seguridad más temprano en el ciclo de desarrollo de software, en lugar de dejarlas para el final.
Pronunciación
Qué es
Shift Left Security (Seguridad a la Izquierda) significa mover las pruebas y controles de seguridad más temprano en el ciclo de desarrollo de software (SDLC).
El nombre viene de visualizar el SDLC como una línea temporal de izquierda a derecha: “shift left” = mover a la izquierda = más temprano.
Pronunciación
IPA: /ʃɪft lɛft sɪˈkjʊərɪti/
Suena como: “shift left si-kiú-ri-ti”
Errores comunes:
- ❌ “shift-left” (son dos palabras separadas)
El problema tradicional
┌─────────────────────────────────────────────────────────┐
│ MODELO TRADICIONAL (Seguridad al final) │
├─────────────────────────────────────────────────────────┤
│ │
│ Requisitos → Diseño → Código → Test → QA → SEGURIDAD │
│ ↑ │
│ │ │
│ "Encontramos 47 vulnerabilidades críticas. │ │
│ El lanzamiento se retrasa 3 meses." ───────┘ │
│ │
│ Costo de arreglar bug: │
│ - En diseño: $100 │
│ - En código: $1,000 │
│ - En producción: $10,000+ │
│ │
└─────────────────────────────────────────────────────────┘
La solución: Shift Left
┌─────────────────────────────────────────────────────────┐
│ MODELO SHIFT LEFT (Seguridad continua) │
├─────────────────────────────────────────────────────────┤
│ │
│ Requisitos → Diseño → Código → Test → QA → Deploy │
│ ↑ ↑ ↑ ↑ ↑ │
│ │ │ │ │ │ │
│ Threat Security SAST DAST Pentest │
│ Modeling Review SCA IAST │
│ │
│ Seguridad integrada en CADA fase │
│ │
└─────────────────────────────────────────────────────────┘
Herramientas por fase
| Fase | Herramienta | Qué hace |
|---|---|---|
| Requisitos | Threat Modeling | Identifica amenazas temprano |
| Diseño | Security Review | Revisa arquitectura |
| Código | SAST (Snyk, SonarQube) | Analiza código estático |
| Código | SCA (Dependabot) | Revisa dependencias |
| Build | Container Scanning | Revisa imágenes Docker |
| Test | DAST (OWASP ZAP) | Pruebas dinámicas |
| Deploy | IAST | Análisis en runtime |
Ejemplo práctico: Pipeline con Shift Left
# .github/workflows/secure-pipeline.yml
name: Secure CI/CD
on: [push, pull_request]
jobs:
# 1. SAST - Análisis estático (muy temprano)
sast:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run SAST
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
# 2. SCA - Análisis de dependencias
dependency-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check for vulnerabilities
run: npm audit --audit-level=high
- name: Snyk dependency scan
uses: snyk/actions/node@master
with:
command: test
# 3. Secrets scanning
secrets:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan for secrets
uses: trufflesecurity/trufflehog@main
with:
path: ./
# 4. Container scanning
container-scan:
runs-on: ubuntu-latest
needs: [sast, dependency-check]
steps:
- uses: actions/checkout@v4
- name: Build image
run: docker build -t myapp:${{ github.sha }} .
- name: Scan container
uses: aquasecurity/trivy-action@master
with:
image-ref: myapp:${{ github.sha }}
severity: HIGH,CRITICAL
# 5. DAST - Solo si todo lo anterior pasó
dast:
runs-on: ubuntu-latest
needs: [container-scan]
steps:
- name: OWASP ZAP Scan
uses: zaproxy/action-full-scan@v0.4.0
with:
target: 'https://staging.myapp.com'
Beneficios de Shift Left
| Métrica | Sin Shift Left | Con Shift Left |
|---|---|---|
| Costo por bug | $10,000+ (producción) | $100-1,000 (desarrollo) |
| Tiempo de fix | Días/Semanas | Horas |
| Vulnerabilidades en prod | Muchas | Pocas |
| Tiempo de release | Impredecible | Predecible |
| Confianza del equipo | Baja | Alta |
Caso práctico: Antes vs Después
Antes (Seguridad al final)
Lunes: Desarrollador termina feature
Martes-Jueves: QA prueba funcionalidad
Viernes: Equipo de seguridad revisa
→ Encuentra SQL Injection
Siguiente semana: Desarrollador arregla
→ Otro ciclo de QA
→ Release retrasado 2 semanas
Después (Shift Left)
Lunes: Desarrollador escribe código
→ IDE muestra warning de SAST: posible SQL Injection
→ Desarrollador arregla en el momento (5 min)
→ Push al repo
→ Pipeline ejecuta SAST, SCA, container scan
→ Todo verde ✅
Martes: QA prueba, seguridad ya validada
Miércoles: Release on time
Implementación gradual
Fase 1: Quick wins (Semana 1-2)
# Agregar a tu pipeline existente
- name: Dependency audit
run: npm audit --audit-level=high
- name: Secret scan
uses: trufflesecurity/trufflehog@main
Fase 2: SAST (Semana 3-4)
- name: SAST scan
uses: snyk/actions/node@master
# Solo fallar en críticos al inicio
with:
args: --severity-threshold=critical
Fase 3: Container Security (Mes 2)
- name: Container scan
uses: aquasecurity/trivy-action@master
Fase 4: DAST (Mes 3)
- name: DAST scan
uses: zaproxy/action-full-scan@v0.4.0
Herramientas populares
| Categoría | Open Source | Comercial |
|---|---|---|
| SAST | Semgrep, Bandit | Snyk, SonarQube |
| SCA | OWASP Dep-Check | Snyk, WhiteSource |
| Secrets | TruffleHog, git-secrets | GitGuardian |
| Container | Trivy, Clair | Aqua, Prisma |
| DAST | OWASP ZAP | Burp Suite, Acunetix |
Métricas para medir éxito
| Métrica | Qué mide | Meta |
|---|---|---|
| MTTR | Tiempo medio de remediación | < 24 horas |
| Vulnerabilidades escapadas | Bugs que llegan a prod | 0 críticos |
| Cobertura de scan | % de código/deps escaneado | > 90% |
| Tiempo de pipeline | Duración de CI/CD | < 15 min |
Términos relacionados
- [[CI/CD]] - Pipeline donde se integra seguridad
- [[DevSecOps]] - Cultura de seguridad en DevOps
- [[SAST]] - Static Application Security Testing
- [[DAST]] - Dynamic Application Security Testing
Recuerda: Shift Left no significa eliminar las pruebas de seguridad al final—significa agregar seguridad en cada fase. Entre más temprano detectes un problema, más barato y fácil es arreglarlo.