Coletar registros do detector de ameaças do Google Cloud DNS

Compatível com:

Este documento explica como ingerir registros do Google Cloud DNS Threat Detector no Google Security Operations usando o Google Cloud Storage V2.

O DNS Armor, com tecnologia da Infoblox, é um serviço totalmente gerenciado que oferece segurança na camada de DNS para suas cargas de trabalho do Google Cloud. O detector avançado de ameaças foi projetado para detectar atividades maliciosas no início da cadeia de ataques, a consulta de DNS, sem adicionar complexidade operacional ou sobrecarga de desempenho. Depois que uma ameaça é detectada, você pode receber insights úteis sobre ameaças de DNS pelo Cloud Logging.

Quando você ativa um detector de ameaças de DNS para um projeto, o DNS Armor envia com segurança os registros de consultas DNS vinculadas à Internet para o mecanismo de análise baseado no Google Cloud com tecnologia da Infoblox. Ele usa uma combinação de feeds de inteligência contra ameaças e análises comportamentais baseadas em IA para identificar ameaças. Qualquer atividade maliciosa detectada gera um registro de ameaça do DNS Armor, que é enviado de volta ao seu projeto e gravado no Cloud Logging para que você possa visualizar e tomar medidas.

Antes de começar

Verifique se você atende os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • Projeto do GCP com a API Cloud Storage ativada.
  • Permissões para criar e gerenciar buckets do GCS.
  • Permissões para gerenciar políticas do IAM em buckets do GCS.
  • A API Network Security está ativada no seu projeto.
  • Papéis do IAM necessários para ativar um detector de ameaças de DNS.
  • Permissões para ver registros de ameaças de DNS: resourcemanager.projects.get, resourcemanager.projects.list, networksecurity.dnsThreatDetectors.get, networksecurity.dnsThreatDetectors.list ou funções roles/networksecurity.dnsThreatDetectorViewer e roles/logging.viewer.

Criar um bucket do Google Cloud Storage

  1. Acesse o Console do Google Cloud.
  2. Selecione seu projeto ou crie um novo.
  3. No menu de navegação, acesse Cloud Storage > Buckets.
  4. Clique em Criar bucket.
  5. Informe os seguintes detalhes de configuração:

    Configuração Valor
    Nomeie seu bucket Insira um nome exclusivo globalmente, por exemplo, dns-threat-detector-logs.
    Tipo de local Escolha com base nas suas necessidades (região, birregional, multirregional)
    Local Selecione o local (por exemplo, us-central1).
    Classe de armazenamento Padrão (recomendado para registros acessados com frequência)
    Controle de acesso Uniforme (recomendado)
    Ferramentas de proteção Opcional: ativar o controle de versões de objetos ou a política de retenção
  6. Clique em Criar.

Criar um detector de ameaças de DNS

Nesta seção, descrevemos como criar um detector de ameaças de DNS para monitorar redes VPC em busca de atividades de DNS maliciosas e vinculadas à Internet.

Só é possível ativar um detector de ameaças de DNS por projeto.

Usando o console do Google Cloud

  1. No console do Google Cloud, acesse a página Detecção avançada de ameaças.
  2. Clique em Criar detector de ameaças de DNS.
  3. Insira um nome para o detector de ameaças de DNS.
  4. Selecione Todas as redes VPC do projeto.
  5. Clique em Criar.

Como usar a ferramenta de linha de comando gcloud

Como alternativa, crie um detector de ameaças de DNS usando o comando gcloud:

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--project=PROJECT_ID \
--provider="infoblox"

Substitua: - my-dns-threat-detector: o nome do detector de ameaças de DNS. - PROJECT_ID: o ID do projeto.

Configurar o Cloud Logging para exportar registros do DNS Threat Detector para o GCS

Os registros de ameaças do DNS Armor são gravados no Cloud Logging. É necessário configurar um coletor de registros para exportar esses registros para o bucket do GCS.

  1. No Console do Google Cloud, acesse Logging > Roteador de registros.
  2. Clique em Criar coletor.
  3. Informe os seguintes detalhes de configuração:
    • Nome do coletor: insira um nome descritivo (por exemplo, dns-threat-detector-to-gcs).
    • Descrição do coletor: descrição opcional.
  4. Clique em Próxima.
  5. Na seção Selecionar serviço do coletor:
    • Serviço de coletor: selecione Bucket do Cloud Storage.
    • Selecionar bucket do Cloud Storage: selecione o bucket (por exemplo, dns-threat-detector-logs) no menu suspenso.
  6. Clique em Próxima.
  7. Na seção Escolher registros para incluir no coletor, insira a seguinte consulta de filtro:

    resource.type="networksecurity.googleapis.com/DnsThreatDetector"
    logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"
    

Substitua PROJECT_ID pelo ID do projeto do GCP.

  1. Clique em Próxima.
  2. Revise a configuração e clique em Criar coletor.

Como usar a ferramenta de linha de comando gcloud

Outra opção é criar um coletor de registros usando o comando gcloud:

gcloud logging sinks create dns-threat-detector-to-gcs \
    gs://dns-threat-detector-logs \
    --log-filter='resource.type="networksecurity.googleapis.com/DnsThreatDetector" AND logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"' \
    --project=PROJECT_ID

Substitua: - dns-threat-detector-logs: o nome do seu bucket do GCS. - PROJECT_ID: o ID do projeto do GCP.

Recuperar a conta de serviço do Google SecOps

O Google SecOps usa uma conta de serviço exclusiva para ler dados do seu bucket do GCS. Você precisa conceder a essa conta de serviço acesso ao seu bucket.

Configurar um feed no Google SecOps para ingerir registros do Threat Detector do Cloud DNS

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, GCP DNS Threat Detector Logs).
  5. Selecione Google Cloud Storage V2 como o Tipo de origem.
  6. Selecione Detector de ameaças do Cloud DNS como o Tipo de registro.

  7. Clique em Receber conta de serviço.

  8. Um e-mail exclusivo da conta de serviço será exibido, por exemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copie o endereço de e-mail. Você vai usá-la na próxima etapa.

  10. Clique em Próxima.

  11. Especifique valores para os seguintes parâmetros de entrada:

    • URL do bucket de armazenamento: insira o URI do bucket do GCS com o caminho do prefixo:

      gs://dns-threat-detector-logs/
      

      Substitua:

      • dns-threat-detector-logs: o nome do bucket do GCS.
    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência:
      • Nunca: nunca exclui arquivos após as transferências (recomendado para testes).
      • Excluir arquivos transferidos: exclui os arquivos após a transferência bem-sucedida.
      • Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência bem-sucedida.
    • Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.
  12. Clique em Próxima.

  13. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Conceder permissões do IAM à conta de serviço do Google SecOps

A conta de serviço do Google SecOps precisa do papel de Leitor de objetos do Storage no seu bucket do GCS.

  1. Acesse Cloud Storage > Buckets.
  2. Clique no nome do bucket (por exemplo, dns-threat-detector-logs).
  3. Acesse a guia Permissões.
  4. Clique em Conceder acesso.
  5. Informe os seguintes detalhes de configuração:
    • Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps.
    • Atribuir papéis: selecione Leitor de objetos do Storage.
  6. Clique em Salvar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
record.jsonPayload.dnsQuery.responseCode, record.jsonPayload.dnsQuery.authAnswer, record.jsonPayload.dnsQuery.queryTime, record.jsonPayload.partnerId, record.jsonPayload.detectionTime, record.logName additional.fields Valores copiados para o mapa de adição e mesclados como entradas de mapa com value.string_value se não estiver vazio
record.receiveTimestamp metadata.collected_timestamp Analisado como carimbo de data/hora ISO8601
metadata.event_type Definido como "NETWORK_CONNECTION" se has_principal e has_target, "STATUS_UPDATE" se has_principal, caso contrário, "GENERIC_EVENT"
record.timestamp metadata.event_timestamp Analisado como carimbo de data/hora ISO8601
record.insertId metadata.product_log_id O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.dnsQuery.rdata network.dns.answers Valor copiado para answer.data e mesclado como matriz se não estiver vazio.
record.jsonPayload.dnsQuery.queryName, record.jsonPayload.dnsQuery.queryType network.dns.questions questions.name de queryName, questions.type mapeado de queryType string para integer e mesclado como array se não estiver vazio
record.jsonPayload.dnsQuery.responseCode network.dns.response_code Mapeado de string para número inteiro usando uma tabela predefinida
record.jsonPayload.dnsQuery.protocol network.ip_protocol O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.dnsQuery.sourceIp principal.asset.ip O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.dnsQuery.sourceIp principal.ip O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.dnsQuery.location principal.location.country_or_region O valor é copiado diretamente se não estiver vazio.
record.resource.labels.location principal.location.name O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.dnsQuery.vmProjectNumber, record.jsonPayload.dnsQuery.projectNumber principal.resource.attribute.labels Os valores são copiados para o mapa de adição e mesclados como entradas de mapa se não estiverem vazios.
record.jsonPayload.dnsQuery.vmInstanceId principal.resource.id O valor é copiado diretamente se não estiver vazio.
record.resource.labels.id principal.resource.product_object_id O valor é copiado diretamente se não estiver vazio.
record.resource.type principal.resource.type O valor é copiado diretamente se não estiver vazio.
security_result Combinado do mapa built security_result
record.jsonPayload.threatInfo.confidence security_result.confidence Mapeado para LOW_CONFIDENCE se corresponder a (?i)Low, MEDIUM_CONFIDENCE se (?i)Medium, HIGH_CONFIDENCE se (?i)High
record.jsonPayload.threatInfo.threatDescription security_result.description O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.threatInfo.threatIndicatorType, record.jsonPayload.threatInfo.threatIndicator, record.jsonPayload.threatInfo.threatFeed, record.jsonPayload.threatInfo.category, record.jsonPayload.threatInfo.type, record.jsonPayload.threatInfo.threat, record.jsonPayload.threatInfo.severity, record.resource.labels.resource_container security_result.detection_fields Os valores são copiados para o mapa de adição e mesclados como entradas de mapa se não estiverem vazios.
record.severity security_result.severity Mapeado como LOW se (?i)Low, INFORMATIONAL se (?i)(Informational|Info), MEDIUM se (?i)Medium, CRITICAL se (?i)Critical, HIGH se (?i)High
record.jsonPayload.threatInfo.threatId security_result.threat_id O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.dnsQuery.destinationIp target.asset.ip O valor é copiado diretamente se não estiver vazio.
record.jsonPayload.dnsQuery.destinationIp target.ip O valor é copiado diretamente se não estiver vazio.
metadata.vendor_name Defina como "Google Cloud"
metadata.product_name Defina como "Detector de ameaças do Google Cloud DNS"

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.