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 αποτελείται από τρία στάδια:
Write: Ορίζετε πόρους, οι οποίοι μπορεί να είναι σε πολλούς παρόχους cloud και υπηρεσίες. Για παράδειγμα, μπορεί να δημιουργήσετε μια διαμόρφωση για να αναπτύξετε μια εφαρμογή σε εικονικές μηχανές σε ένα δίκτυο Virtual Private Cloud (VPC) με ομάδες ασφαλείας και έναν φορτωτή ισορροπίας.
Plan: Το Terraform δημιουργεί ένα σχέδιο εκτέλεσης που περιγράφει την υποδομή που θα δημιουργήσει, θα ενημερώσει ή θα καταστρέψει με βάση την υπάρχουσα υποδομή και τη διαμόρφωσή σας.
Apply: Με την έγκριση, το 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
.
Using an external provider
Το 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 να διαγράψει και να την αναδημιουργήσει.
Είναι επίσης δυνατό να δημιουργήσετε έναν προσαρμοσμένο πάροχο και απλώς να αντικαταστήσετε έναν από τους παρόχους στο αρχείο κατάστασης του terraform με τον κακόβουλο ή να προσθέσετε έναν κενό πόρο με τον κακόβουλο πάροχο. Παράδειγμα από την αρχική έρευνα:
Σε περίπτωση που συναντήσετε μια κατάσταση όπου το hashicorp/external
έχει αποκλειστεί, μπορείτε να επαναφέρετε τον πάροχο external
κάνοντας τα εξής. Σημείωση: Χρησιμοποιούμε ένα fork του παρόχου external που δημοσιεύθηκε από το https://registry.terraform.io/providers/nazarewk/external/latest. Μπορείτε επίσης να δημοσιεύσετε το δικό σας fork ή επαναφορά.
Τότε μπορείτε να χρησιμοποιήσετε external
όπως συνήθως.
tfsec: το tfsec χρησιμοποιεί στατική ανάλυση του κώδικα terraform σας για να εντοπίσει πιθανές κακές ρυθμίσεις.
terascan: το Terrascan είναι ένας στατικός αναλυτής κώδικα για την Υποδομή ως Κώδικα.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)