GCP - Logging Enum

Support HackTricks

Basic Information

이 서비스는 사용자가 GCP의 로그 데이터 및 이벤트를 저장, 검색, 분석, 모니터링 및 경고할 수 있도록 합니다.

Cloud Logging은 다른 GCP 서비스와 완전히 통합되어 모든 GCP 리소스의 로그를 위한 중앙 집중식 저장소를 제공합니다. App Engine, Compute Engine 및 Cloud Functions와 같은 다양한 GCP 서비스에서 로그를 자동으로 수집합니다. Cloud Logging 에이전트나 API를 사용하여 온프레미스 또는 다른 클라우드에서 실행되는 애플리케이션에도 Cloud Logging을 사용할 수 있습니다.

주요 기능:

  • 로그 데이터 중앙 집중화: 다양한 출처에서 로그 데이터를 집계하여 애플리케이션 및 인프라에 대한 전체적인 뷰를 제공합니다.

  • 실시간 로그 관리: 즉각적인 분석 및 대응을 위해 로그를 실시간으로 스트리밍합니다.

  • 강력한 데이터 분석: 고급 필터링 및 검색 기능을 사용하여 대량의 로그 데이터를 신속하게 분석합니다.

  • BigQuery와의 통합: 로그를 BigQuery로 내보내어 상세 분석 및 쿼리를 수행합니다.

  • 로그 기반 메트릭: 모니터링 및 경고를 위해 로그 데이터에서 사용자 정의 메트릭을 생성합니다.

Logs flow

기본적으로 싱크와 로그 기반 메트릭은 로그가 저장될 위치를 결정합니다.

Configurations Supported by GCP Logging

Cloud Logging은 다양한 운영 요구에 맞게 높은 구성 가능성을 제공합니다:

  1. 로그 버킷 (웹에서의 로그 저장): Cloud Logging에서 로그 보존을 관리하기 위해 버킷을 정의하여 로그 항목이 얼마나 오래 보존되는지를 제어합니다.

  • 기본적으로 _Default_Required 버킷이 생성됩니다 (하나는 다른 하나가 기록하지 않는 내용을 기록합니다).

  • _Required는:

```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")
```
  • 데이터의 보존 기간은 버킷별로 구성되며 최소 1일 이상이어야 합니다. 그러나 _Required의 보존 기간은 400일로 수정할 수 없습니다.

  • 로그 버킷은 Cloud Storage에서 볼 수 없습니다.

  1. 로그 싱크(웹의 로그 라우터): 필터에 따라 Pub/Sub, BigQuery 또는 Cloud Storage와 같은 다양한 목적지로 로그 항목을 내보내기 위해 싱크를 생성합니다.

  • 기본적으로 _Default_Required 버킷에 대한 싱크가 생성됩니다:

_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")

* **제외 필터:** 특정 로그 항목이 수집되는 것을 방지하기 위해 **제외를 설정할 수 있으며**, 비용을 절감하고 불필요한 노이즈를 줄일 수 있습니다.
3. **로그 기반 메트릭:** 로그의 내용을 기반으로 **사용자 정의 메트릭**을 구성하여 로그 데이터를 기반으로 경고 및 모니터링을 가능하게 합니다.
4. **로그 뷰:** 로그 뷰는 로그 버킷 내에서 **누가 로그에 접근할 수 있는지에 대한 고급 및 세분화된 제어를 제공합니다.**
* Cloud Logging은 **모든 버킷에 대해 `_AllLogs` 뷰를 자동으로 생성**하며, 이는 모든 로그를 보여줍니다. Cloud Logging은 `_Default` 버킷에 대해 `_Default`라는 뷰도 생성합니다. `_Default` 버킷의 `_Default` 뷰는 데이터 접근 감사 로그를 제외한 모든 로그를 보여줍니다. `_AllLogs` 및 `_Default` 뷰는 편집할 수 없습니다.

IAM 정책을 사용하여 특정 로그 뷰만 사용할 수 있도록 주체를 허용할 수 있습니다:

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

기본 로그

기본적으로 Admin Write 작업(관리 활동 감사 로그라고도 함)이 기록되며(메타데이터 또는 구성 정보를 작성) 비활성화할 수 없습니다.

그런 다음 사용자는 Data Access 감사 로그를 활성화할 수 있으며, 이는 Admin Read, Data Write 및 Data Write입니다.

각 로그 유형에 대한 자세한 정보는 문서에서 확인할 수 있습니다: https://cloud.google.com/iam/docs/audit-logging

그러나 기본적으로 GetIamPolicy 작업 및 기타 읽기 작업이 기록되지 않음을 의미합니다. 따라서 기본적으로 환경을 열거하려는 공격자는 시스템 관리자가 더 많은 로그 생성을 구성하지 않는 한 잡히지 않습니다.

콘솔에서 더 많은 로그를 활성화하려면 시스템 관리자가 https://console.cloud.google.com/iam-admin/audit로 이동하여 이를 활성화해야 합니다. 두 가지 다른 옵션이 있습니다:

  • 기본 구성: 기본 구성을 생성하고 모든 Admin Read 및/또는 Data Read 및/또는 Data Write 로그를 기록하고 면제된 주체를 추가할 수 있습니다:

  • 서비스 선택: 또는 로그를 생성할 서비스와 해당 특정 서비스에 대한 로그 유형 및 면제된 주체를 선택할 수 있습니다.

또한 기본적으로 이러한 로그만 생성되며, 더 많은 로그를 생성하면 비용이 증가합니다.

열거

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

**cloudresourcemanager**의 로그를 확인하는 예시 (권한을 BF하는 데 사용됨): 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

**testIamPermissions**의 로그가 없습니다:

Post Exploitation

GCP - Logging Post Exploitation

Persistence

GCP - Logging Persistence

References

HackTricks 지원하기

Last updated