Terraform Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
HashiCorp Terraform to narzędzie do infrastruktury jako kodu, które pozwala definiować zarówno zasoby w chmurze, jak i lokalne w czytelnych dla człowieka plikach konfiguracyjnych, które można wersjonować, ponownie używać i udostępniać. Możesz następnie użyć spójnego przepływu pracy do provisionowania i zarządzania całą swoją infrastrukturą przez cały jej cykl życia. Terraform może zarządzać komponentami niskiego poziomu, takimi jak zasoby obliczeniowe, pamięci masowej i sieci, a także komponentami wysokiego poziomu, takimi jak wpisy DNS i funkcje SaaS.
Terraform tworzy i zarządza zasobami na platformach chmurowych i innych usługach za pośrednictwem ich interfejsów programowania aplikacji (API). Dostawcy umożliwiają Terraformowi pracę z praktycznie każdą platformą lub usługą z dostępnym API.
HashiCorp i społeczność Terraform już napisały ponad 1700 dostawców do zarządzania tysiącami różnych typów zasobów i usług, a ta liczba wciąż rośnie. Możesz znaleźć wszystkich publicznie dostępnych dostawców w Terraform Registry, w tym Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i wiele innych.
Podstawowy przepływ pracy Terraform składa się z trzech etapów:
Napisz: Definiujesz zasoby, które mogą być rozproszone w wielu dostawcach chmurowych i usługach. Na przykład możesz stworzyć konfigurację do wdrożenia aplikacji na maszynach wirtualnych w sieci Virtual Private Cloud (VPC) z grupami zabezpieczeń i równoważnikiem obciążenia.
Zaplanuj: 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, respektując wszelkie 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 przed skalowaniem maszyn wirtualnych.
Po prostu zainstaluj terraform na swoim komputerze.
Tutaj masz przewodnik, a tutaj masz najlepszy sposób na pobranie terraform.
Terraform nie ma platformy, która udostępnia stronę internetową lub usługę sieciową, którą możemy enumerować, dlatego jedynym sposobem na skompromitowanie terraform jest możliwość dodawania/modyfikowania plików konfiguracyjnych terraform.
Jednak terraform jest bardzo wrażliwym komponentem do skompromitowania, ponieważ będzie miał uprzywilejowany dostęp do różnych lokalizacji, aby mógł działać poprawnie.
Głównym sposobem, w jaki atakujący może skompromitować system, na którym działa terraform, jest skomprimitowanie repozytorium, które przechowuje konfiguracje terraform, ponieważ w pewnym momencie będą one interpretowane.
W rzeczywistości istnieją rozwiązania, które automatycznie wykonują terraform plan/apply po utworzeniu PR, takie jak Atlantis:
Atlantis SecurityJeśli uda ci się skompromitować plik terraform, istnieją różne sposoby, aby przeprowadzić RCE, gdy ktoś wykona terraform plan
lub terraform apply
.
Terraform plan to najczęściej używane polecenie w terraform i deweloperzy/rozwiązania korzystające z terraform wywołują je cały czas, więc najłatwiejszym sposobem na uzyskanie RCE jest upewnienie się, że zatruwasz plik konfiguracyjny terraform, który wykona dowolne polecenia w terraform plan
.
Używając zewnętrznego dostawcy
Terraform oferuje external
provider, który zapewnia sposób interakcji między Terraform a programami zewnętrznymi. Możesz użyć źródła danych external
, aby uruchomić dowolny kod podczas plan
.
Wstrzyknięcie do pliku konfiguracyjnego terraform czegoś takiego jak poniżej spowoduje wykonanie rev shell podczas wykonywania terraform plan
:
Używanie niestandardowego dostawcy
Atakujący mógłby wysłać niestandardowego dostawcę do Terraform Registry i następnie dodać go do kodu Terraform w gałęzi funkcji (przykład stąd):
Dostawca jest pobierany w init
i uruchomi złośliwy kod, gdy plan
zostanie wykonany
Możesz znaleźć przykład w https://github.com/rung/terraform-provider-cmdexec
Używanie zewnętrznego odniesienia
Obie wspomniane opcje są przydatne, ale nie bardzo dyskretne (druga jest bardziej dyskretna, ale bardziej skomplikowana niż pierwsza). Możesz przeprowadzić ten atak nawet w bardziej dyskretny sposób, stosując się do tych sugestii:
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 zasobie zewnętrznym użyj funkcji ref, aby ukryć kod rev shell Terraform w gałęzi wewnątrz repozytorium, coś takiego jak: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Terraform apply zostanie wykonany, aby zastosować wszystkie zmiany, możesz go również nadużyć, aby uzyskać RCE, wstrzykując złośliwy plik Terraform z local-exec.
Musisz tylko upewnić się, że jakiś ładunek, taki jak poniższe, kończy się w pliku main.tf
:
Postępuj zgodnie z zaleceniami z poprzedniej techniki, aby przeprowadzić ten atak w bardziej ukryty sposób, używając zewnętrznych odniesień.
Możesz mieć wartości sekretów używanych przez terraform zrzucane uruchamiając terraform apply
, dodając do pliku terraform coś takiego:
W przypadku, gdy masz dostęp do zapisu plików stanu terraform, ale nie możesz zmienić kodu terraform, te badania oferują kilka interesujących opcji, aby skorzystać z pliku:
Istnieją 2 sposoby na zniszczenie zasobów:
Wstaw zasób o losowej nazwie do pliku stanu wskazujący na rzeczywisty zasób do zniszczenia
Ponieważ terraform zobaczy, że zasób nie powinien istnieć, zniszczy go (zgodnie z rzeczywistym identyfikatorem zasobu wskazanym). Przykład z poprzedniej strony:
Zmień zasób do usunięcia w sposób, który uniemożliwia aktualizację (tak, aby został usunięty i odtworzony)
Dla instancji EC2, zmiana typu instancji wystarczy, aby terraform usunął i odtworzył ją.
Możliwe jest również utworzenie niestandardowego dostawcy i po prostu zastąpienie jednego z dostawców w pliku stanu terraform złośliwym lub dodanie pustego zasobu z złośliwym dostawcą. Przykład z oryginalnych badań:
W przypadku napotkania sytuacji, w której hashicorp/external
został zablokowany, 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ę.
Następnie możesz użyć external
jak zwykle.
Snyk oferuje kompleksowe rozwiązanie do skanowania Infrastructure as Code (IaC), które wykrywa luki i błędne konfiguracje w Terraform, CloudFormation, Kubernetes i innych formatach IaC.
Funkcje:
Skanowanie w czasie rzeczywistym w poszukiwaniu luk w zabezpieczeniach i problemów z zgodnością.
Integracja z systemami kontroli wersji (GitHub, GitLab, Bitbucket).
Zautomatyzowane prośby o poprawki.
Szczegółowe porady dotyczące usuwania problemów.
Zarejestruj się: Utwórz konto na Snyk.
Checkov to narzędzie do analizy statycznej kodu dla infrastruktury jako kodu (IaC) oraz narzędzie do analizy składu oprogramowania (SCA) dla obrazów i pakietów open source.
Skanuje infrastrukturę chmurową dostarczoną za pomocą Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates lub OpenTofu i wykrywa błędy w konfiguracji związane z bezpieczeństwem i zgodnością, korzystając z skanowania opartego na grafach.
Wykonuje analizę składu oprogramowania (SCA), która jest skanowaniem pakietów open source i obrazów pod kątem powszechnych luk w zabezpieczeniach (CVE).
Z dokumentacji: terraform-compliance
to lekkie, skoncentrowane na bezpieczeństwie i zgodności ramy testowe dla terraform, które umożliwiają negatywne testowanie twojej infrastruktury jako kodu.
zgodność: Upewnij się, że wdrożony kod przestrzega standardów bezpieczeństwa, twoich własnych standardów
rozwój oparty na zachowaniu: Mamy BDD prawie dla wszystkiego, dlaczego nie dla IaC?
przenośny: wystarczy zainstalować go z pip
lub uruchomić za pomocą docker
. Zobacz Instalacja
przed wdrożeniem: waliduje twój kod przed jego wdrożeniem
łatwy do zintegrowania: może działać w twoim pipeline (lub w git hooks), aby zapewnić, że wszystkie wdrożenia są walidowane.
segregacja obowiązków: możesz przechowywać swoje testy w innym repozytorium, gdzie odpowiedzialny jest osobny zespół.
Niestety, jeśli kod korzysta z niektórych dostawców, do których nie masz dostępu, nie będziesz mógł wykonać terraform plan
i uruchomić to narzędzie.
Z dokumentacji: tfsec wykorzystuje analizę statyczną twojego kodu terraform, aby wykryć potencjalne błędy konfiguracyjne.
☁️ Sprawdza błędy konfiguracyjne we wszystkich głównych (i niektórych mniejszych) dostawcach chmury
⛔ Setki wbudowanych reguł
🪆 Skanuje moduły (lokalne i zdalne)
➕ Ocena wyrażeń HCL oraz wartości dosłownych
↪️ Ocena funkcji Terraform, np. concat()
🔗 Ocena relacji między zasobami Terraform
🧰 Kompatybilny z Terraform CDK
🙅 Zastosowuje (i upiększa) zdefiniowane przez użytkownika polityki Rego
📃 Obsługuje wiele formatów wyjściowych: lovely (domyślny), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif.
🛠️ Konfigurowalny (za pomocą flag CLI i/lub pliku konfiguracyjnego)
⚡ Bardzo szybki, zdolny do szybkiego skanowania ogromnych repozytoriów
Znajdź luki w zabezpieczeniach, problemy z zgodnością i błędy w konfiguracji infrastruktury na wczesnym etapie cyklu rozwoju swojej infrastruktury jako kodu z KICS od Checkmarx.
KICS oznacza Keeping Infrastructure as Code Secure, jest to projekt open source i jest niezbędny w każdym projekcie chmurowym.
Z dokumentacji: Terrascan to statyczny analizator kodu dla Infrastruktury jako Kod. Terrascan pozwala Ci na:
Bezproblemowe skanowanie infrastruktury jako kod w poszukiwaniu błędów konfiguracyjnych.
Monitorowanie dostarczonej infrastruktury chmurowej w celu wykrywania zmian konfiguracyjnych, które wprowadzają odchylenia w postawie, oraz umożliwia powrót do bezpiecznej postawy.
Wykrywanie luk w zabezpieczeniach i naruszeń zgodności.
Łagodzenie ryzyk przed dostarczeniem natywnej infrastruktury chmurowej.
Oferuje elastyczność uruchamiania lokalnie lub integracji z Twoim CI\CD.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)