mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-17 15:21:52 -08:00
Translated ['src/pentesting-ci-cd/terraform-security.md', 'src/pentestin
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
[De la documentación:](https://developer.hashicorp.com/terraform/intro)
|
||||
|
||||
HashiCorp Terraform es una **herramienta de infraestructura como código** que te permite definir tanto **recursos en la nube como en local** en archivos de configuración legibles por humanos que puedes versionar, reutilizar y compartir. Luego puedes usar un flujo de trabajo consistente para aprovisionar y gestionar toda tu infraestructura a lo largo de su ciclo de vida. Terraform puede gestionar componentes de bajo nivel como recursos de computación, almacenamiento y redes, así como componentes de alto nivel como entradas DNS y características de SaaS.
|
||||
HashiCorp Terraform es una **herramienta de infraestructura como código** que te permite definir tanto **recursos en la nube como locales** en archivos de configuración legibles por humanos que puedes versionar, reutilizar y compartir. Luego puedes usar un flujo de trabajo consistente para aprovisionar y gestionar toda tu infraestructura a lo largo de su ciclo de vida. Terraform puede gestionar componentes de bajo nivel como recursos de computación, almacenamiento y redes, así como componentes de alto nivel como entradas DNS y características de SaaS.
|
||||
|
||||
#### ¿Cómo funciona Terraform?
|
||||
|
||||
@@ -14,7 +14,7 @@ Terraform crea y gestiona recursos en plataformas en la nube y otros servicios a
|
||||
|
||||
.png>)
|
||||
|
||||
HashiCorp y la comunidad de Terraform ya han escrito **más de 1700 proveedores** para gestionar miles de tipos diferentes de recursos y servicios, y este número sigue creciendo. Puedes encontrar todos los proveedores disponibles públicamente en el [Registro de Terraform](https://registry.terraform.io/), incluyendo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, y muchos más.
|
||||
HashiCorp y la comunidad de Terraform ya han escrito **más de 1700 proveedores** para gestionar miles de tipos diferentes de recursos y servicios, y este número sigue creciendo. Puedes encontrar todos los proveedores disponibles públicamente en el [Registro de Terraform](https://registry.terraform.io/), incluyendo Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog y muchos más.
|
||||
|
||||
El flujo de trabajo central de Terraform consta de tres etapas:
|
||||
|
||||
@@ -34,7 +34,7 @@ Aquí tienes una [guía](https://learn.hashicorp.com/tutorials/terraform/install
|
||||
|
||||
Terraform **no tiene una plataforma que exponga una página web o un servicio de red** que podamos enumerar, por lo tanto, la única forma de comprometer terraform es **poder agregar/modificar archivos de configuración de terraform** o **poder modificar el archivo de estado de terraform** (ver capítulo a continuación).
|
||||
|
||||
Sin embargo, terraform es un **componente muy sensible** a comprometer porque tendrá **acceso privilegiado** a diferentes ubicaciones para que pueda funcionar correctamente.
|
||||
Sin embargo, terraform es un **componente muy sensible** de comprometer porque tendrá **acceso privilegiado** a diferentes ubicaciones para que pueda funcionar correctamente.
|
||||
|
||||
La principal forma en que un atacante puede comprometer el sistema donde se está ejecutando terraform es **comprometer el repositorio que almacena las configuraciones de terraform**, porque en algún momento van a ser **interpretadas**.
|
||||
|
||||
@@ -44,15 +44,15 @@ De hecho, hay soluciones que **ejecutan terraform plan/apply automáticamente de
|
||||
atlantis-security.md
|
||||
{{#endref}}
|
||||
|
||||
Si puedes comprometer un archivo de terraform, hay diferentes maneras en que puedes realizar RCE cuando alguien ejecuta `terraform plan` o `terraform apply`.
|
||||
Si puedes comprometer un archivo de terraform, hay diferentes formas en que puedes realizar RCE cuando alguien ejecuta `terraform plan` o `terraform apply`.
|
||||
|
||||
### Terraform plan
|
||||
|
||||
Terraform plan es el **comando más utilizado** en terraform y los desarrolladores/soluciones que utilizan terraform lo llaman todo el tiempo, así que la **manera más fácil de obtener RCE** es asegurarte de envenenar un archivo de configuración de terraform que ejecute comandos arbitrarios en un `terraform plan`.
|
||||
Terraform plan es el **comando más utilizado** en terraform y los desarrolladores/soluciones que utilizan terraform lo llaman todo el tiempo, por lo que la **manera más fácil de obtener RCE** es asegurarte de envenenar un archivo de configuración de terraform que ejecute comandos arbitrarios en un `terraform plan`.
|
||||
|
||||
**Usando un proveedor externo**
|
||||
|
||||
Terraform ofrece el [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) que proporciona una forma de interfaz entre Terraform y programas externos. Puedes usar la fuente de datos `external` para ejecutar código arbitrario durante un `plan`.
|
||||
Terraform ofrece el [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) que proporciona una forma de interaccionar entre Terraform y programas externos. Puedes usar la fuente de datos `external` para ejecutar código arbitrario durante un `plan`.
|
||||
|
||||
Inyectar en un archivo de configuración de terraform algo como lo siguiente ejecutará un rev shell al ejecutar `terraform plan`:
|
||||
```javascript
|
||||
@@ -130,7 +130,7 @@ En caso de que tengas acceso de escritura sobre los archivos de estado de terraf
|
||||
|
||||
Es posible [crear un proveedor personalizado](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) y simplemente reemplazar uno de los proveedores en el archivo de estado de terraform por el malicioso o agregar un recurso falso que haga referencia al proveedor malicioso.
|
||||
|
||||
El proveedor [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) se basa en la investigación y arma este principio. Puedes agregar un recurso falso y declarar el comando bash arbitrario que deseas ejecutar en el atributo `command`. Cuando se activa la ejecución de `terraform`, esto se leerá y ejecutará tanto en los pasos de `terraform plan` como en `terraform apply`. En el caso del paso `terraform apply`, `terraform` eliminará el recurso falso del archivo de estado después de ejecutar tu comando, limpiando después de sí mismo. Más información y una demostración completa se pueden encontrar en el [repositorio de GitHub que alberga el código fuente para este proveedor](https://github.com/offensive-actions/terraform-provider-statefile-rce).
|
||||
El proveedor [statefile-rce](https://registry.terraform.io/providers/offensive-actions/statefile-rce/latest) se basa en la investigación y arma este principio. Puedes agregar un recurso falso y declarar el comando bash arbitrario que deseas ejecutar en el atributo `command`. Cuando se activa la ejecución de `terraform`, esto será leído y ejecutado tanto en los pasos de `terraform plan` como en `terraform apply`. En el caso del paso `terraform apply`, `terraform` eliminará el recurso falso del archivo de estado después de ejecutar tu comando, limpiando después de sí mismo. Más información y una demostración completa se pueden encontrar en el [repositorio de GitHub que alberga el código fuente para este proveedor](https://github.com/offensive-actions/terraform-provider-statefile-rce).
|
||||
|
||||
Para usarlo directamente, simplemente incluye lo siguiente en cualquier posición del array `resources` y personaliza los atributos `name` y `command`:
|
||||
```json
|
||||
@@ -176,13 +176,13 @@ Porque terraform verá que el recurso no debería existir, lo destruirá (siguie
|
||||
]
|
||||
},
|
||||
```
|
||||
2. **Modifique el recurso para eliminarlo de manera que no sea posible actualizarlo (así será eliminado y recreado)**
|
||||
2. **Modificar el recurso para eliminarlo de manera que no sea posible actualizarlo (así será eliminado y recreado)**
|
||||
|
||||
Para una instancia EC2, modificar el tipo de la instancia es suficiente para que terraform la elimine y la recree.
|
||||
|
||||
### Reemplace el proveedor en la lista negra
|
||||
### Reemplazar proveedor en la lista negra
|
||||
|
||||
En caso de que se encuentre en una situación donde `hashicorp/external` fue puesto en la lista negra, puede reimplementar el proveedor `external` haciendo lo siguiente. Nota: Usamos un fork del proveedor external publicado por https://registry.terraform.io/providers/nazarewk/external/latest. También puede publicar su propio fork o reimplementación.
|
||||
En caso de que te encuentres en una situación donde `hashicorp/external` fue puesto en la lista negra, puedes re-implementar el proveedor `external` haciendo lo siguiente. Nota: Usamos un fork del proveedor external publicado por https://registry.terraform.io/providers/nazarewk/external/latest. También puedes publicar tu propio fork o re-implementación.
|
||||
```terraform
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -221,7 +221,7 @@ snyk iac test /path/to/terraform/code
|
||||
|
||||
**Checkov** es una herramienta de análisis de código estático para infraestructura como código (IaC) y también una herramienta de análisis de composición de software (SCA) para imágenes y paquetes de código abierto.
|
||||
|
||||
Escanea la infraestructura en la nube provisionada utilizando [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) o [OpenTofu](https://opentofu.org/) y detecta configuraciones incorrectas de seguridad y cumplimiento utilizando escaneo basado en grafos.
|
||||
Escanea la infraestructura en la nube provisionada utilizando [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) o [OpenTofu](https://opentofu.org/) y detecta configuraciones incorrectas de seguridad y cumplimiento utilizando escaneo basado en gráficos.
|
||||
|
||||
Realiza [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md), que es un escaneo de paquetes y imágenes de código abierto en busca de Vulnerabilidades y Exposiciones Comunes (CVEs).
|
||||
```bash
|
||||
@@ -230,11 +230,11 @@ checkov -d /path/to/folder
|
||||
```
|
||||
### [terraform-compliance](https://github.com/terraform-compliance/cli)
|
||||
|
||||
De los [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` es un marco de prueba ligero, enfocado en seguridad y cumplimiento, contra terraform para habilitar la capacidad de pruebas negativas para tu infraestructura como código.
|
||||
Desde la [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` es un marco de prueba ligero, enfocado en seguridad y cumplimiento, contra terraform para habilitar la capacidad de pruebas negativas para tu infraestructura como código.
|
||||
|
||||
- **cumplimiento:** Asegúrate de que el código implementado siga los estándares de seguridad, tus propios estándares personalizados.
|
||||
- **desarrollo guiado por comportamiento:** Tenemos BDD para casi todo, ¿por qué no para IaC?
|
||||
- **portátil:** solo instálalo desde `pip` o ejecútalo a través de `docker`. Consulta [Instalación](https://terraform-compliance.com/pages/installation/)
|
||||
- **portátil:** solo instálalo desde `pip` o ejecútalo a través de `docker`. Ver [Instalación](https://terraform-compliance.com/pages/installation/)
|
||||
- **pre-despliegue:** valida tu código antes de que se despliegue.
|
||||
- **fácil de integrar:** puede ejecutarse en tu pipeline (o en ganchos de git) para asegurar que todos los despliegues sean validados.
|
||||
- **segregación de deberes:** puedes mantener tus pruebas en un repositorio diferente donde un equipo separado sea responsable.
|
||||
|
||||
Reference in New Issue
Block a user