GCP - Logging Enum

Reading time: 5 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Основна інформація

Ця служба дозволяє користувачам зберігати, шукати, аналізувати, моніторити та отримувати сповіщення про дані та події журналів з GCP.

Cloud Logging повністю інтегрований з іншими службами GCP, надаючи централізований репозиторій для журналів з усіх ваших ресурсів GCP. Він автоматично збирає журнали з різних служб GCP таких як App Engine, Compute Engine та Cloud Functions. Ви також можете використовувати Cloud Logging для додатків, що працюють на місці або в інших хмарах, використовуючи агент Cloud Logging або API.

Ключові особливості:

  • Централізація даних журналів: Агрегуйте дані журналів з різних джерел, пропонуючи цілісний погляд на ваші додатки та інфраструктуру.
  • Управління журналами в реальному часі: Потокове передавання журналів в реальному часі для негайного аналізу та реагування.
  • Потужний аналіз даних: Використовуйте розширені можливості фільтрації та пошуку, щоб швидко переглядати великі обсяги даних журналів.
  • Інтеграція з BigQuery: Експортуйте журнали в BigQuery для детального аналізу та запитів.
  • Метрики на основі журналів: Створюйте користувацькі метрики з ваших даних журналів для моніторингу та сповіщення.

Потік журналів

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

В основному, зливи та метрики на основі журналів визначать, де слід зберігати журнал.

Конфігурації, підтримувані GCP Logging

Cloud Logging має високу конфігурованість, щоб відповідати різноманітним операційним потребам:

  1. Журнальні контейнери (зберігання журналів в мережі): Визначте контейнери в Cloud Logging для управління зберіганням журналів, надаючи контроль над тим, як довго зберігаються ваші записи журналів.
  • За замовчуванням створюються контейнери _Default та _Required (один веде облік того, що інший не веде).
  • _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")
```

```
- **Період зберігання** даних налаштовується для кожного бакета і повинен бути **не менше 1 дня.** Однак **період зберігання \_Required становить 400 днів** і не може бути змінений.
- Зверніть увагу, що Log Buckets **не видимі в Cloud Storage.**

2. **Log Sinks (Log router в вебі):** Створіть сінки для **експорту записів журналу** до різних місць призначення, таких як Pub/Sub, BigQuery або Cloud Storage на основі **фільтра**.
- За **замовчуванням** сінки для бакетів `_Default` і `_Required` створюються:
- ```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")
```
- **Фільтри виключення:** Можна налаштувати **виключення для запобігання надходженню конкретних записів журналу**, що дозволяє заощаджувати кошти та зменшувати зайвий шум.
3. **Метрики на основі журналів:** Налаштуйте **кастомні метрики** на основі вмісту журналів, що дозволяє здійснювати сповіщення та моніторинг на основі даних журналу.
4. **Перегляди журналів:** Перегляди журналів надають розширений та **досконалий контроль над тим, хто має доступ** до журналів у ваших бакетах журналів.
- Cloud Logging **автоматично створює перегляд `_AllLogs` для кожного бакета**, який показує всі журнали. Cloud Logging також створює перегляд для бакета `_Default`, названий `_Default`. Перегляд `_Default` для бакета `_Default` показує всі журнали, за винятком журналів аудиту доступу до даних. Перегляди `_AllLogs` та `_Default` не підлягають редагуванню.

Можна дозволити принципалу **використовувати лише конкретний перегляд журналу** з політикою IAM, як:
```
{
"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
}
```
### Default Logs

За замовчуванням **Admin Write** операції (також називаються журналами аудиту активності адміністратора) є тими, що реєструються (запис метаданих або інформації про конфігурацію) і **не можуть бути вимкнені**.

Потім користувач може увімкнути **журнали аудиту доступу до даних**, це **Admin Read, Data Write і Data Write**.

Ви можете знайти більше інформації про кожен тип журналу в документації: [https://cloud.google.com/iam/docs/audit-logging](https://cloud.google.com/iam/docs/audit-logging)

Однак зверніть увагу, що це означає, що за замовчуванням **`GetIamPolicy`** дії та інші дії читання **не реєструються**. Тому, за замовчуванням, зловмисник, який намагається перерахувати середовище, не буде спійманий, якщо системний адміністратор не налаштував генерацію більше журналів.

Щоб увімкнути більше журналів у консолі, системний адміністратор повинен перейти до [https://console.cloud.google.com/iam-admin/audit](https://console.cloud.google.com/iam-admin/audit) і увімкнути їх. Є 2 різні варіанти:

- **Default Configuration**: Можна створити конфігурацію за замовчуванням і реєструвати всі журнали Admin Read і/або Data Read і/або Data Write, а також додати звільнені принципали:

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

- **Select the services**: Або просто **вибрати сервіси**, для яких ви хочете генерувати журнали, тип журналів і звільнений принципал для цього конкретного сервісу.

Також зверніть увагу, що за замовчуванням генеруються лише ці журнали, оскільки генерація більше журналів збільшить витрати.

### Enumeration

Командний рядок `gcloud` є невід'ємною частиною екосистеми GCP, що дозволяє вам керувати вашими ресурсами та сервісами. Ось як ви можете використовувати `gcloud` для управління вашими конфігураціями журналювання та доступом до журналів.
```
# 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