Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-domains

This commit is contained in:
Translator
2025-01-11 19:16:44 +00:00
parent 9f75e84afc
commit ecf5b2bb87
44 changed files with 1890 additions and 318 deletions

View File

@@ -4,7 +4,7 @@
## Información Básica
**Antes de comenzar el pentesting** en un **AWS** ambiente, hay algunas **cosas básicas que necesitas saber** sobre cómo funciona AWS para ayudarte a entender qué necesitas hacer, cómo encontrar configuraciones incorrectas y cómo explotarlas.
**Antes de comenzar el pentesting** en un **entorno de AWS**, hay algunas **cosas básicas que necesitas saber** sobre cómo funciona AWS para ayudarte a entender qué necesitas hacer, cómo encontrar configuraciones incorrectas y cómo explotarlas.
Conceptos como la jerarquía de organización, IAM y otros conceptos básicos se explican en:
@@ -29,21 +29,21 @@ Herramientas para simular ataques:
## Metodología de Pentester/Red Team de AWS
Para auditar un ambiente de AWS, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de AWS y los **servicios externos**.
Para auditar un entorno de AWS, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de AWS y los **servicios externos**.
Desde el punto de vista de un Red Team, el **primer paso para comprometer un ambiente de AWS** es lograr obtener algunas **credenciales**. Aquí tienes algunas ideas sobre cómo hacerlo:
Desde el punto de vista de un Red Team, el **primer paso para comprometer un entorno de AWS** es conseguir obtener algunas **credenciales**. Aquí tienes algunas ideas sobre cómo hacerlo:
- **Leaks** en github (o similar) - OSINT
- **Filtraciones** en github (o similar) - OSINT
- **Ingeniería** Social
- Reutilización de **contraseñas** (filtraciones de contraseñas)
- Vulnerabilidades en Aplicaciones Alojadas en AWS
- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) con acceso al endpoint de metadatos
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con acceso al endpoint de metadatos
- **Lectura de Archivos Locales**
- `/home/USERNAME/.aws/credentials`
- `C:\Users\USERNAME\.aws\credentials`
- **brechas** de terceros
- **terceros** **comprometidos**
- Empleado **Interno**
- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)credenciales
- [**Cognito** ](aws-services/aws-cognito-enum/index.html#cognito)credenciales
O comprometiendo un servicio **no autenticado** expuesto:
@@ -58,21 +58,21 @@ aws-permissions-for-a-pentest.md
{{#endref}}
> [!NOTE]
> Después de haber logrado obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, por lo que necesitas realizar alguna enumeración básica:
> Después de haber conseguido obtener credenciales, necesitas saber **a quién pertenecen esas credenciales**, y **a qué tienen acceso**, por lo que necesitas realizar alguna enumeración básica:
## Enumeración Básica
### SSRF
Si encontraste un SSRF en una máquina dentro de AWS, revisa esta página para trucos:
Si encontraste un SSRF en una máquina dentro de AWS, consulta esta página para trucos:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
### Whoami
Una de las primeras cosas que necesitas saber es quién eres (en qué cuenta estás y otra información sobre el ambiente de AWS):
Una de las primeras cosas que necesitas saber es quién eres (en qué cuenta estás y otra información sobre el entorno de AWS):
```bash
# Easiest way, but might be monitored?
aws sts get-caller-identity
@@ -110,18 +110,18 @@ aws-services/aws-iam-enum.md
{{#endref}}
> [!NOTE]
> Ahora que **tiene algo de información sobre sus credenciales** (y si es un equipo rojo, espero que **no haya sido detectado**). Es hora de averiguar qué servicios se están utilizando en el entorno.\
> Ahora que **tiene algo de información sobre sus credenciales** (y si es un red team, espero que **no haya sido detectado**). Es hora de averiguar qué servicios se están utilizando en el entorno.\
> En la siguiente sección puede verificar algunas formas de **enumerar algunos servicios comunes.**
## Enumeración de Servicios, Post-Explotación y Persistencia
AWS tiene una asombrosa cantidad de servicios, en la siguiente página encontrará **información básica, cheatsheets de enumeración**, cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos:
AWS tiene una asombrosa cantidad de servicios, en la siguiente página encontrará **información básica, enumeración** cheatsheets\*\*,\*\* cómo **evitar la detección**, obtener **persistencia** y otros trucos de **post-explotación** sobre algunos de ellos:
{{#ref}}
aws-services/
{{#endref}}
Tenga en cuenta que **no** necesita realizar todo el trabajo **manualmente**, a continuación en esta publicación puede encontrar una **sección sobre** [**herramientas automáticas**](./#automated-tools).
Tenga en cuenta que **no** necesita realizar todo el trabajo **manualmente**, a continuación en esta publicación puede encontrar una **sección sobre** [**herramientas automáticas**](#automated-tools).
Además, en esta etapa puede haber descubierto **más servicios expuestos a usuarios no autenticados**, podría ser capaz de explotarlos:
@@ -139,13 +139,13 @@ aws-privilege-escalation/
## Servicios Expuestos Públicamente
Mientras enumera los servicios de AWS, puede haber encontrado algunos de ellos **exponiendo elementos a Internet** (puertos de VM/Contenedores, bases de datos o servicios de cola, instantáneas o buckets...).\
Como pentester/equipo rojo, siempre debe verificar si puede encontrar **información sensible / vulnerabilidades** en ellos, ya que podrían proporcionarle **más acceso a la cuenta de AWS**.
Mientras enumeraba los servicios de AWS, puede haber encontrado algunos de ellos **exponiendo elementos a Internet** (puertos de VM/Contenedores, bases de datos o servicios de cola, instantáneas o buckets...).\
Como pentester/red teamer, siempre debe verificar si puede encontrar **información sensible / vulnerabilidades** en ellos, ya que podrían proporcionarle **más acceso a la cuenta de AWS**.
En este libro debería encontrar **información** sobre cómo encontrar **servicios de AWS expuestos y cómo verificarlos**. Sobre cómo encontrar **vulnerabilidades en servicios de red expuestos**, le recomendaría **buscar** el **servicio** específico en:
{{#ref}}
https://book.hacktricks.xyz/
https://book.hacktricks.wiki/
{{#endref}}
## Comprometiendo la Organización
@@ -161,9 +161,9 @@ Por lo tanto, para acceder como administrador a una cuenta secundaria, necesita:
- **Comprometer** la **cuenta de administración** y encontrar el **ID** de las **cuentas secundarias** y los **nombres** del **rol** (OrganizationAccountAccessRole por defecto) que permite a la cuenta de administración acceder como administrador.
- Para encontrar cuentas secundarias, vaya a la sección de organizaciones en la consola de aws o ejecute `aws organizations list-accounts`
- No puede encontrar el nombre de los roles directamente, así que verifique todas las políticas IAM personalizadas y busque cualquier que permita **`sts:AssumeRole` sobre las cuentas secundarias descubiertas previamente**.
- **Comprometer** un **principal** en la cuenta de administración con **permiso `sts:AssumeRole` sobre el rol en las cuentas secundarias** (incluso si la cuenta permite que cualquiera de la cuenta de administración se haga pasar por ella, como es una cuenta externa, son necesarios permisos específicos de `sts:AssumeRole`).
- **Comprometer** un **principal** en la cuenta de administración con **permiso `sts:AssumeRole` sobre el rol en las cuentas secundarias** (incluso si la cuenta permite que cualquiera de la cuenta de administración se impersonifique, como es una cuenta externa, son necesarios permisos específicos de `sts:AssumeRole`).
## Herramientas Automatizadas
## Herramientas Automáticas
### Recon
@@ -255,7 +255,7 @@ pacu
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
```
- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) es un script y biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes IAM Users y Roles en una cuenta como un grafo dirigido, lo que permite verificar **privilege escalation** y los caminos alternativos que un atacante podría tomar para obtener acceso a un recurso o acción en AWS. Puedes verificar los **permissions utilizados para encontrar privesc** caminos en los nombres de archivo que terminan en `_edges.py` en [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) es un script y biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes Usuarios y Roles de IAM en una cuenta como un grafo dirigido, lo que permite verificar **escaladas de privilegios** y caminos alternativos que un atacante podría tomar para obtener acceso a un recurso o acción en AWS. Puedes verificar los **permisos utilizados para encontrar caminos de privesc** en los nombres de archivo que terminan en `_edges.py` en [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
```bash
# Install
pip install principalmapper
@@ -278,7 +278,7 @@ pmapper --profile dev orgs create
pmapper --profile dev orgs display
```
- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining es una herramienta de evaluación de seguridad de AWS IAM que identifica violaciones del principio de menor privilegio y genera un informe HTML priorizado por riesgo.\
Mostrará los clientes **sobre privilegiados** potencialmente, las políticas en línea y de aws **y qué principales tienen acceso a ellas**. (No solo verifica privesc, sino también otros tipos de permisos interesantes, se recomienda su uso).
Mostrará los clientes **sobre privilegiados** potencialmente, las **políticas** en línea y de aws, y qué **principales tienen acceso a ellas**. (No solo verifica privesc, sino también otros tipos de permisos interesantes, se recomienda su uso).
```bash
# Install
pip install cloudsplaining
@@ -303,7 +303,7 @@ cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /
# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
```
- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler es una herramienta de seguridad de código abierto para realizar evaluaciones de las mejores prácticas de seguridad de AWS, auditorías, respuesta a incidentes, monitoreo continuo, endurecimiento y preparación para forenses.
- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler es una herramienta de seguridad de código abierto para realizar evaluaciones de las mejores prácticas de seguridad de AWS, auditorías, respuesta a incidentes, monitoreo continuo, endurecimiento y preparación forense.
```bash
# Install python3, jq and git
# Install
@@ -335,7 +335,7 @@ scout aws -p dev
### Auditoría Constante
- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian es un motor de reglas para gestionar cuentas y recursos de nube pública. Permite a los usuarios **definir políticas para habilitar una infraestructura en la nube bien gestionada**, que sea segura y optimizada en costos. Consolida muchos de los scripts ad-hoc que las organizaciones tienen en una herramienta ligera y flexible, con métricas y reportes unificados.
- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** es una plataforma para **monitoreo continuo de cumplimiento, reporte de cumplimiento y automatización de seguridad para la nube**. En PacBot, las políticas de seguridad y cumplimiento se implementan como código. Todos los recursos descubiertos por PacBot se evalúan contra estas políticas para medir la conformidad con las políticas. El marco **auto-fix** de PacBot proporciona la capacidad de responder automáticamente a violaciones de políticas tomando acciones predefinidas.
- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** es una plataforma para **monitoreo continuo de cumplimiento, reporte de cumplimiento y automatización de seguridad para la nube**. En PacBot, las políticas de seguridad y cumplimiento se implementan como código. Todos los recursos descubiertos por PacBot se evalúan contra estas políticas para medir la conformidad con las políticas. El marco **auto-fix** de PacBot proporciona la capacidad de responder automáticamente a las violaciones de políticas tomando acciones predefinidas.
- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert es un marco de análisis de datos **en tiempo real** sin servidor que te permite **ingresar, analizar y alertar** sobre datos de cualquier entorno, **usando fuentes de datos y lógica de alertas que defines**. Los equipos de seguridad informática utilizan StreamAlert para escanear terabytes de datos de registro todos los días para la detección y respuesta a incidentes.
## DEBUG: Capturar solicitudes de AWS cli

View File

@@ -7,10 +7,10 @@
Para obtener información sobre SAML, consulta:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/saml-attacks
https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
{{#endref}}
Para configurar una **Federación de Identidad a través de SAML**, solo necesitas proporcionar un **nombre** y el **XML de metadatos** que contenga toda la configuración de SAML (**puntos finales**, **certificado** con clave pública)
Para configurar una **Federación de Identidad a través de SAML**, solo necesitas proporcionar un **nombre** y el **XML de metadatos** que contenga toda la configuración de SAML (**puntos finales**, **certificado** con clave pública).
## OIDC - Abuso de Github Actions
@@ -18,7 +18,7 @@ Para agregar una acción de github como proveedor de identidad:
1. Para _Tipo de proveedor_, selecciona **OpenID Connect**.
2. Para _URL del proveedor_, ingresa `https://token.actions.githubusercontent.com`
3. Haz clic en _Obtener huella digital_ para obtener la huella digital del proveedor
3. Haz clic en _Obtener huella digital_ para obtener la huella digital del proveedor.
4. Para _Audiencia_, ingresa `sts.amazonaws.com`
5. Crea un **nuevo rol** con los **permisos** que necesita la acción de github y una **política de confianza** que confíe en el proveedor como:
- ```json
@@ -108,7 +108,7 @@ Es posible generar **OIDC providers** en un **EKS** cluster simplemente configur
]
}
```
Esta política indica correctamente que **solo** el **clúster EKS** con **id** `20C159CDF6F2349B68846BEC03BE031B` puede asumir el rol. Sin embargo, no indica qué cuenta de servicio puede asumirlo, lo que significa que **CUALQUIER cuenta de servicio con un token de identidad web** podrá **asumir** el rol.
Esta política está indicando correctamente que **solo** el **clúster EKS** con **id** `20C159CDF6F2349B68846BEC03BE031B` puede asumir el rol. Sin embargo, no está indicando qué cuenta de servicio puede asumirlo, lo que significa que **CUALQUIER cuenta de servicio con un token de identidad web** va a **poder asumir** el rol.
Para especificar **qué cuenta de servicio debería poder asumir el rol,** es necesario especificar una **condición** donde se **especifica el nombre de la cuenta de servicio**, como:
```bash

View File

@@ -56,9 +56,9 @@ Si encuentras un **volumen sin una instantánea** podrías: **Crear una instant
aws-ebs-snapshot-dump.md
{{#endref}}
### Exfiltración de Datos
### Exfiltración de datos
#### Exfiltración por DNS
#### Exfiltración DNS
Incluso si aseguras un EC2 para que no pueda salir tráfico, aún puede **exfiltrarse a través de DNS**.
@@ -72,20 +72,20 @@ Incluso si aseguras un EC2 para que no pueda salir tráfico, aún puede **exfilt
Un atacante podría llamar a los puntos finales de la API de una cuenta controlada por él. Cloudtrail registrará estas llamadas y el atacante podrá ver los datos exfiltrados en los registros de Cloudtrail.
### Grupo de Seguridad Abierto
### Grupo de seguridad abierto
Podrías obtener acceso adicional a los servicios de red abriendo puertos así:
```bash
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
# Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC
```
### Privesc a ECS
### Privesc to ECS
Es posible ejecutar una instancia de EC2 y registrarla para ser utilizada para ejecutar instancias de ECS y luego robar los datos de las instancias de ECS.
Para [**más información consulta esto**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs).
### Eliminar registros de flujo de VPC
### Remove VPC flow logs
```bash
aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
```
@@ -104,7 +104,7 @@ Además de la ejecución de comandos, SSM permite el túnel de tráfico, lo que
```shell
aws ssm start-session --target "$INSTANCE_ID"
```
3. Obtén las credenciales temporales de Bastion EC2 AWS con el script de [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment)
3. Obtén las credenciales temporales de Bastion EC2 AWS con el script de [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment)
4. Transfiere las credenciales a tu propia máquina en el archivo `$HOME/.aws/credentials` como perfil `[bastion-ec2]`
5. Inicia sesión en EKS como el Bastion EC2:
```shell
@@ -121,9 +121,9 @@ kubectl get pods --insecure-skip-tls-verify
```
Tenga en cuenta que las conexiones SSL fallarán a menos que establezca la bandera `--insecure-skip-tls-verify` (o su equivalente en las herramientas de auditoría de K8s). Dado que el tráfico se canaliza a través del túnel seguro de AWS SSM, está a salvo de cualquier tipo de ataques MitM.
Finalmente, esta técnica no es específica para atacar clústeres EKS privados. Puede establecer dominios y puertos arbitrarios para pivotar a cualquier otro servicio de AWS o a una aplicación personalizada.
Finalmente, esta técnica no es específica para atacar clústeres privados de EKS. Puede establecer dominios y puertos arbitrarios para pivotar a cualquier otro servicio de AWS o a una aplicación personalizada.
### Compartir AMI
### Share AMI
```bash
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
@@ -139,7 +139,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
Una prueba de concepto similar a la demostración de Ransomware presentada en las notas de post-explotación de S3. KMS debería renombrarse a RMS por Ransomware Management Service debido a lo fácil que es usarlo para cifrar varios servicios de AWS.
Primero, desde una cuenta de AWS del 'atacante', crea una clave administrada por el cliente en KMS. Para este ejemplo, solo haremos que AWS administre los datos de la clave por mí, pero en un escenario realista, un actor malicioso retendría los datos de la clave fuera del control de AWS. Cambia la política de la clave para permitir que cualquier Principal de cuenta de AWS use la clave. Para esta política de clave, el nombre de la cuenta era 'AttackSim' y la regla de política que permite todo el acceso se llama 'Outside Encryption'
Primero, desde una cuenta de AWS 'atacante', crea una clave administrada por el cliente en KMS. Para este ejemplo, solo haremos que AWS administre los datos de la clave por mí, pero en un escenario realista, un actor malicioso retendría los datos de la clave fuera del control de AWS. Cambia la política de la clave para permitir que cualquier Principal de cuenta de AWS use la clave. Para esta política de clave, el nombre de la cuenta era 'AttackSim' y la regla de política que permite todo el acceso se llama 'Outside Encryption'.
```
{
"Version": "2012-10-17",
@@ -239,7 +239,7 @@ La regla de la política de clave necesita que se habiliten lo siguiente para pe
- `kms:GenerateDataKeyWithoutPlainText`
- `kms:ReEncrypt`
Ahora con la clave accesible públicamente para usar. Podemos utilizar una cuenta de 'víctima' que tenga algunas instancias EC2 activas con volúmenes EBS no cifrados adjuntos. Los volúmenes EBS de esta cuenta de 'víctima' son nuestro objetivo para el cifrado, este ataque se realiza bajo la suposición de una violación de una cuenta de AWS de alto privilegio.
Ahora, con la clave accesible públicamente para usar. Podemos utilizar una cuenta de 'víctima' que tenga algunas instancias EC2 activas con volúmenes EBS sin cifrar adjuntos. Los volúmenes EBS de esta cuenta de 'víctima' son nuestro objetivo para el cifrado, este ataque se realiza bajo la suposición de una violación de una cuenta de AWS de alto privilegio.
![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459)
@@ -249,7 +249,7 @@ Esto resulta en que solo queden volúmenes EBS cifrados disponibles en la cuenta
![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220)
También vale la pena mencionar que el script detuvo las instancias EC2 para separar y eliminar los volúmenes EBS originales. Los volúmenes originales no cifrados ya no están.
También vale la pena mencionar que el script detuvo las instancias EC2 para separar y eliminar los volúmenes EBS originales. Los volúmenes originales sin cifrar ya no están.
![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e)
@@ -324,7 +324,7 @@ A continuación, regrese a la política de clave en la cuenta del 'atacante' y e
]
}
```
Espera un momento para que la nueva política de claves se propague. Luego regresa a la cuenta de 'víctima' e intenta adjuntar uno de los volúmenes EBS recién cifrados. Descubrirás que puedes adjuntar el volumen.
Espera un momento para que la nueva política de claves se propague. Luego regresa a la cuenta de 'víctima' e intenta adjuntar uno de los nuevos volúmenes EBS cifrados. Verás que puedes adjuntar el volumen.
![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4)
@@ -332,7 +332,7 @@ Pero cuando intentes reiniciar la instancia EC2 con el volumen EBS cifrado, simp
![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0)
Este es el script de python utilizado. Toma credenciales de AWS para una cuenta de 'víctima' y un valor ARN de AWS disponible públicamente para la clave que se utilizará para el cifrado. El script hará copias cifradas de TODOS los volúmenes EBS disponibles adjuntos a TODAS las instancias EC2 en la cuenta de AWS objetivo, luego detendrá cada instancia EC2, separará los volúmenes EBS originales, los eliminará y finalmente eliminará todos los snapshots utilizados durante el proceso. Esto dejará solo volúmenes EBS cifrados en la cuenta de 'víctima' objetivo. SOLO UTILIZA ESTE SCRIPT EN UN ENTORNO DE PRUEBA, ES DESTRUCTIVO Y ELIMINARÁ TODOS LOS VOLUMENES EBS ORIGINALES. Puedes recuperarlos usando la clave KMS utilizada y restaurarlos a su estado original a través de snapshots, pero solo quiero hacerte consciente de que esto es una prueba de concepto de ransomware al final del día.
Este es el script de python utilizado. Toma credenciales de AWS para una cuenta de 'víctima' y un valor ARN de AWS disponible públicamente para la clave que se utilizará para el cifrado. El script hará copias cifradas de TODOS los volúmenes EBS disponibles adjuntos a TODAS las instancias EC2 en la cuenta de AWS objetivo, luego detendrá cada instancia EC2, desacoplará los volúmenes EBS originales, los eliminará y finalmente eliminará todos los snapshots utilizados durante el proceso. Esto dejará solo volúmenes EBS cifrados en la cuenta de 'víctima' objetivo. SOLO UTILIZA ESTE SCRIPT EN UN ENTORNO DE PRUEBA, ES DESTRUCTIVO Y ELIMINARÁ TODOS LOS VOLUMENES EBS ORIGINALES. Puedes recuperarlos usando la clave KMS utilizada y restaurarlos a su estado original a través de snapshots, pero solo quiero hacerte consciente de que esto es una prueba de concepto de ransomware al final del día.
```
import boto3
import argparse

View File

@@ -49,7 +49,7 @@ aws ecr get-download-url-for-layer \
Después de descargar las imágenes, debes **verificarlas en busca de información sensible**:
{{#ref}}
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
{{#endref}}
### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage`

View File

@@ -4,7 +4,7 @@
## ECS
Para más información, consulta:
Para más información consulta:
{{#ref}}
../aws-services/aws-ecs-enum.md
@@ -12,11 +12,11 @@ Para más información, consulta:
### Roles IAM de Host
En ECS, un **rol IAM puede ser asignado a la tarea** que se ejecuta dentro del contenedor. **Si** la tarea se ejecuta dentro de una **instancia EC2**, la **instancia EC2** tendrá un **rol IAM** diferente adjunto.\
Lo que significa que si logras **comprometer** una instancia ECS, potencialmente puedes **obtener el rol IAM asociado al ECR y a la instancia EC2**. Para más información sobre cómo obtener esas credenciales, consulta:
En ECS, un **rol IAM puede ser asignado a la tarea** que se ejecuta dentro del contenedor. **Si** la tarea se ejecuta dentro de una **instancia EC2**, la **instancia EC2** tendrá **otro rol IAM** adjunto.\
Lo que significa que si logras **comprometer** una instancia ECS, puedes potencialmente **obtener el rol IAM asociado al ECR y a la instancia EC2**. Para más información sobre cómo obtener esas credenciales consulta:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
> [!CAUTION]
@@ -28,12 +28,12 @@ Además, EC2 utiliza docker para ejecutar tareas de ECS, así que si puedes esca
#### Haciendo que los contenedores se ejecuten en el host actual
Además, el **rol de la instancia EC2** generalmente tendrá suficientes **permisos** para **actualizar el estado de la instancia del contenedor** de las instancias EC2 que se utilizan como nodos dentro del clúster. Un atacante podría modificar el **estado de una instancia a DRAINING**, luego ECS **eliminará todas las tareas de ella** y las que se están ejecutando como **REPLICA** se **ejecutarán en una instancia diferente,** potencialmente dentro de la **instancia del atacante**, para que pueda **robar sus roles IAM** y potencial información sensible desde dentro del contenedor.
Además, el **rol de la instancia EC2** generalmente tendrá suficientes **permisos** para **actualizar el estado de la instancia de contenedor** de las instancias EC2 que se utilizan como nodos dentro del clúster. Un atacante podría modificar el **estado de una instancia a DRAINING**, luego ECS **eliminará todas las tareas de ella** y las que se están ejecutando como **REPLICA** serán **ejecutadas en una instancia diferente,** potencialmente dentro de la **instancia del atacante** para que pueda **robar sus roles IAM** y potencial información sensible desde dentro del contenedor.
```bash
aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
```
La misma técnica se puede realizar **dando de baja la instancia EC2 del clúster**. Esto es potencialmente menos sigiloso, pero **forzará a que las tareas se ejecuten en otras instancias:**
La misma técnica se puede realizar **deregistrando la instancia EC2 del clúster**. Esto es potencialmente menos sigiloso, pero **forzará a que las tareas se ejecuten en otras instancias:**
```bash
aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force

View File

@@ -14,7 +14,7 @@ Más información sobre lambda en:
Los usuarios con los permisos **`iam:PassRole`, `lambda:CreateFunction` y `lambda:InvokeFunction`** pueden escalar sus privilegios.\
Pueden **crear una nueva función Lambda y asignarle un rol IAM existente**, otorgando a la función los permisos asociados con ese rol. El usuario puede luego **escribir y subir código a esta función Lambda (con un rev shell, por ejemplo)**.\
Una vez que la función está configurada, el usuario puede **activar su ejecución** y las acciones previstas invocando la función Lambda a través de la API de AWS. Este enfoque permite efectivamente al usuario realizar tareas indirectamente a través de la función Lambda, operando con el nivel de acceso otorgado al rol IAM asociado con ella.\\
Una vez que la función está configurada, el usuario puede **activar su ejecución** y las acciones previstas invocando la función Lambda a través de la API de AWS. Este enfoque permite efectivamente al usuario realizar tareas de manera indirecta a través de la función Lambda, operando con el nivel de acceso otorgado al rol IAM asociado con ella.\\
Un atacante podría abusar de esto para obtener un **rev shell y robar el token**:
```python:rev.py
@@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess'
)
return response
```
También es posible filtrar las credenciales del rol de la lambda sin necesidad de una conexión externa. Esto sería útil para **Lambdas aisladas de la red** utilizadas en tareas internas. Si hay grupos de seguridad desconocidos filtrando tus shells inversos, este fragmento de código te permitirá filtrar directamente las credenciales como la salida de la lambda.
También es posible filtrar las credenciales del rol de la lambda sin necesidad de una conexión externa. Esto sería útil para **Lambdas aisladas de la red** utilizadas en tareas internas. Si hay grupos de seguridad desconocidos filtrando tus shells reversos, este fragmento de código te permitirá filtrar directamente las credenciales como la salida de la lambda.
```python
def handler(event, context):
sessiontoken = open('/proc/self/environ', "r").read()
@@ -79,7 +79,7 @@ cat output.txt
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission`
Al igual que en el escenario anterior, puede **otorgarse a sí mismo el permiso `lambda:InvokeFunction`** si tiene el permiso **`lambda:AddPermission`**
Al igual que en el escenario anterior, puede **otorgarse el permiso `lambda:InvokeFunction`** si tiene el permiso **`lambda:AddPermission`**
```bash
# Check the previous exploit and use the following line to grant you the invoke permissions
aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \
@@ -89,7 +89,7 @@ aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping`
Los usuarios con permisos de **`iam:PassRole`, `lambda:CreateFunction` y `lambda:CreateEventSourceMapping`** (y potencialmente `dynamodb:PutItem` y `dynamodb:CreateTable`) pueden **escalar privilegios** de manera indirecta incluso sin `lambda:InvokeFunction`.\
Los usuarios con permisos de **`iam:PassRole`, `lambda:CreateFunction` y `lambda:CreateEventSourceMapping`** (y potencialmente `dynamodb:PutItem` y `dynamodb:CreateTable`) pueden **escalar privilegios** indirectamente incluso sin `lambda:InvokeFunction`.\
Pueden crear una **función Lambda con código malicioso y asignarle un rol IAM existente**.
En lugar de invocar directamente la Lambda, el usuario configura o utiliza una tabla DynamoDB existente, vinculándola a la Lambda a través de un mapeo de fuente de eventos. Esta configuración asegura que la función Lambda se **active automáticamente al ingresar un nuevo elemento** en la tabla, ya sea por la acción del usuario o por otro proceso, invocando indirectamente la función Lambda y ejecutando el código con los permisos del rol IAM pasado.
@@ -99,7 +99,7 @@ aws lambda create-function --function-name my_function \
--handler lambda_function.lambda_handler \
--zip-file fileb://rev.zip
```
Si DynamoDB ya está activo en el entorno de AWS, el usuario solo **necesita establecer el mapeo de la fuente de eventos** para la función Lambda. Sin embargo, si DynamoDB no está en uso, el usuario debe **crear una nueva tabla** con la transmisión habilitada:
Si DynamoDB ya está activo en el entorno de AWS, el usuario solo **necesita establecer el mapeo de la fuente de eventos** para la función Lambda. Sin embargo, si DynamoDB no está en uso, el usuario debe **crear una nueva tabla** con streaming habilitado:
```bash
aws dynamodb create-table --table-name my_table \
--attribute-definitions AttributeName=Test,AttributeType=S \
@@ -170,7 +170,7 @@ aws --profile none-priv lambda update-function-configuration --function-name <fu
Para otros lenguajes de scripting, hay otras variables de entorno que puedes usar. Para más información, consulta las subsecciones de lenguajes de scripting en:
{{#ref}}
https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse
https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/index.html
{{#endref}}
#### RCE a través de Lambda Layers
@@ -208,10 +208,10 @@ Por ejemplo, supongamos que la lambda está usando la biblioteca boto3, esto cre
```bash
pip3 install -t ./lambda_layer boto3
```
Puedes abrir `./lambda_layer/boto3/__init__.py` y **agregar la puerta trasera en el código global** (una función para exfiltrar credenciales o obtener un shell reverso, por ejemplo).
Puedes abrir `./lambda_layer/boto3/__init__.py` y **agregar la puerta trasera en el código global** (una función para exfiltrar credenciales o obtener un shell inverso, por ejemplo).
Luego, comprime ese directorio `./lambda_layer` y **sube la nueva capa de lambda** en tu propia cuenta (o en la de las víctimas, pero puede que no tengas permisos para esto).\
Ten en cuenta que necesitas crear una carpeta python y poner las bibliotecas allí para sobrescribir /opt/python/boto3. Además, la capa necesita ser **compatible con la versión de python** utilizada por la lambda y si la subes a tu cuenta, debe estar en la **misma región:**
Luego, comprime ese directorio `./lambda_layer` y **sube la nueva capa de lambda** en tu propia cuenta (o en la de las víctimas, pero es posible que no tengas permisos para esto).\
Ten en cuenta que necesitas crear una carpeta python y poner las bibliotecas allí para sobrescribir /opt/python/boto3. Además, la capa debe ser **compatible con la versión de python** utilizada por la lambda y si la subes a tu cuenta, debe estar en la **misma región:**
```bash
aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6"
```
@@ -244,7 +244,7 @@ Quizás con esos permisos puedas crear una función y ejecutarla llamando a la U
### Lambda MitM
Algunas lambdas van a estar **recibiendo información sensible de los usuarios en parámetros.** Si obtienes RCE en una de ellas, puedes exfiltrar la información que otros usuarios le están enviando, revísalo en:
Algunas lambdas van a **recibir información sensible de los usuarios en parámetros.** Si obtienes RCE en una de ellas, puedes exfiltrar la información que otros usuarios le están enviando, revísalo en:
{{#ref}}
../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md

View File

@@ -24,7 +24,7 @@ aws --region us-east-1 --profile ad docdb describe-db-cluster-snapshot-attribute
Como DocumentDB es una base de datos compatible con MongoDB, puedes imaginar que también es vulnerable a ataques comunes de inyección NoSQL:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/nosql-injection
https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html
{{#endref}}
### DocumentDB

View File

@@ -18,7 +18,7 @@ Por defecto, DynamoDB utiliza una clave KMS que **pertenece a Amazon DynamoDB,**
### Copias de Seguridad y Exportación a S3
Es posible **programar** la generación de **copias de seguridad de tablas** o crearlas **a demanda**. Además, también es posible habilitar **la recuperación en el tiempo (PITR) para una tabla.** La recuperación en el tiempo proporciona **copias de seguridad** continuas de tus datos de DynamoDB durante **35 días** para ayudarte a protegerte contra operaciones de escritura o eliminación accidentales.
Es posible **programar** la generación de **copias de seguridad de la tabla** o crearlas **a demanda**. Además, también es posible habilitar **la recuperación en el tiempo (PITR) para una tabla.** La recuperación en el tiempo proporciona **copias de seguridad** continuas de tus datos de DynamoDB durante **35 días** para ayudarte a protegerte contra operaciones de escritura o eliminación accidentales.
También es posible exportar **los datos de una tabla a S3**, pero la tabla debe tener **PITR habilitado**.
@@ -84,7 +84,7 @@ aws dynamodb describe-endpoints #Dynamodb endpoints
Hay formas de acceder a los datos de DynamoDB con **sintaxis SQL**, por lo tanto, **inyecciones SQL típicas también son posibles**.
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/sql-injection
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
{{#endref}}
### Inyección NoSQL
@@ -95,7 +95,7 @@ Puedes encontrar aquí las condiciones soportadas por DynamoDB: [https://docs.aw
Ten en cuenta que se soportan **diferentes condiciones** si los datos se acceden a través de **`query`** o a través de **`scan`**.
> [!NOTE]
> De hecho, las acciones de **Query** necesitan especificar la **condición "EQ" (igual)** en la clave **primaria** para funcionar, lo que las hace mucho **menos propensas a inyecciones NoSQL** (y también limita mucho la operación).
> De hecho, las acciones de **Query** necesitan especificar la **condición "EQ" (igual)** en la **clave primaria** para funcionar, lo que las hace mucho **menos propensas a inyecciones NoSQL** (y también limita mucho la operación).
Si puedes **cambiar la comparación** realizada o agregar nuevas, podrías recuperar más datos.
```bash
@@ -105,7 +105,7 @@ Si puedes **cambiar la comparación** realizada o agregar nuevas, podrías recup
"GT": " " #All strings are greater than a space
```
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/nosql-injection
https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html
{{#endref}}
### Inyección de Json en bruto
@@ -152,9 +152,9 @@ Algunos SDK permiten usar una cadena que indica el filtrado que se debe realizar
```java
new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)
```
Necesitas saber que al buscar en DynamoDB para **sustituir** un **valor** de atributo en **expresiones de filtro** mientras se escanean los elementos, los tokens deben **comenzar** con el carácter **`:`**. Tales tokens serán **reemplazados** con el **valor de atributo real en tiempo de ejecución**.
Es importante saber que al buscar en DynamoDB para **sustituir** un **valor** de atributo en **expresiones de filtro** mientras se escanean los elementos, los tokens deben **comenzar** con el carácter **`:`**. Tales tokens serán **reemplazados** con el **valor de atributo real en tiempo de ejecución**.
Por lo tanto, un inicio de sesión como el anterior puede ser eludido con algo como:
Por lo tanto, un inicio de sesión como el anterior se puede eludir con algo como:
```bash
:username = :username or :username
# This will generate the query:

View File

@@ -1,8 +1,8 @@
# AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
# AWS - EC2, EBS, ELB, SSM, VPC y VPN Enum
{{#include ../../../../banners/hacktricks-training.md}}
## VPC & Networking
## VPC y Redes
Aprende qué es una VPC y sobre sus componentes en:
@@ -12,7 +12,7 @@ aws-vpc-and-networking-basic-information.md
## EC2
Amazon EC2 se utiliza para iniciar **servidores virtuales**. Permite la configuración de **seguridad** y **redes** y la gestión de **almacenamiento**. La flexibilidad de Amazon EC2 es evidente en su capacidad para escalar recursos tanto hacia arriba como hacia abajo, adaptándose efectivamente a los cambios en los requisitos o aumentos en la popularidad. Esta característica disminuye la necesidad de predicciones precisas de tráfico.
Amazon EC2 se utiliza para iniciar **servidores virtuales**. Permite la configuración de **seguridad** y **redes** y la gestión de **almacenamiento**. La flexibilidad de Amazon EC2 es evidente en su capacidad para escalar recursos tanto hacia arriba como hacia abajo, adaptándose efectivamente a los cambios en los requisitos o picos de popularidad. Esta característica disminuye la necesidad de predicciones de tráfico precisas.
Cosas interesantes para enumerar en EC2:
@@ -26,21 +26,21 @@ Cosas interesantes para enumerar en EC2:
- Puertos abiertos
- Conexiones integradas con otras redes fuera de AWS
### Instance Profiles
### Perfiles de Instancia
Usar **roles** para otorgar permisos a aplicaciones que se ejecutan en **instancias EC2** requiere un poco de configuración adicional. Una aplicación que se ejecuta en una instancia EC2 está abstraída de AWS por el sistema operativo virtualizado. Debido a esta separación adicional, necesitas un paso adicional para asignar un rol de AWS y sus permisos asociados a una instancia EC2 y hacerlos disponibles para sus aplicaciones.
Usar **roles** para otorgar permisos a aplicaciones que se ejecutan en **instancias de EC2** requiere un poco de configuración adicional. Una aplicación que se ejecuta en una instancia de EC2 está abstraída de AWS por el sistema operativo virtualizado. Debido a esta separación adicional, necesitas un paso adicional para asignar un rol de AWS y sus permisos asociados a una instancia de EC2 y hacerlos disponibles para sus aplicaciones.
Este paso adicional es la **creación de un** [_**perfil de instancia**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) adjunto a la instancia. El **perfil de instancia contiene el rol y** puede proporcionar las credenciales temporales del rol a una aplicación que se ejecuta en la instancia. Esas credenciales temporales pueden ser utilizadas en las llamadas API de la aplicación para acceder a recursos y limitar el acceso solo a aquellos recursos que el rol especifica. Ten en cuenta que **solo se puede asignar un rol a una instancia EC2** a la vez, y todas las aplicaciones en la instancia comparten el mismo rol y permisos.
Este paso adicional es la **creación de un** [_**perfil de instancia**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) adjunto a la instancia. El **perfil de instancia contiene el rol y** puede proporcionar las credenciales temporales del rol a una aplicación que se ejecuta en la instancia. Esas credenciales temporales pueden ser utilizadas en las llamadas API de la aplicación para acceder a recursos y limitar el acceso solo a aquellos recursos que el rol especifica. Ten en cuenta que **solo se puede asignar un rol a una instancia de EC2** a la vez, y todas las aplicaciones en la instancia comparten el mismo rol y permisos.
### Metadata Endpoint
### Punto de Metadata
Los metadatos de AWS EC2 son información sobre una instancia de Amazon Elastic Compute Cloud (EC2) que está disponible para la instancia en tiempo de ejecución. Estos metadatos se utilizan para proporcionar información sobre la instancia, como su ID de instancia, la zona de disponibilidad en la que se está ejecutando, el rol IAM asociado con la instancia y el nombre de host de la instancia.
La metadata de AWS EC2 es información sobre una instancia de Amazon Elastic Compute Cloud (EC2) que está disponible para la instancia en tiempo de ejecución. Esta metadata se utiliza para proporcionar información sobre la instancia, como su ID de instancia, la zona de disponibilidad en la que se está ejecutando, el rol de IAM asociado con la instancia y el nombre de host de la instancia.
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
### Enumeration
### Enumeración
```bash
# Get EC2 instances
aws ec2 describe-instances
@@ -150,11 +150,11 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de EC2 p
Amazon **EBS** (Elastic Block Store) **snapshots** son básicamente **copias de seguridad** estáticas de volúmenes de AWS EBS. En otras palabras, son **copias** de los **discos** adjuntos a una **instancia EC2** en un momento específico. Los snapshots de EBS pueden ser copiados entre regiones y cuentas, o incluso descargados y ejecutados localmente.
Los snapshots pueden contener **información sensible** como **código fuente o claves de API**, por lo tanto, si tienes la oportunidad, se recomienda revisarlo.
Los snapshots pueden contener **información sensible** como **código fuente o claves de API**, por lo tanto, si tienes la oportunidad, se recomienda revisarlos.
### Diferencia AMI & EBS
Una **AMI** se utiliza para **lanzar una instancia EC2**, mientras que un **Snapshot** de EC2 se utiliza para **respaldar y recuperar datos almacenados en un volumen EBS**. Aunque un Snapshot de EC2 puede ser utilizado para crear una nueva AMI, no es lo mismo que una AMI, y no incluye información sobre el sistema operativo, servidor de aplicaciones u otro software requerido para ejecutar una aplicación.
Una **AMI** se utiliza para **lanzar una instancia EC2**, mientras que un **snapshot** de EC2 se utiliza para **respaldar y recuperar datos almacenados en un volumen EBS**. Aunque un snapshot de EC2 puede ser utilizado para crear una nueva AMI, no es lo mismo que una AMI, y no incluye información sobre el sistema operativo, servidor de aplicaciones u otro software requerido para ejecutar una aplicación.
### Escalación de Privilegios
@@ -166,9 +166,9 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de EBS p
## SSM
**Amazon Simple Systems Manager (SSM)** permite gestionar de forma remota grupos de instancias EC2 para facilitar su administración. Cada una de estas instancias necesita estar ejecutando el **servicio SSM Agent, ya que este será el encargado de recibir las acciones y ejecutarlas** desde la API de AWS.
**Amazon Simple Systems Manager (SSM)** permite gestionar de forma remota grupos de instancias EC2 para facilitar mucho más su administración. Cada una de estas instancias necesita estar ejecutando el **servicio SSM Agent, ya que este será el encargado de recibir las acciones y ejecutarlas** desde la API de AWS.
**SSM Agent** permite que Systems Manager actualice, gestione y configure estos recursos. El agente **procesa solicitudes del servicio Systems Manager en la nube de AWS**, y luego las ejecuta según lo especificado en la solicitud.
El **SSM Agent** permite que Systems Manager actualice, gestione y configure estos recursos. El agente **procesa solicitudes del servicio Systems Manager en la nube de AWS**, y luego las ejecuta según lo especificado en la solicitud.
El **SSM Agent viene**[ **preinstalado en algunas AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) o necesitas [**instalarlos manualmente**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) en las instancias. Además, el rol de IAM utilizado dentro de la instancia necesita tener la política **AmazonEC2RoleforSSM** adjunta para poder comunicarse.
@@ -195,7 +195,7 @@ En la siguiente página puedes verificar cómo **abusar de los permisos de SSM p
## ELB
**Elastic Load Balancing** (ELB) es un **servicio de balanceo de carga para implementaciones de Amazon Web Services** (AWS). ELB **distribuye automáticamente el tráfico de aplicación entrante** y escala los recursos para satisfacer las demandas de tráfico.
**Elastic Load Balancing** (ELB) es un **servicio de balanceo de carga para implementaciones de Amazon Web Services** (AWS). ELB automáticamente **distribuye el tráfico de aplicación entrante** y escala recursos para satisfacer las demandas de tráfico.
### Enumeration
```bash
@@ -237,7 +237,7 @@ aws-nitro-enum.md
## VPN
Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de los trabajadores (VPN de cliente)** con un **AWS VPC** para que los servicios puedan ser accedidos sin necesidad de exponerlos a Internet.
Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de los trabajadores (VPN de cliente)** con una **AWS VPC** para que los servicios puedan ser accedidos sin necesidad de exponerlos a Internet.
#### Componentes Básicos de AWS VPN
@@ -252,7 +252,7 @@ Una VPN permite conectar tu **red local (VPN sitio a sitio)** o las **laptops de
- VPG es el punto final del lado de AWS para la conexión VPN.
- Maneja la comunicación segura entre tu VPC y tu red local.
3. **Site-to-Site VPN Connection**:
- Una conexión VPN sitio a sitio conecta tu red local a un VPC a través de un túnel VPN IPsec seguro.
- Una conexión VPN sitio a sitio conecta tu red local a una VPC a través de un túnel VPN IPsec seguro.
- Este tipo de conexión requiere un Customer Gateway y un Virtual Private Gateway.
- Se utiliza para una comunicación segura, estable y consistente entre tu centro de datos o red y tu entorno AWS.
- Típicamente se utiliza para conexiones regulares y a largo plazo y se factura según la cantidad de datos transferidos a través de la conexión.

View File

@@ -4,7 +4,7 @@
## Información Básica
El **Servicio de Base de Datos Relacional (RDS)** ofrecido por AWS está diseñado para simplificar el despliegue, operación y escalado de una **base de datos relacional en la nube**. Este servicio ofrece las ventajas de eficiencia de costos y escalabilidad mientras automatiza tareas laboriosas como la provisión de hardware, configuración de bases de datos, parches y copias de seguridad.
El **Servicio de Base de Datos Relacional (RDS)** ofrecido por AWS está diseñado para simplificar el despliegue, operación y escalado de una **base de datos relacional en la nube**. Este servicio ofrece las ventajas de eficiencia de costos y escalabilidad mientras automatiza tareas que requieren mucho trabajo, como la provisión de hardware, configuración de bases de datos, parches y copias de seguridad.
AWS RDS soporta varios motores de bases de datos relacionales ampliamente utilizados, incluyendo MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server y Amazon Aurora, con compatibilidad para MySQL y PostgreSQL.
@@ -15,7 +15,7 @@ Las características clave de RDS incluyen:
- Configuración de **despliegues en múltiples Zonas de Disponibilidad (AZ)** para asegurar alta disponibilidad y mecanismos de conmutación por error.
- **Integración** con otros servicios de AWS, como:
- AWS Identity and Access Management (**IAM**) para un control de acceso robusto.
- AWS **CloudWatch** para monitoreo y métricas integrales.
- AWS **CloudWatch** para monitoreo y métricas completas.
- AWS Key Management Service (**KMS**) para asegurar la encriptación en reposo.
## Credenciales
@@ -53,7 +53,7 @@ Sin embargo, hay un **método alternativo que te permite encriptar una base de d
#### Encriptación de Datos Transparente (TDE)
Junto con las capacidades de encriptación inherentes a RDS a nivel de aplicación, RDS también soporta **mecanismos de encriptación a nivel de plataforma adicionales** para salvaguardar los datos en reposo. Esto incluye **Encriptación de Datos Transparente (TDE)** para Oracle y SQL Server. Sin embargo, es crucial notar que aunque TDE mejora la seguridad al encriptar datos en reposo, también puede **afectar el rendimiento de la base de datos**. Este impacto en el rendimiento es especialmente notable cuando se utiliza en conjunto con funciones criptográficas de MySQL o funciones criptográficas de Microsoft Transact-SQL.
Junto con las capacidades de encriptación inherentes a RDS a nivel de aplicación, RDS también soporta **mecanismos de encriptación a nivel de plataforma adicionales** para proteger los datos en reposo. Esto incluye **Encriptación de Datos Transparente (TDE)** para Oracle y SQL Server. Sin embargo, es crucial notar que aunque TDE mejora la seguridad al encriptar datos en reposo, también puede **afectar el rendimiento de la base de datos**. Este impacto en el rendimiento es especialmente notable cuando se utiliza en conjunto con funciones criptográficas de MySQL o funciones criptográficas de Microsoft Transact-SQL.
Para utilizar TDE, se requieren ciertos pasos preliminares:
@@ -61,7 +61,7 @@ Para utilizar TDE, se requieren ciertos pasos preliminares:
- La base de datos debe estar asociada con un grupo de opciones. Los grupos de opciones sirven como contenedores para configuraciones y características, facilitando la gestión de bases de datos, incluyendo mejoras de seguridad.
- Sin embargo, es importante notar que los grupos de opciones solo están disponibles para motores de bases de datos y versiones específicas.
2. **Inclusión de TDE en el Grupo de Opciones**:
- Una vez asociado con un grupo de opciones, la opción de Encriptación de Datos Transparente de Oracle necesita ser incluida en ese grupo.
- Una vez asociada con un grupo de opciones, la opción de Encriptación de Datos Transparente de Oracle debe ser incluida en ese grupo.
- Es esencial reconocer que una vez que la opción TDE se añade a un grupo de opciones, se convierte en una característica permanente y no puede ser eliminada.
3. **Modos de Encriptación TDE**:
- TDE ofrece dos modos de encriptación distintos:
@@ -134,7 +134,7 @@ aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password
Hay formas de acceder a los datos de DynamoDB con **sintaxis SQL**, por lo tanto, **inyecciones SQL típicas también son posibles**.
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/sql-injection
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## **CloudTrail**
AWS CloudTrail **registra y monitorea la actividad dentro de su entorno AWS**. Captura **registros de eventos** detallados, incluyendo quién hizo qué, cuándo y desde dónde, para todas las interacciones con los recursos de AWS. Esto proporciona un rastro de auditoría de cambios y acciones, ayudando en el análisis de seguridad, auditoría de cumplimiento y seguimiento de cambios en los recursos. CloudTrail es esencial para entender el comportamiento de usuarios y recursos, mejorar las posturas de seguridad y asegurar el cumplimiento regulatorio.
AWS CloudTrail **registra y monitorea la actividad dentro de tu entorno AWS**. Captura **registros de eventos** detallados, incluyendo quién hizo qué, cuándo y desde dónde, para todas las interacciones con los recursos de AWS. Esto proporciona un rastro de auditoría de cambios y acciones, ayudando en el análisis de seguridad, auditoría de cumplimiento y seguimiento de cambios en los recursos. CloudTrail es esencial para entender el comportamiento de usuarios y recursos, mejorar las posturas de seguridad y asegurar el cumplimiento regulatorio.
Cada evento registrado contiene:
@@ -21,10 +21,10 @@ Cada evento registrado contiene:
Los eventos se escriben en un nuevo archivo de registro **aproximadamente cada 5 minutos en un archivo JSON**, son retenidos por CloudTrail y finalmente, los archivos de registro son **entregados a S3 aproximadamente 15 minutos después**.\
Los registros de CloudTrail pueden ser **agregados a través de cuentas y regiones.**\
CloudTrail permite usar **la integridad del archivo de registro para poder verificar que sus archivos de registro no han cambiado** desde que CloudTrail se los entregó. Crea un hash SHA-256 de los registros dentro de un archivo de resumen. Un hash sha-256 de los nuevos registros se crea cada hora.\
Al crear un Trail, los selectores de eventos le permitirán indicar el tipo de registro: eventos de gestión, datos o de información.
CloudTrail permite usar **la integridad del archivo de registro para poder verificar que tus archivos de registro no han cambiado** desde que CloudTrail te los entregó. Crea un hash SHA-256 de los registros dentro de un archivo de resumen. Un hash sha-256 de los nuevos registros se crea cada hora.\
Al crear un Trail, los selectores de eventos te permitirán indicar el tipo de registro: eventos de gestión, de datos o de información.
Los registros se guardan en un bucket de S3. Por defecto, se utiliza el cifrado del lado del servidor (SSE-S3), por lo que AWS descifrará el contenido para las personas que tienen acceso a él, pero para mayor seguridad puede usar SSE con KMS y sus propias claves.
Los registros se guardan en un bucket de S3. Por defecto, se utiliza el cifrado del lado del servidor (SSE-S3), por lo que AWS descifrará el contenido para las personas que tengan acceso a él, pero para mayor seguridad puedes usar SSE con KMS y tus propias claves.
Los registros se almacenan en un **bucket de S3 con este formato de nombre**:
@@ -32,7 +32,7 @@ Los registros se almacenan en un **bucket de S3 con este formato de nombre**:
- Siendo el BucketName: **`aws-cloudtrail-logs-<accountid>-<random>`**
- Ejemplo: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`**
Dentro de cada carpeta, cada registro tendrá un **nombre que sigue este formato**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`**
Dentro de cada carpeta, cada registro tendrá un **nombre siguiendo este formato**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`**
Convención de Nombres de Archivos de Registro
@@ -44,30 +44,30 @@ Además, **los archivos de resumen (para verificar la integridad del archivo)**
### Agregar Registros de Múltiples Cuentas
- Cree un Trail en la cuenta de AWS donde desea que se entreguen los archivos de registro
- Aplique permisos al bucket de S3 de destino permitiendo el acceso entre cuentas para CloudTrail y permita a cada cuenta de AWS que necesite acceso
- Cree un nuevo Trail en las otras cuentas de AWS y seleccione usar el bucket creado en el paso 1
- Crea un Trail en la cuenta de AWS donde deseas que se entreguen los archivos de registro
- Aplica permisos al bucket de S3 de destino permitiendo el acceso entre cuentas para CloudTrail y permite a cada cuenta de AWS que necesite acceso
- Crea un nuevo Trail en las otras cuentas de AWS y selecciona usar el bucket creado en el paso 1
Sin embargo, incluso si puede guardar todos los registros en el mismo bucket de S3, no puede agregar los registros de CloudTrail de múltiples cuentas en un CloudWatch Logs perteneciente a una sola cuenta de AWS.
Sin embargo, incluso si puedes guardar todos los registros en el mismo bucket de S3, no puedes agregar registros de CloudTrail de múltiples cuentas en un CloudWatch Logs perteneciente a una sola cuenta de AWS.
> [!CAUTION]
> Recuerde que una cuenta puede tener **diferentes Trails** de CloudTrail **habilitados** almacenando los mismos (o diferentes) registros en diferentes buckets.
> Recuerda que una cuenta puede tener **diferentes Trails** de CloudTrail **habilitados** almacenando los mismos (o diferentes) registros en diferentes buckets.
### Cloudtrail de todas las cuentas de la organización en 1
### CloudTrail de todas las cuentas de la organización en 1
Al crear un CloudTrail, es posible indicar que se active CloudTrail para todas las cuentas en la organización y obtener los registros en solo 1 bucket:
<figure><img src="../../../../images/image (200).png" alt=""><figcaption></figcaption></figure>
De esta manera, puede configurar fácilmente CloudTrail en todas las regiones de todas las cuentas y centralizar los registros en 1 cuenta (que debe proteger).
De esta manera, puedes configurar fácilmente CloudTrail en todas las regiones de todas las cuentas y centralizar los registros en 1 cuenta (que debes proteger).
### Verificación de Archivos de Registro
Puede verificar que los registros no han sido alterados ejecutando
Puedes verificar que los registros no han sido alterados ejecutando
```javascript
aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]
```
### Registros a CloudWatch
### Logs to CloudWatch
**CloudTrail puede enviar automáticamente registros a CloudWatch para que puedas establecer alertas que te adviertan cuando se realicen actividades sospechosas.**\
Ten en cuenta que para permitir que CloudTrail envíe los registros a CloudWatch, se necesita crear un **rol** que permita esa acción. Si es posible, se recomienda usar el rol predeterminado de AWS para realizar estas acciones. Este rol permitirá a CloudTrail:
@@ -75,37 +75,37 @@ Ten en cuenta que para permitir que CloudTrail envíe los registros a CloudWatch
- CreateLogStream: Esto permite crear flujos de registro de CloudWatch Logs
- PutLogEvents: Entregar registros de CloudTrail al flujo de registro de CloudWatch Logs
### Historial de Eventos
### Event History
El Historial de Eventos de CloudTrail te permite inspeccionar en una tabla los registros que han sido grabados:
![](<../../../../images/image (89).png>)
### Perspectivas
### Insights
**CloudTrail Insights** analiza automáticamente los eventos de gestión de escritura de los senderos de CloudTrail y te **alerta** sobre **actividades inusuales**. Por ejemplo, si hay un aumento en los eventos de `TerminateInstance` que difiere de las líneas base establecidas, lo verás como un evento de Insight. Estos eventos hacen que **encontrar y responder a actividades inusuales de API sea más fácil** que nunca.
Las perspectivas se almacenan en el mismo bucket que los registros de CloudTrail en: `BucketName/AWSLogs/AccountID/CloudTrail-Insight`
Los insights se almacenan en el mismo bucket que los registros de CloudTrail en: `BucketName/AWSLogs/AccountID/CloudTrail-Insight`
### Seguridad
### Security
| Integridad del Archivo de Registro de CloudTrail | <ul><li>Validar si los registros han sido manipulados (modificados o eliminados)</li><li><p>Utiliza archivos de resumen (crea un hash para cada archivo)</p><ul><li>Hashing SHA-256</li><li>SHA-256 con RSA para firma digital</li><li>clave privada propiedad de Amazon</li></ul></li><li>Toma 1 hora crear un archivo de resumen (hecho en la hora cada hora)</li></ul> |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Detener el acceso no autorizado | <ul><li><p>Usar políticas de IAM y políticas de bucket de S3</p><ul><li>equipo de seguridad —> acceso de administrador</li><li>auditores —> acceso solo de lectura</li></ul></li><li>Usar SSE-S3/SSE-KMS para cifrar los registros</li></ul> |
| Prevenir que los archivos de registro sean eliminados | <ul><li>Restringir el acceso de eliminación con políticas de IAM y de bucket</li><li>Configurar la eliminación MFA de S3</li><li>Validar con la Validación de Archivos de Registro</li></ul> |
| Prevenir que los archivos de registro sean eliminados | <ul><li>Restringir el acceso de eliminación con políticas de IAM y bucket</li><li>Configurar la eliminación MFA de S3</li><li>Validar con la Validación de Archivos de Registro</li></ul> |
## Asesor de Acceso
## Access Advisor
AWS Access Advisor se basa en los últimos 400 días de registros de **CloudTrail de AWS para recopilar sus perspectivas**. CloudTrail captura un historial de llamadas a la API de AWS y eventos relacionados realizados en una cuenta de AWS. Access Advisor utiliza estos datos para **mostrar cuándo se accedió por última vez a los servicios**. Al analizar los registros de CloudTrail, Access Advisor puede determinar qué servicios de AWS ha accedido un usuario o rol de IAM y cuándo ocurrió ese acceso. Esto ayuda a los administradores de AWS a tomar decisiones informadas sobre **refinar permisos**, ya que pueden identificar servicios que no se han accedido durante períodos prolongados y potencialmente reducir permisos excesivamente amplios basados en patrones de uso reales.
AWS Access Advisor se basa en los últimos 400 días de registros de **CloudTrail de AWS para recopilar sus insights**. CloudTrail captura un historial de llamadas a la API de AWS y eventos relacionados realizados en una cuenta de AWS. Access Advisor utiliza estos datos para **mostrar cuándo se accedió por última vez a los servicios**. Al analizar los registros de CloudTrail, Access Advisor puede determinar qué servicios de AWS ha accedido un usuario o rol de IAM y cuándo ocurrió ese acceso. Esto ayuda a los administradores de AWS a tomar decisiones informadas sobre **refinar permisos**, ya que pueden identificar servicios que no se han accedido durante períodos prolongados y potencialmente reducir permisos excesivamente amplios basados en patrones de uso reales.
> [!TIP]
> Por lo tanto, Access Advisor informa sobre **los permisos innecesarios que se están otorgando a los usuarios** para que el administrador pueda eliminarlos
<figure><img src="../../../../images/image (78).png" alt=""><figcaption></figcaption></figure>
## Acciones
## Actions
### Enumeración
### Enumeration
```bash
# Get trails info
aws cloudtrail list-trails
@@ -124,7 +124,7 @@ aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id
```
### **Inyección CSV**
Es posible realizar una inyección CSV dentro de CloudTrail que ejecutará código arbitrario si los registros se exportan en CSV y se abren con Excel.\
Es posible realizar una inyección CVS dentro de CloudTrail que ejecutará código arbitrario si los registros se exportan en CSV y se abren con Excel.\
El siguiente código generará una entrada de registro con un nombre de Trail incorrecto que contiene la carga útil:
```python
import boto3
@@ -139,16 +139,16 @@ print(response)
Para más información sobre inyecciones CSV, consulta la página:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/formula-injection
https://book.hacktricks.wiki/en/pentesting-web/formula-csv-doc-latex-ghostscript-injection.html
{{#endref}}
Para más información sobre esta técnica específica, consulta [https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/](https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/)
## **Evasión de Detección**
### Evasión de HoneyTokens
### Evasión de **HoneyTokens**
Los Honeytokens se crean para **detectar la exfiltración de información sensible**. En el caso de AWS, son **claves de AWS cuyo uso es monitoreado**, si algo activa una acción con esa clave, entonces alguien debe haber robado esa clave.
Los Honeytokens se crean para **detectar la exfiltración de información sensible**. En el caso de AWS, son **claves de AWS cuyo uso se monitorea**, si algo activa una acción con esa clave, entonces alguien debe haber robado esa clave.
Sin embargo, los Honeytokens como los creados por [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) están utilizando un nombre de cuenta reconocible o usando el mismo ID de cuenta de AWS para todos sus clientes. Por lo tanto, si puedes obtener el nombre de la cuenta y/o el ID de la cuenta sin hacer que Cloudtrail genere ningún registro, **podrías saber si la clave es un honeytoken o no**.
@@ -183,22 +183,22 @@ print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56J
```
Consulta más información en la [**investigación original**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489).
#### No generar un registro
#### No generar un log
La técnica más efectiva para esto es en realidad una simple. Solo usa la clave que acabas de encontrar para acceder a algún servicio dentro de tu propia cuenta de atacante. Esto hará que **CloudTrail genere un registro dentro de TU PROPIA cuenta de AWS y no dentro de las víctimas**.
La técnica más efectiva para esto es en realidad una simple. Solo usa la clave que acabas de encontrar para acceder a algún servicio dentro de tu propia cuenta de atacante. Esto hará que **CloudTrail genere un log dentro de TU PROPIA cuenta de AWS y no dentro de las víctimas**.
La cuestión es que la salida te mostrará un error indicando el ID de la cuenta y el nombre de la cuenta, así que **podrás ver si es un Honeytoken**.
#### Servicios de AWS sin registros
#### Servicios de AWS sin logs
En el pasado, había algunos **servicios de AWS que no envían registros a CloudTrail** (encuentra una [lista aquí](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html)). Algunos de esos servicios **responderán** con un **error** que contiene el **ARN del rol de la clave** si alguien no autorizado (la clave honeytoken) intenta acceder a él.
En el pasado, había algunos **servicios de AWS que no enviaban logs a CloudTrail** (encuentra una [lista aquí](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html)). Algunos de esos servicios **responderán** con un **error** que contiene el **ARN del rol de la clave** si alguien no autorizado (la clave honeytoken) intenta acceder a él.
De esta manera, un **atacante puede obtener el ARN de la clave sin activar ningún registro**. En el ARN, el atacante puede ver el **ID de la cuenta de AWS y el nombre**, es fácil conocer el ID y los nombres de las cuentas de las empresas de HoneyToken, así que de esta manera un atacante puede identificar si el token es un HoneyToken.
De esta manera, un **atacante puede obtener el ARN de la clave sin activar ningún log**. En el ARN, el atacante puede ver el **ID de la cuenta de AWS y el nombre**, es fácil conocer el ID y los nombres de las cuentas de las empresas del HoneyToken, así que de esta manera un atacante puede identificar si el token es un HoneyToken.
![](<../../../../images/image (93).png>)
> [!CAUTION]
> Ten en cuenta que todas las API públicas descubiertas que no estaban creando registros de CloudTrail ahora están corregidas, así que tal vez necesites encontrar las tuyas...
> Ten en cuenta que todas las API públicas descubiertas que no estaban creando logs de CloudTrail ahora están corregidas, así que tal vez necesites encontrar las tuyas...
>
> Para más información, consulta la [**investigación original**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/).
@@ -216,7 +216,7 @@ Más información en:
### Modificando la Configuración de CloudTrail
#### Eliminar senderos
#### Eliminar trails
```bash
aws cloudtrail delete-trail --name [trail-name]
```

View File

@@ -12,12 +12,12 @@ Consulta en esta página más información sobre esto:
### Puertos Públicos
Es posible exponer **cualquier puerto de las máquinas virtuales a internet**. Dependiendo de **lo que esté corriendo** en el puerto expuesto, un atacante podría abusar de ello.
Es posible exponer **cualquier puerto de las máquinas virtuales a Internet**. Dependiendo de **lo que esté corriendo** en el puerto expuesto, un atacante podría abusar de ello.
#### SSRF
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
### AMIs Públicas y Snapshots de EBS
@@ -37,7 +37,7 @@ aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLo
aws ec2 describe-snapshots --restorable-by-user-ids all
aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")'
```
Si encuentras un snapshot que es restaurable por cualquier persona, asegúrate de consultar [AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump) para obtener instrucciones sobre cómo descargar y saquear el snapshot.
Si encuentras un snapshot que es restaurable por cualquier persona, asegúrate de revisar [AWS - EBS Snapshot Dump](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/index.html#ebs-snapshot-dump) para obtener instrucciones sobre cómo descargar y saquear el snapshot.
#### Plantilla de URL pública
```bash