Consultas SQL para estatísticas de segurança

Este documento descreve como analisar os registos de auditoria do Cloud Logging através de consultas de SQL padrão do BigQuery na página Log Analytics. As consultas SQL permitem-lhe agregar e analisar os seus registos de auditoria, que fornecem informações sobre as atividades administrativas e os acessos nos seus recursos. Google Cloud

Acerca dos registos de auditoria

Existem quatro tipos de registos de auditoria que podem ser escritos por Google Cloud serviços:

  • Registos de auditoria da atividade do administrador: os registos de auditoria da atividade do administrador registam chamadas API ou outras ações que modificam a configuração ou os metadados dos recursos. Estes registos são sempre escritos. Não pode configurá-los, excluí-los nem desativá-los.

  • Registos de auditoria de acesso a dados: os registos de auditoria de acesso a dados registam chamadas API que leem a configuração ou os metadados dos recursos, bem como chamadas API orientadas pelo utilizador que criam, modificam ou leem dados de recursos fornecidos pelo utilizador. Uma vez que o acesso aos dados é uma operação de API frequente, estes registos estão desativados por predefinição (exceto para o BigQuery).

  • Registos de auditoria de eventos do sistema: os registos de auditoria de eventos do sistema contêm entradas de registo para Google Cloud ações que modificam a configuração dos recursos. Estes registos são gerados pelos sistemas da Google e não pelas ações do utilizador. Não pode configurar, excluir nem desativar os registos de auditoria de eventos do sistema.

  • Registos de auditoria de acesso negado por política: os registos de auditoria de acesso negado por política são registados quando um serviço nega o acesso a um utilizador ou a uma conta de serviço devido a uma violação da política de segurança. Google Cloud Não é possível desativar estes registos, mas pode usar filtros de exclusão para impedir que sejam armazenados no Logging.

Para mais informações sobre os registos de auditoria, consulte o artigo Vista geral dos registos de auditoria. Para ver uma lista de serviços integrados com registos de auditoria, consulte os Google Cloud serviços com registos de auditoria.

Use registos de auditoria para identificar violações de políticas ou atividade suspeita

Pode usar os registos de auditoria para identificar violações de políticas ou atividade suspeita:

  • Para identificar uma potencial escalada de privilégios através da gestão de identidade e de acesso (IAM) ou uma evasão de defesa desativando o registo, use os registos de auditoria da atividade do administrador. Para ver um exemplo de consulta que identifica este cenário, consulte o artigo Alterações feitas às definições de registo.

  • Para identificar uma potencial utilização indevida de APIs ou dados alojados em serviços como o Cloud Storage ou o BigQuery, use os registos de auditoria de acesso aos dados. Para ver um exemplo de consulta que identifica este cenário, consulte o artigo Identifique a utilização elevada da API por um principal.

  • Para identificar a frequência com que os dados são acedidos e por que utilizadores, consulte todos os registos de auditoria. Para ver um exemplo de consulta que identifica este cenário, consulte o artigo Determine as ações mais comuns realizadas no mês passado.

Antes de começar

  • Certifique-se de que tem um Google Cloud projeto, uma pasta ou uma organização que gera registos de auditoria.

  • Certifique-se de que tem acesso a uma vista no contentor de registos para o qual os registos de auditoria são encaminhados. O contentor de registos tem de ser atualizado para usar a análise de registos. Para ver informações sobre como criar um contentor de registos atualizado para usar o Log Analytics, consulte o artigo Configure contentores de registos.

  • Para receber as autorizações de que precisa para criar destinos e ver registos, peça ao seu administrador que lhe conceda as seguintes funções de IAM:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

    Consoante os registos de auditoria que quer ver, pode precisar de funções ou autorizações separadas. Para obter informações sobre a definição de funções de IAM, consulte a documentação de controlo de acesso com a IAM do registo.

  • Para usar as consultas neste documento na página Log Analytics, faça o seguinte:

    1. Na Google Cloud consola, aceda à página Log Analytics:

      Aceda ao Log Analytics

      Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cuja legenda é Registo.

    2. Identifique o nome da tabela da vista de registo que quer consultar.

      Para identificar este nome, aceda à lista Vistas de registo, localize a vista de registo e, de seguida, selecione Consulta. O painel Consulta é preenchido com uma consulta predefinida que inclui o nome da tabela da vista de registo consultada. O nome da tabela tem o formato project_ID.region.bucket_ID.view_ID.

      Para mais informações sobre como aceder à consulta predefinida, consulte o artigo Consulte uma vista de registo.

    3. Substitua VIEW pelo nome da tabela da vista de registo que quer consultar e, em seguida, copie a consulta.

    4. Cole a consulta no painel Consulta e, de seguida, clique em Executar consulta.

Consultas de exemplo

Esta secção fornece exemplos de consultas SQL para consultar registos de auditoria.

Alterações efetuadas às definições de registo

Para identificar quando os registos de auditoria são desativados ou quando são feitas alterações às definições de registo predefinidas, consulte os registos de auditoria da atividade do 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
  `VIEW`
WHERE
  proto_payload.audit_log.service_name = "logging.googleapis.com"
  AND log_id = "cloudaudit.googleapis.com/activity"

Determinar as ações mais comuns realizadas no mês passado

Para identificar as ações mais comuns nos últimos 30 dias, consulte todos os registos de auditoria:

SELECT
  proto_payload.audit_log.method_name,
  proto_payload.audit_log.service_name,
  resource.type,
  COUNT(*) AS counter
FROM
  `VIEW`
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

A consulta anterior pesquisa todos os registos de auditoria nos últimos 30 dias e devolve as 100 ações mais realizadas com informações sobre o method_name, o service_name, o tipo de recurso e um contador das ações realizadas.

Detete funções concedidas numa conta de serviço

Para identificar a utilização da identidade de uma conta de serviço ou funções concedidas em contas de serviço, consulte os registos de auditoria da atividade de 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
  `VIEW`,
  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

A consulta anterior procura registos de auditoria que captam funções concedidas a um principal numa conta de serviço. A função de criador de tokens de conta de serviço permite que o principal use a identidade da conta de serviço. A consulta também especifica um intervalo de tempo dos últimos sete dias e exclui os beneficiários aprovados (%@example.com).

Identifique a utilização elevada da API por um principal

Para identificar uma utilização invulgarmente elevada da API por parte de um principal, consulte todos os registos de auditoria:

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 `VIEW`
    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 o principal especificado, principal_email, a consulta calcula o número médio de chamadas API por dia e o desvio padrão dessas chamadas API. Quando o número médio de chamadas de API é superior à média móvel mais três vezes o desvio padrão, a consulta apresenta as seguintes informações:

  • Um contador das ações realizadas.
  • A média calculada de ações realizadas por dia.
  • As ações específicas que foram realizadas.

O que se segue?