GCP - Logging Enum

Support HackTricks

Podstawowe informacje

Ta usługa pozwala użytkownikom przechowywać, wyszukiwać, analizować, monitorować i powiadamiać o danych i zdarzeniach logów z GCP.

Cloud Logging jest w pełni zintegrowany z innymi usługami GCP, zapewniając scentralizowane repozytorium dla logów ze wszystkich zasobów GCP. Automatycznie zbiera logi z różnych usług GCP takich jak App Engine, Compute Engine i Cloud Functions. Możesz również używać Cloud Logging dla aplikacji działających lokalnie lub w innych chmurach, korzystając z agenta Cloud Logging lub API.

Kluczowe funkcje:

  • Centralizacja danych logów: Agreguj dane logów z różnych źródeł, oferując całościowy widok swoich aplikacji i infrastruktury.

  • Zarządzanie logami w czasie rzeczywistym: Strumieniuj logi w czasie rzeczywistym dla natychmiastowej analizy i reakcji.

  • Potężna analiza danych: Użyj zaawansowanych możliwości filtrowania i wyszukiwania, aby szybko przeszukiwać duże ilości danych logów.

  • Integracja z BigQuery: Eksportuj logi do BigQuery w celu szczegółowej analizy i zapytań.

  • Metryki oparte na logach: Twórz niestandardowe metryki z danych logów do monitorowania i powiadamiania.

Przepływ logów

Zasadniczo zlewy i metryki oparte na logach określają, gdzie log powinien być przechowywany.

Konfiguracje wspierane przez GCP Logging

Cloud Logging jest wysoce konfigurowalny, aby dostosować się do różnych potrzeb operacyjnych:

  1. Kosze logów (Przechowywanie logów w sieci): Zdefiniuj kosze w Cloud Logging, aby zarządzać retencją logów, zapewniając kontrolę nad tym, jak długo Twoje wpisy logów są przechowywane.

  • Domyślnie tworzone są kosze _Default i _Required (jeden rejestruje to, czego nie rejestruje drugi).

  • _Required to:

```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")
```
  • Okres przechowywania danych jest konfigurowany dla każdego koszyka i musi wynosić co najmniej 1 dzień. Jednak okres przechowywania _Required wynosi 400 dni i nie może być modyfikowany.

  • Zauważ, że kosze logów są niewidoczne w Cloud Storage.

  1. Skrzynki logów (Log router w sieci): Twórz skrzynki, aby eksportować wpisy logów do różnych miejsc docelowych, takich jak Pub/Sub, BigQuery lub Cloud Storage na podstawie filtru.

  • Domyślnie skrzynki dla koszy _Default i _Required są tworzone:

_Required logging.googleapis.com/projects//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//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")

* **Filtry wykluczające:** Możliwe jest skonfigurowanie **wykluczeń, aby zapobiec wchłanianiu konkretnych wpisów logów**, co pozwala na oszczędności kosztów i redukcję niepotrzebnego hałasu.
3. **Metryki oparte na logach:** Skonfiguruj **niestandardowe metryki** na podstawie treści logów, co pozwala na alertowanie i monitorowanie na podstawie danych logów.
4. **Widoki logów:** Widoki logów dają zaawansowaną i **szczegółową kontrolę nad tym, kto ma dostęp** do logów w twoich koszach logów.
* Cloud Logging **automatycznie tworzy widok `_AllLogs` dla każdego koszyka**, który pokazuje wszystkie logi. Cloud Logging tworzy również widok dla koszyka `_Default` o nazwie `_Default`. Widok `_Default` dla koszyka `_Default` pokazuje wszystkie logi z wyjątkiem logów audytowych dostępu do danych. Widoki `_AllLogs` i `_Default` nie są edytowalne.

Możliwe jest zezwolenie na dostęp dla podmiotu **tylko do używania konkretnego widoku logów** za pomocą polityki IAM, takiej jak: 

<div data-gb-custom-block data-tag="code" data-overflow='wrap'>

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

Domyślne logi

Domyślnie operacje Admin Write (nazywane również logami audytu aktywności administratora) są logowane (zapisują metadane lub informacje konfiguracyjne) i nie mogą być wyłączone.

Następnie użytkownik może włączyć logi audytu dostępu do danych, które obejmują Admin Read, Data Write i Data Write.

Więcej informacji na temat każdego typu logu można znaleźć w dokumentacji: https://cloud.google.com/iam/docs/audit-logging

Należy jednak zauważyć, że oznacza to, iż domyślnie działania GetIamPolicy i inne działania odczytu nie są logowane. Tak więc, domyślnie atakujący próbujący zenumerować środowisko nie zostanie złapany, jeśli administrator systemu nie skonfigurował generowania większej liczby logów.

Aby włączyć więcej logów w konsoli, administrator systemu musi przejść do https://console.cloud.google.com/iam-admin/audit i je włączyć. Istnieją 2 różne opcje:

  • Domyślna konfiguracja: Możliwe jest utworzenie domyślnej konfiguracji i logowanie wszystkich logów Admin Read i/lub Data Read i/lub Data Write oraz dodanie zwolnionych podmiotów:

  • Wybierz usługi: Lub po prostu wybierz usługi, dla których chcesz generować logi oraz typ logów i zwolniony podmiot dla tej konkretnej usługi.

Należy również zauważyć, że domyślnie generowane są tylko te logi, ponieważ generowanie większej liczby logów zwiększy koszty.

Enumeracja

Narzędzie wiersza poleceń gcloud jest integralną częścią ekosystemu GCP, umożliwiając zarządzanie zasobami i usługami. Oto jak możesz użyć gcloud, aby zarządzać konfiguracjami logowania i uzyskiwać dostęp do logów.

# 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

Przykład sprawdzenia logów cloudresourcemanager (używanego do BF uprawnień): 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

Nie ma logów testIamPermissions:

Post Exploitation

GCP - Logging Post Exploitation

Persistence

GCP - Logging Persistence

References

Wsparcie HackTricks

Last updated