Fallstudie / DevSecOps
Terraform-State- und CI/CD-Angriffslab
Terraform · LocalStack · Docker · AWS S3 · IAM · SSM
Überblick
Terraform-State und CI/CD-Pipelines sind ein beliebtes Ziel: Im State liegen Secrets im Klartext, Pipelines haben oft zu weitreichende Rechte, und ein gelöschter State lässt sich ohne Versionierung nicht wiederherstellen. Das Lab zeigt diese Kette von Anfang bis Ende und stoppt sie danach Schritt für Schritt.
Ansatz
Ein kleiner Online-Shop („Acme Shop“) wird von einer kompromittierten Pipeline ausgerollt. Das Lab spielt die Angriffskette in vier Akten durch und wendet danach die Gegenmaßnahmen an.
Akt 1 / State-Leak
Geleakte Entwickler-Zugangsdaten lesen den State aus dem S3-Backend, und das Datenbankpasswort steht im Klartext darin. Gegenmaßnahme: Secrets als write-only-Argumente (value_wo), sodass sie nie im State landen.
Akt 2 / Rogue-Modul
Ein harmlos wirkendes Pull Request fügt ein Modul hinzu, das die Secrets bei jedem Pipeline-Lauf an einen Angreifer sendet. Gegenmaßnahme: das Merge-Gate; der gehärtete Zweig enthält das Modul nicht, und die Prüfung stellt sicher, dass der Exfiltrations-Log unverändert bleibt.
Akt 3 / Lateral Movement
Die Deploy-Rolle erlaubt jede Aktion auf jeder Ressource; der Angreifer übernimmt sie und liest die Produktionsparameter. Gegenmaßnahme: eine Rolle mit genau den Rechten, die ein Deployment braucht.
Akt 4 / State-Sabotage
Der Angreifer löscht das State-Objekt, und ohne Versionierung ist das endgültig. Gegenmaßnahme: S3-Versionierung; der Löschvorgang hinterlässt nur einen Delete-Marker, und der State wird Byte für Byte wiederhergestellt.
Architekturentscheidungen
Die drei wichtigsten Entscheidungen (ADRs) dieses Projekts.
Secrets nur als Write-only-Argumente
Die Werte gehen per value_wo an SSM und landen nicht im State. Ein gestohlener State enthält deshalb keine Klartext-Secrets.
Deploy-Rolle mit minimalen Rechten
Die Rolle darf nur die SSM-Parameter und Assets dieses Stacks lesen. Ein Wildcard-Statement, über das man weiterziehen könnte, gibt es nicht mehr.
S3-Versionierung für den State
Ein gelöschtes State-Objekt hinterlässt nur eine Löschmarkierung. Die vorherige Version lässt sich wiederherstellen, und das Lab zeigt den Ablauf.