Terraform Security
Grundlegende Informationen
HashiCorp Terraform ist ein Infrastruktur als Code-Tool, mit dem Sie sowohl Cloud- als auch lokale Ressourcen in menschenlesbaren Konfigurationsdateien definieren können, die Sie versionieren, wiederverwenden und teilen können. Sie können dann einen konsistenten Workflow verwenden, um Ihre gesamte Infrastruktur während ihres Lebenszyklus bereitzustellen und zu verwalten. Terraform kann Low-Level-Komponenten wie Compute, Storage und Netzwerkressourcen sowie High-Level-Komponenten wie DNS-Einträge und SaaS-Funktionen verwalten.
Wie funktioniert Terraform?
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 mit einer zugänglichen API zu arbeiten.
HashiCorp und die Terraform-Community haben bereits mehr als 1700 Anbieter geschrieben, um Tausende verschiedener Arten von Ressourcen und Diensten zu verwalten, und diese Zahl wächst weiter. Sie finden alle öffentlich verfügbaren Anbieter im Terraform-Register, einschließlich Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog und vielen mehr.
Der Kernworkflow von Terraform besteht aus drei Phasen:
Schreiben: Sie definieren Ressourcen, die sich über mehrere Cloud-Anbieter und Dienste erstrecken können. Sie könnten beispielsweise eine Konfiguration erstellen, um eine Anwendung auf virtuellen Maschinen in einem Virtual Private Cloud (VPC)-Netzwerk mit Sicherheitsgruppen und einem Lastenausgleicher bereitzustellen.
Planen: Terraform erstellt einen Ausführungsplan, der die Infrastruktur beschreibt, die es basierend auf der vorhandenen Infrastruktur und Ihrer Konfiguration erstellen, aktualisieren oder zerstören wird.
Anwenden: Nach Genehmigung führt Terraform die vorgeschlagenen Operationen in der richtigen Reihenfolge aus und berücksichtigt dabei alle Ressourcenabhängigkeiten. Wenn Sie beispielsweise die Eigenschaften eines VPC aktualisieren und die Anzahl der virtuellen Maschinen in diesem VPC ändern, wird Terraform das VPC neu erstellen, bevor es die virtuellen Maschinen skaliert.
Terraform Labor
Installieren Sie einfach Terraform auf Ihrem Computer.
Hier finden Sie eine Anleitung und hier finden Sie die beste Möglichkeit, Terraform herunterzuladen.
RCE in Terraform
Terraform hat keine Plattform, die eine Webseite oder einen Netzwerkservice freigibt, den wir aufzählen können. Daher ist der einzige Weg, Terraform zu kompromittieren, zu können, Konfigurationsdateien von Terraform hinzuzufügen/zu ändern.
Terraform ist jedoch eine sehr sensible Komponente, die kompromittiert werden kann, da sie privilegierten Zugriff auf verschiedene Standorte hat, um ordnungsgemäß zu funktionieren.
Der Hauptweg für einen Angreifer, das System zu kompromittieren, auf dem Terraform ausgeführt wird, 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 ausführen, nachdem ein PR erstellt wurde, wie zum Beispiel Atlantis:
Atlantis SecurityWenn es Ihnen gelingt, eine Terraform-Datei zu kompromittieren, gibt es verschiedene Möglichkeiten, wie Sie RCE durchführen können, wenn jemand terraform plan
oder terraform apply
ausführt.
Terraform plan
Terraform plan ist der am häufigsten verwendete Befehl in Terraform, und Entwickler/Lösungen, die Terraform verwenden, rufen ihn die ganze Zeit auf. Daher ist der einfachste Weg, RCE zu erhalten, sicherzustellen, dass Sie eine Terraform-Konfigurationsdatei vergiften, die beliebige 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 kommunizieren. Sie können die external
-Datenquelle verwenden, um während eines plan
beliebigen Code auszuführen.
Das Einfügen von etwas Ähnlichem in eine Terraform-Konfigurationsdatei wird einen Reverse-Shell ausführen, wenn terraform plan
ausgeführt wird:
Verwendung eines benutzerdefinierten Anbieters
Ein Angreifer könnte einen benutzerdefinierten Anbieter an das Terraform-Register senden und ihn dann dem Terraform-Code in einem Feature-Zweig hinzufügen (Beispiel von hier):
Der Anbieter wird im init
heruntergeladen und führt den bösartigen 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 unauffällig (die zweite ist unauffälliger, aber komplexer als die erste). Sie können diesen Angriff sogar auf eine unauffälligere Weise durchführen, indem Sie diesen Vorschlägen folgen:
Anstatt den Reverse-Shell direkt in die Terraform-Datei einzufügen, können Sie eine externe Ressource laden, die die Reverse-Shell enthält:
Du kannst den Rev Shell-Code unter https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules finden.
In der externen Ressource verwende das ref-Feature, um den Terraform Rev Shell-Code in einem Branch im Inneren des Repos zu verstecken, etwas wie:
git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Terraform Apply
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 ein Payload wie die folgenden in der main.tf
-Datei endet:
Folgen Sie den Vorschlägen aus der vorherigen Technik, um diesen Angriff auf unauffälligere Weise unter Verwendung externer Referenzen durchzuführen.
Geheimnisauszüge
Sie können geheime Werte, die von Terraform verwendet werden, ausgeben lassen, indem Sie terraform apply
ausführen und etwas Ähnliches zur Terraform-Datei hinzufügen:
Ausnutzung von Terraform-Zustandsdateien
Falls Sie Schreibzugriff auf Terraform-Zustandsdateien haben, aber den Terraform-Code nicht ändern können, bietet diese Forschung einige interessante Möglichkeiten, um von der Datei zu profitieren:
Löschen von Ressourcen
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 tatsächliche zu zerstörende Ressource zeigt
Da Terraform feststellen wird, dass die Ressource nicht existieren sollte, wird sie zerstört (gemäß der angegebenen tatsächlichen Ressourcen-ID). Beispiel von der vorherigen Seite:
Ändern Sie die Ressource so, dass ein Update nicht möglich ist (so wird sie gelöscht und neu erstellt)
Für eine EC2-Instanz reicht es aus, den Typ der Instanz zu ändern, damit Terraform sie löscht und neu erstellt.
RCE
Es ist auch möglich, einen benutzerdefinierten Anbieter zu erstellen und einfach einen der Anbieter in der Terraform-Zustandsdatei durch den bösartigen Anbieter zu ersetzen oder eine leere Ressource mit dem bösartigen Anbieter hinzuzufügen. Beispiel aus der Originalforschung:
Schwarzerlisteten Anbieter ersetzen
Falls Sie auf eine Situation stoßen, in der hashicorp/external
auf die schwarze Liste gesetzt wurde, können Sie den external
-Anbieter neu implementieren, indem Sie Folgendes tun. Hinweis: Wir verwenden eine Abspaltung des externen Anbieters, veröffentlicht von https://registry.terraform.io/providers/nazarewk/external/latest. Sie können auch Ihre eigene Abspaltung oder Neuimplementierung veröffentlichen.
Dann können Sie external
wie gewohnt verwenden.
Audit-Tools
tfsec: tfsec verwendet die statische Analyse Ihres Terraform-Codes, um potenzielle Fehlkonfigurationen zu erkennen.
terascan: Terrascan ist ein statischer Code-Analyzer für Infrastruktur als Code.
Referenzen
Last updated