IaC (Terraform) para Pentesters

Jun 28 2022
Infraestructura como código (IaC) es una herramienta increíble para cualquiera que administre infraestructura. Pero como cualquier otro sistema, puede ser atacado.
Si le interesa aprender ciberseguridad a través de la ofensiva, pruebe nuestra plataforma de laboratorio AttackDefense, que contiene más de 2000 ejercicios de laboratorio que cubren varios temas. Inicie sesión de forma gratuita para probar nuestros laboratorios comunitarios y ver la lista de temas, ¡no se requiere suscripción ni VPN! Y si desea acceder a nuestra profundidad completa de laboratorios, consulte nuestra suscripción.

Si le interesa aprender ciberseguridad a través de la ofensiva, pruebe nuestra plataforma de laboratorio AttackDefense, que contiene más de 2000 ejercicios de laboratorio que cubren varios temas. Inicie sesión de forma gratuita para probar nuestros laboratorios comunitarios y ver la lista de temas, ¡no se requiere suscripción ni VPN! Y si desea acceder a nuestra profundidad completa de laboratorios, consulte nuestra suscripción .

Introducción: Infra Crecimiento = Complejidad

Imagina que administras toda la infraestructura de tu equipo. Ahora, uno de los servidores tenía un problema y debe volver a implementarse. ¿A qué te dedicas?

Aprovisione una máquina y configure todas las propiedades como tenía la máquina anterior. Tiene sentido, ¿no?

Pero, ¿qué tan práctico es esto? Imagine que tiene que migrar toda su infraestructura de una cuenta a otra, tal vez para mejorar la resiliencia y tener un plan de conmutación por error.

A medida que crece su infraestructura, los diales y perillas que tiene que configurar también crecen exponencialmente. Esto se debe a que cada servicio y componente tiene su propio conjunto de configuraciones. Recordar todo esto es casi imposible: ¡no se puede configurar todo correctamente, cada vez!

La solución: infraestructura como código (IaC)

Ahí es donde encaja la idea de IaC (Infraestructura como código) . Es una idea increíble porque puedes definir tu infraestructura como código y, por lo tanto, las cosas serían mucho más predecibles.

¿Quiere derribar un servidor y crear uno nuevo? Claro, es tan fácil como ejecutar el código Terraform/Ansible/Chef/Puppet/… o incluso puede automatizarse con sus canalizaciones de CI/CD.

Asombroso y bastante poderoso, ¿no es así? Todo lo que necesita hacer es describir su infraestructura una vez, luego use esta descripción para construir su infraestructura cuando lo desee.

Presentamos Terraform

Un gran ejemplo de cómo aprovechar IaC es Terraform, una solución de IaC en la nube que le permite administrar los servicios en la nube a través de los diversos proveedores que pone a su disposición. Como dice la documentación :

Terraform es una infraestructura de código abierto como herramienta de software de código que proporciona un flujo de trabajo CLI consistente para administrar cientos de servicios en la nube. Terraform codifica las API de la nube en archivos de configuración declarativos.

Diferentes servicios en la nube soportados por Terraform. Fuente: https://registry.terraform.io/

Dado que Terraform es de código abierto, puede crear sus propios proveedores, no solo para un servicio en la nube, sino para cualquier servicio en general. Por ejemplo, arminaaki creó un proveedor para administrar todas las pastas en Pasebin. En general, Terraform no lo limita y usted es lo suficientemente libre como para crear proveedores para cualquier API que desee (siempre que exista la interfaz API para el servicio).

Delicia del atacante

Con la versatilidad de IaC, es una gran solución para cualquiera que administre infraestructura. Pero como cualquier otra pieza de código, pueden ocurrir errores de configuración y vulnerabilidades, lo que lleva a ataques. Profundicemos más:

Problema n.° 1: Configuraciones incorrectas de seguridad

A continuación se muestra una lista no exhaustiva de configuraciones incorrectas que un atacante puede aprovechar; si la configuración de terraform no está escrita teniendo en cuenta la seguridad:

  1. Servicios mal configurados: cubos S3 públicos, instancias de bases de datos públicas, contraseñas débiles, finalización de eliminación no habilitada, registro no habilitado, copia de seguridad no habilitada.
  2. Claves API, contraseñas, secretos en código.
  3. Archivos de estado de Terraform en cubos públicos.
  4. Secretos mostrados en las salidas.
  5. Agregar la entrada del usuario para crear la infraestructura puede generar problemas de inyección (más sobre esto en la siguiente sección).

Prevención de configuraciones erróneas de seguridad

Las configuraciones incorrectas anteriores pueden dañar la integridad y la confidencialidad de su infraestructura. Por lo tanto, es crucial seguir las mejores prácticas, especialmente todo lo relacionado con la seguridad, para las herramientas que utiliza.

Las mejores prácticas exactas dependerán de los servicios y componentes que use, pero las pautas generales incluyen no incrustar bits confidenciales como contraseñas o claves API, o tomar la entrada del usuario tal cual. Además, no exponga los archivos de estado (si los hay) utilizados por las herramientas. Esos archivos de estado son un tesoro de información que puede ayudar a un atacante a extraer la configuración de recursos y otros secretos sin ningún reconocimiento adicional.

Problema n.º 2: Aceptación de archivos IaC arbitrarios

Otro problema que tienen la mayoría (y quizás todos) de los IaC es la capacidad de ejecutar código arbitrario. Esto no es un defecto per se; en realidad es una característica con casos de uso legítimos, pero puede generar problemas.

Por ejemplo, si la entrada del usuario llega al código de infraestructura, podría conducir a RCE. Si la entrada del usuario se agrega a un comando en el aprovisionador de ejecución local o ejecución remota en Terraform, el atacante puede ejecutar código malicioso (python, bash, perl, etc.).

También en AWS, al configurar una instancia EC2, especificar sus comandos para el script de datos de usuario puede conducir a la ejecución del código. Lo mismo ocurre con otros servicios que aceptan código/comandos.

De manera similar, si tiene la oportunidad de especificar su propio código de Terraform (o cualquier otro archivo IaC como para Ansible, Chef, Puppet, CloudFormation), puede usar stubs relevantes para ejecutar sus comandos como local-exec y remote-exec en Terraform. Piénselo: si tiene la capacidad de proporcionar archivos arbitrarios, sería como RCE-as-a-service .

Prevención de código arbitrario malicioso

Una vez más, la solución es sencilla. Solo tienes que reconocer que:

La entrada del usuario es la raíz de todo mal.

Por lo tanto, la prevención natural es evitar que cualquier parte que no sea de confianza proporcione la configuración de IaC o controle sus componentes de cualquier manera que conduzca a RCE (por ejemplo , aprovisionadores de ejecución local y ejecución remota en Terraform).

Si hace esto de manera efectiva, puede estar seguro de que está a salvo de tales ataques.

Otra cosa a destacar es el encadenamiento de los ataques.

Digamos que hace todo de manera segura: las entradas se toman de fuentes confiables y están bien desinfectadas, y los archivos IaC residen en su servidor, están predefinidos. ¿Estás seguro en ese caso? ¡Tal vez no!

Si alguien encuentra una manera de cargar archivos arbitrarios en su máquina, posiblemente pueda sobrescribir los archivos IaC existentes y agregar su propio código. Esto daría lugar a los problemas que mencionamos en la sección anterior.

Por lo tanto, es igualmente importante proteger sus archivos IaC también. Haga que solo pueda escribirlo su usuario y ejecute la aplicación con algún otro usuario (con privilegios bajos). Cualquier otro usuario/servicio no debe tener acceso a esos archivos, si no es necesario. ¡Así que siempre asegúrese de seguir el principio de privilegio mínimo!

Lecturas adicionales

Siéntase libre de profundizar más consultando los siguientes recursos:

  1. Terraform security 101: mejores prácticas para una infraestructura segura como código
  2. TerraGoat : un repositorio de Terraform "vulnerable por diseño"
  3. checkov : herramienta de análisis estático IaC
  4. Nuking de todos los grupos de recursos de Azure en todas las suscripciones de Azure

Conclusión

Espero que hayas disfrutado este artículo: analizamos diferentes formas en que un atacante puede explotar Terraform o cualquier otro IaC para el caso.

Para reiterar: todo debe estar preparado teniendo en cuenta la seguridad, ya sea el código de su aplicación o el código que usa para girar la infraestructura para sus aplicaciones. De lo contrario, alguien puede aprovechar las configuraciones incorrectas y otros problemas para comprometer la integridad y la confidencialidad de su entorno.

Esto subraya la importancia de un enfoque centrado en la seguridad. Ya sea que sea un desarrollador, un investigador de seguridad o un DevOps, esta mentalidad es imprescindible.

¡Y estamos aquí para ayudar! Con miles de videos técnicos, laboratorios prácticos y bootcamps a pedido, nuestro contenido cubre mucho sobre cosas que le gustaría aprender en el campo de la seguridad de la información. Siéntase libre de iniciar sesión y explorar todos los laboratorios que tenemos, simplemente usando una cuenta de Google.

¡Feliz aprendizaje!

© Copyright 2021 - 2022 | unogogo.com | All Rights Reserved