Consultas en SQL para obtener estadísticas de seguridad

En este documento, se describe cómo analizar los registros de auditoría de Cloud Logging mediante consultas de SQL estándar de BigQuery en la página Análisis de registros. Las consultas en SQL te permiten agregar y analizar tus registros de auditoría, que proporcionan información sobre las actividades administrativas y los accesos en tus recursos de Google Cloud.

Acerca de los registros de auditoría

Existen cuatro tipos de registros de auditoría que pueden escribir los servicios de Google Cloud:

  • Registros de auditoría de actividad del administrador: registran las llamadas a la API y otras acciones que modifican la configuración o los metadatos de los recursos. Estos registros siempre se escriben; no puedes configurarlos, excluirlos ni inhabilitarlos.

  • Registros de auditoría de acceso a los datos: Estos registros registran las llamadas a la API que leen la configuración o los metadatos de los recursos, así como las llamadas a la API que controla el usuario y que crean, modifican o leen datos de los recursos que proporciona el usuario. Debido a que acceder a los datos es una operación frecuente de la API, estos registros están inhabilitados de forma predeterminada (excepto para BigQuery).

  • Registros de auditoría de eventos del sistema: Los registros de auditoría de eventos del sistema contienen entradas de registro para las acciones de Google Cloud que modifican la configuración de los recursos. Los sistemas de Google generan estos registros; no las generan las acciones del usuario. No puedes configurar, excluir ni inhabilitar los registros de auditoría de eventos del sistema.

  • Registros de auditoría de política denegada: Los registros de auditoría de política denegada se registran cuando un servicio de Google Cloud rechaza el acceso a un usuario o a una cuenta de servicio debido a un incumplimiento de la política de seguridad. Estos registros no se pueden inhabilitar, pero puedes usar los filtros de exclusión para evitar que se almacenen en Logging.

Para obtener más información sobre los registros de auditoría, consulta Descripción general de los registros de auditoría. Para obtener una lista de los servicios integrados a los registros de auditoría, consulta Servicios de Google Cloud con registros de auditoría.

Utiliza registros de auditoría para identificar incumplimientos de políticas o actividades sospechosas.

Puedes usar los registros de auditoría para identificar los incumplimientos de políticas o la actividad sospechosa:

  • Para identificar la posible elevación de privilegios con Identity and Access Management (IAM) o la evasión de la defensa mediante la inhabilitación de Logging, usa los registros de auditoría de actividad del administrador. Para obtener una consulta de muestra que identifique esta situación, consulta Cambios realizados en la configuración de Logging.

  • Para identificar el posible uso inadecuado de las APIs o de los datos alojados en servicios como Cloud Storage o BigQuery, usa los registros de auditoría de acceso a los datos. Para ver una consulta de muestra que identifica esta situación, consulta Cómo identificar el alto uso de la API por parte de una principal.

  • Para identificar con qué frecuencia se accede a los datos y qué usuarios acceden a ellos, consulta todos los registros de auditoría. Para ver una consulta de muestra que identifica esta situación, consulta Determina las acciones más comunes que se realizaron en el último mes.

Antes de comenzar

  • Asegúrate de tener un proyecto, una carpeta o una organización de Google Cloud que genere registros de auditoría.

  • Asegúrate de tener acceso a una vista del bucket de registros a la que se enrutan los registros de auditoría. Se debe actualizar el bucket de registros para usar el Análisis de registros. Si quieres obtener información sobre cómo crear un bucket de registros que esté actualizado para usar el Análisis de registros, consulta Configura buckets de registros.

  • Si quieres obtener los permisos que necesitas para crear receptores y ver registros, pídele a tu administrador que te otorgue los siguientes roles de IAM:

    Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

    Es posible que también puedas obtener los permisos necesarios a través de los roles personalizados o de otros roles predefinidos.

    Según los registros de auditoría que desees ver, es posible que necesites funciones o permisos independientes. Para obtener información sobre cómo configurar los roles de IAM, consulta la documentación de Logging Control de acceso con IAM.

  • Para usar las consultas de este documento en la página Análisis de registros, haz lo siguiente:

    1. En la consola de Google Cloud, ve a la página Análisis de registros:

      Ir a Análisis de registros

      Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.

    2. Identifica el nombre de tabla de una vista de registro ejecutando la consulta predeterminada:

      En la lista Vistas de registro, ubica la vista de registro y, luego, selecciona Consultar. El panel Consulta se propaga con una consulta predeterminada, que incluye el nombre de la tabla que se consulta. El nombre de la tabla tiene el formato project_ID.region.bucket_ID.view_ID.

      Para obtener más información sobre cómo acceder a la consulta predeterminada, lee Consulta una vista de registro.

    3. Reemplaza TABLE por el nombre de la tabla que corresponde a la vista que deseas consultar y, luego, copia la consulta.

    4. Pega la consulta en el panel Consulta y, luego, haz clic en Ejecutar consulta.

Consultas de muestra

En esta sección, se proporcionan consultas en SQL de muestra para consultar los registros de auditoría.

Se realizaron cambios en la configuración de Logging

Para identificar cuándo se inhabilitan los registros de auditoría o cuándo se realizan cambios en la configuración predeterminada de Logging, consulta los registros de auditoría de actividad del administrador:

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"

Determinar las acciones más comunes que se realizaron el mes pasado

Para identificar qué acciones se realizaron con mayor frecuencia en los últimos 30 días, consulta todos los registros de auditoría:

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

La consulta anterior busca en todos los registros de auditoría de los últimos 30 días y muestra las 100 acciones más ejecutadas con información sobre method_name, service_name, el tipo de recurso y un contador de las acciones realizadas.

Detecta roles otorgados en una cuenta de servicio

Para identificar la suplantación de cuentas de servicio o las funciones otorgadas en las cuentas de servicio, consulta los registros de auditoría de actividad del administrador:

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

La consulta anterior busca registros de auditoría que capturan las funciones que se otorgan a una principal en una cuenta de servicio. La función de creador de tokens de cuenta de servicio permite que la principal actúe en nombre de la cuenta de servicio. La consulta también especifica un intervalo de tiempo de los últimos siete días y excluye los beneficiarios aprobados (%@example.com).

Identifica el alto uso de las APIs por parte de una principal

Para identificar un uso inusualmente alto de la API por parte de una principal, consulta todos los registros de auditoría:

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

Para la principal especificada, principal_email, la consulta calcula la cantidad promedio de llamadas a la API por día y la desviación estándar de esas llamadas a la API. Cuando la cantidad promedio de llamadas a la API es mayor que el promedio ejecutado más el triple de la desviación estándar, la consulta muestra la siguiente información:

  • Un contador de las acciones realizadas.
  • Es el promedio calculado de acciones realizadas por día.
  • Las acciones específicas que se realizaron.

¿Qué sigue?