# GCP - Logging Enum

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

## Informazioni di base

Questo servizio consente agli utenti di memorizzare, cercare, analizzare, monitorare e ricevere avvisi su **dati e eventi di log** da GCP.

Cloud Logging è completamente integrato con altri servizi GCP, fornendo un repository centralizzato per i log di tutte le tue risorse GCP. Esso **raccoglie automaticamente i log da vari servizi GCP** come App Engine, Compute Engine e Cloud Functions. Puoi anche utilizzare Cloud Logging per applicazioni in esecuzione on-premises o in altre nuvole utilizzando l'agente Cloud Logging o l'API.

Caratteristiche principali:

- **Centralizzazione dei dati di log:** Aggrega i dati di log da varie fonti, offrendo una visione olistica delle tue applicazioni e infrastrutture.
- **Gestione dei log in tempo reale:** Trasmetti i log in tempo reale per un'analisi e una risposta immediata.
- **Analisi dei dati potente:** Utilizza capacità avanzate di filtraggio e ricerca per setacciare rapidamente grandi volumi di dati di log.
- **Integrazione con BigQuery:** Esporta i log in BigQuery per un'analisi e interrogazione dettagliate.
- **Metriche basate sui log:** Crea metriche personalizzate dai tuoi dati di log per il monitoraggio e l'allerta.

### Flusso dei log

<figure><img src="../../../images/image (3) (1) (1).png" alt=""><figcaption><p><a href="https://betterstack.com/community/guides/logging/gcp-logging/">https://betterstack.com/community/guides/logging/gcp-logging/</a></p></figcaption></figure>

Fondamentalmente, i sink e le metriche basate sui log determineranno dove un log dovrebbe essere memorizzato.

### Configurazioni supportate da GCP Logging

Cloud Logging è altamente configurabile per soddisfare diverse esigenze operative:

1. **Log Buckets (Archiviazione dei log nel web):** Definisci bucket in Cloud Logging per gestire **la conservazione dei log**, fornendo controllo su quanto a lungo le tue voci di log vengono conservate.
- Per impostazione predefinita, vengono creati i bucket `_Default` e `_Required` (uno registra ciò che l'altro non registra).
- **\_Required** è:
````
```bash
LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
```

````
- **Il periodo di conservazione** dei dati è configurato per bucket e deve essere **di almeno 1 giorno.** Tuttavia, il **periodo di conservazione di \_Required è di 400 giorni** e non può essere modificato.
- Nota che i Log Buckets **non sono visibili in Cloud Storage.**

2. **Log Sinks (Log router nel web):** Crea sink per **esportare le voci di log** in varie destinazioni come Pub/Sub, BigQuery o Cloud Storage in base a un **filtro**.
- Per **default**, i sink per i bucket `_Default` e `_Required` vengono creati:
- ```bash
_Required  logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Required  LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency")
_Default   logging.googleapis.com/projects/<proj-name>/locations/global/buckets/_Default   NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency")
```
- **Filtri di esclusione:** È possibile impostare **esclusioni per prevenire l'ingestione di voci di log specifiche**, risparmiando costi e riducendo il rumore inutile.
3. **Metriche basate sui log:** Configura **metriche personalizzate** basate sul contenuto dei log, consentendo avvisi e monitoraggio basati sui dati di log.
4. **Viste dei log:** Le viste dei log offrono un controllo avanzato e **granulare su chi ha accesso** ai log all'interno dei tuoi log bucket.
- Cloud Logging **crea automaticamente la vista `_AllLogs` per ogni bucket**, che mostra tutti i log. Cloud Logging crea anche una vista per il bucket `_Default` chiamata `_Default`. La vista `_Default` per il bucket `_Default` mostra tutti i log tranne i log di audit dell'accesso ai dati. Le viste `_AllLogs` e `_Default` non sono modificabili.

È possibile consentire a un principale **di utilizzare solo una vista di log specifica** con una policy IAM come:
```json
{
"bindings": [
{
"members": ["user:username@gmail.com"],
"role": "roles/logging.viewAccessor",
"condition": {
"title": "Bucket reader condition example",
"description": "Grants logging.viewAccessor role to user username@gmail.com for the VIEW_ID log view.",
"expression": "resource.name == \"projects/PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME/views/VIEW_ID\""
}
}
],
"etag": "BwWd_6eERR4=",
"version": 3
}
```
### Log predefiniti

Per impostazione predefinita, le operazioni di **Admin Write** (chiamate anche log di audit delle attività di amministrazione) sono quelle registrate (scrivere metadati o informazioni di configurazione) e **non possono essere disabilitate**.

Successivamente, l'utente può abilitare i **log di audit dell'accesso ai dati**, che sono **Admin Read, Data Write e Data Write**.

Puoi trovare ulteriori informazioni su ciascun tipo di log nella documentazione: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)

Tuttavia, nota che questo significa che per impostazione predefinita le azioni **`GetIamPolicy`** e altre azioni di lettura **non vengono registrate**. Quindi, per impostazione predefinita, un attaccante che cerca di enumerare l'ambiente non verrà catturato se l'amministratore di sistema non ha configurato la generazione di più log.

Per abilitare più log nella console, l'amministratore di sistema deve andare su [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) e abilitarli. Ci sono 2 opzioni diverse:

- **Configurazione predefinita**: È possibile creare una configurazione predefinita e registrare tutti i log di Admin Read e/o Data Read e/o Data Write e persino aggiungere principi esclusi:

<figure><img src="../../../images/image (338).png" alt=""><figcaption></figcaption></figure>

- **Seleziona i servizi**: Oppure **seleziona i servizi** per i quali desideri generare log e il tipo di log e il principio escluso per quel servizio specifico.

Nota anche che per impostazione predefinita vengono generati solo quei log perché generare più log aumenterà i costi.

### Enumerazione

Lo strumento da riga di comando `gcloud` è una parte integrante dell'ecosistema GCP, che consente di gestire le proprie risorse e servizi. Ecco come puoi utilizzare `gcloud` per gestire le tue configurazioni di logging e accedere ai log.
```bash
# List buckets
gcloud logging buckets list
gcloud logging buckets describe <bucket-name> --location <location>

# List log entries: only logs that contain log entries are listed.
gcloud logging logs list

# Get log metrics
gcloud logging metrics list
gcloud logging metrics describe <metric-name>

# Get log sinks
gcloud logging sinks list
gcloud logging sinks describe <sink-name>

# Get log views
gcloud logging views list --bucket <bucket> --location global
gcloud logging views describe --bucket <bucket> --location global <view-id> # view-id is usually the same as the bucket name

# Get log links
gcloud logging links list --bucket _Default --location global
gcloud logging links describe <link-id> --bucket _Default --location global
```
Esempio per controllare i log di **`cloudresourcemanager`** (quello usato per BF permissions): [https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2\&project=digital-bonfire-410512](https://console.cloud.google.com/logs/query;query=protoPayload.serviceName%3D%22cloudresourcemanager.googleapis.com%22;summaryFields=:false:32:beginning;cursorTimestamp=2024-01-20T00:07:14.482809Z;startTime=2024-01-01T11:12:26.062Z;endTime=2024-02-02T17:12:26.062Z?authuser=2&project=digital-bonfire-410512)

Non ci sono log di **`testIamPermissions`**:

<figure><img src="../../../images/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

### Post Exploitation

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

### Persistence

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

## References

- [https://cloud.google.com/logging/docs/logs-views#gcloud](https://cloud.google.com/logging/docs/logs-views#gcloud)
- [https://betterstack.com/community/guides/logging/gcp-logging/](https://betterstack.com/community/guides/logging/gcp-logging/)

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