QA & Testing Básico

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

/ʃɪft lɛft sɪˈkjʊərɪti/
"shift left si-kiú-ri-ti"
Escuchar en: Forvo

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

FaseHerramientaQué hace
RequisitosThreat ModelingIdentifica amenazas temprano
DiseñoSecurity ReviewRevisa arquitectura
CódigoSAST (Snyk, SonarQube)Analiza código estático
CódigoSCA (Dependabot)Revisa dependencias
BuildContainer ScanningRevisa imágenes Docker
TestDAST (OWASP ZAP)Pruebas dinámicas
DeployIASTAná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étricaSin Shift LeftCon Shift Left
Costo por bug$10,000+ (producción)$100-1,000 (desarrollo)
Tiempo de fixDías/SemanasHoras
Vulnerabilidades en prodMuchasPocas
Tiempo de releaseImpredeciblePredecible
Confianza del equipoBajaAlta

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íaOpen SourceComercial
SASTSemgrep, BanditSnyk, SonarQube
SCAOWASP Dep-CheckSnyk, WhiteSource
SecretsTruffleHog, git-secretsGitGuardian
ContainerTrivy, ClairAqua, Prisma
DASTOWASP ZAPBurp Suite, Acunetix

Métricas para medir éxito

MétricaQué mideMeta
MTTRTiempo medio de remediación< 24 horas
Vulnerabilidades escapadasBugs que llegan a prod0 críticos
Cobertura de scan% de código/deps escaneado> 90%
Tiempo de pipelineDuració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.