Google Cloud VM Instances
Introduction
Google Cloud provides secure and customizable compute service that lets you create and run virtual machines on Google’s infrastructure. Google cloud VMs provide scale-out workloads for best price-performance as compared to general-purpose VMs, useful for most demanding applications and workloads
What we are going to cover?
We will setup a target VM instance that will host a vulnerable application and exploit the app to gain access to service account credentials.
Steps to setup lab
Note: Setting up VMs in Google cloud will incur cost, however this is covered under the free credits that you have when you signed up to Google Cloud.
An image has been pre-created for the purpose of this lab. This image needs to be imported to your account and a vm instance needs to be created from it.
Before beginning, verify that you are using the correct account and project via gcloud cli
Verify account -
gcloud auth list
Verify project -
gcloud config get project
Please let the trainer know, or run the gcloud config
commands to set these values correctly before proceeding.
1. Copying the VM Image to your account
Run the following command in a student machine terminal to import the image to your account
gcloud compute images create gcloud-target-vm-nullcon-image --source-uri gs://artifacts-cloudsecurity-training-nullcon/vm-images/gcloud-target-vm-nullcon-image.tar.gz
Once the command has completed, you can see the image created in your account at https://console.cloud.google.com/compute/images?tab=images
2. Creating the VM from an Image
Export some variables to setup the command
export GCLOUD_PROJECT=$(gcloud config get project)
export GCLOUD_PROJECT_NUMBER=$(gcloud projects list --format json --filter=projectId:$GCLOUD_PROJECT | jq .[].projectNumber | cut -d '"' -f2)
export DEFAULT_VM_SA=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com
Run the following commands in a student machine terminal to create a VM from the image that was just copied
gcloud compute instances create gcloud-target-vm-nullcon --project=$GCLOUD_PROJECT --zone=us-central1-a --machine-type=e2-micro --network-interface=network-tier=PREMIUM,subnet=default --maintenance-policy=MIGRATE --provisioning-model=STANDARD --service-account=$DEFAULT_VM_SA --scopes=https://www.googleapis.com/auth/cloud-platform --tags=http-server --create-disk=auto-delete=yes,boot=yes,device-name=gcloud-target-vm-nullcon,image=projects/$GCLOUD_PROJECT/global/images/gcloud-target-vm-nullcon-image,mode=rw,size=10,type=projects/$GCLOUD_PROJECT/zones/us-central1-a/diskTypes/pd-balanced --reservation-affinity=any
Note down the external IP printed on screen.
Updating the policy for lab exercises
gcloud projects add-iam-policy-binding $GCLOUD_PROJECT --member "serviceAccount:$DEFAULT_VM_SA" --role "roles/resourcemanager.projectIamAdmin" > /dev/null
3. Restricted access to Attacker Machine
Remember, this is a deliberately vulnerable app and should not be run on production or facing the Internet. The vulnerability in here does not require any authentication or complex payloads to be exploited.
Run the following command to open port 80 on the Google Cloud Network firewall to allow traffic from the Attacker Machine in AWS
gcloud compute --project=$GCLOUD_PROJECT firewall-rules create allow-http-from-attacker --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:80 --source-ranges=$cloudhackerip/32 --target-tags=http-server
Navigate to the external IP address via Firefox using an SSH tunnel to the attacker machine.
4. Creating Storage Objects to test exfiltration
We need to set up some storage buckets to test token validity and demonstrate exfiltration. Usually this would already be present on target accounts. Run the following commands to setup some storage objects in the target gcloud account. Run the commands one after the other.
gcloud alpha storage buckets create gs://production-data-$GCLOUD_PROJECT
gcloud alpha storage buckets create gs://customer-reports-$GCLOUD_PROJECT
wget https://access-appsecco-training.s3.amazonaws.com/gs-production-data/DataStoreThickClient.zip -O /tmp/DataStoreThickClient.zip
unzip /tmp/DataStoreThickClient.zip -d /tmp/ >/dev/null
gcloud alpha storage cp /tmp/DataStoreThickClient/* gs://production-data-$GCLOUD_PROJECT --gzip-in-flight-all --recursive
wget https://access-appsecco-training.s3.amazonaws.com/gs-customer-reports/customer-reports.zip -O /tmp/customer-reports.zip
unzip /tmp/customer-reports.zip -d /tmp/ >/dev/null
gcloud alpha storage cp /tmp/customer-reports/* gs://customer-reports-$GCLOUD_PROJECT --gzip-in-flight-all --recursive
Additional Information
No Additional information for this section
Last updated