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 erstellen, aktualisieren oder zerstören wird, basierend auf der vorhandenen Infrastruktur und deiner Konfiguration.
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, 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:
Atlantis SecurityWenn 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 beim Ausführen von terraform plan
eine Reverse-Shell ausgeführt:
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:
Sie können den rev shell Code in https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules finden.
Verwenden Sie im externen Ressourcen 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. Sie können es auch missbrauchen, um RCE zu erhalten, indem Sie eine bösartige Terraform-Datei mit local-exec** injizieren.**
Sie müssen 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 gelöscht 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.
tfsec: tfsec verwendet statische Analyse Ihres Terraform-Codes, um potenzielle Fehlkonfigurationen zu erkennen.
terascan: Terrascan ist ein statischer Code-Analyzer für Infrastructure as Code.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)