AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

VPC & Networking

Aprende qué es un VPC y acerca de sus componentes en:

pageAWS - VPC & Networking Basic Information

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 eficazmente a cambios de requisitos variables o a aumentos de popularidad. Esta característica disminuye la necesidad de predicciones de tráfico precisas.

Cosas interesantes para enumerar en EC2:

  • Máquinas virtuales

  • Claves SSH

  • Datos de usuario

  • EC2s/AMIs/Snapshots existentes

  • Redes

  • Subredes

  • IPs públicas

  • Puertos abiertos

  • Conexiones integradas con otras redes fuera de AWS

Perfiles de instancia

Utilizar 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, se necesita un paso adicional para asignar un rol de AWS y sus permisos asociados a una instancia EC2 y ponerlos a disposición de sus aplicaciones.

Este paso adicional es la creación de un perfil de instancia 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. Estas credenciales temporales pueden luego 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.

Punto de conexión de metadatos

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.

Enumeración

# Get EC2 instances
aws ec2 describe-instances
aws ec2 describe-instance-status #Get status from running instances

# Get user data from each ec2 instance
for instanceid in $(aws ec2 describe-instances --profile <profile> --region us-west-2 | grep -Eo '"i-[a-zA-Z0-9]+' | tr -d '"'); do
echo "Instance ID: $instanceid"
aws ec2 describe-instance-attribute --profile <profile> --region us-west-2 --instance-id "$instanceid" --attribute userData | jq ".UserData.Value" | tr -d '"' | base64 -d
echo ""
echo "-------------------"
done

# Instance profiles
aws iam list-instance-profiles
aws iam list-instance-profiles-for-role --role-name <name>

# Get tags
aws ec2 describe-tags

# Get volumes
aws ec2 describe-volume-status
aws ec2 describe-volumes

# Get snapshots
aws ec2 describe-snapshots --owner-ids self

# Scheduled instances
aws ec2 describe-scheduled-instances

# Get custom images
aws ec2 describe-images --owners self

# Get Elastic IPs
aws ec2 describe-addresses

# Get current output
aws ec2 get-console-output --instance-id [id]

# Get VPN customer gateways
aws ec2 describe-customer-gateways
aws ec2 describe-vpn-gateways
aws ec2 describe-vpn-connections

# List conversion tasks to upload/download VMs
aws ec2 describe-conversion-tasks
aws ec2 describe-import-image-tasks

# Get Bundle Tasks
aws ec2 describe-bundle-tasks

# Get Classic Instances
aws ec2 describe-classic-link-instances

# Get Dedicated Hosts
aws ec2 describe-hosts

# Get SSH Key Pairs
aws ec2 describe-key-pairs

# Get Internet Gateways
aws ec2 describe-internet-gateways

# Get NAT Gateways
aws ec2 describe-nat-gateways

# Get subnetworks
aws ec2 describe-subnets

# Get FW rules
aws ec2 describe-network-acls

# Get security groups
aws ec2 describe-security-groups

# Get interfaces
aws ec2 describe-network-interfaces

# Get routes table
aws ec2 describe-route-tables

# Get VPCs
aws ec2 describe-vpcs
aws ec2 describe-vpc-peering-connections

Acceso no autenticado

pageAWS - EC2 Unauthenticated Enum

Elevación de privilegios

En la siguiente página puedes verificar cómo abusar de los permisos de EC2 para escalar privilegios:

pageAWS - EC2 Privesc

Post-Explotación

pageAWS - EC2, EBS, SSM & VPC Post Exploitation

EBS

Los snapshots de Amazon EBS (Elastic Block Store) son básicamente copias de seguridad estáticas de los 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 verificarlo.

Diferencia entre AMI y EBS

Un 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 se puede utilizar para crear un nuevo AMI, no es lo mismo que un AMI, y no incluye información sobre el sistema operativo, servidor de aplicaciones u otro software necesario para ejecutar una aplicación.

Elevación de privilegios

En la siguiente página puedes verificar cómo abusar de los permisos de EBS para escalar privilegios:

pageAWS - EBS Privesc

SSM

Amazon Simple Systems Manager (SSM) permite administrar de forma remota flotas de instancias EC2 para facilitar su administración. Cada una de estas instancias debe estar ejecutando el servicio SSM Agent ya que será el encargado de recibir las acciones y llevarlas a cabo desde la API de AWS.

El SSM Agent permite a Systems Manager actualizar, administrar y configurar estos recursos. El agente procesa las 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 o necesitas instalarlo manualmente en las instancias. Además, el Rol IAM utilizado dentro de la instancia debe tener la política AmazonEC2RoleforSSM adjunta para poder comunicarse.

Enumeración

aws ssm describe-instance-information
aws ssm describe-parameters
aws ssm describe-sessions --state [Active|History]
aws ssm describe-instance-patches --instance-id <id>
aws ssm describe-instance-patch-states --instance-ids <id>
aws ssm describe-instance-associations-status --instance-id <id>

Puedes verificar en una instancia de EC2 si Systems Manager está en ejecución simplemente ejecutando:

ps aux | grep amazon-ssm

Elevación de privilegios

En la siguiente página puedes verificar cómo abusar de los permisos de SSM para elevar privilegios:

pageAWS - SSM Privesc

ELB

Elastic Load Balancing (ELB) es un servicio de equilibrio 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.

Enumeración

# List internet-facing ELBs
aws elb describe-load-balancers
aws elb describe-load-balancers | jq '.LoadBalancerDescriptions[]| select( .Scheme | contains("internet-facing"))|.DNSName'

# DONT FORGET TO CHECK VERSION 2
aws elbv2 describe-load-balancers
aws elbv2 describe-load-balancers | jq '.LoadBalancers[].DNSName'
aws elbv2 describe-listeners --load-balancer-arn <load_balancer_arn>

Plantillas de Lanzamiento y Grupos de Escalado Automático

Enumeración

# Launch templates
aws ec2 describe-launch-templates
aws ec2 describe-launch-templates --launch-template-id <launch_template_id>
## Get details, like user data
aws ec2 describe-launch-template-versions --launch-template-id <launch_template_id>

# Autoscaling
aws autoscaling describe-auto-scaling-groups
aws autoscaling describe-auto-scaling-instances
aws autoscaling describe-launch-configurations
aws autoscaling describe-load-balancer-target-groups
aws autoscaling describe-load-balancers

Nitro

AWS Nitro es un conjunto de tecnologías innovadoras que forman la plataforma subyacente para las instancias de AWS EC2. Introducido por Amazon para mejorar la seguridad, el rendimiento y la confiabilidad, Nitro aprovecha componentes de hardware personalizados y un hipervisor ligero. Abstrae gran parte de la funcionalidad de virtualización tradicional a hardware y software dedicados, minimizando la superficie de ataque y mejorando la eficiencia de recursos. Al descargar funciones de virtualización, Nitro permite a las instancias de EC2 ofrecer un rendimiento casi igual al metal desnudo, lo que lo hace particularmente beneficioso para aplicaciones intensivas en recursos. Además, el Chip de Seguridad Nitro garantiza específicamente la seguridad del hardware y el firmware, solidificando aún más su arquitectura robusta.

Obtén más información y cómo enumerarlo desde:

pageAWS - Nitro Enum

VPN

Una VPN permite conectar su red local (VPN de sitio a sitio) o las computadoras portátiles de los trabajadores (VPN de cliente) con un VPC de AWS para que los servicios puedan ser accedidos sin necesidad de exponerlos a Internet.

Componentes básicos de VPN de AWS

  1. Puerta de enlace del cliente:

  • Una Puerta de enlace del cliente es un recurso que creas en AWS para representar tu lado de una conexión VPN.

  • Es esencialmente un dispositivo físico o una aplicación de software en tu AWS de la conexión VPN de sitio a sitio.

  • Proporcionas información de enrutamiento y la dirección IP pública de tu dispositivo de red (como un enrutador o un firewall) a AWS para crear una Puerta de enlace del cliente.

  • Sirve como punto de referencia para configurar la conexión VPN y no incurre en cargos adicionales.

  1. Puerta de enlace privada virtual:

  • Una Puerta de enlace privada virtual (VPG) es el concentrador VPN en el lado de Amazon de la conexión VPN de sitio a sitio.

  • Está adjunta a tu VPC y sirve como objetivo para tu conexión VPN.

  • 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.

  1. Conexión VPN de sitio a sitio:

  • Una conexión VPN de sitio a sitio conecta tu red local a un VPC a través de un túnel VPN IPsec seguro.

  • Este tipo de conexión requiere una Puerta de enlace del cliente y una Puerta de enlace privada virtual.

  • Se utiliza para una comunicación segura, estable y consistente entre tu centro de datos o red y tu entorno de AWS.

  • Se utiliza típicamente para conexiones regulares y a largo plazo y se factura en función de la cantidad de datos transferidos sobre la conexión.

  1. Punto de conexión de VPN de cliente:

  • Un punto de conexión de VPN de cliente es un recurso que creas en AWS para habilitar y gestionar sesiones de VPN de cliente.

  • Se utiliza para permitir que dispositivos individuales (como computadoras portátiles, teléfonos inteligentes, etc.) se conecten de forma segura a recursos de AWS o a tu red local.

  • Difiere de la VPN de costado a costado en que está diseñado para clientes individuales en lugar de conectar redes enteras.

  • Con la VPN de cliente, cada dispositivo cliente utiliza un software cliente de VPN para establecer una conexión segura.

Puedes encontrar más información sobre los beneficios y componentes de las VPN de AWS aquí.

Enumeración

# VPN endpoints
## Check used subnetwork, authentication, SGs, connected...
aws ec2 describe-client-vpn-endpoints

## Get AWS network info related to the vpn endpoint
aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id <id>

## Get AWS subnet & ip range the VPN iconnected to
aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id <id>

## Check authorization rules
aws ec2 describe-client-vpn-authorization-rules --client-vpn-endpoint-id <id>

## Get current connections to the VPN endpoint
aws ec2 describe-client-vpn-connections --client-vpn-endpoint-id <id>

# Get VPN gateways and check with which VPC each is connected
aws ec2 describe-vpn-gateways

# Get VPN site-to-site connections
aws ec2 describe-vpn-connections

Enumeración Local

Credenciales Temporales Locales

Cuando se utiliza el Cliente VPN de AWS para conectarse a una VPN, el usuario generalmente inicia sesión en AWS para obtener acceso a la VPN. Luego, algunas credenciales de AWS se crean y almacenan localmente para establecer la conexión VPN. Estas credenciales se almacenan en $HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt y contienen una Clave de Acceso, una Clave Secreta y un Token.

Las credenciales pertenecen al usuario arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials (TODO: investigar más sobre los permisos de estas credenciales).

Archivos de configuración opvn

Si se estableció una conexión VPN, se debe buscar archivos de configuración .opvn en el sistema. Además, un lugar donde podrías encontrar las configuraciones es en $HOME/.config/AWSVPNClient/OpenVpnConfigs

Post Explotación

pageAWS - VPN Post Exploitation

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización