Sin Deteccion de Drift de Infraestructura
Sin ejecutar terraform plan en CI o una herramienta de deteccion de drift, los cambios manuales a recursos cloud pasan desapercibidos, creando brechas de seguridad entre tu infraestructura declarada y lo que realmente corre en produccion.
Cómo Funciona
Las herramientas de Infraestructura como Codigo (IaC) como Terraform mantienen un archivo de estado que representa la infraestructura deseada. Pero los ingenieros frecuentemente hacen cambios manuales via la consola cloud o CLI en emergencias -- abriendo un security group, cambiando una politica IAM o modificando la configuracion de una base de datos. Sin deteccion de drift, estos cambios manuales nunca se reconcilian con el estado de IaC. El siguiente terraform apply puede sobreescribir un fix critico, o peor, una mala configuracion de seguridad puede persistir indefinidamente porque nadie sabe que existe. La deteccion de drift ejecuta terraform plan periodicamente o en CI para comparar el estado real del cloud contra el estado declarado y marca cualquier diferencia.
# BAD: CI pipeline only applies changes, never checks for drift
# .github/workflows/deploy.yml
name: Deploy Infrastructure
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- run: terraform init
- run: terraform apply -auto-approve
# No scheduled plan to detect manual changes
# No drift detection step# GOOD: scheduled drift detection + plan in CI
# .github/workflows/drift-detection.yml
name: Drift Detection
on:
schedule:
- cron: '0 8 * * *' # daily at 8am UTC
jobs:
detect-drift:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- run: terraform init
- run: terraform plan -detailed-exitcode -out=plan.tfplan
# exit code 2 = changes detected (drift)
- name: Alert on drift
if: failure()
run: |
curl -X POST $SLACK_WEBHOOK_URL \
-d '{"text":"Infrastructure drift detected! Review terraform plan."}'Ejemplo Real
En el ataque a la cadena de suministro de Codecov de 2021, el atacante modifico un script bash de subida en la infraestructura de Codecov. Si Codecov hubiera tenido deteccion de drift comparando sus scripts desplegados contra sus declaraciones IaC, la modificacion no autorizada podria haberse detectado en horas en lugar de persistir por dos meses. El drift entre la infraestructura declarada y la real es una causa raiz en muchos incidentes de seguridad prolongados.
Cómo Prevenirlo
- Ejecuta terraform plan en un horario diario en CI y alerta cuando se detecte drift (codigo de salida 2)
- Usa herramientas como driftctl, Spacelift o env0 que proporcionan deteccion continua de drift y dashboards de reconciliacion
- Restringe el acceso a la consola cloud con politicas IAM que dificulten los cambios manuales o requieran flujos de aprobacion
- Implementa estandares de etiquetado y usa APIs del proveedor cloud para identificar recursos no gestionados por IaC
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Estado de Terraform Expuesto
criticalTu archivo terraform.tfstate está commiteado en tu repositorio o almacenado en un lugar sin cifrar y públicamente accesible — contiene cada secreto e ID de recurso en tu infraestructura.
Credenciales de Proveedor Terraform Hardcodeadas
criticalLas credenciales de AWS, GCP o Azure están hardcodeadas en tus archivos .tf en lugar de usar variables de entorno o roles de instancia, commiteando claves de acceso cloud al control de versiones.
Contenedor Kubernetes Privilegiado
highTu pod de Kubernetes corre con securityContext.privileged: true, dándole al contenedor acceso completo al kernel del host y efectivamente evitando el aislamiento del contenedor.
Cuenta de Servicio Predeterminada en Kubernetes
mediumLos pods que corren con la cuenta de servicio predeterminada heredan permisos RBAC a nivel de cluster que generalmente son mucho mas amplios de lo que el workload necesita, permitiendo movimiento lateral si el pod es comprometido.