Terraform Security
Podstawowe informacje
HashiCorp Terraform to narzędzie infrastruktury jako kodu, które pozwala zdefiniować zarówno zasoby chmurowe, jak i zasoby lokalne w czytelnych dla człowieka plikach konfiguracyjnych, które można wersjonować, ponownie używać i udostępniać. Następnie możesz użyć spójnego procesu roboczego do wdrażania i zarządzania całym swoim środowiskiem infrastruktury. Terraform może zarządzać komponentami niskiego poziomu, takimi jak obliczenia, przechowywanie i zasoby sieciowe, a także komponentami wysokiego poziomu, takimi jak wpisy DNS i funkcje SaaS.
Jak działa Terraform?
Terraform tworzy i zarządza zasobami na platformach chmurowych i innych usługach za pomocą interfejsów programowania aplikacji (API). Dostawcy umożliwiają Terraformowi współpracę z praktycznie dowolną platformą lub usługą z dostępnym interfejsem API.
HashiCorp i społeczność Terraformu napisali już ponad 1700 dostawców, aby zarządzać tysiącami różnych typów zasobów i usług, a ta liczba ciągle rośnie. Wszystkie publicznie dostępne dostawcy można znaleźć w Rejestrze Terraform, w tym Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i wiele innych.
Podstawowy proces roboczy Terraformu składa się z trzech etapów:
Napisz: Definiujesz zasoby, które mogą być rozproszone na wielu dostawcach chmurowych i usługach. Na przykład możesz utworzyć konfigurację do wdrożenia aplikacji na maszynach wirtualnych w sieci Virtual Private Cloud (VPC) z grupami zabezpieczeń i równoważnikiem obciążenia.
Plan: Terraform tworzy plan wykonania opisujący infrastrukturę, którą utworzy, zaktualizuje lub zniszczy na podstawie istniejącej infrastruktury i twojej konfiguracji.
Zastosuj: Po zatwierdzeniu Terraform wykonuje proponowane operacje w odpowiedniej kolejności, szanując zależności zasobów. Na przykład, jeśli zaktualizujesz właściwości VPC i zmienisz liczbę maszyn wirtualnych w tym VPC, Terraform najpierw odtworzy VPC, a następnie skaluje maszyny wirtualne.
Laboratorium Terraform
Po prostu zainstaluj Terraform na swoim komputerze.
Tutaj masz przewodnik i tutaj masz najlepszy sposób na pobranie Terraforma.
RCE w Terraform
Terraform nie ma platformy eksponującej stronę internetową ani usługę sieciową, którą można by wyliczyć, dlatego jedynym sposobem skompromitowania Terraforma jest możliwość dodania/modyfikacji plików konfiguracyjnych Terraforma.
Jednak Terraform to bardzo wrażliwy komponent do skompromitowania, ponieważ będzie miał uprzywilejowany dostęp do różnych lokalizacji, aby móc poprawnie działać.
Głównym sposobem dla atakującego na skompromitowanie systemu, na którym działa Terraform, jest skompromitowanie repozytorium przechowującego konfiguracje Terraforma, ponieważ w pewnym momencie zostaną one zinterpretowane.
Faktycznie istnieją rozwiązania, które automatycznie wykonują plan/apply Terraforma po utworzeniu PR, takie jak Atlantis:
pageAtlantis SecurityJeśli uda ci się skompromitować plik Terraforma, istnieją różne sposoby wykonania RCE, gdy ktoś wykonuje terraform plan
lub terraform apply
.
Plan Terraforma
Plan Terraforma to najczęściej używane polecenie w Terraformie, a programiści/rozwiązania korzystające z Terraforma często je wywołują, dlatego najłatwiejszym sposobem na uzyskanie RCE jest upewnienie się, że zatrujesz plik konfiguracyjny Terraforma, który będzie wykonywał dowolne polecenia w terraform plan
.
Użycie dostawcy zewnętrznego
Terraform oferuje dostawcę external
, który zapewnia sposób interfejsu między Terraformem a programami zewnętrznymi. Możesz użyć źródła danych external
, aby uruchamiać dowolny kod podczas planu
.
Wstrzyknięcie czegoś takiego jak poniżej do pliku konfiguracyjnego Terraforma spowoduje wykonanie powłoki rev podczas wykonywania terraform plan
:
Użycie niestandardowego dostawcy
Atakujący mógłby przesłać niestandardowego dostawcę do Rejestru Terraforma a następnie dodać go do kodu Terraforma w gałęzi funkcji (przykład stąd):
Dostawca jest pobierany w init
i uruchomi złośliwy kod podczas wykonywania plan
Przykład można znaleźć pod adresem https://github.com/rung/terraform-provider-cmdexec
Korzystanie z zewnętrznego odwołania
Obie wymienione opcje są przydatne, ale niezbyt skryte (druga jest bardziej skryta, ale bardziej skomplikowana niż pierwsza). Możesz przeprowadzić ten atak nawet w bardziej skryty sposób, postępując zgodnie z tymi sugestiami:
Zamiast dodawać rev shell bezpośrednio do pliku terraform, możesz załadować zewnętrzny zasób, który zawiera rev shell:
Możesz znaleźć kod rev shell w https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
W zewnętrznym zasobie użyj funkcji ref aby ukryć kod rev shell Terraforma w gałęzi wewnątrz repozytorium, coś w stylu:
git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Zastosowanie Terraforma
Zastosowanie Terraforma zostanie wykonane, aby zastosować wszystkie zmiany, można również nadużyć go do uzyskania RCE poprzez wstrzyknięcie złośliwego pliku Terraforma za pomocą local-exec.
Wystarczy upewnić się, że pewny ładunek, taki jak poniższe, znajduje się w pliku main.tf
:
Podążaj za sugestiami z poprzedniej techniki, aby przeprowadzić ten atak w bardziej skrytym sposób, korzystając z zewnętrznych odwołań.
Wycieki Sekretów
Możesz mieć wartości sekretne używane przez terraform wyciekające uruchamiając terraform apply
, dodając coś w rodzaju do pliku terraform:
Nadużywanie plików stanu Terraforma
W przypadku posiadania uprawnień do zapisu plików stanu Terraforma, ale braku możliwości zmiany kodu Terraforma, to badanie przedstawia kilka interesujących opcji wykorzystania pliku:
Usuwanie zasobów
Istnieją 2 sposoby usuwania zasobów:
Wstawienie zasobu o losowej nazwie do pliku stanu wskazującego na rzeczywisty zasób do usunięcia
Ponieważ Terraform zauważy, że zasób nie powinien istnieć, usunie go (zgodnie z wskazanym rzeczywistym identyfikatorem zasobu). Przykład z poprzedniej strony:
Zmodyfikuj zasób do usunięcia w taki sposób, że nie będzie możliwe jego zaktualizowanie (zostanie usunięty i odtworzony)
Dla instancji EC2 wystarczy zmienić typ instancji, aby terraform usunął ją i odtworzył.
RCE
Możliwe jest również utworzenie niestandardowego dostawcy i po prostu zastąpienie jednego z dostawców w pliku stanu terraform szkodliwym lub dodanie pustego zasobu z szkodliwym dostawcą. Przykład z oryginalnych badań:
Zastąp zablokowanego dostawcę
W przypadku napotkania sytuacji, w której hashicorp/external
został umieszczony na czarnej liście, możesz ponownie zaimplementować dostawcę external
, wykonując następujące kroki. Uwaga: Używamy forka dostawcy external opublikowanego przez https://registry.terraform.io/providers/nazarewk/external/latest. Możesz również opublikować własny fork lub ponowną implementację.
W takim przypadku możesz użyć external
jak zwykle.
Narzędzia audytowe
tfsec: tfsec wykorzystuje statyczną analizę kodu terraforma do wykrywania potencjalnych błędów konfiguracyjnych.
terascan: Terrascan to statyczny analizator kodu dla infrastruktury jako kodu.
Odnośniki
Last updated