GCP - Logging Enum

Reading time: 5 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundinformationen

Dieser Dienst ermöglicht es Benutzern, Protokolldaten und Ereignisse aus GCP zu speichern, zu durchsuchen, zu analysieren, zu überwachen und Alarme auszulösen.

Cloud Logging ist vollständig in andere GCP-Dienste integriert und bietet ein zentrales Repository für Protokolle aller Ihrer GCP-Ressourcen. Es sammelt automatisch Protokolle aus verschiedenen GCP-Diensten wie App Engine, Compute Engine und Cloud Functions. Sie können Cloud Logging auch für Anwendungen verwenden, die lokal oder in anderen Clouds ausgeführt werden, indem Sie den Cloud Logging-Agenten oder die API verwenden.

Hauptmerkmale:

  • Zentralisierung von Protokolldaten: Aggregieren Sie Protokolldaten aus verschiedenen Quellen, um einen ganzheitlichen Überblick über Ihre Anwendungen und Infrastruktur zu erhalten.
  • Echtzeit-Protokollverwaltung: Streamen Sie Protokolle in Echtzeit für sofortige Analyse und Reaktion.
  • Leistungsstarke Datenanalyse: Verwenden Sie erweiterte Filter- und Suchfunktionen, um große Mengen an Protokolldaten schnell zu durchsuchen.
  • Integration mit BigQuery: Exportieren Sie Protokolle nach BigQuery für detaillierte Analysen und Abfragen.
  • Protokollbasierte Metriken: Erstellen Sie benutzerdefinierte Metriken aus Ihren Protokolldaten zur Überwachung und Alarmierung.

Protokollfluss

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

Im Grunde genommen bestimmen die Senken und protokollbasierten Metriken, wo ein Protokoll gespeichert werden sollte.

Von GCP Logging unterstützte Konfigurationen

Cloud Logging ist hochgradig konfigurierbar, um unterschiedlichen Betriebsbedürfnissen gerecht zu werden:

  1. Protokoll-Buckets (Protokollspeicherung im Web): Definieren Sie Buckets in Cloud Logging, um Protokollaufbewahrung zu verwalten und Kontrolle darüber zu haben, wie lange Ihre Protokolleinträge aufbewahrt werden.
  • Standardmäßig werden die Buckets _Default und _Required erstellt (einer protokolliert, was der andere nicht tut).
  • _Required ist:
`
```
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")
```

```
- **Die Aufbewahrungsfrist** der Daten ist pro Bucket konfiguriert und muss **mindestens 1 Tag** betragen. Die **Aufbewahrungsfrist von \_Required beträgt 400 Tage** und kann nicht geändert werden.
- Beachten Sie, dass Log Buckets **nicht in Cloud Storage sichtbar sind.**

2. **Log Sinks (Log-Router im Web):** Erstellen Sie Sinks, um **Protokolleinträge** an verschiedene Ziele wie Pub/Sub, BigQuery oder Cloud Storage basierend auf einem **Filter** zu exportieren.
- Standardmäßig werden Sinks für die Buckets `_Default` und `_Required` erstellt:
- ```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")
```
- **Ausschlussfilter:** Es ist möglich, **Ausschlüsse einzurichten, um bestimmte Protokolleinträge** von der Erfassung auszuschließen, um Kosten zu sparen und unnötigen Lärm zu reduzieren.
3. **Log-basierte Metriken:** Konfigurieren Sie **benutzerdefinierte Metriken** basierend auf dem Inhalt der Protokolle, die Alarmierung und Überwachung basierend auf Protokolldaten ermöglichen.
4. **Protokollansichten:** Protokollansichten bieten eine erweiterte und **detaillierte Kontrolle darüber, wer Zugriff** auf die Protokolle innerhalb Ihrer Protokoll-Buckets hat.
- Cloud Logging **erstellt automatisch die `_AllLogs`-Ansicht für jeden Bucket**, die alle Protokolle anzeigt. Cloud Logging erstellt auch eine Ansicht für den `_Default`-Bucket mit dem Namen `_Default`. Die `_Default`-Ansicht für den `_Default`-Bucket zeigt alle Protokolle außer den Data Access-Auditprotokollen an. Die Ansichten `_AllLogs` und `_Default` sind nicht bearbeitbar.

Es ist möglich, einem Principal **nur die Verwendung einer bestimmten Protokollansicht** mit einer IAM-Richtlinie zu erlauben wie:
```
{
"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
}
```
### Standardprotokolle

Standardmäßig werden **Admin Write**-Operationen (auch als Admin Activity-Auditprotokolle bezeichnet) protokolliert (Metadaten oder Konfigurationsinformationen schreiben) und **können nicht deaktiviert** werden.

Der Benutzer kann dann **Data Access-Auditprotokolle** aktivieren, dies sind **Admin Read, Data Write und Data Write**.

Weitere Informationen zu jedem Protokolltyp finden Sie in den Dokumenten: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)

Beachten Sie jedoch, dass dies bedeutet, dass standardmäßig **`GetIamPolicy`**-Aktionen und andere Leseaktionen **nicht protokolliert** werden. Ein Angreifer, der versucht, die Umgebung zu enumerieren, wird also standardmäßig nicht erfasst, wenn der Systemadministrator nicht konfiguriert hat, um mehr Protokolle zu generieren.

Um mehr Protokolle in der Konsole zu aktivieren, muss der Systemadministrator zu [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) gehen und sie aktivieren. Es gibt 2 verschiedene Optionen:

- **Standardkonfiguration**: Es ist möglich, eine Standardkonfiguration zu erstellen und alle Admin Read und/oder Data Read und/oder Data Write-Protokolle zu protokollieren und sogar befreite Prinzipale hinzuzufügen:

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

- **Wählen Sie die Dienste aus**: Oder einfach **die Dienste auswählen**, für die Sie Protokolle generieren möchten, sowie die Art der Protokolle und den befreiten Prinzipal für diesen speziellen Dienst.

Beachten Sie auch, dass standardmäßig nur diese Protokolle generiert werden, da die Generierung weiterer Protokolle die Kosten erhöhen würde.

### Enumeration

Das `gcloud`-Befehlszeilenwerkzeug ist ein integraler Bestandteil des GCP-Ökosystems und ermöglicht es Ihnen, Ihre Ressourcen und Dienste zu verwalten. So können Sie `gcloud` verwenden, um Ihre Protokollkonfigurationen und Zugriffsprotokolle zu verwalten.
```
# 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