mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin
This commit is contained in:
@@ -30,7 +30,7 @@ Samo instalirajte terraform na vašem računaru.
|
||||
|
||||
Ovde imate [vodič](https://learn.hashicorp.com/tutorials/terraform/install-cli) i ovde imate [najbolji način za preuzimanje terraforma](https://www.terraform.io/downloads).
|
||||
|
||||
## RCE u Terraformu: trovanje konfiguracione datoteke
|
||||
## RCE u Terraformu: trovanje konfiguracionih datoteka
|
||||
|
||||
Terraform **nema platformu koja izlaže veb stranicu ili mrežnu uslugu** koju možemo enumerisati, stoga je jedini način da kompromitujemo terraform **da možemo dodati/izmeniti terraform konfiguracione datoteke** ili **da možemo izmeniti terraform stanje datoteke** (vidi poglavlje ispod).
|
||||
|
||||
@@ -75,7 +75,7 @@ version = "1.0"
|
||||
|
||||
provider "evil" {}
|
||||
```
|
||||
Provajder se preuzima u `init` i izvršiće maliciozni kod kada se izvrši `plan`.
|
||||
Provajder se preuzima u `init` i izvršiće maliciozni kod kada se izvrši `plan`
|
||||
|
||||
Možete pronaći primer na [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
|
||||
|
||||
@@ -124,15 +124,15 @@ value = nonsensitive(var.do_token)
|
||||
```
|
||||
## Zloupotreba Terraform State Fajlova
|
||||
|
||||
U slučaju da imate pristup za pisanje nad terraform state fajlovima, ali ne možete da menjate terraform kod, [**ova istraživanja**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) nude neke zanimljive opcije za iskorišćavanje fajla. Čak i ako biste imali pristup za pisanje nad konfiguracionim fajlovima, korišćenje vektora state fajlova je često mnogo podlije, pošto ne ostavljate tragove u `git` istoriji.
|
||||
U slučaju da imate pristup za pisanje nad terraform state fajlovima, ali ne možete da menjate terraform kod, [**ova istraživanja**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) nude neke zanimljive opcije za korišćenje fajla. Čak i ako biste imali pristup za pisanje nad konfiguracionim fajlovima, korišćenje vektora state fajlova je često mnogo podlije, pošto ne ostavljate tragove u `git` istoriji.
|
||||
|
||||
### RCE u Terraform-u: trovanje konfiguracionog fajla
|
||||
|
||||
Moguće je [napraviti prilagođenog provajdera](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) i jednostavno zameniti jednog od provajdera u terraform state fajlu za malicioznog ili dodati lažni resurs koji se poziva na malicioznog provajdera.
|
||||
|
||||
Provajder [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) se oslanja na istraživanje i oružava ovaj princip. Možete dodati lažni resurs i navesti proizvoljnu bash komandu koju želite da izvršite u atributu `command`. Kada se pokrene `terraform` run, ovo će biti pročitano i izvršeno u koracima `terraform plan` i `terraform apply`. U slučaju koraka `terraform apply`, `terraform` će obrisati lažni resurs iz state fajla nakon izvršavanja vaše komande, čisteći za sobom. Više informacija i potpuna demonstracija mogu se naći u [GitHub repozitorijumu koji hostuje izvorni kod za ovog provajdera](https://github.com/offensive-actions/terraform-provider-statefile-rce).
|
||||
Provajder [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) se oslanja na istraživanje i oružava ovaj princip. Možete dodati lažni resurs i navesti proizvoljnu bash komandu koju želite da izvršite u atributu `command`. Kada se pokrene `terraform` run, ovo će biti pročitano i izvršeno u koracima `terraform plan` i `terraform apply`. U slučaju koraka `terraform apply`, `terraform` će obrisati lažni resurs iz state fajla nakon izvršavanja vaše komande, čisteći za sobom. Više informacija i puna demonstracija mogu se naći u [GitHub repozitorijumu koji hostuje izvorni kod za ovog provajdera](https://github.com/offensive-actions/terraform-provider-statefile-rce).
|
||||
|
||||
Da biste ga koristili direktno, jednostavno uključite sledeće na bilo kojoj poziciji u `resources` nizu i prilagodite atribute `name` i `command`:
|
||||
Da biste ga koristili direktno, jednostavno uključite sledeće na bilo kojoj poziciji u nizu `resources` i prilagodite atribute `name` i `command`:
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
@@ -158,7 +158,7 @@ Zatim, čim se izvrši `terraform`, vaš kod će se pokrenuti.
|
||||
|
||||
Postoje 2 načina da se unište resursi:
|
||||
|
||||
1. **Umetnite resurs sa nasumičnim imenom u datoteku stanja koja pokazuje na pravi resurs koji treba uništiti**
|
||||
1. **Umetnite resurs sa nasumičnim imenom u fajl stanja koji pokazuje na pravi resurs koji treba uništiti**
|
||||
|
||||
Pošto će terraform videti da resurs ne bi trebao da postoji, uništiće ga (prateći pravi ID resursa koji je naznačen). Primer sa prethodne strane:
|
||||
```json
|
||||
@@ -182,7 +182,7 @@ Za EC2 instancu, izmena tipa instance je dovoljna da terraform obriše i ponovo
|
||||
|
||||
### Zamenite crnu listu provajdera
|
||||
|
||||
U slučaju da naiđete na situaciju gde je `hashicorp/external` stavljen na crnu listu, možete ponovo implementirati `external` provajder na sledeći način. Napomena: Koristimo fork external provajdera objavljen od strane https://registry.terraform.io/providers/nazarewk/external/latest. Takođe možete objaviti svoj fork ili ponovnu implementaciju.
|
||||
U slučaju da naiđete na situaciju gde je `hashicorp/external` stavljen na crnu listu, možete ponovo implementirati `external` provajder na sledeći način. Napomena: Koristimo fork external provajdera objavljen od strane https://registry.terraform.io/providers/nazarewk/external/latest. Takođe možete objaviti svoj vlastiti fork ili ponovnu implementaciju.
|
||||
```terraform
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -209,7 +209,7 @@ Snyk nudi sveobuhvatno rešenje za skeniranje Infrastructure as Code (IaC) koje
|
||||
- Skeniranje u realnom vremenu za sigurnosne ranjivosti i probleme usklađenosti.
|
||||
- Integracija sa sistemima za kontrolu verzija (GitHub, GitLab, Bitbucket).
|
||||
- Automatizovani zahtevi za ispravke.
|
||||
- Detaljna preporuka za otklanjanje problema.
|
||||
- Detaljni saveti za otklanjanje problema.
|
||||
- **Prijavite se:** Kreirajte nalog na [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
brew tap snyk/tap
|
||||
@@ -221,7 +221,7 @@ snyk iac test /path/to/terraform/code
|
||||
|
||||
**Checkov** je alat za statičku analizu koda za infrastrukturu kao kod (IaC) i takođe alat za analizu sastava softvera (SCA) za slike i open source pakete.
|
||||
|
||||
Skeneruje cloud infrastrukturu koja je obezbeđena koristeći [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), ili [OpenTofu](https://opentofu.org/) i otkriva bezbednosne i usklađenosti greške u konfiguraciji koristeći skeniranje zasnovano na grafu.
|
||||
Skeneruje cloud infrastrukturu koja je obezbeđena koristeći [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), ili [OpenTofu](https://opentofu.org/) i detektuje bezbednosne i usklađenosti greške u konfiguraciji koristeći skeniranje zasnovano na grafu.
|
||||
|
||||
Izvodi [Software Composition Analysis (SCA) skeniranje](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) koje je skeniranje open source paketa i slika za Common Vulnerabilities and Exposures (CVEs).
|
||||
```bash
|
||||
@@ -230,14 +230,14 @@ checkov -d /path/to/folder
|
||||
```
|
||||
### [terraform-compliance](https://github.com/terraform-compliance/cli)
|
||||
|
||||
From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` je lagan, bezbednosno orijentisan test okvir za terraform koji omogućava negativno testiranje za vašu infrastrukturu kao kod.
|
||||
From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` je lagan, bezbednosno orijentisan test okvir za usklađenost protiv terraform-a koji omogućava negativno testiranje za vašu infrastrukturu kao kod.
|
||||
|
||||
- **compliance:** Osigurajte da implementirani kod prati bezbednosne standarde, vaše sopstvene prilagođene standarde
|
||||
- **behaviour driven development:** Imamo BDD za skoro sve, zašto ne i za IaC?
|
||||
- **portable:** samo ga instalirajte iz `pip` ili pokrenite putem `docker`. Pogledajte [Installation](https://terraform-compliance.com/pages/installation/)
|
||||
- **usaglašenost:** Osigurajte da implementirani kod prati bezbednosne standarde, vaše sopstvene prilagođene standarde
|
||||
- **razvoj vođen ponašanjem:** Imamo BDD za gotovo sve, zašto ne i za IaC?
|
||||
- **prenosiv:** samo ga instalirajte putem `pip` ili ga pokrenite putem `docker`. Pogledajte [Instalacija](https://terraform-compliance.com/pages/installation/)
|
||||
- **pre-deploy:** validira vaš kod pre nego što bude implementiran
|
||||
- **easy to integrate:** može se pokrenuti u vašem pipeline-u (ili u git hooks) kako bi se osiguralo da su sve implementacije validirane.
|
||||
- **segregation of duty:** možete čuvati svoje testove u različitom repozitorijumu gde je odgovorna posebna ekipa.
|
||||
- **lako za integraciju:** može se pokrenuti u vašem pipeline-u (ili u git hooks) kako bi se osiguralo da su sve implementacije validirane.
|
||||
- **razdvajanje dužnosti:** možete čuvati svoje testove u drugom repozitorijumu gde je odgovorna posebna ekipa.
|
||||
|
||||
> [!NOTE]
|
||||
> Nažalost, ako kod koristi neke provajdere kojima nemate pristup, nećete moći da izvršite `terraform plan` i pokrenete ovaj alat.
|
||||
@@ -258,9 +258,9 @@ From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec koristi stati
|
||||
- 🔗 Evaluira odnose između Terraform resursa
|
||||
- 🧰 Kompatibilan sa Terraform CDK
|
||||
- 🙅 Primena (i obogaćivanje) korisnički definisanih Rego politika
|
||||
- 📃 Podržava više formata izlaza: divno (podrazumevano), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif.
|
||||
- 📃 Podržava više formata izlaza: lovely (podrazumevano), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif.
|
||||
- 🛠️ Konfigurisanje (putem CLI zastavica i/ili konfiguracione datoteke)
|
||||
- ⚡ Veoma brzo, sposobno da brzo skenira ogromne repozitorijume
|
||||
- ⚡ Veoma brzo, sposobno za brzo skeniranje ogromnih repozitorijuma
|
||||
```bash
|
||||
brew install tfsec
|
||||
tfsec /path/to/folder
|
||||
@@ -275,7 +275,7 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
|
||||
```
|
||||
### [Terrascan](https://github.com/tenable/terrascan)
|
||||
|
||||
Iz [**dokumentacije**](https://github.com/tenable/terrascan): Terrascan je statički analizator koda za infrastrukturu kao kod. Terrascan vam omogućava:
|
||||
Iz [**dokumentacije**](https://github.com/tenable/terrascan): Terrascan je statički analizator koda za Infrastructure as Code. Terrascan vam omogućava:
|
||||
|
||||
- Besprekorno skeniranje infrastrukture kao koda za pogrešne konfiguracije.
|
||||
- Praćenje obezbeđene cloud infrastrukture za promene konfiguracije koje uvode promene u posturi, i omogućava vraćanje na sigurnu posturu.
|
||||
|
||||
@@ -16,7 +16,7 @@ Od marta 2024. godine, AWS nudi *politike zasnovane na resursima* za DynamoDB ([
|
||||
|
||||
Dakle, ako imate `dynamodb:PutResourcePolicy` za tabelu, možete jednostavno dodeliti sebi ili bilo kojem drugom subjektu potpuni pristup tabeli.
|
||||
|
||||
Dodeljivanje `dynamodb:PutResourcePolicy` nasumičnom subjektu često se dešava slučajno, ako administratori misle da bi dodeljivanje `dynamodb:Put*` samo omogućilo subjektu da unese stavke u bazu podataka - ili ako su dodelili taj skup dozvola pre marta 2024...
|
||||
Dodeljivanje `dynamodb:PutResourcePolicy` nasumičnom subjektu često se dešava slučajno, ako administratori misle da bi dodeljivanje `dynamodb:Put*` samo omogućilo subjektu da unese stavke u bazu podataka - ili ako su dodelili taj set dozvola pre marta 2024...
|
||||
|
||||
Idealno, takođe imate `dynamodb:GetResourcePolicy`, tako da ne prepisujete druge potencijalno vitalne dozvole, već samo injektujete dodatne dozvole koje su vam potrebne:
|
||||
```bash
|
||||
@@ -49,7 +49,7 @@ Ako ne možete da preuzmete trenutnu politiku, jednostavno koristite ovu koja da
|
||||
```
|
||||
Ako treba da ga prilagodite, ovde je lista svih mogućih DynamoDB akcija: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations.html). A ovde je lista svih akcija koje mogu biti dozvoljene putem politike zasnovane na resursima *I koje od ovih mogu biti korišćene između naloga (razmislite o eksfiltraciji podataka!)*: [AWS Documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-iam-actions.html)
|
||||
|
||||
Sada, sa dokumentom politike `policy.json` spremnim, stavite politiku resursa:
|
||||
Sada, sa dokumentom politike `policy.json` spremnim, postavite politiku resursa:
|
||||
```bash
|
||||
# put the new policy using the prepared policy file
|
||||
# dynamodb does weirdly not allow a direct file upload
|
||||
|
||||
@@ -34,18 +34,18 @@ Na primer, napadač sa tim **dozvolama nad cloudformation kanticom** pod nazivom
|
||||
]
|
||||
}
|
||||
```
|
||||
I otmica je moguća jer postoji **mali vremenski prozor od trenutka kada je šablon otpremljen** u bucket do trenutka kada je **šablon implementiran**. Napadač može jednostavno kreirati **lambda funkciju** u svom nalogu koja će **pokrenuti kada se pošalje obaveštenje iz bucketa**, i **oteti** **sadržaj** tog **bucketa**.
|
||||
I otmica je moguća jer postoji **mali vremenski prozor od trenutka kada je šablon otpremljen** u bucket do trenutka kada je **šablon implementiran**. Napadač može jednostavno da kreira **lambda funkciju** u svom nalogu koja će **pokrenuti kada se pošalje obaveštenje iz bucketa**, i **otme** **sadržaj** tog **bucketa**.
|
||||
|
||||
.png>)
|
||||
|
||||
Pacu modul [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) može se koristiti za automatizaciju ovog napada.\
|
||||
Za više informacija proverite originalno istraživanje: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/)
|
||||
Za više informacija pogledajte originalno istraživanje: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/)
|
||||
|
||||
### `s3:PutObject`, `s3:GetObject` <a href="#s3putobject-s3getobject" id="s3putobject-s3getobject"></a>
|
||||
|
||||
Ovo su dozvole za **preuzimanje i otpremanje objekata na S3**. Nekoliko usluga unutar AWS-a (i van njega) koristi S3 skladište za čuvanje **konfiguracionih fajlova**.\
|
||||
Napadač sa **pristupom za čitanje** može pronaći **osetljive informacije** u njima.\
|
||||
Napadač sa **pristupom za pisanje** mogao bi **modifikovati podatke kako bi zloupotrebio neku uslugu i pokušao da eskalira privilegije**.\
|
||||
Napadač sa **pristupom za pisanje** mogao bi **modifikovati podatke da bi zloupotrebio neku uslugu i pokušao da eskalira privilegije**.\
|
||||
Evo nekoliko primera:
|
||||
|
||||
- Ako EC2 instanca čuva **korisničke podatke u S3 bucket-u**, napadač bi mogao da ih modifikuje da **izvrši proizvoljan kod unutar EC2 instance**.
|
||||
|
||||
Reference in New Issue
Block a user