# GCP - Logging Enum

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

## Basiese Inligting

Hierdie diens laat gebruikers toe om **logdata en gebeurtenisse** van GCP te stoor, soek, analiseer, monitor en waarsku.

Cloud Logging is volledig geïntegreer met ander GCP-dienste, wat 'n gesentraliseerde berging van logs van al jou GCP-hulpbronne bied. Dit **verskaf outomaties logs van verskeie GCP-dienste** soos App Engine, Compute Engine, en Cloud Functions. Jy kan ook Cloud Logging gebruik vir toepassings wat op-premises of in ander wolke loop deur die Cloud Logging-agent of API te gebruik.

Belangrike Kenmerke:

- **Logdata Sentralisering:** Aggregere logdata van verskeie bronne, wat 'n holistiese oorsig van jou toepassings en infrastruktuur bied.
- **Regstydse Logbestuur:** Stroom logs in regstyd vir onmiddellike analise en reaksie.
- **Kragvolle Data-analise:** Gebruik gevorderde filtrering en soekvermoëns om vinnig deur groot volumes logdata te sift.
- **Integrasie met BigQuery:** Eksporteer logs na BigQuery vir gedetailleerde analise en navraag.
- **Log-gebaseerde Metings:** Skep pasgemaakte metings uit jou logdata vir monitering en waarskuwing.

### Logs vloei

<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>

Basies sal die sinks en log-gebaseerde metings bepaal waar 'n log gestoor moet word.

### Konfigurasies Ondersteun deur GCP Logging

Cloud Logging is hoogs konfigureerbaar om aan diverse operasionele behoeftes te voldoen:

1. **Log Emmers (Logs berging in die web):** Definieer emmers in Cloud Logging om **logretensie** te bestuur, wat beheer bied oor hoe lank jou loginskrywings behou word.
- Standaard word die emmers `_Default` en `_Required` geskep (een log wat die ander nie doen nie).
- **\_Required** is:
````
```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")
```

````
- **Retensieperiode** van die data is per emmer geconfigureer en moet **ten minste 1 dag** wees. Die **retensieperiode van \_Required is 400 dae** en kan nie gewysig word nie.
- Let daarop dat Log Buckets **nie sigbaar is in Cloud Storage nie.**

2. **Log Sinks (Log router in die web):** Skep sinks om **loginskrywings** na verskeie bestemmings soos Pub/Sub, BigQuery, of Cloud Storage te **eksporteer** gebaseer op 'n **filter**.
- Deur **verstek** word sinks vir die emmers `_Default` en `_Required` geskep:
- ```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")
```
- **Uitsluitingsfilters:** Dit is moontlik om **uitsluitings op te stel om spesifieke loginskrywings** te voorkom van ingestel te word, wat koste bespaar en onnodige geraas verminder.
3. **Log-gebaseerde Metriques:** Konfigureer **aangepaste metriques** gebaseer op die inhoud van logs, wat waarskuwing en monitering op grond van logdata moontlik maak.
4. **Log weergawes:** Log weergawes bied gevorderde en **fyn beheer oor wie toegang het** tot die logs binne jou log emmers.
- Cloud Logging **skep outomaties die `_AllLogs` weergave vir elke emmer**, wat al die logs wys. Cloud Logging skep ook 'n weergave vir die `_Default` emmer genaamd `_Default`. Die `_Default` weergave vir die `_Default` emmer wys al die logs behalwe Data Access audit logs. Die `_AllLogs` en `_Default` weergawes is nie redigeerbaar nie.

Dit is moontlik om 'n prinsiep **slegs toe te laat om 'n spesifieke Log weergave** te gebruik met 'n IAM-beleid soos:
```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
}
```
### Standaard Logs

Deur die standaard is **Admin Write** operasies (ook genoem Admin Activity audit logs) diegene wat gelog word (skryf metadata of konfigurasie-inligting) en **kan nie gedeaktiveer word** nie.

Dan kan die gebruiker **Data Access audit logs** aktiveer, dit is **Admin Read, Data Write en Data Write**.

Jy kan meer inligting oor elke tipe log in die dokumentasie vind: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)

Let egter daarop dat dit beteken dat deur die standaard **`GetIamPolicy`** aksies en ander leesaksies **nie gelog word nie**. So, deur die standaard sal 'n aanvaller wat probeer om die omgewing te enumereer nie gevang word as die stelselsadministrateur nie gekonfigureer het om meer logs te genereer nie.

Om meer logs in die konsole te aktiveer, moet die stelselsadministrateur na [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) gaan en dit aktiveer. Daar is 2 verskillende opsies:

- **Standaard Konfigurasie**: Dit is moontlik om 'n standaard konfigurasie te skep en al die Admin Read en/of Data Read en/of Data Write logs te log en selfs vrygestelde principals by te voeg:

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

- **Kies die dienste**: Of net **kies die dienste** waarvoor jy logs wil genereer en die tipe logs en die vrygestelde principal vir daardie spesifieke diens.

Let ook daarop dat deur die standaard slegs daardie logs gegenereer word omdat die generering van meer logs die koste sal verhoog.

### Enumerasie

Die `gcloud` opdraglyn hulpmiddel is 'n integrale deel van die GCP ekosisteem, wat jou toelaat om jou hulpbronne en dienste te bestuur. Hier is hoe jy `gcloud` kan gebruik om jou log konfigurasies en toegang logs te bestuur.
```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
```
Voorbeeld om die logs van **`cloudresourcemanager`** (die gebruik word om BF toestemmings te kry) te kontroleer: [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)

Daar is geen logs van **`testIamPermissions`** nie:

<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}}
