SQL-Abfragen für Sicherheitserkenntnisse

In diesem Dokument wird beschrieben, wie Sie Cloud Logging-Audit-Logs mithilfe von BigQuery-Standard-SQL auf der Seite Loganalysen analysieren. Mit SQL-Abfragen können Sie Ihre Audit-Logs zusammenfassen und analysieren. Sie enthalten Informationen zu Verwaltungsaktivitäten und Zugriffen in Ihren Google Cloud-Ressourcen.

Audit-Logs

Es gibt vier Arten von Audit-Logs, die von Google Cloud-Diensten geschrieben werden können:

  • Audit-Logs zur Administratoraktivität: In Audit-Logs zur Administratoraktivität werden API-Aufrufe oder andere Aktionen aufgezeichnet, die die Konfiguration oder Metadaten von Ressourcen ändern. Diese Logs werden immer geschrieben. Sie können sie nicht konfigurieren, ausschließen oder deaktivieren.

  • Audit-Logs zum Datenzugriff: In Audit-Logs zum Datenzugriff werden API-Aufrufe, die die Konfiguration oder Metadaten von Ressourcen lesen, sowie nutzergesteuerte API-Aufrufe zum Erstellen, Ändern oder Lesen der von Nutzern bereitgestellten Ressourcendaten aufgezeichnet. Da der Datenzugriff ein häufiger API-Vorgang ist, sind diese Logs standardmäßig deaktiviert (außer bei BigQuery).

  • Audit-Logs zu Systemereignissen: Audit-Logs zu Systemereignissen enthalten Logeinträge für Google Cloud-Aktionen, die die Konfiguration von Ressourcen ändern. Diese Logs werden von Google-Systemen generiert und nicht durch Nutzeraktionen. Sie können Audit-Logs zu Systemereignissen nicht konfigurieren, ausschließen oder deaktivieren.

  • Audit-Logs zu Richtlinienverstößen: Audit-Logs zu abgelehnten Richtlinien werden aufgezeichnet, wenn ein Google Cloud-Dienst einem Nutzer oder einem Dienstkonto aufgrund eines Sicherheitsrichtlinienverstoßes den Zugriff verweigert. Diese Logs können nicht deaktiviert werden. Sie können jedoch mithilfe von Ausschlussfiltern verhindern, dass diese Logs in Logging gespeichert werden.

Weitere Informationen zu Audit-Logs finden Sie in der Übersicht zu Audit-Logs. Eine Liste der Dienste, die in Audit-Logs eingebunden sind, finden Sie unter Google Cloud-Dienste mit Audit-Logs.

Mithilfe von Audit-Logs Richtlinienverstöße oder verdächtige Aktivitäten ermitteln

Mithilfe von Audit-Logs können Sie Richtlinienverstöße oder verdächtige Aktivitäten ermitteln:

  • Verwenden Sie Audit-Logs zur Administratoraktivität, um eine potenzielle Rechteausweitung mithilfe von Identity and Access Management (IAM) oder das Umgehen von Abwehrmaßnahmen durch Deaktivieren von Logging zu identifizieren. Eine Beispielabfrage, die dieses Szenario identifiziert, finden Sie unter Änderungen an den Logging-Einstellungen.

  • Verwenden Sie Audit-Logs zum Datenzugriff, um den potenziellen Missbrauch von APIs oder Daten zu identifizieren, die in Diensten wie Cloud Storage oder BigQuery gehostet werden. Eine Beispielabfrage, die dieses Szenario identifiziert, finden Sie unter Hohe API-Nutzung durch ein Hauptkonto identifizieren.

  • Fragen Sie alle Audit-Logs ab, um zu ermitteln, wie oft und von welchen Nutzern auf Daten zugegriffen wird. Eine Beispielabfrage, die dieses Szenario identifiziert, finden Sie unter Die häufigsten Aktionen des letzten Monats ermitteln.

Hinweise

  • Achten Sie darauf, dass Sie ein Google Cloud-Projekt, einen Ordner oder eine Organisation haben, die Audit-Logs generieren.

  • Achten Sie darauf, dass Sie Zugriff auf eine Ansicht des Log-Buckets haben, an den die Audit-Logs weitergeleitet werden. Der Log-Bucket muss aktualisiert werden, um Log Analytics verwenden zu können. Informationen zum Erstellen eines Log-Buckets, für den ein Upgrade für die Verwendung von Loganalysen durchgeführt wurde, finden Sie unter Log-Buckets konfigurieren.

  • Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Erstellen von Senken und Aufrufen von Logs benötigen:

    Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

    Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

    Je nachdem, welche Audit-Logs Sie aufrufen möchten, benötigen Sie möglicherweise separate Rollen oder Berechtigungen. Informationen zum Festlegen von IAM-Rollen finden Sie in der Logging-Dokumentation zur Zugriffssteuerung mit IAM.

  • So verwenden Sie die Abfragen in diesem Dokument auf der Seite Loganalysen:

    1. Wählen Sie im Navigationsbereich der Google Cloud Console Logging und dann Loganalysen aus:

      Gehen Sie zu Log Analytics.

    2. Ermitteln Sie den Tabellennamen für eine Logansicht, indem Sie die Standardabfrage ausführen:

      Suchen Sie in der Liste Logansichten nach der Logansicht und wählen Sie dann Abfrage aus. Im Bereich Abfrage wird eine Standardabfrage mit dem Namen der abgefragten Tabelle angezeigt. Der Tabellenname hat das Format project_ID.region.bucket_ID.view_ID.

      Weitere Informationen zum Zugriff auf die Standardabfrage finden Sie unter Logansicht abfragen.

    3. Ersetzen Sie TABLE durch den Namen der Tabelle, die der Ansicht entspricht, die Sie abfragen möchten. Kopieren Sie dann die Abfrage.

    4. Fügen Sie die Abfrage in den Bereich Abfrage ein und klicken Sie dann auf Abfrage ausführen.

Beispielabfragen

Dieser Abschnitt enthält Beispiel-SQL-Abfragen zum Abfragen von Audit-Logs.

Änderungen an den Logging-Einstellungen

Fragen Sie die Audit-Logs zur Administratoraktivität ab, um festzustellen, wann Audit-Logs deaktiviert sind oder wann Änderungen an den Standard-Logging-Einstellungen vorgenommen werden:

SELECT
  receive_timestamp, timestamp AS eventTimestamp,
  proto_payload.audit_log.request_metadata.caller_ip,
  proto_payload.audit_log.authentication_info.principal_email,
  proto_payload.audit_log.resource_name,
  proto_payload.audit_log.method_name
FROM
  `TABLE`
WHERE
  proto_payload.audit_log.service_name = "logging.googleapis.com"
  AND log_id = "cloudaudit.googleapis.com/activity"

Die häufigsten Aktionen des letzten Monats ermitteln

Fragen Sie alle Audit-Logs ab, um zu ermitteln, welche Aktionen in den letzten 30 Tagen am häufigsten ausgeführt wurden:

SELECT
  proto_payload.audit_log.method_name,
  proto_payload.audit_log.service_name,
  resource.type,
  COUNT(*) AS counter
FROM
  `TABLE`
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND log_id="cloudaudit.googleapis.com/data_access"
GROUP BY
  proto_payload.audit_log.method_name,
  proto_payload.audit_log.service_name,
  resource.type
ORDER BY
  counter DESC
LIMIT 100

Die vorherige Abfrage durchsucht alle Audit-Logs der letzten 30 Tage und gibt die 100 am häufigsten ausgeführten Aktionen mit Informationen zu method_name, service_name, Ressourcentyp und einem Zähler der ausgeführten Aktionen zurück.

Rollen erkennen, die für ein Dienstkonto gewährt wurden

Fragen Sie die Audit-Logs zur Administratoraktivität ab, um die Identitätsübernahme von Dienstkonten oder Rollen zu identifizieren, die Dienstkonten zugewiesen wurden:

SELECT
  timestamp,
  proto_payload.audit_log.authentication_info.principal_email as grantor,
  JSON_VALUE(bindingDelta.member) as grantee,
  JSON_VALUE(bindingDelta.role) as role,
  proto_payload.audit_log.resource_name,
  proto_payload.audit_log.method_name
FROM
  `TABLE`,
  UNNEST(JSON_QUERY_ARRAY(proto_payload.audit_log.service_data.policyDelta.bindingDeltas)) AS bindingDelta
WHERE
  timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND log_id = "cloudaudit.googleapis.com/activity"
  AND (
    (resource.type = "service_account"
    AND proto_payload.audit_log.method_name LIKE "google.iam.admin.%.SetIAMPolicy")
    OR
    (resource.type IN ("project", "folder", "organization")
    AND proto_payload.audit_log.method_name = "SetIamPolicy"
    AND JSON_VALUE(bindingDelta.role) LIKE "roles/iam.serviceAccount%")
  )
  AND JSON_VALUE(bindingDelta.action) = "ADD"
  -- Principal (grantee) exclusions
  AND JSON_VALUE(bindingDelta.member) NOT LIKE "%@example.com"
ORDER BY
  timestamp DESC

Die vorherige Abfrage sucht nach Audit-Logs, die die Rollen erfassen, die einem Hauptkonto in einem Dienstkonto gewährt wurden. Mit der Rolle „Ersteller von Dienstkonto-Tokens“ kann das Hauptkonto die Identität des Dienstkontos übernehmen. Außerdem gibt die Abfrage einen Zeitraum der letzten sieben Tage an und schließt genehmigte Empfänger von Fördermitteln (%@example.com) aus.

Hohe API-Nutzung durch ein Hauptkonto identifizieren

Fragen Sie alle Audit-Logs ab, um eine ungewöhnlich hohe API-Nutzung durch ein Hauptkonto zu identifizieren:

SELECT
  *
FROM (
  SELECT
    *,
    AVG(counter) OVER (
      PARTITION BY principal_email
      ORDER BY day
      ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS avg,
    STDDEV(counter) OVER (
      PARTITION BY principal_email
      ORDER BY day
      ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS stddev,
    COUNT(*) OVER (
      PARTITION BY principal_email
      RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS numSamples
  FROM (
    SELECT
      proto_payload.audit_log.authentication_info.principal_email,
      EXTRACT(DATE FROM timestamp) AS day,
      ARRAY_AGG(DISTINCT proto_payload.audit_log.method_name IGNORE NULLS) AS actions,
      COUNT(*) AS counter
    FROM `TABLE`
    WHERE
      timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)
      AND proto_payload.audit_log.authentication_info.principal_email IS NOT NULL
      AND proto_payload.audit_log.method_name NOT LIKE "storage.%.get"
      AND proto_payload.audit_log.method_name NOT LIKE "v1.compute.%.list"
      AND proto_payload.audit_log.method_name NOT LIKE "beta.compute.%.list"
    GROUP BY
      proto_payload.audit_log.authentication_info.principal_email,
      day
  )
)
WHERE
  counter > avg + 3 * stddev
  AND day >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
ORDER BY
  counter DESC

Für das angegebene Hauptkonto principal_email berechnet die Abfrage die durchschnittliche Anzahl von API-Aufrufen pro Tag und die Standardabweichung dieser API-Aufrufe. Ist die durchschnittliche Anzahl von API-Aufrufen größer als der laufende Durchschnitt plus das Dreifache der Standardabweichung, werden in der Abfrage die folgenden Informationen angezeigt:

  • Zähler der ausgeführten Aktionen.
  • Der berechnete Durchschnitt der pro Tag ausgeführten Aktionen.
  • Die spezifischen Aktionen, die ausgeführt wurden.

Nächste Schritte