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

支持 HackTricks

VPC & Networking

了解 VPC 及其组件:

EC2

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

在 EC2 中有趣的枚举内容:

  • 虚拟机

  • SSH 密钥

  • 用户数据

  • 现有的 EC2/AMI/快照

  • 网络

  • 网络

  • 子网络

  • 公共 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

未经身份验证的访问

权限提升

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

后期利用

EBS

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

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

AMI与EBS的区别

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

权限提升

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

SSM

亚马逊简单系统管理器(SSM)允许远程管理EC2实例的浮动,使其管理变得更加简单。这些实例中的每一个都需要运行SSM代理服务,因为该服务将从AWS API获取操作并执行它们

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

SSM代理在某些AMI中预安装,或者您需要在实例上手动安装它们。此外,实例内使用的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权限以提升特权

ELB

弹性负载均衡(ELB)是亚马逊网络服务(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
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 实例的基础平台。由亚马逊推出以 增强安全性、性能和可靠性,Nitro 利用定制的 硬件组件和轻量级虚拟机监控器。它将传统虚拟化功能抽象到专用硬件和软件上,最小化攻击面并提高资源效率。通过卸载虚拟化功能,Nitro 使 EC2 实例能够提供 接近裸金属的性能,这对资源密集型应用特别有利。此外,Nitro 安全芯片专门确保 硬件和固件的安全性,进一步巩固其强大的架构。

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

VPN

VPN 允许将您的 本地网络(站点到站点 VPN)工作人员的笔记本电脑(客户端 VPN) 连接到 AWS VPC,以便可以访问服务而无需将其暴露于互联网。

基本 AWS VPN 组件

  1. 客户网关

  • 客户网关是您在 AWS 中创建的资源,用于表示 VPN 连接的一侧。

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

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

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

  1. 虚拟私有网关

  • 虚拟私有网关(VPG)是站点到站点 VPN 连接的亚马逊端的 VPN 集中器。

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

  • VPG 是 VPN 连接的 AWS 端点。

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

  1. 站点到站点 VPN 连接

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

  • 这种类型的连接需要客户网关和虚拟私有网关。

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

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

  1. 客户端 VPN 端点

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

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

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

  • 使用客户端 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 客户端连接到 VPN 时,用户通常会 登录 AWS 以获取对 VPN 的访问权限。然后,一些 AWS 凭证被创建并存储 在本地以建立 VPN 连接。这些凭证 存储在 $HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt 中,包含 AccessKeySecretKeyToken

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

opvn 配置文件

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

后期利用

参考文献

支持 HackTricks

Last updated