Terraform Security
Last updated
Last updated
Lerne & übe AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP-Hacking: HackTricks Training GCP Red Team Expert (GRTE)
HashiCorp Terraform ist ein Infrastructure as Code-Tool, mit dem du sowohl Cloud- als auch On-Premise-Ressourcen in menschenlesbaren Konfigurationsdateien definieren kannst, die du versionieren, wiederverwenden und teilen kannst. Du kannst dann einen konsistenten Workflow verwenden, um deine gesamte Infrastruktur während ihres Lebenszyklus bereitzustellen und zu verwalten. Terraform kann niedrigstufige Komponenten wie Compute-, Speicher- und Netzwerkressourcen sowie hochstufige Komponenten wie DNS-Einträge und SaaS-Funktionen verwalten.
Terraform erstellt und verwaltet Ressourcen auf Cloud-Plattformen und anderen Diensten über deren Anwendungsprogrammierschnittstellen (APIs). Anbieter ermöglichen es Terraform, mit praktisch jeder Plattform oder jedem Dienst zu arbeiten, der eine zugängliche API hat.
HashiCorp und die Terraform-Community haben bereits mehr als 1700 Anbieter geschrieben, um Tausende von verschiedenen Arten von Ressourcen und Diensten zu verwalten, und diese Zahl wächst weiter. Du kannst alle öffentlich verfügbaren Anbieter im Terraform-Registry finden, einschließlich Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog und vielen mehr.
Der Kern-Workflow von Terraform besteht aus drei Phasen:
Schreiben: Du definierst Ressourcen, die über mehrere Cloud-Anbieter und Dienste verteilt sein können. Zum Beispiel könntest du eine Konfiguration erstellen, um eine Anwendung auf virtuellen Maschinen in einem Virtual Private Cloud (VPC)-Netzwerk mit Sicherheitsgruppen und einem Lastenausgleich bereitzustellen.
Planen: Terraform erstellt einen Ausführungsplan, der die Infrastruktur beschreibt, die es basierend auf der vorhandenen Infrastruktur und deiner Konfiguration erstellen, aktualisieren oder zerstören wird.
Anwenden: Nach Genehmigung führt Terraform die vorgeschlagenen Operationen in der richtigen Reihenfolge aus und respektiert dabei alle Ressourcenabhängigkeiten. Wenn du beispielsweise die Eigenschaften einer VPC aktualisierst und die Anzahl der virtuellen Maschinen in dieser VPC änderst, wird Terraform die VPC neu erstellen, bevor es die virtuellen Maschinen skalieren kann.
Installiere einfach Terraform auf deinem Computer.
Hier hast du eine Anleitung und hier hast du die beste Möglichkeit, Terraform herunterzuladen.
Terraform hat keine Plattform, die eine Webseite oder einen Netzwerkdienst bereitstellt, den wir auflisten können, daher ist der einzige Weg, Terraform zu kompromittieren, in der Lage zu sein, Terraform-Konfigurationsdateien hinzuzufügen/zu ändern.
Allerdings ist Terraform ein sehr sensibler Bestandteil, der kompromittiert werden kann, da es privilegierten Zugriff auf verschiedene Standorte hat, damit es ordnungsgemäß funktionieren kann.
Der Hauptweg für einen Angreifer, um das System, auf dem Terraform läuft, zu kompromittieren, besteht darin, das Repository zu kompromittieren, das Terraform-Konfigurationen speichert, da sie irgendwann interpretiert werden.
Tatsächlich gibt es Lösungen, die Terraform-Plan/Apply automatisch nach der Erstellung eines PR ausführen, wie Atlantis:
Wenn du in der Lage bist, eine Terraform-Datei zu kompromittieren, gibt es verschiedene Möglichkeiten, wie du RCE durchführen kannst, wenn jemand terraform plan
oder terraform apply
ausführt.
Terraform-Plan ist der am häufigsten verwendete Befehl in Terraform, und Entwickler/Lösungen, die Terraform verwenden, rufen ihn ständig auf, sodass der einfachste Weg, RCE zu erhalten, darin besteht, sicherzustellen, dass du eine Terraform-Konfigurationsdatei vergiftest, die willkürliche Befehle in einem terraform plan
ausführt.
Verwendung eines externen Anbieters
Terraform bietet den external
-Anbieter, der eine Möglichkeit bietet, zwischen Terraform und externen Programmen zu interagieren. Du kannst die external
-Datenquelle verwenden, um willkürlichen Code während eines plan
auszuführen.
Wenn du in einer Terraform-Konfigurationsdatei etwas wie das Folgende injizierst, wird eine Reverse-Shell ausgeführt, wenn terraform plan
ausgeführt wird:
Verwendung eines benutzerdefinierten Providers
Ein Angreifer könnte einen benutzerdefinierten Provider an das Terraform-Registry senden und ihn dann im Terraform-Code in einem Feature-Branch hinzufügen (Beispiel hier):
Der Provider wird im init
heruntergeladen und führt den schädlichen Code aus, wenn plan
ausgeführt wird.
Ein Beispiel finden Sie unter https://github.com/rung/terraform-provider-cmdexec
Verwendung eines externen Verweises
Beide genannten Optionen sind nützlich, aber nicht sehr stealthy (die zweite ist stealthier, aber komplexer als die erste). Sie können diesen Angriff sogar auf eine stealthier Weise durchführen, indem Sie diese Vorschläge befolgen:
Anstatt die rev shell direkt in die Terraform-Datei einzufügen, können Sie eine externe Ressource laden, die die rev shell enthält:
Du kannst den rev shell Code in https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules finden.
Verwende in der externen Ressource die ref-Funktion, um den terraform rev shell code in einem Branch innerhalb des Repos zu verbergen, etwas wie: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Terraform apply wird ausgeführt, um alle Änderungen anzuwenden. Du kannst es auch missbrauchen, um RCE zu erhalten, indem du eine bösartige Terraform-Datei mit local-exec** injizierst.**
Du musst nur sicherstellen, dass eine Payload wie die folgenden im main.tf
-Datei endet:
Folgen Sie den Vorschlägen aus der vorherigen Technik, um diesen Angriff auf eine diskretere Weise unter Verwendung externer Referenzen durchzuführen.
Sie können geheime Werte, die von terraform verwendet werden, ausgeben, indem Sie terraform apply
ausführen und der Terraform-Datei etwas hinzufügen wie:
Falls Sie Schreibzugriff auf Terraform-Zustandsdateien haben, aber den Terraform-Code nicht ändern können, bietet diese Forschung einige interessante Optionen, um die Datei auszunutzen:
Es gibt 2 Möglichkeiten, Ressourcen zu zerstören:
Fügen Sie eine Ressource mit einem zufälligen Namen in die Zustandsdatei ein, die auf die echte Ressource verweist, die zerstört werden soll
Da Terraform sehen wird, dass die Ressource nicht existieren sollte, wird es sie zerstören (entsprechend der angegebenen echten Ressourcen-ID). Beispiel von der vorherigen Seite:
Ändern Sie die Ressource so, dass sie gelöscht wird, ohne dass eine Aktualisierung möglich ist (damit sie gelöscht und neu erstellt wird)
Für eine EC2-Instanz reicht es aus, den Typ der Instanz zu ändern, damit Terraform sie löscht und neu erstellt.
Es ist auch möglich, einen benutzerdefinierten Anbieter zu erstellen und einfach einen der Anbieter in der Terraform-Zustandsdatei durch den bösartigen zu ersetzen oder eine leere Ressource mit dem bösartigen Anbieter hinzuzufügen. Beispiel aus der ursprünglichen Forschung:
Falls Sie auf eine Situation stoßen, in der hashicorp/external
auf der Blacklist steht, können Sie den external
Provider wie folgt neu implementieren. Hinweis: Wir verwenden einen Fork des External Providers, der von https://registry.terraform.io/providers/nazarewk/external/latest veröffentlicht wurde. Sie können auch Ihren eigenen Fork oder Ihre eigene Neuimplementierung veröffentlichen.
Dann können Sie external
wie gewohnt verwenden.
Snyk bietet eine umfassende Lösung zum Scannen von Infrastructure as Code (IaC), die Schwachstellen und Fehlkonfigurationen in Terraform, CloudFormation, Kubernetes und anderen IaC-Formaten erkennt.
Funktionen:
Echtzeit-Scanning nach Sicherheitsanfälligkeiten und Compliance-Problemen.
Integration mit Versionskontrollsystemen (GitHub, GitLab, Bitbucket).
Automatisierte Fix-Pull-Requests.
Detaillierte Empfehlungen zur Behebung.
Anmelden: Erstellen Sie ein Konto bei Snyk.
Checkov ist ein statisches Code-Analyse-Tool für Infrastructure as Code (IaC) und auch ein Software Composition Analysis (SCA) Tool für Images und Open-Source-Pakete.
Es scannt Cloud-Infrastruktur, die mit Terraform bereitgestellt wurde, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates oder OpenTofu und erkennt Sicherheits- und Compliance-Fehlkonfigurationen mithilfe von graphbasiertem Scanning.
Es führt Software Composition Analysis (SCA) Scans durch, die einen Scan von Open-Source-Paketen und Images auf Common Vulnerabilities and Exposures (CVEs) darstellen.
Von den docs: terraform-compliance
ist ein leichtgewichtiges, auf Sicherheit und Compliance fokussiertes Testframework gegen terraform, um negative Testfähigkeiten für Ihre Infrastruktur-as-Code zu ermöglichen.
compliance: Stellen Sie sicher, dass der implementierte Code den Sicherheitsstandards und Ihren eigenen benutzerdefinierten Standards entspricht.
behaviour driven development: Wir haben BDD für fast alles, warum nicht für IaC?
portable: einfach von pip
installieren oder über docker
ausführen. Siehe Installation
pre-deploy: es validiert Ihren Code, bevor er bereitgestellt wird.
easy to integrate: es kann in Ihrer Pipeline (oder in Git-Hooks) ausgeführt werden, um sicherzustellen, dass alle Bereitstellungen validiert werden.
segregation of duty: Sie können Ihre Tests in einem anderen Repository aufbewahren, für das ein separates Team verantwortlich ist.
Leider können Sie, wenn der Code einige Anbieter verwendet, auf die Sie keinen Zugriff haben, das terraform plan
nicht ausführen und dieses Tool nicht verwenden.
Von den docs: tfsec verwendet statische Analyse Ihres Terraform-Codes, um potenzielle Fehlkonfigurationen zu erkennen.
☁️ Überprüft Fehlkonfigurationen bei allen großen (und einigen kleineren) Cloud-Anbietern
⛔ Hunderte von integrierten Regeln
🪆 Scannt Module (lokal und remote)
➕ Bewertet HCL-Ausdrücke sowie literale Werte
↪️ Bewertet Terraform-Funktionen z.B. concat()
🔗 Bewertet Beziehungen zwischen Terraform-Ressourcen
🧰 Kompatibel mit dem Terraform CDK
🙅 Wendet (und verfeinert) benutzerdefinierte Rego-Richtlinien an
📃 Unterstützt mehrere Ausgabeformate: lovely (Standard), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif.
🛠️ Konfigurierbar (über CLI-Flags und/oder Konfigurationsdatei)
⚡ Sehr schnell, in der Lage, riesige Repositories schnell zu scannen
Finden Sie Sicherheitsanfälligkeiten, Compliance-Probleme und Infrastrukturfehlkonfigurationen früh im Entwicklungszyklus Ihrer Infrastruktur-as-Code mit KICS von Checkmarx.
KICS steht für Keeping Infrastructure as Code Secure, es ist Open Source und ein Muss für jedes cloud-native Projekt.
Aus den docs: Terrascan ist ein statischer Code-Analyzer für Infrastructure as Code. Terrascan ermöglicht es Ihnen:
Nahtlos Infrastruktur als Code auf Fehlkonfigurationen zu scannen.
Bereitgestellte Cloud-Infrastruktur auf Konfigurationsänderungen zu überwachen, die eine Abweichung der Sicherheitslage einführen, und ermöglicht das Zurückkehren zu einer sicheren Sicherheitslage.
Sicherheitsanfälligkeiten und Compliance-Verstöße zu erkennen.
Risiken zu mindern, bevor cloud-native Infrastruktur bereitgestellt wird.
Bietet Flexibilität, lokal zu arbeiten oder in Ihre CI\CD zu integrieren.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)