GCP - Logging Enum

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

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

https://betterstack.com/community/guides/logging/gcp-logging/

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:
`
```
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:
```
{
"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.
```
# 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