Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-p

This commit is contained in:
Translator
2025-07-24 06:56:23 +00:00
parent 38849afb89
commit e2814f9876
5 changed files with 69 additions and 46 deletions

View File

@@ -230,7 +230,7 @@
- [AWS - SNS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md)
- [AWS - Secrets Manager Persistence](pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md)
- [AWS - SQS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md)
- [AWS - SSM Perssitence](pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md)
- [AWS - SSM Perssitence](pentesting-cloud/aws-security/aws-persistence/aws-ssm-persistence.md)
- [AWS - Step Functions Persistence](pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md)
- [AWS - STS Persistence](pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md)
- [AWS - Post Exploitation](pentesting-cloud/aws-security/aws-post-exploitation/README.md)

View File

@@ -0,0 +1,27 @@
# AWS - SSM 持久性
{{#include ../../../banners/hacktricks-training.md}}
## SSM
有关更多信息,请查看:
{{#ref}}
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md
{{#endref}}
### 使用 ssm:CreateAssociation 实现持久性
具有权限 **`ssm:CreateAssociation`** 的攻击者可以创建一个状态管理器关联,以自动在由 SSM 管理的 EC2 实例上执行命令。这些关联可以配置为在固定间隔内运行,使其适合于类似后门的持久性,而无需交互式会话。
```bash
aws ssm create-association \
--name SSM-Document-Name \
--targets Key=InstanceIds,Values=target-instance-id \
--parameters commands=["malicious-command"] \
--schedule-expression "rate(30 minutes)" \
--association-name association-name
```
> [!NOTE]
> 这种持久性方法只要 EC2 实例由 Systems Manager 管理SSM 代理正在运行,并且攻击者有权限创建关联,就可以工作。它不需要交互式会话或明确的 ssm:SendCommand 权限。**重要:** `--schedule-expression` 参数(例如,`rate(30 minutes)`)必须遵守 AWS 的最小间隔 30 分钟。对于立即或一次性执行,完全省略 `--schedule-expression` — 关联将在创建后执行一次。
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,27 +0,0 @@
# AWS - SSM Perssitence
{{#include ../../../banners/hacktricks-training.md}}
## SSM
有关更多信息,请查看:
{{#ref}}
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md
{{#endref}}
### 使用 ssm:CreateAssociation 进行持久性
具有 ssm:CreateAssociation 权限的攻击者可以创建一个状态管理器关联,以自动在由 SSM 管理的 EC2 实例上执行命令。这些关联可以配置为在固定间隔内运行,使其适合于类似后门的持久性,而无需交互式会话。
```bash
aws ssm create-association \
--name SSM-Document-Name \
--targets Key=InstanceIds,Values=target-instance-id \
--parameters commands=["malicious-command"] \
--schedule-expression "rate(30 minutes)" \
--association-name association-name
```
> [!NOTE]
> 该持久性方法在 EC2 实例由 Systems Manager 管理、SSM 代理正在运行且攻击者有权限创建关联时有效。它不需要交互式会话或明确的 ssm:SendCommand 权限。**重要:** `--schedule-expression` 参数(例如,`rate(30 minutes)`)必须遵循 AWS 的最小间隔 30 分钟。对于立即或一次性执行,请完全省略 `--schedule-expression` — 关联将在创建后执行一次。
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -47,13 +47,13 @@ aws ssm start-session --target "$INSTANCE_ID"
> [!CAUTION]
> 要开始会话,您需要安装 **SessionManagerPlugin**: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html)
**潜在影响:** 直接提升权限到附加运行实例的 EC2 IAM 角色,这些实例运行着 SSM Agents。
**潜在影响:** 直接提升权限到附加运行实例的 EC2 IAM 角色,这些实例运行着 SSM Agents。
#### 提升权限到 ECS
**ECS 任务****`ExecuteCommand` 启用** 运行时,具有足够权限的用户可以使用 `ecs execute-command` 在容器内 **执行命令**。\
根据 [**文档**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/)这是通过在您用来启动“_exec_”命令的设备与目标容器之间创建安全通道来完成的,使用 SSM Session Manager。需要 SSM Session Manager Plugin 才能正常工作\
因此,具有 `ssm:StartSession` 的用户将能够通过运行该选项启用的命令 **获取 ECS 任务内的 shell**
**ECS 任务****`ExecuteCommand` 启用** 的方式运行时,具有足够权限的用户可以使用 `ecs execute-command` 在容器内 **执行命令**。\
根据 [**文档**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/)这是通过在您用来启动“_exec_”命令的设备与目标容器之间创建安全通道来实现的,使用 SSM Session Manager。SSM Session Manager Plugin 是实现此功能所必需的\
因此,具有 `ssm:StartSession` 权限的用户将能够通过运行以下命令 **在启用该选项的 ECS 任务中获取 shell**:
```bash
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
```
@@ -93,7 +93,7 @@ aws ssm list-commands
```
**潜在影响:** 在命令行中查找敏感信息。
### `ssm:GetCommandInvocation`(`ssm:ListCommandInvocations` | `ssm:ListCommands`)
### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`)
拥有这些权限的攻击者可以列出所有发送的 **命令****读取生成的输出**,希望能找到 **敏感信息**
```bash
@@ -103,7 +103,21 @@ aws ssm list-command-invocations
aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>
```
**潜在影响:** 在命令行输出中找敏感信息。
**潜在影响:** 在命令行输出中找敏感信息。
### 使用 ssm:CreateAssociation
具有权限 **`ssm:CreateAssociation`** 的攻击者可以创建一个状态管理器关联,以自动在由 SSM 管理的 EC2 实例上执行命令。这些关联可以配置为在固定时间间隔内运行,使其适合于无交互会话的后门式持久性。
```bash
aws ssm create-association \
--name SSM-Document-Name \
--targets Key=InstanceIds,Values=target-instance-id \
--parameters commands=["malicious-command"] \
--schedule-expression "rate(30 minutes)" \
--association-name association-name
```
> [!NOTE]
> 这种持久性方法在 EC2 实例由 Systems Manager 管理、SSM 代理正在运行且攻击者有权限创建关联时有效。它不需要交互式会话或明确的 ssm:SendCommand 权限。**重要:** `--schedule-expression` 参数(例如,`rate(30 minutes)`)必须遵循 AWS 的最小间隔 30 分钟。对于立即或一次性执行,完全省略 `--schedule-expression` — 关联将在创建后执行一次。
### Codebuild

View File

@@ -21,20 +21,21 @@ Amazon EC2 用于启动 **虚拟服务器**。它允许配置 **安全性** 和
- 用户数据
- 现有的 EC2/AMI/快照
- 网络
-
-
- 子网络
- 公共 IP
- 开放端口
- 与 AWS 之外的其他网络的集成连接
### 实例配置文件
使用 **角色** 授予在 **EC2 实例** 上运行的应用程序权限需要一些额外的配置。在 EC2 实例上运行的应用程序通过虚拟化操作系统与 AWS 隔离。由于这种额外的分离,您需要额外的步骤将 AWS 角色及其相关权限分配给 EC2 实例,并使其对应用程序可用。
使用 **角色** 授予在 **EC2 实例** 上运行的应用程序权限需要额外的配置。运行在 EC2 实例上的应用程序通过虚拟化操作系统与 AWS 隔离。由于这种额外的分离,您需要额外的步骤将 AWS 角色及其相关权限分配给 EC2 实例,并使其对应用程序可用。
步骤是 **创建一个** [_**实例配置文件**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html),并将其附加到实例。**实例配置文件包含角色,并且**可以向在实例上运行的应用程序提供角色的临时凭证。这些临时凭证可以在应用程序的 API 调用中使用,以访问资源并限制访问仅限于角色指定的那些资源。请注意,**一次只能将一个角色分配给 EC2 实例**,并且实例上的所有应用程序共享相同的角色和权限。
个额外的步骤是 **创建一个** [_**实例配置文件**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) 附加到实例。**实例配置文件包含角色,并且**可以向在实例上运行的应用程序提供角色的临时凭证。这些临时凭证可以在应用程序的 API 调用中使用,以访问资源并限制访问仅限于角色指定的那些资源。请注意,**一次只能将一个角色分配给 EC2 实例**,并且实例上的所有应用程序共享相同的角色和权限。
### 元数据端点
AWS EC2 元数据是关于 Amazon Elastic Compute Cloud (EC2) 实例的信息,在运行时可供实例使用。这些元数据用于提供有关实例的信息,例如其实例 ID、运行所在的可用区、与实例关联的 IAM 角色以及实例的主机名。
AWS EC2 元数据是关于 Amazon Elastic Compute Cloud (EC2) 实例的信息,在运行时可供实例使用。这些元数据用于提供有关实例的信息,例如其实例 ID、运行的可用区、与实例关联的 IAM 角色以及实例的主机名。
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
@@ -154,7 +155,7 @@ aws ec2 describe-vpc-peering-connections
### AMI与EBS的区别
**AMI**用于**启动EC2实例**而EC2**快照**用于**备份和恢复存储在EBS卷上的数据**。虽然EC2快照可以用于创建新的AMI但它与AMI并不相同并且不包含运行应用程序所需的操作系统、应用程序服务器或其他软件的信息。
**AMI**用于**启动EC2实例**而EC2**快照**用于**备份和恢复存储在EBS卷上的数据**。虽然EC2快照可以用于创建新的AMI但它与AMI并不相同并且不包含运行应用程序所需的操作系统、应用服务器或其他软件的信息。
### 权限提升
@@ -170,7 +171,7 @@ aws ec2 describe-vpc-peering-connections
**SSM代理**使系统管理器能够更新、管理和配置这些资源。代理**处理来自AWS云中系统管理器服务的请求**,然后按请求中指定的方式运行它们。
**SSM代理**[**在某些AMI中预安装**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html),或者您需要在实例上[**手动安装它们**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)。此外实例内使用的IAM角色需要附加**AmazonEC2RoleforSSM**策略才能进行通信。
**SSM代理**[**在某些AMI中预安装**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html),或者您需要在实例上[**手动安装它们**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)。此外,实例内使用的IAM角色需要附加**AmazonEC2RoleforSSM**策略才能进行通信。
### 枚举
```bash
@@ -185,19 +186,27 @@ aws ssm describe-instance-associations-status --instance-id <id>
```bash
ps aux | grep amazon-ssm
```
### 提权
### Privesc
在以下页面中,您可以查看如何**滥用SSM权限以提升权**
在以下页面中,您可以查看如何**滥用SSM权限以提升权**
{{#ref}}
../../aws-privilege-escalation/aws-ssm-privesc.md
{{#endref}}
### Perssistence
在以下页面中,您可以查看如何**滥用SSM权限以实现持久性**
{{#ref}}
../../aws-persistence/aws-ssm-persistence.md
{{#endref}}
## ELB
**弹性负载均衡**ELB是**亚马逊网络服务**AWS部署的**负载均衡服务**。ELB自动**分配传入的应用程序流量**并根据流量需求扩展资源。
### 枚举
### Enumeration
```bash
# List internet-facing ELBs
aws elb describe-load-balancers
@@ -244,10 +253,10 @@ VPN 允许将您的 **本地网络(站点到站点 VPN** 或 **工作人员
1. **客户网关**
- 客户网关是您在 AWS 中创建的资源,用于表示您一侧的 VPN 连接。
- 它本质上是您一侧站点到站点 VPN 连接上的物理设备或软件应用程序。
- 您向 AWS 提供路由信息和网络设备(如路由器或防火墙)的公共 IP 地址,以创建客户网关。
- 您向 AWS 提供路由信息和网络设备的公共 IP 地址(例如路由器或防火墙),以创建客户网关。
- 它作为设置 VPN 连接的参考点,不会产生额外费用。
2. **虚拟私有网关**
- 虚拟私有网关VPG是站点到站点 VPN 连接的亚马逊侧的 VPN 集中器。
- 虚拟私有网关VPG是站点到站点 VPN 连接中 Amazon 侧的 VPN 集中器。
- 它附加到您的 VPC并作为您的 VPN 连接的目标。
- VPG 是 VPN 连接的 AWS 侧端点。
- 它处理您的 VPC 和本地网络之间的安全通信。
@@ -292,7 +301,7 @@ aws ec2 describe-vpn-connections
**本地临时凭证**
当使用 AWS VPN 客户端连接到 VPN 时,用户通常会 **登录 AWS** 以获取对 VPN 的访问权限。然后,一些 **AWS 凭证被创建并存储** 在本地以建立 VPN 连接。这些凭证 **存储在** `$HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt` 中,包含 **AccessKey**、**SecretKey** 和 **Token**
当使用 AWS VPN 客户端连接到 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: 进一步研究这些凭证的权限)。