Detectando y evitando el 90% de los Ataques en la Nube con herramientas open-source
Tags: aws, security, opensource, cybersecurity
Published: 2024-02-26 19:00:00

> A raíz de un artículo publicado en [LinkedIn](https://www.linkedin.com/feed/update/urn:li:activity:7161757162694733824/) por **Ashish Rajan, CISO**, donde resume en 3 tipos las bases para atacar la nube, **Toni de la Fuente**, CEO de Prowler nos plantea cómo podríamos mitigarlas usando herramientas open-source. Y si queréis saber más, os invitamos a que escuchéis el [segundo episodio](https://open.spotify.com/episode/5DMM2u6Y0bjeFpn1Nn4VgE?si=rpcrxGonRS61f2Ub91LiLQ) de la temporada 5 del Podcast de Charlas Técnicas de AWS.

La seguridad en la nube sigue siendo una preocupación para aquellas organizaciones que migran cargas de trabajo y datos críticos a la nube. Con la creciente complejidad de las infraestructuras en la nube, resulta clave identificar y mitigar las posibles amenazas. En este blog, exploraremos **tres tipos** de ataques en la nube que cubren una parte significativa de los incidentes de seguridad y cómo Prowler, una herramienta de seguridad en la nube de código abierto, puede ser utilizada para detectar y prevenir estas amenazas en cuestión de minutos.

### Comprendiendo las Amenazas Comunes en la Nube


1. **Pérdida de Credenciales**: Uno de los riesgos más comunes involucra credenciales comprometidas, ya sea a través de acceso no autorizado o permisos excesivos que hayamos otorgado a usuarios. Los atacantes pueden explotar claves API robadas, nombres de usuario/contraseñas u otros mecanismos de autenticación para obtener acceso no autorizado a recursos en la nube.

2. **Recursos Externos Expuestos**: Los recursos en la nube mal configurados o no protegidos que quedan accesibles desde Internet representan otra amenaza significativa. Estos podrían incluir instancias de cómputo, bases de datos, buckets de almacenamiento o APIs, proporcionando a los atacantes puntos de entrada fáciles para explotar vulnerabilidades y comprometer datos sensibles.

3. **Aplicaciones Vulnerables**: Errores de configuración, falta de actualizaciones en los parches de seguridad, utilización de frameworks y bibliotecas desactualizadas o falta de cifrado en tránsito o en el almacenamiento de datos son algunas de las vulnerabilidades que nos podemos encontrar. Los atacantes pueden explotar debilidades dentro de las aplicaciones para obtener acceso no autorizado, realizar reconocimientos y potencialmente escalar privilegios, lo que lleva a violaciones de datos o interrupciones del servicio.

Veamos varios casos de uso y cómo podríamos mitigar cada uno de los escenarios.


### Aprovechando Prowler para la Seguridad en la Nube

[Prowler](https://github.com/prowler-cloud/), una herramienta de seguridad en la nube de código abierto, ofrece controles y verificaciones para detectar y prevenir amenazas de seguridad en la nube. Puede ser un complemento perfecto a los servicios de AWS que ya estés utilizando, como Amazon Inspector, CloudWatch, etc.

Veamos algunos ejemplos:

#### Pérdida de Credenciales:

**Escenario:** Un empleado utiliza credenciales de acceso en un dispositivo ya comprometido o cae víctima de un ataque de phishing, lo que resulta en la filtración de sus credenciales.

¿Cómo podríamos atajar el problema?

**Detección:** Prowler podría ejecutar comprobaciones para identificar usuarios sin credenciales temporales y evaluar los permisos asignados, detectando posibles credenciales comprometidas o permisos excesivos. Además, se puede habilitar AWS CloudTrail para registrar todas las actividades en la cuenta de AWS, lo que permite una visibilidad completa de las acciones realizadas por los usuarios.

Comando: 

```
prowler aws --service iam accessanalyzer \
 --ignore-unused-services
 
                          _
 _ __  _ __ _____      _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V  V /| |  __/ |
| .__/|_|  \___/ \_/\_/ |_|\___|_|v3.13.0
|_| the handy cloud security tool

Date: 2024-02-13 11:45:13


This report is being generated using credentials below:

AWS-CLI Profile: [default] AWS Filter Region: [all]
AWS Account: [552455647653] UserId: [AROAYBIHMGGS6YI4ZXZD5:demo@prowler.com]
Caller Identity ARN: [arn:aws:sts::552455647653:assumed-role/AWSReservedSSO_ProwlerRole_2ad14f771534c04a/demo@prowler.com]

Executing 38 checks, please wait...

-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 38/38 [100%] in 30.3s

Overview Results:
╭────────────────────┬────────────────────╮
│ 44.79% (43) Failed │ 55.21% (53) Passed │
╰────────────────────┴────────────────────╯

Account 552455647653 Scan Results (severity columns are for fails only):
╭────────────┬────────────────┬───────────┬────────────┬────────┬──────────┬───────╮
│ Provider   │ Service        │ Status    │   Critical │   High │   Medium │   Low │
├────────────┼────────────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ accessanalyzer │ FAIL (19) │          0 │      0 │        0 │    19 │
├────────────┼────────────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ iam            │ FAIL (24) │          2 │     15 │        7 │     0 │
╰────────────┴────────────────┴───────────┴────────────┴────────┴──────────┴───────╯
* You only see here those services that contains resources.

Detailed results are in:
 - HTML: /Users/toni/output/prowler-output-552455647653-20240213114513.html
 - JSON-OCSF: /Users/toni/output/prowler-output-552455647653-20240213114513.ocsf.json
 - CSV: /Users/toni/output/prowler-output-552455647653-20240213114513.csv
 - JSON: /Users/toni/output/prowler-output-552455647653-20240213114513.json
 

To see findings detail browse any of those files, for quick review, see the html one.
```

**Prevención:** La compañía podría utilizar AWS Identity and Access Management (IAM) para aplicar políticas de acceso basadas en roles y restringir los permisos de los usuarios según el principio de privilegios mínimos necesarios. También puede aprovechar AWS Single Sign-On (SSO) para facilitar la gestión centralizada de credenciales y la autenticación de usuarios.

**CASO 2. Identificación de Recursos Externos Expuestos**:

La empresa ACME ha desarrollado una aplicación web para gestionar la información de sus clientes, incluyendo datos personales y financieros. Esta aplicación está alojada en un entorno en la nube y utiliza instancias EC2 para ejecutar sus servicio. Parece ser que la instancia EC2 tiene una versión obsoleta del sistema operativo y no ha aplicado los últimos parches de seguridad.

**Detección:**

Prowler nos permite ejecutar una serie de comprobaciones en la configuración de seguridad de la nube e identificar qué servicios están exponiendo información. Además, podemos integrarlo con Shodan.io (motor de búsqueda) para identificar aquellos recursos expuestos públicamente.

Por otro lado, podemos configurar AWS CloudTrail para registrar todas las actividades en la cuenta y detectar intentos de accesos no autorizados desde direcciones IP desconocidas.

Vamos a ejecutar un escaneo de seguridad en los recursos de AWS expuestos a Internet, ignorando aquellos servicios que no se están utilizando.

```
prowler aws --categories internet-exposed \
 --ignore-unused-services 
 
                          _
 _ __  _ __ _____      _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V  V /| |  __/ |
| .__/|_|  \___/ \_/\_/ |_|\___|_|v3.13.0
|_| the handy cloud security tool

Date: 2024-02-13 11:46:25


This report is being generated using credentials below:

AWS-CLI Profile: [default] AWS Filter Region: [all]
AWS Account: [552455647653] UserId: [AROAYBIHMGGS6YI4ZXZD5:toni@prowler.com]
Caller Identity ARN: [arn:aws:sts::552455647653:assumed-role/AWSReservedSSO_ProwlerRole_2ad14f771534c04a/toni@prowler.com]

Executing 45 checks, please wait...

-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 45/45 [100%] in 2:35.0

Overview Results:
╭────────────────────┬────────────────────╮
│ 20.41% (10) Failed │ 79.59% (39) Passed │
╰────────────────────┴────────────────────╯

Account 552455647653 Scan Results (severity columns are for fails only):
╭────────────┬───────────┬───────────┬────────────┬────────┬──────────┬───────╮
│ Provider   │ Service   │ Status    │   Critical │   High │   Medium │   Low │
├────────────┼───────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ lambda    │ PASS (4)  │          0 │      0 │        0 │     0 │
├────────────┼───────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ ec2       │ FAIL (10) │          0 │      1 │        9 │     0 │
╰────────────┴───────────┴───────────┴────────────┴────────┴──────────┴───────╯
* You only see here those services that contains resources.

Detailed results are in:
 - HTML: /Users/toni/output/prowler-output-552455647653-20240213114625.html
 - JSON-OCSF: /Users/toni/output/prowler-output-552455647653-20240213114625.ocsf.json
 - CSV: /Users/toni/output/prowler-output-552455647653-20240213114625.csv
 - JSON: /Users/toni/output/prowler-output-552455647653-20240213114625.json
```
El escaneo nos revela que el 20% de las comprobaciones han fallado. En particular, EC2 muestra un total de 10 fallos, con 1 de alta severidad y el resto de severidad media. Para ver los resultados en detalle disponemos de diferentes formatos de archivo que podemos pasar a nuestros servicios de AWS.

Una vez analizado los servicios expuestos, el siguiente paso será escanear las instancias EC2 en busca de direcciones IP elásticas y compararlas con la base de datos del servicio Shodan para ver si están expuestas públicamente:
 
```
prowler aws --checks ec2_elastic_ip_shodan \
 --shodan API-KEY
 
                          _
 _ __  _ __ _____      _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V  V /| |  __/ |
| .__/|_|  \___/ \_/\_/ |_|\___|_|v3.13.0
|_| the handy cloud security tool

Date: 2024-02-13 11:49:39


This report is being generated using credentials below:

AWS-CLI Profile: [default] AWS Filter Region: [all]
AWS Account: [772455647655] UserId: [GRE4EVERZXZD5:demo@prowler.com]
Caller Identity ARN: [arn:aws:sts::772455647655:assumed-role/AWSReservedSSO_ProwlerRole_2ad14f771534c04a/toni@prowler.com]

Executing 1 check, please wait...

-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 1/1 [100%] in 11.1s

 There are no findings in Account 772455647655
```
Afortunadamente vemos que el escaneo no detectó ninguna anomalía en nuestra cuenta.

**Prevención**

Analizando los logs vemos que efectivamente disponemos de una versión OS que requiere actualización. Nos toca comunicar al equipo de seguridad que apliquen los parches.

Además, podemos implementar medidas adicionales, como el uso de IAM para restringir el acceso a las instancias EC2 y aplicar controles de tráfico de red entrante y saliente (NACLs). 

Para prevenir que esto vuelva a ocurrir, la empresa ha de automatizar el proceso de aplicación de parches utilizando **AWS Systems Manager**. Tendrían que especificar cuándo queremos aplicar las actualizaciones (Maintenance Window), definir qué actualizaciones queremos aplicar (Patch Baseline) y definir las instrucciones que ejecutarán el proceso de actualización (Automation Document).

Por último, podríamos utilizar AWS Config Rules para evaluar continuamente la configuración de seguridad de los recursos de AWS y detectar cualquier desviación de las políticas establecidas.

**CASO 3. Monitoreo de Aplicaciones Vulnerables**:

**Escenario:** Una empresa ha migrado sus aplicaciones a la nube de AWS. Sin embargo, con una migración tan rápida, existe la preocupación de que algunas configuraciones de seguridad no estén optimizadas, lo que podría exponer la infraestructura de la empresa a posibles amenazas y vulnerabilidades.

La empresa quiere realizar una evaluación de su entorno de AWS para identificar y mitigar cualquier vulnerabilidad. Para ello comenzamos analizando la categoría de secrets (gestión de claves, acceso al servicio, almacenamiento seguro de datos confidenciales, etc):

```
prowler aws --categories secrets

                         _
 _ __  _ __ _____      _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V  V /| |  __/ |
| .__/|_|  \___/ \_/\_/ |_|\___|_|v3.13.0
|_| the handy cloud security tool

Date: 2024-02-13 11:51:10


This report is being generated using credentials below:

AWS-CLI Profile: [default] AWS Filter Region: [all]
AWS Account: [552455647653] UserId: [AROAYBIHMGGS6YI4ZXZD5:toni@prowler.com]
Caller Identity ARN: [arn:aws:sts::552455647653:assumed-role/AWSReservedSSO_ProwlerRole_2ad14f771534c04a/toni@prowler.com]

Executing 8 checks, please wait...

-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 8/8 [100%] in 42.7s

Overview Results:
╭─────────────────┬────────────────────╮
│ 0.0% (0) Failed │ 100.0% (38) Passed │
╰─────────────────┴────────────────────╯

Account 552455647653 Scan Results (severity columns are for fails only):
╭────────────┬────────────────┬───────────┬────────────┬────────┬──────────┬───────╮
│ Provider   │ Service        │ Status    │   Critical │   High │   Medium │   Low │
├────────────┼────────────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ lambda         │ PASS (8)  │          0 │      0 │        0 │     0 │
├────────────┼────────────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ cloudformation │ PASS (17) │          0 │      0 │        0 │     0 │
├────────────┼────────────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ cloudwatch     │ PASS (8)  │          0 │      0 │        0 │     0 │
├────────────┼────────────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ ec2            │ PASS (2)  │          0 │      0 │        0 │     0 │
├────────────┼────────────────┼───────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ ssm            │ PASS (3)  │          0 │      0 │        0 │     0 │
╰────────────┴────────────────┴───────────┴────────────┴────────┴──────────┴───────╯
* You only see here those services that contains resources.

Detailed results are in:
 - HTML: /Users/toni/output/prowler-output-552455647653-20240213115110.html
 - JSON-OCSF: /Users/toni/output/prowler-output-552455647653-20240213115110.ocsf.json
 - CSV: /Users/toni/output/prowler-output-552455647653-20240213115110.csv
 - JSON: /Users/toni/output/prowler-output-552455647653-20240213115110.json
```

En la salida se detalla la información sobre cualquier problema detectado, así como las verificaciones que han pasado sin error. En nuestro caso, parece que todas las verificaciones han pasado el corte.

Hagamos un escaneo adicional centrándonos en los servicios de AWS Inspector2 y GuardDuty:
```
prowler aws --service inspector2 guardduty

                         _
 _ __  _ __ _____      _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V  V /| |  __/ |
| .__/|_|  \___/ \_/\_/ |_|\___|_|v3.13.0
|_| the handy cloud security tool

Date: 2024-02-13 11:52:34


This report is being generated using credentials below:

AWS-CLI Profile: [default] AWS Filter Region: [all]
AWS Account: [552455647653] UserId: [AROAYBIHMGGS6YI4ZXZD5:toni@prowler.com]
Caller Identity ARN: [arn:aws:sts::552455647653:assumed-role/AWSReservedSSO_ProwlerRole_2ad14f771534c04a/toni@prowler.com]

Executing 5 checks, please wait...

-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 5/5 [100%] in 25.6s

Overview Results:
╭───────────────────┬─────────────────╮
│ 100.0% (9) Failed │ 0.0% (0) Passed │
╰───────────────────┴─────────────────╯

Account 552455647653 Scan Results (severity columns are for fails only):
╭────────────┬────────────┬──────────┬────────────┬────────┬──────────┬───────╮
│ Provider   │ Service    │ Status   │   Critical │   High │   Medium │   Low │
├────────────┼────────────┼──────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ guardduty  │ FAIL (5) │          0 │      0 │        5 │     0 │
├────────────┼────────────┼──────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ inspector2 │ FAIL (4) │          0 │      0 │        4 │     0 │
╰────────────┴────────────┴──────────┴────────────┴────────┴──────────┴───────╯
* You only see here those services that contains resources.

Detailed results are in:
 - HTML: /Users/toni/output/prowler-output-552455647653-20240213115234.html
 - JSON-OCSF: /Users/toni/output/prowler-output-552455647653-20240213115234.ocsf.json
 - CSV: /Users/toni/output/prowler-output-552455647653-20240213115234.csv
 - JSON: /Users/toni/output/prowler-output-552455647653-20240213115234.json
```
Después de ejecutar el comando vemos que la herramienta ha identificado posibles problemas de seguridad en AWS GuardDuty y AWS Inspector2. El equipo de seguridad tendrá que revisar los informes detallados para tomar las medidas correctivas que hagan falta.

Hasta ahora hemos realizado escaneos más globales (hemos visto los secretos y evaluado algunos servicios específicos), pero queremos bajar un nivel más y verificar las instancias EC2 que conforman la mayor parte de nuestra infraestructura. 

Vamos a ver si nuestras instancias EC2 tienen habilitado IMDsv2 (Instance Metadata Service Version 2). ¿Por qué es necesario hacerlo?

Una configuración incorrecta podría llevar a los atacantes a realizar ataques de reinyección de credenciales (es decir, pordrían acceder a las credenciales temporales, acceder a otros servicios dentro de la organización, escalar privilegios y tener acceso a recursos no autorizados)o simplemente podrían utilizar las credenciales para modificar la configuración de red y redirigir tráfico a destinos maliciosos. También podrían sufrir un ataque DoS (denegación de servicio), inundando el servicio de metadatos y causando interrupción en la disponibilidad del servicio. 

```
prowler aws --checks ec2_instance_imdsv2_enabled
                         _
 _ __  _ __ _____      _| | ___ _ __
| '_ \| '__/ _ \ \ /\ / / |/ _ \ '__|
| |_) | | | (_) \ V  V /| |  __/ |
| .__/|_|  \___/ \_/\_/ |_|\___|_|v3.13.0
|_| the handy cloud security tool

Date: 2024-02-13 11:53:18


This report is being generated using credentials below:

AWS-CLI Profile: [default] AWS Filter Region: [all]
AWS Account: [552455647653] UserId: [AROAYBIHMGGS6YI4ZXZD5:toni@prowler.com]
Caller Identity ARN: [arn:aws:sts::552455647653:assumed-role/AWSReservedSSO_ProwlerRole_2ad14f771534c04a/toni@prowler.com]

Executing 1 check, please wait...

-> Scan completed! |▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉| 1/1 [100%] in 13.6s

Overview Results:
╭──────────────────┬──────────────────╮
│ 50.0% (1) Failed │ 50.0% (1) Passed │
╰──────────────────┴──────────────────╯

Account 552455647653 Scan Results (severity columns are for fails only):
╭────────────┬───────────┬──────────┬────────────┬────────┬──────────┬───────╮
│ Provider   │ Service   │ Status   │   Critical │   High │   Medium │   Low │
├────────────┼───────────┼──────────┼────────────┼────────┼──────────┼───────┤
│ aws        │ ec2       │ FAIL (1) │          0 │      0 │        1 │     0 │
╰────────────┴───────────┴──────────┴────────────┴────────┴──────────┴───────╯
* You only see here those services that contains resources.

Detailed results are in:
 - HTML: /Users/toni/output/prowler-output-552455647653-20240213115318.html
 - JSON-OCSF: /Users/toni/output/prowler-output-552455647653-20240213115318.ocsf.json
 - CSV: /Users/toni/output/prowler-output-552455647653-20240213115318.csv
 - JSON: /Users/toni/output/prowler-output-552455647653-20240213115318.json
```

En este caso, se detecta que una instancia EC2 no tiene habilitado IMDsv2 (Instance Metadata Service version 2), lo que podría exponer la instancia a alguno de los ataques que hemos mencionado anteriormente.

**Prevención:** Si bien Prowler no inspecciona directamente aplicaciones, puede alertar a los usuarios sobre posibles vulnerabilidades detectadas por servicios como Inspector y GuardDuty. Además, también verifica la presencia de datos sensibles en ubicaciones comunes dentro de los entornos cloud.

Combinando lo anterior con las siguientes acciones, podríamos mejorar nuestra seguridad:

- Habilitar IMDsv2 en todas las instancias EC2.
- Implementar VPC endpoints para el servicio de metadatos de instancias (reducimos la exposición de IMDsv2 fuera de nuestro VPC, reduciendo la superficie de ataque).
- Implementar WAF para prevenir ataques DoS.
- Utilizar tanto AWS CloudWatch como Security Hub para monitorear el tráfico y disponer de una vista centralizada de lo que ocurre en nuestro entorno.


### Conclusión

Como véis, mitigar los riesgos de seguridad en la nube requiere medidas proactivas y monitoreo continuo. Con las capacidades de detección y prevención de Prowler, y los servicios de seguridad de AWS, las organizaciones pueden identificar y remediar rápidamente posibles amenazas, protegiendo así sus entornos. 

Siempre recomendamos no esperar hasta que sea demasiado tarde, sino empezar temprano para evitar sustos mayores.

Hasta la próxima.