# GCP - Logging Enum

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

## Osnovne informacije

Ova usluga omogućava korisnicima da čuvaju, pretražuju, analiziraju, prate i obaveštavaju o **podacima i događajima iz logova** sa GCP-a.

Cloud Logging je potpuno integrisan sa drugim GCP uslugama, pružajući centralizovano skladište za logove iz svih vaših GCP resursa. **Automatski prikuplja logove iz raznih GCP usluga** kao što su App Engine, Compute Engine i Cloud Functions. Takođe možete koristiti Cloud Logging za aplikacije koje rade na lokaciji ili u drugim oblačnim okruženjima koristeći Cloud Logging agent ili API.

Ključne karakteristike:

- **Centralizacija podataka iz logova:** Agregirajte podatke iz logova iz raznih izvora, nudeći sveobuhvatan pregled vaših aplikacija i infrastrukture.
- **Upravljanje logovima u realnom vremenu:** Strimujte logove u realnom vremenu za trenutnu analizu i odgovor.
- **Moćna analiza podataka:** Koristite napredne mogućnosti filtriranja i pretrage za brzo pretraživanje velikih količina podataka iz logova.
- **Integracija sa BigQuery:** Izvezite logove u BigQuery za detaljnu analizu i upite.
- **Metrički podaci zasnovani na logovima:** Kreirajte prilagođene metrike iz vaših podataka iz logova za praćenje i obaveštavanje.

### Tok logova

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

U suštini, sudoperi i metrički podaci zasnovani na logovima će odrediti gde bi log trebao biti sačuvan.

### Konfiguracije podržane od strane GCP Logging-a

Cloud Logging je veoma konfigurisljiv kako bi odgovarao različitim operativnim potrebama:

1. **Log Buckets (Skladištenje logova na mreži):** Definišite kante u Cloud Logging-u za upravljanje **zadržavanjem logova**, pružajući kontrolu nad tim koliko dugo se vaši unosi logova čuvaju.
- Po defaultu, kante `_Default` i `_Required` su kreirane (jedna beleži ono što druga ne).
- **\_Required** je:
````
```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")
```

````
- **Period zadržavanja** podataka je konfigurisan po kanti i mora biti **najmanje 1 dan.** Međutim, **period zadržavanja \_Required je 400 dana** i ne može se menjati.
- Imajte na umu da Log Buckets **nisu vidljivi u Cloud Storage.**

2. **Log Sinks (Log router na vebu):** Kreirajte sudove za **izvoz log unosa** na različite destinacije kao što su Pub/Sub, BigQuery ili Cloud Storage na osnovu **filtra**.
- Po **default-u** sudovi za kante `_Default` i `_Required` se kreiraju:
- ```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")
```
- **Izuzeci filtri:** Moguće je postaviti **izuzeća da se spreče specifični log unosi** da budu uneti, čime se štede troškovi i smanjuje nepotreban šum.
3. **Log-bazirane metrike:** Konfigurišite **prilagođene metrike** na osnovu sadržaja logova, omogućavajući upozorenja i praćenje na osnovu log podataka.
4. **Log pregledi:** Log pregledi daju naprednu i **granularnu kontrolu nad tim ko ima pristup** logovima unutar vaših log kanti.
- Cloud Logging **automatski kreira `_AllLogs` pregled za svaku kantu**, koji prikazuje sve logove. Cloud Logging takođe kreira pregled za `_Default` kantu pod nazivom `_Default`. `_Default` pregled za `_Default` kantu prikazuje sve logove osim logova o pristupu podacima. Pregledi `_AllLogs` i `_Default` nisu uređivi.

Moguće je omogućiti principalu **samo da koristi specifičan Log pregled** sa IAM politikom kao:
```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
}
```
### Podrazumevani Logovi

Podrazumevano, **Admin Write** operacije (takođe nazvane Admin Activity audit logs) su one koje se beleže (pišu metapodatke ili informacije o konfiguraciji) i **ne mogu se onemogućiti**.

Zatim, korisnik može omogućiti **Data Access audit logs**, to su **Admin Read, Data Write i Data Write**.

Možete pronaći više informacija o svakoj vrsti loga u dokumentaciji: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)

Međutim, imajte na umu da to znači da podrazumevano **`GetIamPolicy`** akcije i druge akcije čitanja **nisu beležene**. Dakle, podrazumevano napadač koji pokušava da enumeriše okruženje neće biti uhvaćen ako sistemski administrator nije konfigurisao generisanje više logova.

Da bi omogućio više logova u konzoli, sistemski administrator treba da ode na [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) i omogući ih. Postoje 2 različite opcije:

- **Podrazumevana Konfiguracija**: Moguće je kreirati podrazumevanu konfiguraciju i beležiti sve Admin Read i/ili Data Read i/ili Data Write logove i čak dodati izuzete principe:

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

- **Izaberite usluge**: Ili jednostavno **izaberite usluge** za koje želite da generišete logove i tip logova i izuzetog principa za tu specifičnu uslugu.

Takođe imajte na umu da se podrazumevano generišu samo ti logovi jer generisanje više logova povećava troškove.

### Enumeracija

`gcloud` komandna alatka je sastavni deo GCP ekosistema, omogućavajući vam da upravljate svojim resursima i uslugama. Evo kako možete koristiti `gcloud` za upravljanje vašim konfiguracijama logovanja i pristupom logovima.
```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
```
Primer za proveru logova **`cloudresourcemanager`** (onog koji se koristi za BF dozvole): [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)

Nema logova za **`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}}
