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 είναι ένα εργαλείο υποδομής ως κώδικα που σας επιτρέπει να ορίζετε τόσο πόρους cloud όσο και on-prem σε αρχεία διαμόρφωσης που είναι αναγνώσιμα από ανθρώπους και μπορείτε να εκδώσετε, να επαναχρησιμοποιήσετε και να μοιραστείτε. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε μια συνεπή ροή εργασίας για να προμηθεύσετε και να διαχειριστείτε όλη την υποδομή σας καθ' όλη τη διάρκεια ζωής της. Το Terraform μπορεί να διαχειριστεί χαμηλού επιπέδου στοιχεία όπως υπολογιστικούς, αποθηκευτικούς και δικτυακούς πόρους, καθώς και υψηλού επιπέδου στοιχεία όπως καταχωρίσεις DNS και χαρακτηριστικά SaaS.
Το Terraform δημιουργεί και διαχειρίζεται πόρους σε πλατφόρμες cloud και άλλες υπηρεσίες μέσω των διεπαφών προγραμματισμού εφαρμογών (APIs) τους. Οι πάροχοι επιτρέπουν στο Terraform να λειτουργεί με σχεδόν οποιαδήποτε πλατφόρμα ή υπηρεσία με προσβάσιμη API.
Η HashiCorp και η κοινότητα του Terraform έχουν ήδη γράψει πάνω από 1700 παρόχους για να διαχειρίζονται χιλιάδες διαφορετικούς τύπους πόρων και υπηρεσιών, και αυτός ο αριθμός συνεχίζει να αυξάνεται. Μπορείτε να βρείτε όλους τους δημόσια διαθέσιμους παρόχους στο Terraform Registry, συμπεριλαμβανομένων των Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog και πολλών άλλων.
Η βασική ροή εργασίας του Terraform αποτελείται από τρία στάδια:
Γράψτε: Ορίζετε πόρους, οι οποίοι μπορεί να είναι σε πολλούς παρόχους cloud και υπηρεσίες. Για παράδειγμα, μπορεί να δημιουργήσετε μια διαμόρφωση για να αναπτύξετε μια εφαρμογή σε εικονικές μηχανές σε ένα δίκτυο Virtual Private Cloud (VPC) με ομάδες ασφαλείας και έναν ελεγκτή φορτίου.
Σχέδιο: Το Terraform δημιουργεί ένα σχέδιο εκτέλεσης που περιγράφει την υποδομή που θα δημιουργήσει, θα ενημερώσει ή θα καταστρέψει με βάση την υπάρχουσα υποδομή και τη διαμόρφωσή σας.
Εφαρμογή: Με την έγκριση, το Terraform εκτελεί τις προτεινόμενες ενέργειες με τη σωστή σειρά, σεβόμενο οποιεσδήποτε εξαρτήσεις πόρων. Για παράδειγμα, αν ενημερώσετε τις ιδιότητες ενός VPC και αλλάξετε τον αριθμό των εικονικών μηχανών σε αυτό το VPC, το Terraform θα αναδημιουργήσει το VPC πριν κλιμακώσει τις εικονικές μηχανές.
Απλά εγκαταστήστε το terraform στον υπολογιστή σας.
Εδώ έχετε έναν οδηγό και εδώ έχετε τον καλύτερο τρόπο για να κατεβάσετε το terraform.
Το Terraform δεν έχει μια πλατφόρμα που να εκθέτει μια ιστοσελίδα ή μια υπηρεσία δικτύου που μπορούμε να καταγράψουμε, επομένως, ο μόνος τρόπος για να συμβιβαστεί το terraform είναι να μπορείτε να προσθέσετε/τροποποιήσετε αρχεία διαμόρφωσης terraform.
Ωστόσο, το terraform είναι ένα πολύ ευαίσθητο στοιχείο για να συμβιβαστεί, διότι θα έχει προνομιακή πρόσβαση σε διάφορες τοποθεσίες ώστε να μπορεί να λειτουργεί σωστά.
Ο κύριος τρόπος για έναν επιτιθέμενο να μπορέσει να συμβιβάσει το σύστημα όπου εκτελείται το terraform είναι να συμβιβάσει το αποθετήριο που αποθηκεύει τις διαμορφώσεις terraform, διότι σε κάποιο σημείο θα ερμηνευτούν.
Στην πραγματικότητα, υπάρχουν λύσεις εκεί έξω που εκτελούν το terraform plan/apply αυτόματα μετά τη δημιουργία ενός PR, όπως το Atlantis:
Atlantis SecurityΑν μπορείτε να συμβιβάσετε ένα αρχείο terraform, υπάρχουν διάφοροι τρόποι που μπορείτε να εκτελέσετε RCE όταν κάποιος εκτελεί terraform plan
ή terraform apply
.
Το Terraform plan είναι η πιο χρησιμοποιούμενη εντολή στο terraform και οι προγραμματιστές/λύσεις που χρησιμοποιούν το terraform την καλούν συνεχώς, οπότε ο ευκολότερος τρόπος για να αποκτήσετε RCE είναι να βεβαιωθείτε ότι δηλητηριάζετε ένα αρχείο διαμόρφωσης terraform που θα εκτελεί αυθαίρετες εντολές σε ένα terraform plan
.
Χρησιμοποιώντας έναν εξωτερικό πάροχο
Το Terraform προσφέρει τον external
provider που παρέχει έναν τρόπο διεπαφής μεταξύ του Terraform και εξωτερικών προγραμμάτων. Μπορείτε να χρησιμοποιήσετε την πηγή δεδομένων external
για να εκτελέσετε αυθαίρετο κώδικα κατά τη διάρκεια ενός plan
.
Η εισαγωγή σε ένα αρχείο διαμόρφωσης terraform κάτι σαν το παρακάτω θα εκτελέσει ένα rev shell κατά την εκτέλεση του terraform plan
:
Χρησιμοποιώντας έναν προσαρμοσμένο πάροχο
Ένας επιτιθέμενος θα μπορούσε να στείλει έναν προσαρμοσμένο πάροχο στο Terraform Registry και στη συνέχεια να τον προσθέσει στον κώδικα Terraform σε ένα feature branch (παράδειγμα από εδώ):
Ο πάροχος κατεβαίνει στο init
και θα εκτελέσει τον κακόβουλο κώδικα όταν εκτελείται το plan
Μπορείτε να βρείτε ένα παράδειγμα στο https://github.com/rung/terraform-provider-cmdexec
Χρησιμοποιώντας μια εξωτερική αναφορά
Και οι δύο αναφερόμενες επιλογές είναι χρήσιμες αλλά όχι πολύ κρυφές (η δεύτερη είναι πιο κρυφή αλλά πιο περίπλοκη από την πρώτη). Μπορείτε να εκτελέσετε αυτήν την επίθεση ακόμα και με πιο κρυφό τρόπο, ακολουθώντας αυτές τις προτάσεις:
Αντί να προσθέσετε το rev shell απευθείας στο αρχείο terraform, μπορείτε να φορτώσετε έναν εξωτερικό πόρο που περιέχει το rev shell:
Μπορείτε να βρείτε τον κώδικα rev shell στο https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules
Στον εξωτερικό πόρο, χρησιμοποιήστε τη δυνατότητα ref για να κρύψετε τον κώδικα terraform rev shell σε ένα branch μέσα στο repo, κάτι σαν: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
Η εντολή Terraform apply θα εκτελεστεί για να εφαρμοστούν όλες οι αλλαγές, μπορείτε επίσης να την εκμεταλλευτείτε για να αποκτήσετε RCE εισάγοντας ένα κακόβουλο αρχείο Terraform με local-exec.
Απλά πρέπει να βεβαιωθείτε ότι κάποιο payload όπως τα παρακάτω καταλήγει στο αρχείο main.tf
:
Ακολουθήστε τις προτάσεις από την προηγούμενη τεχνική για να εκτελέσετε αυτήν την επίθεση με πιο διακριτικό τρόπο χρησιμοποιώντας εξωτερικές αναφορές.
Μπορείτε να έχετε τιμές μυστικών που χρησιμοποιούνται από το terraform να εκτυπώνονται εκτελώντας terraform apply
προσθέτοντας στο αρχείο terraform κάτι σαν:
Σε περίπτωση που έχετε δικαίωμα εγγραφής στα αρχεία κατάστασης terraform αλλά δεν μπορείτε να αλλάξετε τον κώδικα terraform, αυτή η έρευνα προσφέρει μερικές ενδιαφέρουσες επιλογές για να εκμεταλλευτείτε το αρχείο:
Υπάρχουν 2 τρόποι για να καταστραφούν οι πόροι:
Εισαγωγή ενός πόρου με τυχαίο όνομα στο αρχείο κατάστασης που να δείχνει στον πραγματικό πόρο προς καταστροφή
Δεδομένου ότι το terraform θα δει ότι ο πόρος δεν θα έπρεπε να υπάρχει, θα τον καταστρέψει (ακολουθώντας το πραγματικό ID του πόρου που υποδεικνύεται). Παράδειγμα από την προηγούμενη σελίδα:
Τροποποιήστε τον πόρο για διαγραφή με τρόπο που να μην είναι δυνατή η ενημέρωση (έτσι ώστε να διαγραφεί και να αναδημιουργηθεί)
Για μια EC2 instance, η τροποποίηση του τύπου της instance είναι αρκετή για να κάνει το terraform να διαγράψει και να αναδημιουργήσει την instance.
Είναι επίσης δυνατό να δημιουργήσετε έναν προσαρμοσμένο πάροχο και απλώς να αντικαταστήσετε έναν από τους παρόχους στο αρχείο κατάστασης του terraform με τον κακόβουλο ή να προσθέσετε έναν κενό πόρο με τον κακόβουλο πάροχο. Παράδειγμα από την αρχική έρευνα:
Σε περίπτωση που συναντήσετε μια κατάσταση όπου το hashicorp/external
έχει αποκλειστεί, μπορείτε να επαναφέρετε τον πάροχο external
κάνοντας τα εξής. Σημείωση: Χρησιμοποιούμε ένα fork του παρόχου external που δημοσιεύθηκε από το https://registry.terraform.io/providers/nazarewk/external/latest. Μπορείτε επίσης να δημοσιεύσετε το δικό σας fork ή επαναφορά.
Τότε μπορείτε να χρησιμοποιήσετε external
όπως συνήθως.
Το Snyk προσφέρει μια ολοκληρωμένη λύση σάρωσης Infrastructure as Code (IaC) που ανιχνεύει ευπάθειες και κακές ρυθμίσεις σε Terraform, CloudFormation, Kubernetes και άλλες μορφές IaC.
Χαρακτηριστικά:
Σάρωση σε πραγματικό χρόνο για ευπάθειες ασφαλείας και ζητήματα συμμόρφωσης.
Ενσωμάτωση με συστήματα ελέγχου εκδόσεων (GitHub, GitLab, Bitbucket).
Αυτοματοποιημένα αιτήματα έλξης διορθώσεων.
Λεπτομερείς συμβουλές αποκατάστασης.
Εγγραφή: Δημιουργήστε έναν λογαριασμό στο Snyk.
Checkov είναι ένα εργαλείο στατικής ανάλυσης κώδικα για υποδομές ως κώδικα (IaC) και επίσης ένα εργαλείο ανάλυσης σύνθεσης λογισμικού (SCA) για εικόνες και πακέτα ανοιχτού κώδικα.
Σαρώσει την υποδομή cloud που παρέχεται χρησιμοποιώντας Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, ή OpenTofu και ανιχνεύει παραβιάσεις ασφάλειας και συμμόρφωσης χρησιμοποιώντας σάρωση βασισμένη σε γραφήματα.
Εκτελεί Σάρωση Ανάλυσης Σύνθεσης Λογισμικού (SCA) που είναι μια σάρωση ανοιχτών πακέτων και εικόνων για Κοινές Ευπάθειες και Εκθέσεις (CVEs).
Από τα docs: terraform-compliance
είναι ένα ελαφρύ, επικεντρωμένο στην ασφάλεια και τη συμμόρφωση πλαίσιο δοκιμών κατά του terraform για να επιτρέψει τη δυνατότητα αρνητικής δοκιμής για την υποδομή σας ως κώδικα.
συμμόρφωση: Διασφαλίστε ότι ο υλοποιημένος κώδικας ακολουθεί τα πρότυπα ασφαλείας, τα δικά σας προσαρμοσμένα πρότυπα
ανάπτυξη με βάση τη συμπεριφορά: Έχουμε BDD για σχεδόν τα πάντα, γιατί όχι για IaC;
φορητό: απλά εγκαταστήστε το από το pip
ή εκτελέστε το μέσω docker
. Δείτε Εγκατάσταση
προ-ανάπτυξη: επικυρώνει τον κώδικά σας πριν αναπτυχθεί
εύκολη ενσωμάτωση: μπορεί να εκτελείται στη ροή εργασιών σας (ή σε git hooks) για να διασφαλίσει ότι όλες οι αναπτύξεις επικυρώνονται.
διαχωρισμός καθηκόντων: μπορείτε να διατηρήσετε τις δοκιμές σας σε ένα διαφορετικό αποθετήριο όπου μια ξεχωριστή ομάδα είναι υπεύθυνη.
Δυστυχώς, αν ο κώδικας χρησιμοποιεί κάποιους παρόχους στους οποίους δεν έχετε πρόσβαση, δεν θα μπορείτε να εκτελέσετε το terraform plan
και να τρέξετε αυτό το εργαλείο.
Από τα docs: το tfsec χρησιμοποιεί στατική ανάλυση του κώδικα terraform σας για να εντοπίσει πιθανές κακοδιαμορφώσεις.
☁️ Ελέγχει για κακοδιαμορφώσεις σε όλους τους κύριους (και μερικούς δευτερεύοντες) παρόχους cloud
⛔ Χιλιάδες ενσωματωμένοι κανόνες
🪆 Σαρώσεις μονάδων (τοπικών και απομακρυσμένων)
➕ Αξιολογεί εκφράσεις HCL καθώς και κυριολεκτικές τιμές
↪️ Αξιολογεί συναρτήσεις Terraform π.χ. concat()
🔗 Αξιολογεί σχέσεις μεταξύ πόρων Terraform
🧰 Συμβατό με το Terraform CDK
🙅 Εφαρμόζει (και εμπλουτίζει) πολιτικές Rego που ορίζονται από τον χρήστη
📃 Υποστηρίζει πολλαπλές μορφές εξόδου: lovely (προεπιλογή), JSON, SARIF, CSV, CheckStyle, JUnit, κείμενο, Gif.
🛠️ Ρυθμιζόμενο (μέσω CLI flags και/ή αρχείου ρυθμίσεων)
⚡ Πολύ γρήγορο, ικανό να σαρώσει γρήγορα τεράστιες αποθήκες
Βρείτε ευπάθειες ασφαλείας, ζητήματα συμμόρφωσης και κακοδιαμορφώσεις υποδομής νωρίς στον κύκλο ανάπτυξης της υποδομής σας ως κώδικα με το KICS από την Checkmarx.
KICS σημαίνει Keeping Infrastructure as Code Secure, είναι ανοιχτού κώδικα και είναι απαραίτητο για οποιοδήποτε έργο cloud native.
Από τα docs: Το Terrascan είναι ένας στατικός αναλυτής κώδικα για την Υποδομή ως Κώδικα. Το Terrascan σας επιτρέπει να:
Σαρώσετε χωρίς προβλήματα την υποδομή ως κώδικα για κακές ρυθμίσεις.
Παρακολουθείτε την παρεχόμενη υποδομή cloud για αλλαγές ρυθμίσεων που εισάγουν απόκλιση στάσης και επιτρέπει την επιστροφή σε μια ασφαλή στάση.
Ανιχνεύετε ευπάθειες ασφαλείας και παραβιάσεις συμμόρφωσης.
Μειώνετε τους κινδύνους πριν από την παροχή υποδομής cloud native.
Προσφέρει ευελιξία για εκτέλεση τοπικά ή ενσωμάτωσης με το CI\CD σας.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)