AWS - EC2 Privesc
EC2
有关 EC2 的更多信息,请查看:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
攻击者可以 创建一个附加 IAM 角色的实例,然后访问该实例 从元数据端点窃取 IAM 角色凭证。
通过 SSH 访问
使用 创建的 ssh 密钥 (--key-name
) 运行一个新实例,然后 ssh 进入它(如果您想创建一个新的,您可能需要拥有 ec2:CreateKeyPair
权限)。
通过用户数据访问 rev shell
您可以使用 用户数据 (--user-data
) 启动一个新实例,该实例将向您发送一个 rev shell。您不需要以这种方式指定安全组。
小心使用实例外的 IAM 角色凭证时的 GuradDuty:
AWS - GuardDuty Enum潜在影响: 直接提升权限到任何附加到现有实例配置文件的 EC2 角色。
提升权限到 ECS
通过这组权限,您还可以 创建一个 EC2 实例并将其注册到 ECS 集群中。这样,ECS 服务 将在您有访问权限的 EC2 实例 内 运行,然后您可以渗透这些服务(docker 容器)并 窃取其附加的 ECS 角色。
要了解如何强制在这个新的 EC2 实例中运行 ECS 服务,请查看:
AWS - ECS Privesc如果您无法创建新实例但拥有权限ecs:RegisterContainerInstance
,您可能能够在集群中注册该实例并执行评论攻击。
潜在影响: 直接提升到附加到任务的 ECS 角色。
iam:PassRole
, iam:AddRoleToInstanceProfile
iam:PassRole
, iam:AddRoleToInstanceProfile
与之前的场景类似,拥有这些权限的攻击者可以更改被攻陷实例的 IAM 角色,以便窃取新的凭证。
由于实例配置文件只能有 1 个角色,如果实例配置文件已经有一个角色(常见情况),您还需要**iam:RemoveRoleFromInstanceProfile
**。
如果实例配置文件有角色且攻击者无法移除它,还有另一种变通方法。他可以找到一个没有角色的实例配置文件或创建一个新的(iam:CreateInstanceProfile
),将角色添加到该实例配置文件(如前所述),并将实例配置文件关联到一个被攻陷的实例:
如果实例没有任何实例配置文件(
ec2:AssociateIamInstanceProfile
)*
潜在影响: 直接提升权限到不同的 EC2 角色(你需要已经攻陷一个 AWS EC2 实例并且拥有一些额外的权限或特定的实例配置文件状态)。
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)拥有这些权限后,可以更改与实例关联的实例配置文件,因此如果攻击者已经访问了一个实例,他将能够通过更改与之关联的配置文件来窃取更多实例配置文件角色的凭证。
如果它 有一个实例配置文件,你可以 移除 实例配置文件 (
ec2:DisassociateIamInstanceProfile
) 并 关联 它 *
或 替换 被攻陷实例的 实例配置文件 (
ec2:ReplaceIamInstanceProfileAssociation
). *
潜在影响: 直接提升权限到不同的 EC2 角色(您需要已经攻陷一个 AWS EC2 实例,并且拥有一些额外的权限或特定的实例配置状态)。
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
拥有权限 ec2:RequestSpotInstances
和 iam:PassRole
的攻击者可以 请求 一个带有 EC2 角色 和 反向 shell 的 Spot 实例 在 用户数据 中。
一旦实例运行,他可以 窃取 IAM 角色。
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
拥有 ec2:ModifyInstanceAttribute
的攻击者可以修改实例属性。其中,他可以 更改用户数据,这意味着他可以使实例 运行任意数据。这可以用来获取 对 EC2 实例的反向 shell。
请注意,属性只能在 实例停止时 进行 修改,因此需要 权限 ec2:StopInstances
和 ec2:StartInstances
。
潜在影响: 直接提升权限到任何附加到创建实例的 EC2 IAM 角色。
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
具有权限 ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
和 ec2:ModifyLaunchTemplate
的攻击者可以创建一个 新的启动模板版本,在 用户数据 中包含 反向 shell 和 任何 EC2 IAM 角色,更改默认版本,任何 使用 该 启动模板 的 自动扩展组 如果配置为使用 最新 或 默认版本,将会 重新运行实例,并执行反向 shell。
潜在影响: 直接提升权限到不同的 EC2 角色。
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
拥有权限 autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
的攻击者可以 创建一个启动配置,其中包含一个 IAM 角色 和一个 反向 shell 在 用户数据 中,然后 从该配置创建一个自动扩展组,并等待反向 shell 窃取 IAM 角色。
潜在影响: 直接提升权限到不同的 EC2 角色。
!autoscaling
!autoscaling
权限集 ec2:CreateLaunchTemplate
和 autoscaling:CreateAutoScalingGroup
不足以提升 权限到 IAM 角色,因为要附加在启动配置或启动模板中指定的角色 你需要权限 iam:PassRole
和 ec2:RunInstances
(这是一种已知的权限提升)。
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
拥有权限 ec2-instance-connect:SendSSHPublicKey
的攻击者可以将 ssh 密钥添加到用户并使用它进行访问(如果他有对实例的 ssh 访问权限)或提升权限。
潜在影响: 直接提升权限到附加到运行实例的 EC2 IAM 角色。
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
拥有权限 ec2-instance-connect:SendSerialConsoleSSHPublicKey
的攻击者可以 向串行连接添加 ssh 密钥。如果串行未启用,攻击者需要权限 ec2:EnableSerialConsoleAccess
来启用它。
为了连接到串行端口,您还 需要知道机器内用户的用户名和密码。
这种方式对权限提升并不是很有用,因为你需要知道用户名和密码才能利用它。
潜在影响:(高度不可证明)直接权限提升到附加到运行实例的 EC2 IAM 角色。
describe-launch-templates
,describe-launch-template-versions
describe-launch-templates
,describe-launch-template-versions
由于启动模板具有版本控制,拥有 ec2:describe-launch-templates
和 ec2:describe-launch-template-versions
权限的攻击者可以利用这些来发现敏感信息,例如用户数据中的凭据。为此,以下脚本循环遍历所有可用启动模板的版本:
在上述命令中,尽管我们指定了某些模式(aws_|password|token|api
),您可以使用不同的正则表达式来搜索其他类型的敏感信息。
假设我们找到了 aws_access_key_id
和 aws_secret_access_key
,我们可以使用这些凭据来认证到 AWS。
潜在影响: 直接提升到 IAM 用户的权限。
参考文献
Last updated