GCP - Logging Post Exploitation

HackTricksをサポートする

基本情報

詳細については以下を確認してください:

GCP - Logging Enum

監視を妨害する他の方法については以下を確認してください:

GCP - Monitoring Post Exploitation

デフォルトのログ記録

デフォルトでは、読み取りアクションを実行するだけでは捕まりません。詳細についてはLogging Enumセクションを確認してください。

除外されたプリンシパルを追加

https://console.cloud.google.com/iam-admin/audit/allservicesおよびhttps://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

説明

この権限は、ログバケットを削除するために使用されます。ログバケットは、ログデータを保存するためのコンテナです。この操作を実行するには、適切なIAMロールが必要です。

影響

ログバケットを削除すると、そのバケットに保存されているすべてのログデータが失われます。これにより、監査証跡が消去され、潜在的な不正行為の痕跡が隠される可能性があります。

推奨事項

  • ログバケットの削除を制限するために、最小権限の原則を適用します。

  • ログデータのバックアップを定期的に作成し、重要なログが失われないようにします。

logging.buckets.get

説明

この権限は、特定のログバケットのメタデータを取得するために使用されます。メタデータには、バケットの名前、作成日時、保存されているログの種類などが含まれます。

影響

攻撃者がこの権限を持っている場合、ログバケットの構成情報を収集し、さらなる攻撃の計画に利用することができます。

推奨事項

  • ログバケットのメタデータへのアクセスを制限し、最小権限の原則を適用します。

  • 不要な権限を持つユーザーやサービスアカウントを定期的に監査します。

logging.buckets.list

説明

この権限は、プロジェクト内のすべてのログバケットのリストを取得するために使用されます。

影響

攻撃者がこの権限を持っている場合、プロジェクト内のすべてのログバケットを特定し、どのバケットが最も価値があるかを判断することができます。

推奨事項

  • ログバケットのリストへのアクセスを制限し、最小権限の原則を適用します。

  • 定期的にアクセス権をレビューし、不要な権限を削除します。

# 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

ログビューの削除

logging.views.delete権限を持つユーザーは、ログビューを削除できます。ログビューを削除すると、特定のログに対するアクセスが制限されるため、攻撃者が痕跡を隠すのに役立ちます。

ログビューの削除方法

  1. ログビューのリストを取得: 利用可能なログビューをリストアップします。

  2. ログビューの削除: gcloudコマンドを使用して特定のログビューを削除します。

gcloud logging views delete VIEW_NAME --bucket=BUCKET_NAME --location=LOCATION

影響と対策

ログビューの削除は、監査ログの可視性を低下させる可能性があります。これを防ぐために、以下の対策を講じることが重要です。

  • 最小権限の原則: 不要な権限を持つユーザーを制限します。

  • 監査ログの監視: ログビューの変更を監視し、異常なアクティビティを検出します。

まとめ

logging.views.delete権限は強力であり、悪用されると重大なセキュリティリスクを引き起こす可能性があります。適切なアクセス制御と監視を行うことで、これらのリスクを軽減することができます。

# 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

ログベースのメトリクスの削除

logging.logMetrics.delete 権限を持つと、攻撃者はログベースのメトリクスを削除できます。これにより、特定のログイベントの追跡を回避することが可能になります。

logging.sinks.delete

ログシンクの削除

logging.sinks.delete 権限を持つと、攻撃者はログシンクを削除できます。これにより、ログデータの転送を停止させ、監視を回避することが可能になります。

logging.exclusions.create

ログ除外ルールの作成

logging.exclusions.create 権限を持つと、攻撃者は特定のログエントリを除外するルールを作成できます。これにより、特定のアクティビティがログに記録されないようにすることが可能になります。

logging.exclusions.delete

ログ除外ルールの削除

logging.exclusions.delete 権限を持つと、攻撃者は既存のログ除外ルールを削除できます。これにより、以前に除外されていたログエントリが再び記録されるようになります。

logging.logs.delete

ログの削除

logging.logs.delete 権限を持つと、攻撃者は特定のログを完全に削除できます。これにより、特定のアクティビティの痕跡を完全に消すことが可能になります。

logging.logEntries.delete

ログエントリの削除

logging.logEntries.delete 権限を持つと、攻撃者は特定のログエントリを削除できます。これにより、特定のアクティビティの痕跡を部分的に消すことが可能になります。

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

logging.sinks.delete

logging.sinks.delete権限を持つユーザーは、ログシンクを削除することができます。ログシンクが削除されると、そのシンクに送信されるはずだったログは失われます。これは、攻撃者が自身の活動を隠すために使用する可能性があります。

logging.sinks.update

logging.sinks.update権限を持つユーザーは、既存のログシンクを更新することができます。攻撃者はこの権限を利用して、ログを別の場所に送信するようにシンクを変更し、自身の活動を隠すことができます。

logging.sinks.create

logging.sinks.create権限を持つユーザーは、新しいログシンクを作成することができます。攻撃者はこの権限を利用して、ログを自身が管理する場所に送信する新しいシンクを作成することができます。

logging.logs.delete

logging.logs.delete権限を持つユーザーは、特定のログエントリを削除することができます。攻撃者はこの権限を利用して、自身の活動に関するログを削除することができます。

logging.logs.update

logging.logs.update権限を持つユーザーは、既存のログエントリを更新することができます。攻撃者はこの権限を利用して、ログエントリを改ざんし、自身の活動を隠すことができます。

logging.logs.create

logging.logs.create権限を持つユーザーは、新しいログエントリを作成することができます。攻撃者はこの権限を利用して、偽のログエントリを作成し、調査を混乱させることができます。

# 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