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

支持 HackTricks

VPC & Networking

了解什么是 VPC 及其组件:

AWS - VPC & Networking Basic Information

EC2

Amazon EC2 用于启动虚拟服务器。它允许配置安全性网络以及管理存储。Amazon EC2 的灵活性体现在其能够上下扩展资源,有效适应不同的需求变化或流行度激增。这一特性减少了对精确流量预测的必要性。

在 EC2 中有趣的枚举内容:

  • 虚拟机

  • SSH 密钥

  • 用户数据

  • 现有的 EC2s/AMIs/快照

  • 网络

  • 网络

  • 子网

  • 公共 IP

  • 开放端口

  • 与 AWS 之外的其他网络的集成连接

实例配置文件

使用角色授予在EC2 实例上运行的应用程序权限需要一些额外的配置。在 EC2 实例上运行的应用程序通过虚拟化操作系统与 AWS 隔离。因此,需要额外的步骤将 AWS 角色及其相关权限分配给 EC2 实例,并使其可用于应用程序。

这一步是创建一个 实例配置文件 并附加到实例上。实例配置文件包含角色,并可以为在实例上运行的应用程序提供角色的临时凭证。这些临时凭证可以在应用程序的 API 调用中使用,以访问资源并限制访问仅限于角色指定的资源。请注意,一次只能为一个 EC2 实例分配一个角色,实例上的所有应用程序共享相同的角色和权限。

元数据端点

AWS EC2 元数据是关于 Amazon Elastic Compute Cloud (EC2) 实例的信息,在运行时可供实例使用。此元数据用于提供有关实例的信息,例如其实例 ID、运行所在的可用区、与实例关联的 IAM 角色以及实例的主机名。

枚举

# 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

未经身份验证的访问

AWS - EC2 Unauthenticated Enum

权限提升

在以下页面中,您可以查看如何滥用EC2权限来提升权限

AWS - EC2 Privesc

后期利用

AWS - EC2, EBS, SSM & VPC Post Exploitation

EBS

Amazon EBS(弹性块存储)快照基本上是AWS EBS卷的静态备份。换句话说,它们是附加到EC2实例的磁盘在特定时间点的副本。EBS快照可以跨区域和账户复制,甚至可以下载并在本地运行。

快照可能包含敏感信息,如源代码或API密钥,因此,如果有机会,建议检查它。

AMI与EBS的区别

AMI用于启动EC2实例,而EC2快照用于备份和恢复存储在EBS卷上的数据。虽然EC2快照可以用来创建新的AMI,但它与AMI不同,不包括操作系统、应用服务器或运行应用所需的其他软件信息。

权限提升

在以下页面中,您可以查看如何滥用EBS权限来提升权限

AWS - EBS Privesc

SSM

Amazon Simple Systems Manager (SSM) 允许远程管理EC2实例群,使其管理更加容易。每个实例需要运行SSM Agent服务,因为该服务将从AWS API获取并执行操作

SSM Agent使系统管理器能够更新、管理和配置这些资源。代理处理来自AWS云中系统管理器服务的请求,然后按请求中指定的方式运行它们。

SSM Agent预装在某些AMIs中,或者您需要在实例上手动安装它们。此外,实例中使用的IAM角色需要附加AmazonEC2RoleforSSM策略才能进行通信。

枚举

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>

你可以通过执行以下命令检查EC2实例中是否运行了Systems Manager:

ps aux | grep amazon-ssm

Privesc

在以下页面中,您可以查看如何滥用SSM权限来提升权限

AWS - SSM Privesc

ELB

Elastic Load Balancing (ELB) 是一个用于Amazon Web Services (AWS) 部署的负载均衡服务。ELB 自动分配传入的应用程序流量并根据流量需求扩展资源。

Enumeration

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

Launch Templates & Autoscaling Groups

枚举

# 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 是一套创新技术,构成了 AWS EC2 实例的基础平台。由 Amazon 推出以增强安全性、性能和可靠性,Nitro 利用定制的硬件组件和轻量级的 hypervisor。它将许多传统的虚拟化功能抽象到专用的硬件和软件中,最小化攻击面并提高资源效率。通过卸载虚拟化功能,Nitro 使 EC2 实例能够提供接近裸机的性能,这对资源密集型应用程序特别有利。此外,Nitro 安全芯片专门确保硬件和固件的安全性,进一步巩固了其强大的架构。

获取更多信息及如何枚举它:

AWS - Nitro Enum

VPN

VPN 允许将您的本地网络(站点到站点 VPN)或员工的笔记本电脑(客户端 VPN)与AWS VPC连接,以便无需将服务暴露在互联网上即可访问它们。

基本的 AWS VPN 组件

  1. Customer Gateway:

  • Customer Gateway 是您在 AWS 中创建的资源,用于表示 VPN 连接的您这一侧。

  • 它本质上是您站点到站点 VPN 连接这一侧的物理设备或软件应用程序。

  • 您向 AWS 提供路由信息和网络设备(如路由器或防火墙)的公共 IP 地址,以创建 Customer Gateway。

  • 它作为设置 VPN 连接的参考点,不会产生额外费用。

  1. Virtual Private Gateway:

  • Virtual Private Gateway (VPG) 是站点到站点 VPN 连接中 Amazon 这一侧的 VPN 集中器。

  • 它附加到您的 VPC,并作为您的 VPN 连接的目标。

  • VPG 是 VPN 连接中 AWS 这一侧的端点。

  • 它处理您的 VPC 和本地网络之间的安全通信。

  1. Site-to-Site VPN Connection:

  • Site-to-Site VPN 连接通过安全的 IPsec VPN 隧道将您的本地网络连接到 VPC。

  • 这种类型的连接需要 Customer Gateway 和 Virtual Private Gateway。

  • 它用于您的数据中心或网络与 AWS 环境之间的安全、稳定和一致的通信。

  • 通常用于常规的、长期的连接,并根据通过连接传输的数据量计费。

  1. Client VPN Endpoint:

  • Client VPN endpoint 是您在 AWS 中创建的资源,用于启用和管理客户端 VPN 会话。

  • 它用于允许单个设备(如笔记本电脑、智能手机等)安全连接到 AWS 资源或您的本地网络。

  • 它与站点到站点 VPN 不同,设计用于单个客户端而不是连接整个网络。

  • 使用 Client VPN,每个客户端设备使用 VPN 客户端软件建立安全连接。

您可以在这里找到有关 AWS VPN 的好处和组件的更多信息

Enumeration

# 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

本地枚举

本地临时凭证

当使用 AWS VPN Client 连接到 VPN 时,用户通常会登录 AWS以获取 VPN 访问权限。然后,一些AWS 凭证会被创建并存储在本地以建立 VPN 连接。这些凭证存储在 $HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt,包含一个AccessKey、一个SecretKey和一个Token

这些凭证属于用户 arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials(TODO:研究更多关于这些凭证的权限)。

opvn 配置文件

如果VPN 连接已建立,你应该在系统中搜索**.opvn配置文件。此外,你可以在$HOME/.config/AWSVPNClient/OpenVpnConfigs找到配置**。

后期利用

AWS - VPN Post Exploitation

参考资料

支持 HackTricks

Last updated