GCP - Compute Enum

Soutenir HackTricks

GCP VPC & Réseautage

Apprenez comment cela fonctionne dans :

Énumération

# List networks
gcloud compute networks list
gcloud compute networks describe <network>

# List subnetworks
gcloud compute networks subnets list
gcloud compute networks subnets get-iam-policy <name> --region <region>
gcloud compute networks subnets describe <name> --region <region>

# List FW rules in networks
gcloud compute firewall-rules list --format="table(
name,
network,
direction,
priority,
sourceRanges.list():label=SRC_RANGES,
destinationRanges.list():label=DEST_RANGES,
allowed[].map().firewall_rule().list():label=ALLOW,
denied[].map().firewall_rule().list():label=DENY,
sourceTags.list():label=SRC_TAGS,
sourceServiceAccounts.list():label=SRC_SVC_ACCT,
targetTags.list():label=TARGET_TAGS,
targetServiceAccounts.list():label=TARGET_SVC_ACCT,
disabled
)"

# List Hierarchical Firewalls
gcloud compute firewall-policies list  (--folder <value>| --organization <value>)
gcloud compute firewall-policies describe <fw_policy>
gcloud compute firewall-policies list-rules <fw_policy>

# Get Firewalls of each region
gcloud compute network-firewall-policies list
## Get final FWs applied in a region
gcloud compute network-firewall-policies get-effective-firewalls --network=<vpc_name> --region <region>

Vous pouvez facilement trouver des instances de calcul avec des règles de pare-feu ouvertes avec https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_firewall_enum

Instances de calcul

C'est ainsi que vous pouvez exécuter des machines virtuelles à l'intérieur de GCP. Consultez cette page pour plus d'informations :

Énumération

# Get list of zones
# It's interesting to know which zones are being used
gcloud compute regions list | grep -E "NAME|[^0]/"

# List compute instances & get info
gcloud compute instances list
gcloud compute instances describe <instance name>
gcloud compute instances get-iam-policy <instance> --zone=ZONE
gcloud compute instances get-screenshot <instance name> # Instace must have "Display Device" enabled
gcloud compute instances os-inventory list-instances # Get OS info of instances (OS Config agent is running on instances)


# Enumerate disks
gcloud compute disks list
gcloud compute disks describe <disk>
gcloud compute disks get-iam-policy <disk>

Pour plus d'informations sur la façon de SSH ou de modifier les métadonnées d'une instance pour escalader les privilèges, consultez cette page :

Escalade de Privilèges

Dans la page suivante, vous pouvez vérifier comment abuser des permissions de calcul pour escalader les privilèges :

Enumération Non Authentifiée

Post Exploitation

Persistance

Journaux de Console Série

Les journaux de console série de Compute Engine sont une fonctionnalité qui vous permet de voir et de diagnostiquer les journaux de démarrage et du système d'exploitation de vos instances de machine virtuelle.

Les journaux de console série fournissent une vue de bas niveau du processus de démarrage de l'instance, y compris les messages du noyau, les scripts d'initialisation et d'autres événements système qui se produisent lors du démarrage. Cela peut être utile pour déboguer des problèmes de démarrage, identifier des erreurs de configuration ou des erreurs logicielles, ou résoudre des problèmes de connectivité réseau.

Ces journaux peuvent exposer des informations sensibles provenant des journaux système que les utilisateurs à faible privilège ne voient généralement pas, mais avec les permissions IAM appropriées, vous pourriez être en mesure de les lire.

Vous pouvez utiliser la commande gcloud suivante pour interroger les journaux du port série (la permission requise est compute.instances.getSerialPortOutput) :

gcloud compute instances get-serial-port-output <instance-name>

Startup Scripts output

Il est possible de voir la sortie des scripts de démarrage depuis la VM exécutant :

sudo journalctl -u google-startup-scripts.service

OS Configuration Manager

Vous pouvez utiliser le service de gestion de configuration OS pour déployer, interroger et maintenir des configurations cohérentes (état souhaité et logiciel) pour votre instance VM (VM). Sur Compute Engine, vous devez utiliser les politiques d'invité pour maintenir des configurations logicielles cohérentes sur une VM.

La fonctionnalité de gestion de configuration OS vous permet de définir des politiques de configuration qui spécifient quels paquets logiciels doivent être installés, quels services doivent être activés et quels fichiers ou configurations doivent être présents sur vos VMs. Vous pouvez utiliser une approche déclarative pour gérer la configuration logicielle de vos VMs, ce qui vous permet d'automatiser et d'évoluer plus facilement votre processus de gestion de configuration.

Cela permet également de se connecter aux instances via des autorisations IAM, donc c'est très utile pour privesc et pivoting.

Pour activer os-config dans un projet entier ou dans une instance, vous devez simplement définir la clé metadata enable-oslogin sur true au niveau souhaité. De plus, vous pouvez définir la métadonnée enable-oslogin-2fa sur true pour activer le 2fa.

Lorsque vous l'activez lors de la création d'une instance, les clés de métadonnées seront automatiquement définies.

Plus d'informations sur 2fa dans OS-config, cela ne s'applique que si l'utilisateur est un utilisateur, si c'est un SA (comme le SA de calcul), cela ne nécessitera rien de plus.

Enumeration

gcloud compute os-config patch-deployments list
gcloud compute os-config patch-deployments describe <patch-deployment>

gcloud compute os-config patch-jobs list
gcloud compute os-config patch-jobs describe <patch-job>

Images

Images personnalisées

Les images de calcul personnalisées peuvent contenir des détails sensibles ou d'autres configurations vulnérables que vous pouvez exploiter.

Lorsqu'une image est créée, vous pouvez choisir 3 types de chiffrement : Utiliser une clé gérée par Google (par défaut), une clé de KMS, ou une clé brute fournie par le client.

Énumération

Vous pouvez interroger la liste des images non standard dans un projet avec la commande suivante :

gcloud compute machine-images list
gcloud compute machine-images describe <name>
gcloud compute machine-images get-iam-policy <name>

Vous pouvez ensuite exporter les disques virtuels à partir de n'importe quelle image dans plusieurs formats. La commande suivante exporterait l'image test-image au format qcow2, vous permettant de télécharger le fichier et de créer une VM localement pour une enquête plus approfondie :

gcloud compute images export --image test-image \
--export-format qcow2 --destination-uri [BUCKET]

# Execute container inside a docker
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh

Escalade de Privilèges

Vérifiez la section sur l'escalade de privilèges des Instances de Calcul.

Modèles d'Instances Personnalisés

Un modèle d'instance définit les propriétés de l'instance pour aider à déployer des configurations cohérentes. Ceux-ci peuvent contenir les mêmes types de données sensibles que les métadonnées personnalisées d'une instance en cours d'exécution. Vous pouvez utiliser les commandes suivantes pour enquêter :

# List the available templates
gcloud compute instance-templates list

# Get the details of a specific template
gcloud compute instance-templates describe [TEMPLATE NAME]

Il pourrait être intéressant de savoir quel disque est utilisé par les nouvelles images, mais ces modèles n'auront généralement pas d'informations sensibles.

Snapshots

Les snapshots sont des sauvegardes de disques. Notez que ce n'est pas la même chose que de cloner un disque (une autre fonctionnalité disponible). Le snapshot utilisera la même encryption que le disque dont il est issu.

Enumeration

gcloud compute snapshots list
gcloud compute snapshots describe <snapshot>
gcloud compute snapshots get-iam-policy <snapshot>

Escalade de Privilèges

Vérifiez la section sur l'escalade de privilèges des Instances de Calcul.

Références

Soutenir HackTricks

Last updated