Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-ec2-

This commit is contained in:
Translator
2026-02-27 14:14:53 +00:00
parent 9f3ff09979
commit 6a781aa71b
2 changed files with 139 additions and 139 deletions

View File

@@ -1,150 +1,150 @@
# AWS - VPC Networking 基本信息
# AWS - VPC & Networking Basic Information
{{#include ../../../../banners/hacktricks-training.md}}
## AWS Networking in a Nutshell
一个 **VPC** 包含一个 **network CIDR**例如 10.0.0.0/16,及其 **routing table****network ACL**)。
一个 **VPC** 包含一个 **network CIDR**例如 10.0.0.0/16(以及它的 **路由表****network ACL**)。
该 VPC 网络被划分为多个 **subnetworks**,因此一个 **subnetwork****VPC**、**routing** **table****network ACL** 直接相关。
该 VPC 网络被划分为多个 **subnetworks(子网)**,因此 **子网****VPC**、**路由表****network ACL** 直接相关
然后,附着于服务(如 **EC2 instances****Network Interface** **subnetworks** 相连并应用 **security group(s)**
然后,附加到服务(如 EC2 实例)上**Network Interface** 会连接到这些 **子网**并应用 **security group(s)**
因此,**security group** 会限制使用该安全组的网络 **interfaces** 暴露的端口,**独立于 subnetwork**。而 **network ACL** 会对整个网络限制暴露的端口。
因此,**安全组** 会限制使用它的网络接口所暴露的端口,**独立于子网**。而 **network ACL** 会对整个网络暴露的端口进行限制
此外,为了能够 **访问 Internet**,有一些值得检查的配置:
此外,为了 **访问 Internet**,有一些需要检查的重要配置:
- 一个 **subnetwork** 可以 **auto-assign public IPv4 addresses**
- 在开启 **auto-assign IPv4 addresses** 的网络中创建**instance** 可能会获得一个公网地址
- 必须将一个 **Internet gateway** **attached****VPC**
- 也可以使用 **Egress-only internet gateways**
- 也可以在 **private subnet** 中部署 **NAT gateway**,这样私有子网内的实例可以 **connect to external services**,但外部无法直接 **reach them**
- NAT gateway 可以是 **public**(可访问 Internet)或 **private**(可访问其他 VPC
- 一个 **子网** 可以 **自动分配公有 IPv4 地址**
- 创建在开启 **auto-assign IPv4 addresses** 的网络中的 **实例** 可以拿到一个公有 IP
- 需要将一个 **Internet gateway** **附加****VPC**
- 也可以使用 **Egress-only internet gateways**
- 也可以在 **private subnet** 中部署一个 **NAT gateway**,这样私有子网可以 **连接外部服务**,但 **外部无法直接访问私有子网中的实例**
- NAT gateway 可以是 **public**(可访问互联网)或 **private**(可访问其他 VPC
![](<../../../../images/image (274).png>)
## VPC
Amazon **Virtual Private Cloud** (Amazon VPC) 使你能够 **AWS resources 启动到你定义的虚拟网络** 中。该虚拟网络包含多个子网、用于访问互联网的 Internet Gateways、ACLs、Security groups、IP 等。
Amazon **Virtual Private Cloud** (Amazon VPC) 使你能够 **AWS 资源部署到你定义的虚拟网络** 中。该虚拟网络包含若干子网、用于访问互联网的 Internet Gateways、ACLs、安全组、IP 等。
### Subnets
Subnets 有助于实施更高层次的安全。将相似资源进行 **逻辑分组**有助于在整个基础设施中维持 **易于管理性**
子网有助于加强安全性。对相似资源 **逻辑分组**能让你更容易管理整体基础设施
- 有效的 CIDR 从 /16 到 /28。
- 一个 subnet 不能同时位于不同的可用区(availability zones
- **AWS reserves the first three host IP addresses** 每个子网的前 3 个主机 IP 地址 **用于内部 AWS 使用**:第一个主机地址用于 VPC 路由器第二个地址 AWS DNS 保留,第三个地址为将来使用保留。
- 直接 **access to the Internet** 的子网称为 **public subnets**,而没有的称为 **private subnets**
- 有效的 CIDR 掩码从 /16 到 /28。
- 一个子网不能同时位于不同的可用区(Availability Zones
- **AWS 会保留每个子网的前个主机 IP 地址** 用于 **内部 AWS 使用**:第一个主机地址用于 VPC 路由器第二个地址保留给 AWS DNS第三个地址为将来使用保留。
- 那些 **具有直接 Internet 访问的子网称为 public subnets而没有直接 Internet 访问的称为 private subnets**
### Route Tables
Route tables 决定 VPC 中一个 subnet 的流量路由。它们决定哪些网络流量被转发到互联网或 VPN 连接。通常你会看到对以下的访问:
路由表决定 VPC 中子网的流量路由。它们决定哪些网络流量被转发到互联网或 VPN 连接。通常你会看到对以下目标的访问:
- Local VPC
- 本地 VPC
- NAT
- Internet Gateways / Egress-only Internet gateways VPC 提供 Internet 访问所需
- 为了将子网为 public需要 **create****attach** 一个 **Internet gateway** 到你的 VPC。
- VPC endpoints用于私有网络访问 S3
- Internet Gateways / Egress-only Internet gateways用于赋予 VPC 访问互联网的能力
- 要使子网为 public需要 **创建****附加** 一个 **Internet gateway** 到你的 VPC。
- VPC endpoints用于私有网络访问 S3
### ACLs
**Network Access Control Lists (ACLs)**Network ACLs 是控制进入和离开子网的网络流量的防火墙规则。它们可用于允许或拒绝特定 IP 地址或范围的流量。
**Network Access Control Lists (ACLs)**网络 ACL 是控制子网进出流量的防火墙规则。它们可用于允许或拒绝针对特定 IP 地址或地址范围的流量。
- 通常更常用的是通过 security groups 来允许/拒绝访问,但这是唯一能完全切断已建立反向 shell 的方式。修改 security groups 的规则不会停止已经建立的连接。
- 然而,这适用于整个 subnetwork在禁止某些内容时要小心,因为可能会影响所需功能。
- 通常更常用的是使用安全组来允许/拒绝访问,但 ACL 是完全切断已建立反向 shell 的唯一办法。修改安全组规则不会停止已经建立的连接。
- 但是,这会作用于整个子网,因此在阻断时要小心,因为可能会破坏所需功能。
### Security Groups
Security groups 是控制 VPC 中实例入站和出站网络流量的虚拟 **防火墙**。关系为 1 个 SG 对多台实例(通常是 1 对 1)。\
安全组是控制 VPC 中实例入站和出站网络流量的虚拟 **防火墙**。关系通常为 1 个安全组对应多个实例(通常为一对一的设置也很常见)。\
通常用于在实例上打开危险端口,例如端口 22
<figure><img src="https://lh5.googleusercontent.com/LliB7eb3cYfkEyOpyw1-eYgWsn2kq1yF6uRn5VYndvOuTvDlURimYx9UvuK8F2impTLmx50mid4MdTXE-Ljt2i_rxaIfnKUdji_hFjCdU9tdoW-axng9-W4tSL71gbbjrPQ7IYY5lAdH_G3UoMRMGGGOxQ=s2048" alt=""><figcaption></figcaption></figure>
### Elastic IP Addresses
_Elastic IP address_ 是为动态云计算设计的 **静态 IPv4 地址**。Elastic IP 地址分配到你的 AWS 账户,并在你释放之前一直属于你。通过使用 Elastic IP 地址,你可以通过快速将地址重新映射到账户中的另一个实例来掩盖实例或软件的故障。
一个 _Elastic IP address_ 是为动态云计算设计的 **静态 IPv4 地址**。Elastic IP 地址分配到你的 AWS 账户,并在你释放之前一直属于你。通过使用 Elastic IP你可以通过快速将地址重新映射到账户中的另一个实例来掩盖实例或软件的故障。
### Connection between subnets
默认情况下,所有子网的 **automatic assigned of public IP addresses** 都是关闭的,但可以开
默认情况下,所有子网的 **自动分配公有 IP 地址功能是关闭的**,但可以开。
**A local route within a route table enables communication between VPC subnets.**
**路由表中的本地路由允许 VPC 子网之间的通信。**
如果你将一个 subnet 连接到另一个 subnet你不能通过该连接访问该另一个 subnet 所连接的其子网需要直接与它们建立连接。**这适用于 internet gateways**。你不能通过子网连接访问 Internet需要internet gateway 分配你的子网。
如果你 **将一个子网连接到另一个子网,不能通过该子网访问与之相连的其子网**,你需要直接与它们建立连接。**这同样适用于 Internet gateways**。你不能通过某个子网连接访问互联网,必须Internet gateway 分配你的子网。
### VPC Peering
VPC peering 允许你 **两个或更多 VPC 连接在一起**,使用 IPV4 或 IPV6犹如它们是同一网络的一部分
VPC peering 允许你 **两个或更多 VPC 互相连接**,使用 IPv4 或 IPv6就好像它们属于同一网络一样
一旦对等连接建立,**一个 VPC 中的资源可以访问另一个 VPC 中的资源**。VPC 之间的连接通过现有的 AWS 网络基础设施实现,因此它高度可用且没有带宽瓶颈。由于 **peered connections operate as if they were part of the same network**在使用的 CIDR 块范围方面存在限制。\
如果你的 VPC 存在 **overlapping or duplicate CIDR** 范围, **无法对等连接这些 VPC**。\
每个 AWS VPC **只会与其对等方通信**。例如,如果你在 VPC 1 与 VPC 2 之间有对等连接,在 VPC 2 与 VPC 3 之间有另一个连接,如图所示,那么 VPC 1 VPC 2 可以直接通信VPC 2 VPC 3 也可以通信,但 VPC 1 VPC 3 则不能。**你不能通过一个 VPC 路由到另一个 VPC。**
一旦对等连接建立,**一个 VPC 中的资源可以访问另一个 VPC 中的资源**。VPC 之间的连接通过现有的 AWS 网络基础设施实现,因此具有高可用性且不存在带宽瓶颈。由于 **对等连接表现得像同一网络的一部分**所以在你可用的 CIDR 块范围存在限制。\
如果你的 VPC 存在 **重叠或重复的 CIDR** 范围,那么 **你将无法对等连接这些 VPC**。\
每个 AWS VPC **只会与其对等方通信**。例如,如果你在 VPC 1 与 VPC 2 之间有对等连接,在 VPC 2 与 VPC 3 之间也有对等连接,如图所示,那么 VPC 1 VPC 2 可以直接互相通信VPC 2 VPC 3 也可以,但 VPC 1 VPC 3 则不能。**你不能通过一个 VPC 路由到另一个 VPC。**
### **VPC Flow Logs**
在你的 VPC ,可能有数百甚至数千个资源在不同子网之间(公共和私有)以及通过 VPC peering 连接在不同 VPC 之间通信。**VPC Flow Logs 允许你捕获流经 VPC 资源的网络接口之间的 IP 流量信息**。
在你的 VPC ,可能有成百上千个资源在不同子网之间相互通信(既有公有子网也有私有子网),并且通过 VPC peering 在不同 VPC 之间通信。**VPC Flow Logs 允许你捕获 VPC 资源的网络接口之间流动的 IP 流量信息**。
与 S3 access logs 和 CloudFront access logs 不同,**VPC Flow Logs 生成的日志数据不会存储 S3 中。相反,捕获的日志数据会发送到 CloudWatch logs**
与 S3 access logs 和 CloudFront access logs 不同,**VPC Flow Logs 生成的日志数据不会存储 S3 中,而是发送到 CloudWatch logs**
限制:
- 如果你运行的是 VPC peered connection你只能看到属于同账户对等 VPC 的 flow logs
- 如果你仍在使用 EC2-Classic 环境中的资源,则无法从这些接口检索信息。
- 一旦创建 VPC Flow Log就无法更改。要更改 VPC Flow Log 配置,需要删除并重新创建一个新的
-流量不被日志监控和捕获VPC 内的 DHCP 流量、实例发 Amazon DNS Server 的流量。
- 任何流往 VPC 默认路由器的 IP 地址的流量,以及流向和来自以下地址的流量:169.254.169.254(用于收集实例元数据)和 169.254.169.123(用于 Amazon Time Sync Service
- 如果你运行的是 VPC peered 连接,那么你只能看到属于同账户对等 VPC 的流量日志
- 如果你仍在运行 EC2-Classic 环境中的资源,则无法从这些接口检索信息。
- 一旦创建 VPC Flow Log就无法更改。要更改 VPC Flow Log 配置,必须删除然后重新创建
- 下流量不被日志监控和捕获VPC 内的 DHCP 流量、实例发送到 Amazon DNS Server 的流量。
- 任何目标为 VPC 默认路由器的流量,以及目标或源为 169.254.169.254(用于收集实例元数据)和 169.254.169.123(用于 Amazon Time Sync Service的流量,不会被捕获
- 与来自 Windows 实例的 Amazon Windows 激活许可相关的流量
- 在 network load balancer 接口和 endpoint network interface 之间的流量
- 网络负载均衡器接口与终端点网络接口之间的流量
对于每个将数据发布到 CloudWatch log group 的 network interface会使用不同的 log stream。在每个这些 stream 中,会有显示日志条目内容的 flow log 事件数据。每个这些 **日志会在大约 10 到 15 分钟的窗口内捕获数据**
对于每个 CloudWatch log group 发布数据的网络接口,都会使用不同的日志流(log stream。在这些流中,会有 flow log 事件数据显示日志条目的内容。每个这些**日志大约捕获 10 到 15 分钟的窗口期间的数据**。
## VPN
### Basic AWS VPN Components
1. **Customer Gateway**:
- Customer Gateway 是你在 AWS 中创建以表示你端 VPN 连接一侧的资源
- 它本质上是站点到站点 VPN 连接一的物理设备或软件应用程序
- 你向 AWS 提供路由信息和网络设备(如路由器或防火墙)的公网 IP 地址以创建 Customer Gateway。
- 它作为设置 VPN 连接的参考点,并不会产生额外费用。
- Customer Gateway 是你在 AWS 中创建的一个资源,用来表示你这端的 VPN 连接。
- 它本质上是站点到站点 VPN 连接一的物理设备或软件应用。
-需要向 AWS 提供路由信息和你的网络设备的公网 IP 地址(例如路由器或防火墙)来创建 Customer Gateway。
- 它作为设置 VPN 连接的参考点,并不会产生额外费用。
2. **Virtual Private Gateway**:
- Virtual Private Gateway (VPG) 是站点到站点 VPN 连接中 Amazon 端的 VPN 集中设备
- 它附加到你的 VPC并作为你的 VPN 连接的目标。
- VPG 是 VPN 连接的 AWS 端点。
- 它处理你的 VPC 本地网络之间的安全通信。
- Virtual Private Gateway (VPG) 是站点到站点 VPN 连接中 Amazon 端的 VPN 聚合器
- 它附加到你的 VPC并作为 VPN 连接的目标端点
- VPG 是 AWS 侧的 VPN 连接端点。
- 它处理 VPC 本地网络之间的安全通信。
3. **Site-to-Site VPN Connection**:
- Site-to-Site VPN connection 将你的本地网络通过安全的 IPsec VPN 隧道连接到 VPC
- 这种连接需要 Customer Gateway 和 Virtual Private Gateway。
- 它用于你的数据中心或网络与 AWS 环境之间的安全、稳定且一致的通信。
- 通常用于常规、长期连接,并根据通过连接传输的数据量计费。
- Site-to-Site VPN 连接通过安全的 IPsec VPN 隧道将你的本地网络与 VPC 连接起来
- 这种类型的连接需要 Customer Gateway 和 Virtual Private Gateway。
- 它用于你的数据中心或网络与 AWS 环境之间的安全、稳定、持续的通信。
- 通常用于定期的长期连接,并连接传输的数据量计费。
4. **Client VPN Endpoint**:
- Client VPN endpoint 是你在 AWS 中创建的资源,用于启用和管理客户端 VPN 会话。
- 它用于允许单个设备(如笔记本、智能手机等)安全连接到 AWS 资源或你的本地网络。
- 它与 Site-to-Site VPN 不同之处在于它面向单个客户端,而不是连接整个网络
- 使用 Client VPN每个客户端设备使用 VPN 客户端软件来建立安全连接。
- 它与 Site-to-Site VPN 不同,后者用于连接整个网络,而 Client VPN 面向单个客户端设备
- 使用 Client VPN,每个客户端设备使用 VPN 客户端软件来建立安全连接。
### Site-to-Site VPN
**将你的 on premisses 网络与 VPC 连接。**
**将你的本地网络与 VPC 连接。**
- **VPN connection**:你本地设备与 VPC 之间的安全连接。
- **VPN tunnel**:一个加密链,数据可以从客户网络传输到 AWS 或从 AWS 传回客户网络。
- **VPN tunnel**:一个加密链,数据可以从客户网络传输到 AWS 或从 AWS 传回客户网络。
每个 VPN connection 包括两个 VPN 隧道,你可以同时使用它们以提高可用性。
每个 VPN connection 包括两个 VPN 隧道,你可以同时使用以达到高可用性。
- **Customer gateway**一个 AWS 资源,向 AWS 提供有关你的 customer gateway 设备的信息
- **Customer gateway device**:站点到站点 VPN 连接一侧的物理设备或软件应用。
- **Virtual private gateway**:站点到站点 VPN 连接中 Amazon 端的 VPN 集中设备。你可以使用 virtual private gateway 或 transit gateway 作为 Amazon 的网关。
- **Transit gateway**:一个可用于互你的 VPC本地网络的中转枢纽。你可以使用 transit gateway 或 virtual private gateway 作为 Site-to-Site VPN 连接中 Amazon 的网关。
- **Customer gateway** AWS 中的一个资源,提供关于你端设备的信息给 AWS
- **Customer gateway device**你这端站点到站点 VPN 连接的物理设备或软件应用。
- **Virtual private gateway**:站点到站点 VPN 连接中 Amazon 端的 VPN 聚合器。你可以使用 virtual private gateway 或 transit gateway 作为 Amazon 的网关。
- **Transit gateway**:一个可用于互你的 VPCs 与本地网络的中转中心。你可以使用 transit gateway 或 virtual private gateway 作为 Amazon 的网关。
#### Limitations
- IPv6 流量在 virtual private gateway 上的 VPN connections 中不受支持
- AWS VPN connection 不支持 Path MTU Discovery。
- 虚拟私有网关(virtual private gateway)不支持 IPv6 流量的 VPN 连接
- AWS VPN 连接不支持 Path MTU Discovery。
外,在使用 Site-to-Site VPN 时请考虑以下事项。
外,在使用 Site-to-Site VPN 时请考虑以下事项。
- 将你的 VPC 连接到共的本地网络时,我们建议你为网络使用不重叠的 CIDR 块。
- 将你的 VPCs 连接到共的本地网络时,建议使用不重叠的 CIDR 块。
### Client VPN <a href="#what-is-components" id="what-is-components"></a>
@@ -153,33 +153,33 @@ VPC peering 允许你将 **两个或更多 VPC 连接在一起**,使用 IPV4
#### Concepts
- **Client VPN endpoint:** 你创建并配置以启用和管理客户端 VPN 会话的资源。所有客户端 VPN 会话都在此资源终止。
- **Target network:** Target network 是你与 Client VPN endpoint 关联的网络。**VPC 的一个 subnet 是 target network**。将 subnet 与 Client VPN endpoint 关联可让你建立 VPN 会话。你可以为高可用性将多个 subnet 与 Client VPN endpoint 关联。所有 subnet 必须来自同一 VPC每个 subnet 必须属于不同的 Availability Zone
- **Route**: 每个 Client VPN endpoint 有一个 route table,描述可的目标网络路由。路由表中的每路由指定到特定资源或网络的流量路径。
- **Authorization rules:** Authorization rule **限制可以访问网络的用户**。对于指定网络,你配置允许访问的 Active Directory 或 identity provider (IdP) 组。只有属于该组的用户才能访问指定网络。**默认情况下没有授权规则**,你必须配置授权规则才能使用户访问资源和网络。
- **Client:** 连接到 Client VPN endpoint 建立 VPN 会话的终端用户。终端用户需要下载一个 OpenVPN client 并使用你创建的 Client VPN 配置文件来建立会话。
- **Client CIDR range:** 分配客户端 IP 地址的 IP 地址范围。 Client VPN endpoint 的每个连接都会从 client CIDR range 分配一个唯一的 IP 地址。你选择 client CIDR range例如 `10.2.0.0/16`
- **Client VPN ports:** AWS Client VPN 支持端口 443 和 1194 TCP UDP默认端口 443。
- **Client VPN network interfaces:** 当你将 subnet 与 Client VPN endpoint 关联时,我们会在该 subnet 中创建 Client VPN network interfaces。**从 Client VPN endpoint 发送到 VPC 的流量通过 Client VPN network interface 发送**。随后会应用源网络地址转换SNAT将来自 client CIDR range 的源 IP 地址转换为 Client VPN network interface 的 IP 地址。
- **Connection logging:** 你可以为 Client VPN endpoint 启用连接日志以记录连接事件。你可以使用这些信息进行取证、分析 Client VPN endpoint 的使用情况或调试连接问题。
- **Self-service portal:** 你可以为 Client VPN endpoint 启用自助门户。客户端可以使用凭据登录基于 Web 的门户并下载最新版本的 Client VPN endpoint 配置文件,或下载 AWS 提供的客户端的最新版本。
- **Target network:** 目标网络是你与 Client VPN endpoint 关联的网络。**VPC 的子网就是一种 target network**。将子网与 Client VPN endpoint 关联可建立 VPN 会话。为了高可用性,你可以将多个子网关联到一个 Client VPN endpoint。所有子网必须来自同一 VPC每个子网必须属于不同的可用区
- **Route**: 每个 Client VPN endpoint 有一个路由表,描述可的目标网络路由。路由表中的每路由指定到特定资源或网络的流量路径。
- **Authorization rules:** 授权规则 **限制哪些用户可以访问某个网络**。对于指定网络,你配置允许访问的 Active Directory 或身份提供商(IdP组。只有属于该组的用户才能访问指定网络。**默认情况下没有授权规则**,你必须配置授权规则以允许用户访问资源和网络。
- **Client:** 连接到 Client VPN endpoint 建立 VPN 会话的终端用户。终端用户需要下载 OpenVPN 客户端并使用你创建的 Client VPN 配置文件来建立会话。
- **Client CIDR range:** 从中分配客户端 IP 地址的地址范围。每个连接到 Client VPN endpoint 的会话都会从 client CIDR range 分配一个唯一的 IP 地址。你选择 client CIDR range例如 `10.2.0.0/16`
- **Client VPN ports:** AWS Client VPN 支持端口 443 和 1194,既支持 TCP 也支持 UDP默认端口 443。
- **Client VPN network interfaces:** 当你将子网与 Client VPN endpoint 关联时,我们会在该子网中创建 Client VPN network interfaces。**从 Client VPN endpoint 发 VPC 的流量通过这些 Client VPN network interfaces 发送**。随后会应用源地址网络地址转换SNAT将来自 client CIDR range 的源 IP 地址翻译为 Client VPN network interface 的 IP 地址。
- **Connection logging:** 你可以为 Client VPN endpoint 启用连接日志记录以记录连接事件。你可以使用这些信息进行取证、分析 Client VPN endpoint 的使用情况或调试连接问题。
- **Self-service portal:** 你可以为 Client VPN endpoint 启用自助门户。客户端可以使用凭据登录基于 Web 的门户并下载最新的 Client VPN endpoint 配置文件,或下载 AWS 提供的客户端的最新版本。
#### Limitations
- **Client CIDR ranges cannot overlap with the local CIDR** of the VPC in which the associated subnet is located, or any routes manually added to the Client VPN endpoint's route table.
- Client CIDR ranges must have a block size of at **least /22** and must **not be greater than /12.**
- **Client CIDR range** 中的一部分地址用于 **支持 Client VPN endpoint 的可用性模型**,不能分配给客户端。因此,我们建议你 **分配一个包含所需并发连接数两倍 IP 地址数的 CIDR 块**,以支持计划中的最大并发连接数。
- 创建 Client VPN endpoint 后 **client CIDR range 无法更改**
- 与 Client VPN endpoint 关联的 **subnets 必须在同一 VPC**
- **不能为 Client VPN endpoint 关联来自同一 Availability Zone 的多个 subnet**
- Client VPN endpoint **不支持在 dedicated tenancy VPC 中进行 subnet 关联**
- Client VPN 仅支持 **IPv4** 流量。
- Client VPN **不符合** Federal Information Processing Standards (**FIPS**)
- 如果你的 Active Directory 禁用了多因素认证MFA则用户密码不能采用以下格式。
- A **portion of the addresses** in the client CIDR range are used to **support the availability** model of the Client VPN endpoint, and cannot be assigned to clients. Therefore, we recommend that you **assign a CIDR block that contains twice the number of IP addresses that are required** to enable the maximum number of concurrent connections that you plan to support on the Client VPN endpoint.
- The **client CIDR range cannot be changed** after you create the Client VPN endpoint.
- The **subnets** associated with a Client VPN endpoint **must be in the same VPC**.
- You **cannot associate multiple subnets from the same Availability Zone with a Client VPN endpoint**.
- A Client VPN endpoint **does not support subnet associations in a dedicated tenancy VPC**.
- Client VPN supports **IPv4** traffic only.
- Client VPN is **not** Federal Information Processing Standards (**FIPS**) **compliant**.
- If multi-factor authentication (MFA) is disabled for your Active Directory, a user password cannot be in the following format.
```
SCRV1:<base64_encoded_string>:<base64_encoded_string>
```
- 对于使用 mutual authentication 验证的客户端,不提供自助门户。
- The self-service portal is **not available for clients that authenticate using mutual authentication**.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -1,39 +1,39 @@
# AWS - S3, Athena & Glacier Enum
# AWS - S3, Athena & Glacier 枚举
{{#include ../../../banners/hacktricks-training.md}}
## S3
Amazon S3 是一允许你 **存储大量数据** 的服务
Amazon S3 是一项服务,允许你**存储大量数据**
Amazon S3 提供多种选项来实现静态数据的 **保护**。这些选项包括 **Permission**Policy、**Encryption**(客户端和服务器端)、**Bucket Versioning** 以及 **MFA** **based delete**。**用户可以启用** 这些选项中的任意一个来实现数据保护。**Data replication** 是 AWS 的内部功能,其中 **S3 会自动将每个对象复制到所有可用区**在这种情况下组织无需启用该功能
Amazon S3 提供多种选项来实现数据在静态时的**保护**。这些选项包括 **Permission** (Policy)、**Encryption** (Client and Server Side)、**Bucket Versioning** **MFA** **based delete**。**用户可以启用**这些选项中的任意一个来实现数据保护。**Data replication** 是 AWS 的一项内部功能,**S3 automatically replicates each object across all the Availability Zones**,组织在这种情况下无需启用
通过基于资源的权限,可以为存储桶的子目录单独定义权限。
使用基于资源的权限,可以为 bucket 的子目录单独定义权限。
### Bucket Versioning and MFA based delete
当启用 Bucket Versioning 时,任何试图修改文件的操作都会生成该文件的新版本,同时保留之前的内容。因此,不会覆盖原有内容。
当启用 Bucket Versioning 时,任何试图更改桶内文件的操作都会生成该文件的新版本,同时保留之前的内容。因此,不会覆盖原有内容。
此外MFA based delete 会止 S3 存储桶中对象的版本被删除,阻止禁用 Bucket Versioning因此攻击者无法修改这些文件。
此外MFA based delete 会止 S3 bucket 中的文件版本被删除,也会阻止禁用 Bucket Versioning因此攻击者无法修改这些文件。
### S3 Access logs
可以为某些存储桶 **启用 S3 访问日志记录**(默认情况下为禁用),并将日志保存到另一个存储桶中,以便知道谁在访问该存储桶(两个存储桶必须位于同一区域)。
可以为某个 bucket **启用 S3 access login**(默认禁用),并将日志保存到另一个 bucket,以便知道谁在访问该 bucket两个 bucket 必须在同一 region)。
### S3 Presigned URLs
可以生成 presigned URL通常可用于 **访问存储桶中的指定文件**。一个 **presigned URL 看起来像这样**
可以生成 presigned URL通常可用于**访问 bucket 中指定文件**。一个 **presigned URL 看起来像这样**
```
https://<bucket-name>.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa
```
一个 presigned URL 可以 **created from the cli using credentials of a principal with access to the object**(如果你使用的账没有访问权限,会创建一个有效期更短的 presigned URL但它将无用
presigned URL 可以 **从 cli 使用具有对该对象访问权限的主体的凭证创建**(如果你使用的账没有访问权限,会创建一个更短的 presigned URL但它将无法使用)
```bash
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
```
> [!NOTE]
> 生成预签名 URL 所需的唯一权限是被授予的权限,因此对于前面的命令,主体唯一需要的权限是 `s3:GetObject`
> 生成预签名 URL 唯一需要的权限是被授予的权限,所以对于前面的命令,主体唯一需要的权限是 `s3:GetObject`
也可以使用 **其他权限** 创建预签名 URL
也可以使用**其他权限**创建预签名 URL
```python
import boto3
url = boto3.client('s3').generate_presigned_url(
@@ -44,39 +44,39 @@ ExpiresIn=3600
```
### S3 加密机制
**DEK 表示数据加密密钥(Data Encryption Key**是始终生成并用于加密数据的密钥。
**DEK 意味着 Data Encryption Key(数据加密密钥**,是始终生成并用于加密数据的密钥。
<details>
<summary><strong>使用 S3 托管密钥的服务端加密, SSE-S3</strong></summary>
选项几乎不需要配置,所使用的加密密钥完全由 AWS 管理。你只需 **上传数据S3 处理其余所有方面**S3 账中的每个桶都会分配一个桶密钥
选项需要最少的配置,且所有用于加密密钥由 AWS 管理。你所需做的只是**上传数据S3 处理所有其余部分**。每个 S3 账中的 bucket 都会分配一个 bucket key
- 加密:
- 对象数据 + 创建的明文 DEK --> 加密后的数据(存储在 S3 中)
- 创建的明文 DEK + S3 Master Key --> Encrypted DEK存储在 S3 中),并从内存中删除明文
- Object Data + 创建的明文 DEK --> 加密数据(存储在 S3 中)
- 创建的明文 DEK + S3 Master Key --> 加密后的 DEK存储在 S3 中),并从内存中删除明文
- 解密:
- Encrypted DEK + S3 Master Key --> 明文 DEK
- 明文 DEK + 加密数据 --> 对象数据
- 加密后的 DEK + S3 Master Key --> 明文 DEK
- 明文 DEK + 加密数据 --> Object Data
Please, note that in this case **the key is managed by AWS** (rotation only every 3 years). If you use your own key you willbe able to rotate, disable and apply access control.
请注意,在此情况下 **密钥由 AWS 管理**(默认仅每 3 年轮换一次)。如果你使用自己的密钥,则可以进行轮换、禁用以及应用访问控制。
</details>
<details>
<summary><strong>使用 KMS 管密钥的服务端加密, SSE-KMS</strong></summary>
<summary><strong>使用 KMS 管密钥的服务端加密, SSE-KMS</strong></summary>
该方法允许 S3 使用密钥管理服务来生成你的数据加密密钥。KMS 提供了更大的密钥管理灵活性。例如,你可以禁用、轮换并对 CMK 应用访问控制,并使用 AWS Cloud Trail 审计其使用情况。
该方法允许 S3 使用 KMS 来生成你的数据加密密钥。KMS 提供了更大的密钥管理灵活性。例如,你可以禁用、轮换并对 CMK 应用访问控制,并使用 AWS CloudTrail 其使用情况进行审计
- 加密:
- S3 向 KMS CMK 请求数据密钥
- KMS 使用 CMK 生成明文 DEK 与加密 DEK 的一对,并将它们发送给 S3
- S3 使用明文密钥加密数据,存储加密数据和加密密钥,并从内存中删除明文密钥
- S3 向 KMS 请求数据密钥data key
- KMS 使用 CMK 生成 DEK 的明文和已加密版本,并将两者返回给 S3
- S3 使用明文 DEK 来加密数据,存储加密数据和加密后的 DEK,并从内存中删除明文 DEK
- 解密:
- S3 向 KMS 请求解密对象的加密数据密钥
- KMS 使用 CMK 解密数据密钥并将其返回给 S3
- S3 解密对象数据
- S3 向 KMS 请求解密对象的加密数据密钥
- KMS 使用 CMK 解密数据密钥并将其返回给 S3
- S3 使用该明文密钥解密对象数据
</details>
@@ -84,16 +84,16 @@ Please, note that in this case **the key is managed by AWS** (rotation only ever
<summary><strong>使用客户提供密钥的服务端加密, SSE-C</strong></summary>
此选项允许你提供可能在 AWS 外部已在使用的主密钥。客户提供的密钥会随数据一发送到 S3S3 你执行加密。
此选项允许你提供自己在 AWS 外部可能已经使用的主密钥。客户提供的密钥会随数据一发送到 S3S3 将替你执行加密操作
- 加密:
- 用户将对象数据 + 客户密钥发送到 S3
- 使用客户密钥加密数据,存储加密后的数据
- 还会存储客户密钥的带盐 HMAC 值以便将来验证密钥
- 使用客户密钥对数据进行加密,并保存加密后的数据
- 同时存储客户密钥的带盐 HMAC 值以便将来验证密钥
- 客户密钥从内存中删除
- 解密:
- 用户发送客户密钥
- 密钥与存储的 HMAC 值进行验证
- 密钥与存储的 HMAC 值进行验证
- 然后使用客户提供的密钥解密数据
</details>
@@ -102,17 +102,17 @@ Please, note that in this case **the key is managed by AWS** (rotation only ever
<summary><strong>使用 KMS 的客户端加密, CSE-KMS</strong></summary>
与 SSE-KMS 类似,这也使用密钥管理服务生成你的数据加密密钥。但这次是由客户端而非 S3 调用 KMS。加密在客户端进行加密后的数据随后发送到 S3 存储。
与 SSE-KMS 类似,此方式也使用 KMS 来生成数据加密密钥。但这次是由客户端而非 S3 调用 KMS。加密在客户端进行然后将加密后的数据发送到 S3 存储。
- 加密:
- 客户端向 KMS 请求数据密钥
- KMS 返回明文 DEK 和使用 CMK 加密的 DEK
- 两个密钥都返回
- 客户端使用明文 DEK 加密数据,并将加密数据 + 加密的 DEK 发送到 S3加密的 DEK 被作为加密数据的元数据保存在 S3 中)
- KMS 返回明文 DEK 以及用 CMK 加密的 DEK
- 两个密钥都返回给客户端
- 客户端使用明文 DEK 加密数据,并将加密数据 + 加密的 DEK(作为加密数据在 S3 中的元数据)发送到 S3
- 解密:
- 带有加密 DEK 的加密数据被发送客户端
- 客户端请求 KMS 使用 CMK 解密加密密钥KMS 返回明文 DEK
- 客户端现在可以解密加密数据
- 带有加密 DEK 的加密数据被发送客户端
- 客户端请求 KMS 使用 CMK 解密加密密钥KMS 返回明文 DEK
- 客户端随后使用该明文 DEK 解密数据
</details>
@@ -120,21 +120,21 @@ Please, note that in this case **the key is managed by AWS** (rotation only ever
<summary><strong>使用客户提供密钥的客户端加密, CSE-C</strong></summary>
使用机制,你可以使用自己提供的密钥并通过 AWS-SDK 客户端在将数据发送到 S3 存储之前对其进行加密。
使用机制,你可以用自己提供的密钥并使用 AWS-SDK 客户端在将数据发送到 S3 存储之前对其进行加密。
- 加密:
- 客户端生成 DEK 并加密明文数据
- 然后使用自定义 CMK 加密该 DEK
- 提交加密数据 + 加密的 DEK 到 S3 存储
- 然后使用自身的自定义 CMK DEK 进行加密
- 加密数据 + 加密的 DEK 提交到 S3 存储
- 解密:
- S3 发送加密的数据和 DEK
- 由于客户端已有用于加密 DEK 的 CMK客户端解密 DEK然后使用明文 DEK 解密数据
- S3 返回加密的数据和 DEK
- 由于客户端已有用于加密 DEK 的 CMK客户端解密 DEK然后使用明文 DEK 解密数据
</details>
### **枚举**
入侵 AWS 组织的传统主要途径之一是先利用可公开访问的。**可以在此找到**[**公共桶枚举器**](../aws-unauthenticated-enum-access/index.html#s3-buckets)****
传统上,攻破 AWS 组织的一种主要途径是先入侵公开访问的 S3 bucket。**可以在此找到** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.**
```bash
# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
@@ -229,16 +229,16 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
```
### dual-stack <a href="#dual-stack-endpoints-description" id="dual-stack-endpoints-description"></a>
您可以通过 dual-stack endpoint 使用 virtual hosted-style 或 path-style endpoint 名称访问 S3 bucket。这些 endpoint 有助于通过 IPv6 访问 S3。
您可以通过使用 virtual hosted-style 或 path-style 端点名称,通过 dual-stack 端点 访问 S3 存储桶。这些端点对于通过 IPv6 访问 S3 很有用
Dual-stack endpoints 使用以下语法:
Dual-stack 端点使用以下语法:
- `bucketname.s3.dualstack.aws-region.amazonaws.com`
- `s3.dualstack.aws-region.amazonaws.com/bucketname`
### Privesc
下页面中,您可以查看如何 **abuse S3 permissions to escalate privileges**
在下面的页面中,您可以查看如何 **滥用 S3 权限 以 提权**
{{#ref}}
../aws-privilege-escalation/aws-s3-privesc/README.md
@@ -266,19 +266,19 @@ Dual-stack endpoints 使用以下语法:
### S3 HTTP Cache Poisoning Issue <a href="#heading-s3-http-desync-cache-poisoning-issue" id="heading-s3-http-desync-cache-poisoning-issue"></a>
[**According to this research**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) ,可以将任意 bucket 的响应缓存为看似属于另一个 bucket 的响应。这可以被滥用来篡改例如 JavaScript 文件的响应,从而危及使用 S3 存储静态代码的任意页面。
[**According to this research**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) ,可以将任意 bucket 的响应缓存成看起来属于另一个 bucket 的响应。这可以被滥用来篡改例如 JavaScript 文件的响应,从而危及使用 S3 存储静态代码的任意页面。
## Amazon Athena
Amazon Athena 是一个交互式查询服务,可让您直接在 Amazon Simple Storage Service (Amazon **S3**) 中使用标准 **SQL** 轻松 **分析数据**
Amazon Athena 是一个交互式查询服务,可让您使用标准 **SQL** 直接在 Amazon Simple Storage Service (Amazon **S3**) 中 **分析数据**
您需要将出现在被监控 S3 buckets 中的内容准备一个 **关系型 DB 表**。然后Amazon Athena 能够从日志中填充该 DB从而让您对其进行查询。
您需要**准备一个关系型数据库表**,其格式与将出现在被监控 S3 bucket 中的内容相匹配。然后Amazon Athena 可以从日志中填充该数据库,以便您进行查询。
Amazon Athena 支持 **查询已加密的 S3 数据的能力**,并且如果配置为这样**Athena 可以加密查询结果,随后将其存储在 S3 中**。
Amazon Athena 支持**查询已加密的 S3 数据**如果配置为这样,**Athena 可以加密查询结果,这些结果随后可以存储在 S3 中**。
**查询结果的这种加密与被查询的底层 S3 数据独立的**,这意味着即使 S3 数据未加密,查询得到的结果也可以被加密。需要注意的几点Amazon Athena 仅支持使用 **以下 S3 加密方法** **SSE-S3、SSE-KMS 和 CSE-KMS** 加密的数据
**查询结果的加密与被查询的底层 S3 数据的加密是相互独立的**,这意味着即使 S3 数据未加密查询结果也可以被加密。需要注意的是Amazon Athena 仅支持使用**以下 S3 加密方法**加密的数据:**SSE-S3、SSE-KMS 和 CSE-KMS**
SSE-C 和 CSE-C 不受支持。除此之外,需要理解的是 Amazon Athena 会对与查询本身位于相同区域的 **已加密对象** 运行查询。如果您需要查询使用 KMS 加密的 S3 数据,那么 Athena 用户需要拥有特定权限以允许其执行该查询。
SSE-C 和 CSE-C 不受支持。此外,重要的是要理解 Amazon Athena 会对**与查询本身位于相同 region 的加密对象**运行查询。如果您需要查询使用 KMS 加密的 S3 数据, Athena 用户需要具备特定权限才能执行该查询。
### Enumeration
```bash