Coletar registros de DNS passivo
Este documento explica como ingerir registros de DNS passivo no Google Security Operations usando o Google Cloud Storage V2.
O DNS passivo é uma fonte de dados de inteligência de DNS que captura registros históricos de resolução de DNS para análise de ameaças e investigação de domínio. Como os dados são normalmente coletados e armazenados como arquivos, é necessário fazer o upload desses arquivos para um bucket do Google Cloud Storage (GCS) e configurar um feed do Google SecOps para ingeri-los.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps.
- Um projeto do Google Cloud com a API Storage do Cloud Storage ativada.
- Permissões para criar e gerenciar buckets do GCS.
- Permissões para gerenciar políticas do IAM em buckets do GCS.
- Acesso a arquivos de dados de DNS passivo (por exemplo, DNSDB, Farsight ou outro provedor de DNS passivo).
- Dados de DNS passivo exportados em um formato compatível (por exemplo, JSON ou CSV).
Criar um bucket do Google Cloud Storage
- Acesse o Console do Google Cloud.
- Selecione seu projeto ou crie um.
- No menu de navegação, acesse Cloud Storage > Buckets.
- Clique em Criar bucket.
Informe os seguintes detalhes de configuração:
Configuração Valor Nome do bucket Insira um nome exclusivo globalmente (por exemplo, passive-dns-logs)Tipo de local Escolha com base nas suas necessidades (região, birregional, multirregional) Local Selecione o local mais próximo da sua instância do Google SecOps (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ão de objetos ou a política de retenção Clique em Criar.
Configurar a exportação automatizada de dados de DNS passivo para o GCS
Os dados de DNS passivo geralmente estão disponíveis como arquivos exportados de um provedor de inteligência de DNS (por exemplo, Farsight DNSDB, DomainTools ou Cisco Umbrella Investigate). Para manter os dados no GCS atualizados, configure um pipeline de exportação automatizado usando uma das abordagens a seguir.
Opção 1: Cloud Scheduler com o Cloud Build (recomendado)
Use o Cloud Build acionado pelo Cloud Scheduler para executar um job em contêineres que busca dados de DNS passivo do seu provedor e os grava no GCS.
Crie uma conta de serviço para o job de exportação:
- No Console do GCP, acesse IAM e administrador > Contas de serviço.
- Clique em Criar conta de serviço.
- Forneça os seguintes detalhes de configuração:
- Nome da conta de serviço: insira
passive-dns-export-sa - Descrição da conta de serviço: insira
Service account for automated Passive DNS data export to GCS
- Nome da conta de serviço: insira
- Clique em Criar e continuar.
- Adicione os seguintes papéis:
- Administrador de objetos do Storage (para gravar arquivos no GCS)
- Editor do Cloud Build (para executar jobs do Cloud Build)
- Clique em Concluído.
Crie um arquivo de configuração do Cloud Build (
cloudbuild.yaml):steps: - name: 'gcr.io/cloud-builders/gcloud' entrypoint: 'bash' args: - '-c' - | apt-get update && apt-get install -y curl jq # Fetch Passive DNS data from your provider # Replace with the actual API call for your provider # Example for Farsight DNSDB: TIMESTAMP=$(date -u +%Y%m%d_%H%M%S) curl -s -H "X-API-Key: $${PDNS_API_KEY}" \ "https://api.dnsdb.info/dnsdb/v2/lookup/rrset/name/*.example.com" \ -o /workspace/passive_dns_$${TIMESTAMP}.json # Upload to GCS gcloud storage cp /workspace/passive_dns_$${TIMESTAMP}.json \ gs://${_BUCKET_NAME}/passive-dns/ substitutions: _BUCKET_NAME: 'passive-dns-logs'Armazene a chave de API como um secret do Secret Manager:
- No Console do GCP, acesse Segurança > Secret Manager.
- Clique em Criar secret.
- Insira
pdns-api-keycomo o nome do secret. - Insira a chave de API do provedor de DNS passivo como o valor do secret.
- Clique em Criar.
Crie um job do Cloud Scheduler para acionar o build:
- No Console do GCP, acesse o Cloud Scheduler.
- Clique em Criar job.
Forneça os seguintes detalhes de configuração:
Configuração Valor Nome passive-dns-export-dailyRegião Selecione a mesma região do bucket do GCS Frequência 0 3 * * *(diariamente às 3h UTC)Fuso horário UTC (recomendado) Tipo de destino HTTP URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsMétodo HTTP POST Cabeçalho do Auth Adicionar token OAuth Conta de serviço passive-dns-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.comClique em Criar.
Opção 2: Serviço de transferência do Cloud Storage (para data stores locais)
Se os dados de DNS passivo estiverem armazenados em um sistema de arquivos local, use o Serviço de transferência do Cloud Storage com um agente de transferência.
- No Console do GCP, acesse o Serviço de transferência do Cloud Storage.
- Clique em Criar job de transferência.
- Selecione Sistema de arquivos POSIX como a origem.
- Siga as instruções para instalar o agente de transferência do Cloud Storage em uma máquina com acesso aos arquivos de dados de DNS passivo.
Configure o job de transferência:
Configuração Valor Diretório de origem Caminho para o diretório que contém arquivos de dados de DNS passivo Bucket de destino passive-dns-logsCaminho de destino passive-dns/Programar Defina uma programação recorrente (por exemplo, diária) Clique em Criar.
Recuperar a conta de serviço do Google SecOps
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Passive DNS Logs). - Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione DNS passivo como o Tipo de registro.
- Clique em Receber conta de serviço.
Um e-mail exclusivo da conta de serviço será exibido, por exemplo:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopie esse endereço de e-mail para usar na próxima etapa.
Conceder permissões do IAM à conta de serviço do Google SecOps
A conta de serviço do Google SecOps precisa do papel Leitor de objetos do Storage no bucket do GCS.
- Acesse Cloud Storage > Buckets.
- Clique no nome do bucket (por exemplo,
passive-dns-logs). - Acesse a guia Permissões.
- Clique em Conceder acesso.
- Forneça os seguintes detalhes de configuração:
- Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps (por exemplo,
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com). - Atribuir papéis: selecione Leitor de objetos do Storage.
- Adicionar participantes: cole o e-mail da conta de serviço do Google SecOps (por exemplo,
Clique em Salvar.
Configurar o feed do Google SecOps
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Passive DNS Logs). - Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione DNS passivo como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
URL do bucket do Storage: insira o URI do bucket do GCS:
gs://passive-dns-logs/passive-dns/- Substitua
passive-dns-logspelo nome do bucket do GCS. - Substitua
passive-dnspelo caminho do prefixo configurado.
- Substitua
Opção de exclusão de origem: selecione a opção de exclusão de acordo com sua preferência:
- Nunca: nunca exclui arquivos após transferências (recomendado para testes).
- Excluir arquivos transferidos: exclui arquivos após a transferência.
Excluir arquivos transferidos e diretórios vazios: exclui arquivos e diretórios vazios após a transferência.
Idade máxima do arquivo: inclui arquivos modificados no último número de dias (o padrão é 180 dias).
Namespace do recurso: o namespace do recurso.
Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
Clique em Próxima.
Revise a nova configuração de feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| nome do host | intermediary.hostname | Valor copiado diretamente |
| timestamp_s | metadata.event_timestamp | Analisado como carimbo de data/hora do UNIX |
| metadata.event_type | Definido como "NETWORK_DNS" | |
| network.application_protocol | Definido como "DNS" | |
| resposta | network.dns.answers.data | Valor da resposta após remover o ponto final |
| ttl | network.dns.answers.ttl | Convertido para número inteiro |
| classe | network.dns.questions.class | Mapeado para valor numérico (1 para IN, 3 para CH, 4 para HS) |
| consulta | network.dns.questions.name | Valor da consulta após remover o ponto final |
| tipo | network.dns.questions.type | Mapeado do tipo (em maiúsculas) para valor numérico usando o mapeamento de tipo de DNS |
| cliente | principal.ip | Valor copiado diretamente |
| servidor | target.ip | Valor copiado diretamente |
| metadata.product_name | Definido como "DNS passivo" |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.