# GCP - Enumération des Compute

{{#include ../../../../banners/hacktricks-training.md}}

## GCP VPC & Réseautique

Découvrez comment cela fonctionne dans :

{{#ref}}
gcp-vpc-and-networking.md
{{#endref}}

### Enumération
```bash
# 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](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 :

{{#ref}}
gcp-compute-instance.md
{{#endref}}

### Énumération
```bash
# 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 :

{{#ref}}
../../gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
{{#endref}}

### Escalade de Privilèges

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

{{#ref}}
../../gcp-privilege-escalation/gcp-compute-privesc/
{{#endref}}

### Enumération Non Authentifiée

{{#ref}}
../../gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md
{{#endref}}

### Post Exploitation

{{#ref}}
../../gcp-post-exploitation/gcp-compute-post-exploitation.md
{{#endref}}

### Persistance

{{#ref}}
../../gcp-persistence/gcp-compute-persistence.md
{{#endref}}

## Journaux de Console Série

Les journaux de console série de Compute Engine sont une fonctionnalité qui vous permet de **voir et 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 pendant le 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** 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](https://cloud.google.com/sdk/gcloud/reference/compute/instances/get-serial-port-output) pour interroger les journaux du port série (la permission requise est `compute.instances.getSerialPortOutput`) :
```bash
gcloud compute instances get-serial-port-output <instance-name>
```
## Sortie des scripts de démarrage

Il est possible de voir la **sortie des scripts de démarrage** depuis la VM en exécutant :
```bash
sudo journalctl -u google-startup-scripts.service
```
## Gestionnaire de configuration OS

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 [guest policies](https://cloud.google.com/compute/docs/os-config-management#guest-policy) 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 packages 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 votre processus de gestion de configuration plus facilement.

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

> [!WARNING]
> Afin de **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 metadata **`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 metadata 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.

### Énumération
```bash
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 :
```bash
gcloud compute machine-images list
gcloud compute machine-images describe <name>
gcloud compute machine-images get-iam-policy <name>
```
Vous pouvez ensuite [**exporter**](https://cloud.google.com/sdk/gcloud/reference/compute/images/export) **les disques virtuels** 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 :
```bash
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**](https://cloud.google.com/compute/docs/instance-templates/) **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 :
```bash
# 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 utilisent 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
```bash
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

- [https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching](https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching)

{{#include ../../../../banners/hacktricks-training.md}}
