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

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

VPC & Networking

Aprenda o que é um VPC e sobre seus componentes em:

pageAWS - VPC & Networking Basic Information

EC2

A Amazon EC2 é utilizada para iniciar servidores virtuais. Permite a configuração de segurança e rede e a gestão de armazenamento. A flexibilidade da Amazon EC2 é evidente em sua capacidade de escalar recursos tanto para cima quanto para baixo, adaptando-se eficazmente a mudanças de requisitos variáveis ou a picos de popularidade. Essa característica diminui a necessidade de previsões de tráfego precisas.

Coisas interessantes para enumerar no EC2:

  • Máquinas Virtuais

  • Chaves SSH

  • Dados do Usuário

  • EC2s/AMIs/Snapshots Existente

  • Rede

  • Redes

  • Sub-redes

  • IPs Públicos

  • Portas Abertas

  • Conexões integradas com outras redes fora da AWS

Perfis de Instância

Usar funções para conceder permissões a aplicativos que são executados em instâncias EC2 requer um pouco de configuração adicional. Um aplicativo em execução em uma instância EC2 é abstraído da AWS pelo sistema operacional virtualizado. Devido a essa separação adicional, é necessário um passo adicional para atribuir uma função AWS e suas permissões associadas a uma instância EC2 e disponibilizá-las para seus aplicativos.

Esse passo adicional é a criação de um perfil de instância anexado à instância. O perfil de instância contém a função e pode fornecer as credenciais temporárias da função para um aplicativo que é executado na instância. Essas credenciais temporárias podem então ser usadas nas chamadas de API do aplicativo para acessar recursos e limitar o acesso apenas aos recursos especificados pela função. Note que apenas uma função pode ser atribuída a uma instância EC2 de cada vez, e todos os aplicativos na instância compartilham a mesma função e permissões.

Ponto de Extremidade de Metadados

Os metadados da AWS EC2 são informações sobre uma instância do Amazon Elastic Compute Cloud (EC2) que estão disponíveis para a instância em tempo de execução. Esses metadados são usados para fornecer informações sobre a instância, como seu ID de instância, a zona de disponibilidade em que está sendo executada, a função IAM associada à instância e o nome do host da instância.

Enumeração

# 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

Acesso não autenticado

pageAWS - EC2 Unauthenticated Enum

Privesc

Na página a seguir, você pode verificar como abusar das permissões do EC2 para escalar privilégios:

pageAWS - EC2 Privesc

Pós-Exploração

pageAWS - EC2, EBS, SSM & VPC Post Exploitation

EBS

Os snapshots da Amazon EBS (Elastic Block Store) são basicamente backups estáticos dos volumes AWS EBS. Em outras palavras, são cópias dos discos anexados a uma Instância EC2 em um momento específico. Os snapshots do EBS podem ser copiados entre regiões e contas, ou até mesmo baixados e executados localmente.

Os snapshots podem conter informações sensíveis como código-fonte ou chaves de API, portanto, se tiver a chance, é recomendável verificar.

Diferença entre AMI e EBS

Uma AMI é usada para iniciar uma instância EC2, enquanto um Snapshot do EC2 é usado para fazer backup e recuperar dados armazenados em um volume EBS. Embora um Snapshot do EC2 possa ser usado para criar uma nova AMI, não é a mesma coisa que uma AMI e não inclui informações sobre o sistema operacional, servidor de aplicativos ou outro software necessário para executar um aplicativo.

Privesc

Na página a seguir, você pode verificar como abusar das permissões do EBS para escalar privilégios:

pageAWS - EBS Privesc

SSM

Amazon Simple Systems Manager (SSM) permite gerenciar remotamente grupos de instâncias EC2 para facilitar sua administração. Cada uma dessas instâncias precisa estar executando o serviço SSM Agent, pois será ele quem receberá as ações e as executará na API da AWS.

O SSM Agent possibilita que o Systems Manager atualize, gerencie e configure esses recursos. O agente processa solicitações do serviço Systems Manager na AWS Cloud e, em seguida, as executa conforme especificado na solicitação.

O SSM Agent vem pré-instalado em algumas AMIs ou você precisa instalá-lo manualmente nas instâncias. Além disso, a Função IAM usada dentro da instância precisa ter a política AmazonEC2RoleforSSM anexada para poder se comunicar.

Enumeração

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>

Você pode verificar em uma instância EC2 se o Systems Manager está em execução apenas executando:

ps aux | grep amazon-ssm

Elevação de Privilégios

Na página a seguir, você pode verificar como abusar das permissões do SSM para elevar privilégios:

pageAWS - SSM Privesc

ELB

Elastic Load Balancing (ELB) é um serviço de balanceamento de carga para implantações da Amazon Web Services (AWS). O ELB distribui automaticamente o tráfego de aplicativos de entrada e dimensiona recursos para atender às demandas de tráfego.

Enumeração

# 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>

Modelos de Lançamento e Grupos de Dimensionamento Automático

Enumeração

# 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

O AWS Nitro é um conjunto de tecnologias inovadoras que formam a plataforma subjacente para as instâncias AWS EC2. Introduzido pela Amazon para aumentar a segurança, desempenho e confiabilidade, o Nitro aproveita componentes de hardware personalizados e um hipervisor leve. Ele abstrai grande parte da funcionalidade de virtualização tradicional para hardware e software dedicados, minimizando a superfície de ataque e melhorando a eficiência de recursos. Ao descarregar funções de virtualização, o Nitro permite que as instâncias EC2 ofereçam um desempenho próximo ao metal nu, tornando-o particularmente benéfico para aplicativos intensivos em recursos. Além disso, o Chip de Segurança Nitro garante especificamente a segurança do hardware e firmware, solidificando ainda mais sua arquitetura robusta.

Obtenha mais informações e como enumerá-lo em:

pageAWS - Nitro Enum

VPN

Uma VPN permite conectar sua rede local (VPN de site a site) ou os laptops dos trabalhadores (VPN de cliente) com um VPC da AWS para que os serviços possam ser acessados sem precisar expô-los à internet.

Componentes Básicos da VPN da AWS

  1. Gateway do Cliente:

  • Um Gateway do Cliente é um recurso que você cria na AWS para representar o seu lado de uma conexão VPN.

  • É essencialmente um dispositivo físico ou aplicativo de software em seu lado da conexão VPN de site a site.

  • Você fornece informações de roteamento e o endereço IP público do seu dispositivo de rede (como um roteador ou um firewall) para a AWS criar um Gateway do Cliente.

  • Ele serve como ponto de referência para configurar a conexão VPN e não gera custos adicionais.

  1. Gateway Privado Virtual:

  • Um Gateway Privado Virtual (VPG) é o concentrador VPN no lado da Amazon da conexão VPN de site a site.

  • Ele está anexado ao seu VPC e serve como o alvo para sua conexão VPN.

  • O VPG é o ponto final do lado da AWS para a conexão VPN.

  • Ele lida com a comunicação segura entre seu VPC e sua rede local.

  1. Conexão VPN de Site a Site:

  • Uma conexão VPN de site a site conecta sua rede local a um VPC por meio de um túnel VPN IPsec seguro.

  • Esse tipo de conexão requer um Gateway do Cliente e um Gateway Privado Virtual.

  • É usado para comunicação segura, estável e consistente entre seu data center ou rede e seu ambiente AWS.

  • Geralmente usado para conexões regulares e de longo prazo e é faturado com base na quantidade de dados transferidos pela conexão.

  1. Ponto de Acesso VPN de Cliente:

  • Um ponto de acesso VPN de cliente é um recurso que você cria na AWS para habilitar e gerenciar sessões VPN de cliente.

  • É usado para permitir que dispositivos individuais (como laptops, smartphones, etc.) se conectem de forma segura a recursos da AWS ou à sua rede local.

  • Difere da VPN de site a site, pois é projetado para clientes individuais em vez de conectar redes inteiras.

  • Com a VPN de Cliente, cada dispositivo cliente usa um software cliente VPN para estabelecer uma conexão segura.

Você pode encontrar mais informações sobre os benefícios e componentes das VPNs da AWS aqui.

Enumeração

# 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

Enumeração Local

Credenciais Temporárias Locais

Quando o Cliente VPN da AWS é usado para se conectar a uma VPN, o usuário geralmente faz login na AWS para obter acesso à VPN. Em seguida, algumas credenciais da AWS são criadas e armazenadas localmente para estabelecer a conexão VPN. Essas credenciais são armazenadas em $HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt e contêm uma Chave de Acesso (AccessKey), uma Chave Secreta (SecretKey) e um Token.

As credenciais pertencem ao usuário arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials (TODO: pesquisar mais sobre as permissões dessas credenciais).

Arquivos de configuração opvn

Se uma conexão VPN foi estabelecida, você deve procurar por arquivos de configuração .opvn no sistema. Além disso, um local onde você pode encontrar as configurações é em $HOME/.config/AWSVPNClient/OpenVpnConfigs

Pós Exploração

pageAWS - VPN Post Exploitation

Referências

Aprenda hacking na AWS de zero a herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización