Terraform Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
HashiCorp Terraform एक कोड के रूप में बुनियादी ढांचा उपकरण है जो आपको मानव-पठनीय कॉन्फ़िगरेशन फ़ाइलों में क्लाउड और ऑन-प्रेम संसाधनों को परिभाषित करने की अनुमति देता है जिन्हें आप संस्करण, पुन: उपयोग और साझा कर सकते हैं। आप फिर अपने बुनियादी ढांचे के पूरे जीवनचक्र के दौरान सभी संसाधनों को प्रावधान और प्रबंधित करने के लिए एक सुसंगत कार्यप्रवाह का उपयोग कर सकते हैं। Terraform निम्न-स्तरीय घटकों जैसे कंप्यूट, स्टोरेज और नेटवर्किंग संसाधनों के साथ-साथ उच्च-स्तरीय घटकों जैसे DNS प्रविष्टियों और SaaS सुविधाओं का प्रबंधन कर सकता है।
Terraform क्लाउड प्लेटफार्मों और अन्य सेवाओं पर संसाधनों को उनके एप्लिकेशन प्रोग्रामिंग इंटरफेस (APIs) के माध्यम से बनाता और प्रबंधित करता है। प्रदाता Terraform को किसी भी प्लेटफ़ॉर्म या सेवा के साथ काम करने में सक्षम बनाते हैं जिसमें एक सुलभ API होता है।
HashiCorp और Terraform समुदाय ने पहले से ही 1700 से अधिक प्रदाता लिखे हैं जो हजारों विभिन्न प्रकार के संसाधनों और सेवाओं का प्रबंधन करते हैं, और यह संख्या बढ़ती जा रही है। आप सभी सार्वजनिक रूप से उपलब्ध प्रदाताओं को Terraform Registry पर पा सकते हैं, जिसमें Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, और कई अन्य शामिल हैं।
मुख्य Terraform कार्यप्रवाह तीन चरणों में विभाजित है:
लिखें: आप संसाधनों को परिभाषित करते हैं, जो कई क्लाउड प्रदाताओं और सेवाओं में हो सकते हैं। उदाहरण के लिए, आप सुरक्षा समूहों और लोड बैलेंसर के साथ एक वर्चुअल प्राइवेट क्लाउड (VPC) नेटवर्क में वर्चुअल मशीनों पर एक एप्लिकेशन तैनात करने के लिए एक कॉन्फ़िगरेशन बना सकते हैं।
योजना: Terraform एक निष्पादन योजना बनाता है जो उस बुनियादी ढांचे का वर्णन करता है जिसे यह मौजूदा बुनियादी ढांचे और आपकी कॉन्फ़िगरेशन के आधार पर बनाएगा, अपडेट करेगा या नष्ट करेगा।
लागू करें: स्वीकृति पर, Terraform सही क्रम में प्रस्तावित संचालन करता है, किसी भी संसाधन निर्भरताओं का सम्मान करते हुए। उदाहरण के लिए, यदि आप एक VPC की विशेषताओं को अपडेट करते हैं और उस VPC में वर्चुअल मशीनों की संख्या बदलते हैं, तो Terraform वर्चुअल मशीनों को स्केल करने से पहले VPC को फिर से बनाएगा।
बस अपने कंप्यूटर में terraform स्थापित करें।
यहाँ आपके पास एक गाइड है और यहाँ आपके पास terraform डाउनलोड करने का सर्वश्रेष्ठ तरीका है।
Terraform में कोई प्लेटफ़ॉर्म नहीं है जो एक वेब पृष्ठ या नेटवर्क सेवा को उजागर करता है जिसे हम सूचीबद्ध कर सकते हैं, इसलिए, terraform को समझौता करने का एकमात्र तरीका है terraform कॉन्फ़िगरेशन फ़ाइलों को जोड़ने/संशोधित करने में सक्षम होना।
हालांकि, terraform एक बहुत संवेदनशील घटक है जिसे समझौता करना है क्योंकि इसके पास विभिन्न स्थानों तक विशेषाधिकार प्राप्त पहुंच होगी ताकि यह सही तरीके से काम कर सके।
एक हमलावर के लिए उस सिस्टम को समझौता करने का मुख्य तरीका जहां terraform चल रहा है, वह है terraform कॉन्फ़िगरेशन को स्टोर करने वाले रिपॉजिटरी को समझौता करना, क्योंकि किसी बिंदु पर उन्हें व्याख्यायित किया जाएगा।
वास्तव में, वहाँ ऐसे समाधान हैं जो PR बनाए जाने के बाद terraform योजना/लागू को स्वचालित रूप से निष्पादित करते हैं, जैसे कि Atlantis:
Atlantis Securityयदि आप terraform फ़ाइल को समझौता करने में सक्षम हैं, तो जब कोई terraform plan
या terraform apply
निष्पादित करता है, तो RCE करने के लिए आपके पास विभिन्न तरीके हैं।
Terraform योजना terraform में सबसे अधिक उपयोग किया जाने वाला कमांड है और डेवलपर्स/समाधान जो terraform का उपयोग करते हैं, इसे हर समय कॉल करते हैं, इसलिए RCE प्राप्त करने का सबसे आसान तरीका यह सुनिश्चित करना है कि आप एक terraform कॉन्फ़िगरेशन फ़ाइल को विषाक्त करें जो terraform plan
में मनमाने आदेशों को निष्पादित करेगी।
एक बाहरी प्रदाता का उपयोग करना
Terraform external
प्रदाता प्रदान करता है जो Terraform और बाहरी कार्यक्रमों के बीच इंटरफेस करने का एक तरीका प्रदान करता है। आप plan
के दौरान मनमानी कोड चलाने के लिए external
डेटा स्रोत का उपयोग कर सकते हैं।
एक terraform कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित की तरह कुछ इंजेक्ट करने से terraform plan
निष्पादित करते समय एक रिवर्स शेल निष्पादित होगा:
कस्टम प्रदाता का उपयोग करना
एक हमलावर कस्टम प्रदाता को Terraform Registry पर भेज सकता है और फिर इसे फीचर ब्रांच में Terraform कोड में जोड़ सकता है (यहां से उदाहरण):
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 हो:
आप रेव शेल कोड 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 सभी परिवर्तनों को लागू करने के लिए निष्पादित किया जाएगा, आप इसे RCE प्राप्त करने के लिए भी दुरुपयोग कर सकते हैं एक दुर्भावनापूर्ण Terraform फ़ाइल को local-exec** के साथ इंजेक्ट करके।**
आपको बस यह सुनिश्चित करने की आवश्यकता है कि निम्नलिखित जैसे कुछ पेलोड main.tf
फ़ाइल में समाप्त हो जाएं:
Follow the suggestions from the previous technique the perform this attack in a stealthier way using external references.
आप terraform द्वारा उपयोग किए गए गुप्त मानों को डंप कर सकते हैं terraform apply
चलाकर, terraform फ़ाइल में कुछ इस तरह जोड़कर:
यदि आपके पास terraform state फ़ाइलों पर लिखने की अनुमति है लेकिन आप terraform कोड को नहीं बदल सकते, तो यह शोध फ़ाइल का लाभ उठाने के लिए कुछ दिलचस्प विकल्प प्रदान करता है:
संसाधनों को नष्ट करने के 2 तरीके हैं:
वास्तविक संसाधन को नष्ट करने के लिए state फ़ाइल में एक यादृच्छिक नाम के साथ एक संसाधन डालें
क्योंकि terraform देखेगा कि संसाधन मौजूद नहीं होना चाहिए, यह इसे नष्ट कर देगा (वास्तविक संसाधन ID के अनुसार जो इंगित किया गया है)। पिछले पृष्ठ से उदाहरण:
संसाधन को इस तरह से संशोधित करें कि इसे अपडेट करना संभव न हो (ताकि इसे हटाया जा सके और फिर से बनाया जा सके)
EC2 उदाहरण के लिए, उदाहरण के प्रकार को संशोधित करना terraform को इसे हटाने और फिर से बनाने के लिए पर्याप्त है।
यह भी संभव है कि एक कस्टम प्रदाता बनाएँ और बस terraform स्थिति फ़ाइल में एक प्रदाता को दुर्भावनापूर्ण वाले से बदल दें या दुर्भावनापूर्ण प्रदाता के साथ एक खाली संसाधन जोड़ दें। मूल शोध से उदाहरण:
यदि आप ऐसी स्थिति का सामना करते हैं जहाँ hashicorp/external
को ब्लैकलिस्ट किया गया है, तो आप निम्नलिखित करके external
प्रदाता को फिर से लागू कर सकते हैं। नोट: हम https://registry.terraform.io/providers/nazarewk/external/latest द्वारा प्रकाशित external
प्रदाता की एक फोर्क का उपयोग करते हैं। आप अपना खुद का फोर्क या फिर से कार्यान्वयन भी प्रकाशित कर सकते हैं।
फिर आप सामान्य के अनुसार external
का उपयोग कर सकते हैं।
tfsec: tfsec आपके terraform कोड का स्थैतिक विश्लेषण करता है ताकि संभावित गलत कॉन्फ़िगरेशन को पहचाना जा सके।
terascan: Terrascan इन्फ्रास्ट्रक्चर कोड के लिए एक स्थैतिक कोड विश्लेषक है।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)