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

This commit is contained in:
Translator
2026-02-23 23:59:19 +00:00
parent 878adf344a
commit 9f3ff09979
2 changed files with 164 additions and 174 deletions

View File

@@ -1,195 +1,185 @@
# AWS - VPC & Networking 基本信息
# AWS - VPC Networking 基本信息
{{#include ../../../../banners/hacktricks-training.md}}
## AWS 网络概述
## AWS Networking in a Nutshell
一个 **VPC** 包含一个 **网络 CIDR**如 10.0.0.0/16(以及它的 **路由表****网络 ACL**)。
一个 **VPC** 包含一个 **network CIDR**(例如 10.0.0.0/16,及其 **routing table****network ACL**)。
这个 VPC 网络被划分为 **子网络**,因此 **子网络****VPC**、**路由表** 和 **网络 ACL** 直接 **相关**
VPC 网络被划分为多个 **subnetworks**,因此一个 **subnetwork****VPC**、**routing** **table****network ACL** 直接相关
然后,附加到服务(如 EC2 实例)的 **网络接口** **子网络** 通过 **安全组** **连接**
然后,附着于服务(如 **EC2 instances**)的 **Network Interface** **subnetworks** 相连并应用 **security group(s)**
因此,**安全组** 限制使用的网络 **接口** 暴露端口,**独立于子网络**。而 **网络 ACL** **限制** 整个网络暴露端口。
因此,**security group** 限制使用该安全组的网络 **interfaces** 暴露端口,**独立于 subnetwork**。而 **network ACL** 则会对整个网络限制暴露端口。
此外,为了 **访问互联网**,有一些有趣的配置需要检查
此外,为了能够 **访问 Internet**,有一些值得检查的配置
- **子网络** 可以 **自动分配公共 IPv4 地址**
-网络中创建的 **实例** 如果 **自动分配 IPv4 地址,可以获得一个**
- 需要将 **互联网网关** **附加****VPC**
- 你还可以使用 **仅出站互联网网关**
- 你还可以在 **私有子网络**拥有一个 **NAT 网关**,这样可以从该私有子网络 **连接到外部服务**,但 **无法从外部访问它们**
- NAT 网关可以是 **公共的**(访问互联网)或 **私有的**(访问其他 VPC
- 一个 **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
![](<../../../../images/image (274).png>)
## VPC
亚马逊 **虚拟私有云**Amazon VPC)使您能够 **在您定义的虚拟网络中启动 AWS 资源**。这个虚拟网络将多个子网、互联网网关以访问互联网、ACL、安全组、IP...
Amazon **Virtual Private Cloud** (Amazon VPC) 使你能够 **AWS resources 启动到你定义的虚拟网络** 中。该虚拟网络将包含多个子网、用于访问互联网的 Internet Gateways、ACLs、Security groups、IP 等。
### 子网
### Subnets
子网有助于加强更高水平的安全性。**相似资源的逻辑分组** 也有助于在基础设施中**管理的便利**
Subnets 有助于实施更高层次的安全。将相似资源进行 **逻辑分组** 也有助于在整个基础设施中**易于管理性**
- 有效的 CIDR 范围从 /16 网络掩码到 /28 网络掩码
- 一个子网不能同时位于不同的可用区。
- **AWS 为每个子网保留前三个主机 IP 地址** **用于** **内部 AWS 使用**:第一个主机地址用于 VPC 路由器。第二个地址保留给 AWS DNS第三个地址保留供将来使用。
- 具有 **直接访问互联网** 的子网称为 **公共子网,而私有子网则没有**
- 有效的 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**
<figure><img src="https://lh5.googleusercontent.com/N_WTrTrDAHwN61FMKJvLSHVua2EM0IazHH1fSTg8JQfTChm-dLN9mn7wkjz2MlpD-uOUqtWdMZpqKOp4VxaHy5-5X66GD1K8y1UGc27r-GbHdFty9ImpXdcjEsC7u4vjxKme_B_HwDOUnG6camxENYECTw=s2048" alt=""><figcaption></figcaption></figure>
### Route Tables
<figure><img src="https://lh3.googleusercontent.com/MmjfVzGmV4jM7tO8lVoTKONoeqbq6E40DGeKUoo4kN-lmMDKnEiGNB-gGVx3EvjK9UV844im225CA8aAjomHf1Modt3MramHrHZdEGbeSZncWhVuT9R8f7tQZ2pXjdSJxeNfErmJ-0mmcUaV6dcU0TAd2A=s2048" alt=""><figcaption></figcaption></figure>
Route tables 决定 VPC 中一个 subnet 的流量路由。它们决定哪些网络流量被转发到互联网或 VPN 连接。通常你会看到对以下项的访问:
### 路由表
路由表决定了 VPC 中子网的流量路由。它们决定了哪些网络流量被转发到互联网或 VPN 连接。您通常会找到对以下内容的访问:
- 本地 VPC
- Local VPC
- NAT
- 互联网网关 / 仅出站互联网网关(需要为 VPC 提供互联网访问)。
- 为了使子网公开,您需要 **创建****附加** 一个 **互联网网关**的 VPC。
- VPC 端点(从私有网络访问 S3
在以下图像中,您可以查看默认公共网络和私有网络之间的差异:
<figure><img src="https://lh3.googleusercontent.com/q4ASpcLAYqijdNMLhMLl8EoowDtTMU5I_7YCVfk7-5hxDyeQOik9ImHnD2SYy32XUA2qXjEbXTAxA1lP--znJASdhYOdBveDcrD42f9XBKZ3EmjJCazN3YPLC6oS0xtRMmfORuwCszmMt-KrAkH07_izwg=s2048" alt=""><figcaption></figcaption></figure>
<figure><img src="https://lh5.googleusercontent.com/30psylXAI0gRN6_LK-reP00aGIlMma64E1qafCVPunn6nS-y5jAO6Y2JiempKcf6-LFi7ScicYcOh7BbHEya2VWtksnFX_8SPXQf97tKkg2tNZzrArWbiDCCn2m2LP1QUq6MZ_KayH3yir7t8zpO7CEQOw=s2048" alt=""><figcaption></figcaption></figure>
- Internet Gateways / Egress-only Internet gateways为 VPC 提供 Internet 访问所需)
- 为了子网设为 public需要 **create****attach** 一个 **Internet gateway**的 VPC。
- VPC endpoints用于在私有网络访问 S3
### ACLs
**网络访问控制列表(ACLs**网络 ACL 是控制子网进出网络流量的防火墙规则。它们可以用于允许或拒绝特定 IP 地址或范围的流量。
**Network Access Control Lists (ACLs)**Network ACLs 是控制进入和离开子网的网络流量的防火墙规则。它们可以用于允许或拒绝特定 IP 地址或范围的流量。
- 通常使用安全组来允许/拒绝访问,但这是完全切断已建立反向 shell 的唯一方法。安全组中的修改规则不会停止已经建立的连接。
- 然而,这适用于整个子网络,禁止某些内容时要小心,因为所需的功能可能会受到干扰
- 通常更常用的是通过 security groups 来允许/拒绝访问,但这是唯一能完全切断已建立反向 shell 的方式。修改 security groups 的规则不会停止已经建立的连接。
- 然而,这适用于整个 subnetwork禁止某些内容时要小心,因为可能会影响所需的功能。
### 安全组
### Security Groups
安全组是一个虚拟 **防火墙**控制 VPC 中实例入站和出站网络 **流量**。关系 1 SG 对 M 实例(通常是 1 对 1。\
通常用于在实例打开危险端口,例如端口 22
Security groups 是控制 VPC 中实例入站和出站网络流量的虚拟 **防火墙**。关系 1 SG 对多台实例(通常是 1 对 1。\
通常用于在实例打开危险端口,例如端口 22
<figure><img src="https://lh5.googleusercontent.com/LliB7eb3cYfkEyOpyw1-eYgWsn2kq1yF6uRn5VYndvOuTvDlURimYx9UvuK8F2impTLmx50mid4MdTXE-Ljt2i_rxaIfnKUdji_hFjCdU9tdoW-axng9-W4tSL71gbbjrPQ7IYY5lAdH_G3UoMRMGGGOxQ=s2048" alt=""><figcaption></figcaption></figure>
### 弹性 IP 地址
### Elastic IP Addresses
一个 _弹性 IP 地址_ 是一个 **静态 IPv4 地址**,旨在用于动态云计算。弹性 IP 地址分配给您的 AWS 账户,并且在您释放之前属于。通过使用弹性 IP 地址,可以通过快速重新映射地址到您账户中的另一个实例来掩盖实例或软件的故障。
_Elastic IP address_ 是为动态云计算设计的 **静态 IPv4 地址**。Elastic IP 地址分配到你的 AWS 账户,并在你释放之前一直属于。通过使用 Elastic IP 地址,可以通过快速将地址重新映射到你账户中的另一个实例来掩盖实例或软件的故障。
### 子网之间的连接
### Connection between subnets
默认情况下,所有子网的 **自动分配公共 IP 地址已关闭**,但可以开。
默认情况下,所有子网的 **automatic assigned of public IP addresses** 都是关闭的,但可以开
**路由表中的本地路由使 VPC 子网之间的通信成为可能。**
**A local route within a route table enables communication between VPC subnets.**
如果**连接一个子网与另一个子网,您无法访问另一个子网连接的子网,需要直接与它们建立连接。** **这也适用于互联网网关**。您不能通过子网连接访问互联网,您需要将互联网网关分配给的子网。
如果你将一个 subnet 连接到另一个 subnet你不能通过该连接访问另一个 subnet 所连接的其它子网,需要直接与它们建立连接。**这也适用于 internet gateways**。你不能通过子网连接访问 Internet需要将 internet gateway 分配给的子网。
### VPC 对等连接
### VPC Peering
VPC 对等连接允许您 **两个或多 VPC 连接在一起**,使用 IPV4 或 IPV6就像它们是同一网络的一部分。
VPC peering 允许你将 **两个或多 VPC 连接在一起**,使用 IPV4 或 IPV6犹如它们是同一网络的一部分。
一旦建立对等连接,**一个 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 中的资源可以访问另一个 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 Flow Logs**
的 VPC 中,您可能有数百甚至数千个资源在不同公共和私有子网之间以及通过 VPC 对等连接在不同 VPC 之间进行通信。**VPC 流日志允许捕获 VPC 资源的网络接口之间流动的 IP 流量信息**。
的 VPC 内,可能有数百甚至数千个资源在不同子网之间(公共和私有以及通过 VPC peering 连接在不同 VPC 之间通信。**VPC Flow Logs 允许捕获流经 VPC 资源的网络接口之间的 IP 流量信息**。
与 S3 访问日志和 CloudFront 访问日志不同,**VPC 流日志生成的日志数据不会存储在 S3 中。相反,捕获的日志数据会发送到 CloudWatch 日志**
与 S3 access logs 和 CloudFront access logs 不同,**VPC Flow Logs 生成的日志数据不会存储在 S3 中。相反,捕获的日志数据会发送到 CloudWatch logs。**
限制:
- 如果您正在运行 VPC 对等连接,则只能看同一账户对等 VPC 的流日志
- 如果仍在 EC2-Classic 环境中运行资源,那么不幸的是,您无法从它们的接口检索信息。
- 一旦创建 VPC 流日志,就无法更改。要更改 VPC 流日志配置,需要删除它,然后重新创建一个新的。
- 下流量不会被日志监控和捕获VPC 内的 DHCP 流量、实例发往亚马逊 DNS 服务器的流量。
- 任何往 VPC 默认路由器的 IP 地址的流量,以及以下地址之间的流量169.254.169.254(用于收集实例元数据)和 169.254.169.123(用于亚马逊时间同步服务)。
- 与 Windows 实例的亚马逊 Windows 激活许可相关的流量
- 网络负载均衡器接口与端点网络接口之间的流量
- 如果你运行的是 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)。
-来自 Windows 实例的 Amazon Windows 激活许可相关的流量
- 在 network load balancer 接口和 endpoint network interface 之间的流量
对于每个 CloudWatch 日志组发布数据的网络接口,它将使用不同的日志流。在每个日志流中,将有流日志事件数据,显示日志条目内容。每个这些 **日志在大约 10 到 15 分钟的窗口期间捕获数据**
对于每个将数据发布到 CloudWatch log group 的 network interface会使用不同的 log stream。在每个这些 stream 中,会有显示日志条目内容的 flow log 事件数据。每个这些 **日志在大约 10 到 15 分钟的窗口捕获数据**
## VPN
### 基本 AWS VPN 组件
### Basic AWS VPN Components
1. **客户网关**
- 客户网关是您在 AWS 中创建的资源,用于表示您一侧的 VPN 连接。
- 它本质上是您一侧的站点到站点 VPN 连接的物理设备或软件应用程序。
- 向 AWS 提供路由信息和网络设备的公共 IP 地址(如路由器或防火墙),以创建客户网关
- 它作为设置 VPN 连接的参考点,不会产生额外费用。
2. **虚拟私有网关**
- 虚拟私有网关VPG是站点到站点 VPN 连接的亚马逊一侧的 VPN 集中
- 它附加到的 VPC并作为的 VPN 连接的目标。
- VPG 是 VPN 连接的 AWS 端点。
- 它处理 VPC 与本地网络之间的安全通信。
3. **站点到站点 VPN 连接**
- 站点到站点 VPN 连接通过安全的 IPsec VPN 隧道将您的本地网络连接到 VPC。
- 这种类型的连接需要一个客户网关和一个虚拟私有网关
- 它用于在您的数据中心或网络与您的 AWS 环境之间进行安全、稳定一致的通信。
- 通常用于常规、长期连接,并根据通过连接传输的数据量费。
4. **客户端 VPN 端点**
- 客户端 VPN 端点是您在 AWS 中创建的资源,用于启用和管理客户端 VPN 会话。
- 它用于允许单个设备(如笔记本电脑、智能手机等)安全连接到 AWS 资源或的本地网络。
- 它与站点到站点 VPN 的不同之处在于,它是为单个客户端设计的,而不是连接整个网络。
- 使用客户端 VPN每个客户端设备使用 VPN 客户端软件建立安全连接。
1. **Customer Gateway**:
- 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 与本地网络之间的安全通信。
3. **Site-to-Site VPN Connection**:
- Site-to-Site VPN connection 将你的本地网络通过安全的 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 客户端软件建立安全连接。
### 站点到站点 VPN
### Site-to-Site VPN
**将您的本地网络与您的 VPC 连接。**
**将你的 on premisses 网络与 VPC 连接。**
- **VPN 连接**本地设备与您的 VPC 之间的安全连接。
- **VPN 隧道**:一个加密链接,数据可以从客户网络传输到 AWS 或从 AWS 传输到客户网络。
- **VPN connection**本地设备与 VPC 之间的安全连接。
- **VPN tunnel**:一个加密链接,数据可以从客户网络传输到 AWS 或从 AWS 传客户网络。
每个 VPN 连接包括两个 VPN 隧道,可以同时使用它们以实现高可用性。
每个 VPN connection 包括两个 VPN 隧道,可以同时使用它们以高可用性。
- **客户网关**:一个 AWS 资源,提供有关您的客户网关设备的信息。
- **客户网关设备**:您一侧的站点到站点 VPN 连接的物理设备或软件应用程序
- **虚拟私有网关**:站点到站点 VPN 连接的亚马逊一侧的 VPN 集中器。您使用虚拟私有网关或传输网关作为站点到站点 VPN 连接的亚马逊一侧的网关。
- **传输网关**:一个传输中心,可用于互连的 VPC 和本地网络。您使用传输网关或虚拟私有网关作为站点到站点 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 端的网关。
#### 限制
#### Limitations
- 虚拟私有网关不支持 VPN 连接的 IPv6 流量
- AWS VPN 连接不支持路径 MTU 发现
- IPv6 流量在 virtual private gateway 上的 VPN connections 中不受支持
- AWS VPN connection 不支持 Path MTU Discovery
外,在使用站点到站点 VPN 时请考虑以下事项。
外,在使用 Site-to-Site VPN 时请考虑以下事项。
- 当将您的 VPC 连接到共本地网络时,我们建议您为您的网络使用不重叠的 CIDR 块。
- 在将你的 VPC 连接到共同的本地网络时,我们建议你为网络使用不重叠的 CIDR 块。
### 客户端 VPN <a href="#what-is-components" id="what-is-components"></a>
### Client VPN <a href="#what-is-components" id="what-is-components"></a>
**从的机器连接到的 VPC**
**从的机器连接到的 VPC**
#### 概念
#### Concepts
- **客户端 VPN 端点**:您创建配置的资源,以启用和管理客户端 VPN 会话。它是所有客户端 VPN 会话终止的资源
- **目标网络**:目标网络是您与客户端 VPN 端点关联的网络。**VPC 的一个子网是目标网络**。将子网与客户端 VPN 端点关联使您能够建立 VPN 会话。可以将多个子网与客户端 VPN 端点关联以实现高可用性。所有子网必须来自同一 VPC。每个子网必须属于不同的可用区
- **路由**:每个客户端 VPN 端点都有一个路由表,描述可用的目标网络路由。路由表中的每路由指定特定资源或网络的流量路径。
- **授权规则**:授权规则 **限制可以访问网络的用户**。对于指定网络,配置允许访问的活动目录或身份提供者(IdP组。只有属于该组的用户才能访问指定的网络。**默认情况下没有授权规则**必须配置授权规则使用户能够访问资源和网络。
- **客户端**连接到客户端 VPN 端点以建立 VPN 会话的终用户。终用户需要下载 OpenVPN 客户端,并使用创建的客户端 VPN 配置文件建立 VPN 会话。
- **客户端 CIDR 范围**:用于分配客户端 IP 地址的 IP 地址范围。每个连接到客户端 VPN 端点的连接都分配一个来自客户端 CIDR 范围的唯一 IP 地址。选择客户端 CIDR 范围,例如 `10.2.0.0/16`
- **客户端 VPN 端口**AWS 客户端 VPN 支持端口 443 和 1194 的 TCP 和 UDP默认端口 443。
- **客户端 VPN 网络接口**:当您将子网与客户端 VPN 端点关联时,我们会在该子网中创建客户端 VPN 网络接口。**从客户端 VPN 端点发送到 VPC 的流量通过客户端 VPN 网络接口发送**。然后应用源网络地址转换SNAT客户端 CIDR 范围中的源 IP 地址转换为客户端 VPN 网络接口 IP 地址。
- **连接日志**:您可以为客户端 VPN 端点启用连接日志以记录连接事件。可以使用信息进行取证分析客户端 VPN 端点的使用情况或调试连接问题。
- **自助服务门户**:您可以为客户端 VPN 端点启用自助服务门户。客户端可以使用其凭据登录基于 Web 的门户下载客户端 VPN 端点配置文件的最新版本,或下载 AWS 提供的客户端的最新版本。
- **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 提供的客户端的最新版本。
#### 限制
#### Limitations
- **客户端 CIDR 范围不能与关联子网所在 VPC 的本地 CIDR 重叠**,也不能与手动添加到客户端 VPN 端点路由表的任何路由重叠。
- 客户端 CIDR 范围的块大小必须至少为 **/22**,且 **不得大于 /12**
- 客户端 CIDR 范围中的 **一部分地址** 用于 **支持客户端 VPN 端点的可用性** 模型,不能分配给客户端。因此,我们建议 **分配一个包含所需最大并发连接数两倍 IP 地址的 CIDR 块**,以支持计划在客户端 VPN 端点上支持的最大并发连接数。
- 创建客户端 VPN 端点后,**客户端 CIDR 范围不能更改**。
-客户端 VPN 端点关联的 **子网** **必须在同一 VPC**
- **不能将来自同一可用区的多个子网与客户端 VPN 端点关联**
- 客户端 VPN 端点 **不支持专用租用 VPC 中的子网关联**
- 客户端 VPN 仅支持 **IPv4** 流量。
- 客户端 VPN **不** 符合联邦信息处理标准(**FIPS**)的 **合规性**
- 如果您的活动目录禁用了多因素身份验MFA则用户密码不能采用以下格式。
- **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则用户密码不能采用以下格式。
```
SCRV1:<base64_encoded_string>:<base64_encoded_string>
```
- 自助服务门户 **不适用于使用互认证进行身份验证的客户端**
- 对于使用 mutual authentication 验证的客户端,不提供自助门户
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -1,39 +1,39 @@
# AWS - S3Athena Glacier 枚举
# AWS - S3, Athena & Glacier Enum
{{#include ../../../banners/hacktricks-training.md}}
## S3
Amazon S3 是一项服务,允许你 **存储大量数据**
Amazon S3 是一允许你 **存储大量数据** 的服务
Amazon S3 提供多种选项实现静态数据data at REST**保护**。这些选项包括 **Permission**Policy、**Encryption**(客户端和服务端)、**Bucket Versioning** 以及 **MFA** **based delete**。**用户可以启用** 这些选项中的任意一来实现数据保护。**Data replication** 是 AWS 的一项内部功能,**S3 自动在所有 Availability Zones 之间复制每个对象**,在这种情况下组织无需手动启用它
Amazon S3 提供多种选项实现静态数据的 **保护**。这些选项包括 **Permission**Policy、**Encryption**(客户端和服务端)、**Bucket Versioning** 以及 **MFA** **based delete**。**用户可以启用** 这些选项中的任意一来实现数据保护。**Data replication** 是 AWS 的内部功能,其中 **S3 自动将每个对象复制到所有可用区**,在这种情况下组织无需启用该功能
使用基于资源的权限,可以为 bucket 的子目录单独定义权限。
通过基于资源的权限,可以为存储桶的子目录单独定义权限。
### Bucket Versioning and MFA based delete
bucket versioning 被启用时,任何尝试修改桶内文件的操作都会生成该文件的新版本,同时保留前的内容。因此,不会覆盖原有内容。
启用 Bucket Versioning 时,任何试图修改文件的操作都会生成该文件的新版本,同时保留前的内容。因此,不会覆盖原有内容。
此外MFA based delete 会止 S3 bucket 中的文件版本被删除,并阻止 Bucket Versioning 被禁用,因此攻击者无法改这些文件。
此外MFA based delete 会止 S3 存储桶中对象的版本被删除,并阻止禁用 Bucket Versioning因此攻击者无法改这些文件。
### S3 Access logs
可以 **启用 S3 access logging**(默认情况下关闭)到某个 bucket,并将日志保存到另一个 bucket,以便知道谁在访问该 bucket两个 bucket 必须位于同区域)。
可以为某些存储桶 **启用 S3 访问日志记录**(默认情况下为禁用),并将日志保存到另一个存储桶中,以便知道谁在访问该存储桶(两个存储桶必须位于同区域)。
### S3 Presigned URLs
可以生成 presigned URL通常可用于 **访问 bucket 中指定文件**。一个 **presigned URL 看起来像这样**:
可以生成 presigned URL通常可用于 **访问存储桶中的指定文件**。一个 **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 可以 **从 cli 使用具有对该 object 访问权限的 principal 的 credentials 创建**(如果你使用的 account 没有访问权限,会创建一个更短的 presigned URL但它将无用
一个 presigned URL 可以 **created from the cli using credentials of a principal with access to the object**(如果你使用的账户没有访问权限,会创建一个有效期更短的 presigned URL但它将无用
```bash
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
```
> [!NOTE]
> 生成 presigned URL 所需的唯一权限就是被授予的权限,所以在前面的命令,主体唯一需要的权限是 `s3:GetObject`
> 生成预签名 URL 所需的唯一权限就是被授予的权限,因此对于前面的命令,主体唯一需要的权限是 `s3:GetObject`
也可以使用 **其他权限** 创建 presigned URLs
也可以使用 **其他权限** 创建预签名 URL
```python
import boto3
url = boto3.client('s3').generate_presigned_url(
@@ -42,39 +42,39 @@ Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)
```
### S3 Encryption Mechanisms
### S3 加密机制
**DEK 表示 Data Encryption Key(数据加密密钥**,是始终生成并用于加密数据的密钥。
**DEK 表示数据加密密钥(Data Encryption Key**是始终生成并用于加密数据的密钥。
<details>
<summary><strong>使用 S3 管密钥的服务端加密SSE-S3</strong></summary>
<summary><strong>使用 S3 管密钥的服务端加密, SSE-S3</strong></summary>
选项仅需最少配置,使用的加密密钥的所有管理由 AWS 负责。你只需 **上传你的数据S3 处理其所有方面**每个 S3 账户中的 bucket 都分配一个 bucket key
选项几乎不需要配置,使用的加密密钥完全由 AWS 管理。你只需 **上传数据S3 处理其所有方面**。S3 账户中的每个桶都会分配一个桶密钥
- 加密:
- Object Data + 创建的明文 DEK --> 加密数据(存储在 S3
- 创建的明文 DEK + S3 Master Key --> 加密的 DEK存储在 S3 明文从内存中删除
- 对象数据 + 创建的明文 DEK --> 加密后的数据(存储在 S3
- 创建的明文 DEK + S3 Master Key --> Encrypted DEK存储在 S3 从内存中删除明文
- 解密:
- 加密的 DEK + S3 Master Key --> 明文 DEK
- Encrypted DEK + S3 Master Key --> 明文 DEK
- 明文 DEK + 加密数据 --> 对象数据
请注意,在此情况下 **密钥由 AWS 管理**(仅每 3 年轮换一次)。如果你使用自己的密钥,你将能够轮换、禁用并应用访问控制。
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.
</details>
<details>
<summary><strong>使用 KMS 管密钥的服务端加密SSE-KMS</strong></summary>
<summary><strong>使用 KMS 管密钥的服务端加密, SSE-KMS</strong></summary>
方法允许 S3 使用 KMS 来生成你的数据加密密钥。KMS 在密钥管理方面提供更大的灵活性。例如,你可以禁用、轮换并对 CMK 应用访问控制,并使用 AWS CloudTrail 其使用情况进行审计
方法允许 S3 使用密钥管理服务来生成你的数据加密密钥。KMS 提供更大的密钥管理灵活性。例如,你可以禁用、轮换并对 CMK 应用访问控制,并使用 AWS Cloud Trail 审计其使用情况。
- 加密:
- S3 向 KMS CMK 请求数据密钥
- KMS 使用 CMK 生成 DEK 明文和加密 DEK 对,并将它们发送 S3
- S3 使用明文密钥加密数据,存储加密数据和加密密钥,并从内存中删除明文密钥
- S3 向 KMS CMK 请求数据密钥
- KMS 使用 CMK 生成明文 DEK 加密 DEK 的一对,并将它们发送 S3
- S3 使用明文密钥加密数据,存储加密数据和加密密钥,并从内存中删除明文密钥
- 解密:
- S3 请求 KMS 解密对象的加密数据密钥
- S3 KMS 请求解密对象的加密数据密钥
- KMS 使用 CMK 解密数据密钥并将其返回给 S3
- S3 解密对象数据
@@ -82,59 +82,59 @@ ExpiresIn=3600
<details>
<summary><strong>使用客户提供密钥的服务端加密SSE-C</strong></summary>
<summary><strong>使用客户提供密钥的服务端加密, SSE-C</strong></summary>
此选项允许你提供在 AWS 之外可能已经使用的主密钥。客户提供的密钥会随数据一发送到 S3由 S3 为你执行加密。
此选项允许你提供可能在 AWS 外部已在使用的主密钥。客户提供的密钥会随数据一发送到 S3由 S3 为你执行加密。
- 加密:
- 用户将对象数据 + 客户密钥发送到 S3
- 使用客户密钥对数据进行加密,并存储加密后的数据
- 使用客户密钥加密数据,存储加密后的数据
- 还会存储客户密钥的带盐 HMAC 值以便将来验证密钥
- 客户密钥从内存中删除
- 解密:
- 用户发送客户密钥
- 密钥与存储的 HMAC 值进行验证
- 然后使用客户提供的密钥解密数据
- 密钥与存储的 HMAC 值进行验证
- 然后使用客户提供的密钥解密数据
</details>
<details>
<summary><strong>使用 KMS 的客户端加密CSE-KMS</strong></summary>
<summary><strong>使用 KMS 的客户端加密, CSE-KMS</strong></summary>
与 SSE-KMS 类似,此方式也使用 KMS 来生成你的数据加密密钥。但这次是通过客户端调用 KMS,而不是 S3。加密在客户端进行,然后将加密后的数据发送到 S3 存储。
与 SSE-KMS 类似,这也使用密钥管理服务生成你的数据加密密钥。但这次是客户端而非 S3 调用 KMS。加密在客户端进行加密后的数据随后发送到 S3 存储。
- 加密:
- 客户端向 KMS 请求数据密钥
- KMS 返回明文 DEK 和使用 CMK 加密的 DEK
- 两个密钥都返回给客户端
- 客户端使用明文 DEK 对数据进行加密,然后将加密数据 + 加密的 DEK 发送到 S3加密的 DEK 作为加密数据的元数据保存在 S3 中)
- 两个密钥都返回
- 客户端使用明文 DEK 加密数据,并将加密数据 + 加密的 DEK 发送到 S3加密的 DEK 作为加密数据的元数据保存在 S3 中)
- 解密:
- 带有加密 DEK 的加密数据被发送到客户端
- 客户端请求 KMS 使用 CMK 解密该加密密钥KMS 明文 DEK 返回
- 客户端请求 KMS 使用 CMK 解密该加密密钥KMS 返回明文 DEK
- 客户端现在可以解密加密数据
</details>
<details>
<summary><strong>使用客户提供密钥的客户端加密CSE-C</strong></summary>
<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 解密数据
- 由于客户端已拥有用于加密 DEK 的 CMK客户端先解密 DEK然后使用明文 DEK 解密数据
</details>
### **枚举**
渗透 AWS 组织的传统主要方式之一是入侵公开访问的 buckets。 **你可以在此页面找到** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.**
入侵 AWS 组织的传统主要途径之一是先利用可公开访问的桶。**你可以在此处找到**[**公共桶枚举器**](../aws-unauthenticated-enum-access/index.html#s3-buckets)****
```bash
# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
@@ -150,7 +150,7 @@ aws s3api list-buckets
# list content of bucket (no creds)
aws s3 ls s3://bucket-name --no-sign-request
aws s3 ls s3://bucket-name --recursive
aws s3 ls s3://bucket-name --recursive --no-sign-request
# list content of bucket (with creds)
aws s3 ls s3://bucket-name
@@ -229,7 +229,7 @@ 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 终端节点访问 S3 bucket方法是使用 virtual hosted-style 或 path-style endpoint 名称。这些对于通过 IPv6 访问 S3 很有用
可以通过 dual-stack endpoint 使用 virtual hosted-style 或 path-style endpoint 名称访问 S3 bucket。这些 endpoint 有助于通过 IPv6 访问 S3。
Dual-stack endpoints 使用以下语法:
@@ -238,7 +238,7 @@ Dual-stack endpoints 使用以下语法:
### Privesc
在下面的页面中可以查看如何 **abuse S3 permissions to escalate privileges**
下页面中,您可以查看如何 **abuse S3 permissions to escalate privileges**
{{#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 是一个交互式查询服务,使得可以使用标准 **SQL** 直接在 Amazon Simple Storage Service (Amazon **S3**) 中 **使用** **分析数据**
Amazon Athena 是一个交互式查询服务,可以让您直接在 Amazon Simple Storage Service (Amazon **S3**) 中使用标准 **SQL** 轻松 **分析数据**
需要**准备一个关系型 DB 表**,该表的格式应与将出现在被监控 S3 buckets 中的内容相匹配。然后Amazon Athena 能够从日志中填充该 DB以便你进行查询。
需要将出现在被监控 S3 buckets 中的内容准备一个 **关系型 DB 表**。然后Amazon Athena 能够从日志中填充该 DB从而让您对其进行查询。
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 会对**已加密且位于与查询本身相同 region 的对象**运行查询。如果需要查询使用 KMS 加密的 S3 数据, Athena 用户需要特定权限才能执行该查询。
SSE-C 和 CSE-C 不受支持。除此之外,需要理解的是 Amazon Athena 会对与查询本身位于相同区域的 **已加密对象** 运行查询。如果需要查询使用 KMS 加密的 S3 数据,那么 Athena 用户需要拥有特定权限以允许其执行该查询。
### Enumeration
```bash