Coletar registros do BloxOne Threat Defense
Este documento explica como ingerir registros do BloxOne Threat Defense no
Google Security Operations usando o Bindplane. O analisador do Logstash extrai campos de registros BLOXONE DNS
recebidos no formato SYSLOG ou JSON. Primeiro, ele normaliza a mensagem de registro em um objeto JSON e mapeia os campos extraídos para o Modelo Unificado de Dados (UDM, na sigla em inglês), enriquecendo os dados com detalhes de geolocalização e DNS para análise de segurança.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Instância do Google SecOps
- Windows 2016 ou mais recente ou um host Linux com
systemd
- Se estiver executando por trás de um proxy, as portas do firewall estarão abertas.
- Acesso privilegiado ao Infoblox BloxOne.
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.
Receber o ID do cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Outros recursos de instalação
Para mais opções de instalação, consulte o guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
- Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele fica no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yaml
da seguinte forma:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: 'BLOXONE' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>
pelo ID do cliente real.Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux, execute o seguinte comando:
sudo systemctl restart bindplane-agent
Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Syslog no Infoblox BloxOne
- Faça login no portal da Infoblox.
- Acesse Configurar > Administração > Conector de dados.
- Selecione a guia Configuração de destino.
- Clique em Criar > Syslog.
- Informe os seguintes detalhes de configuração:
- Nome: defina um nome descritivo (por exemplo, coletor do Google SecOps).
- Descrição: forneça uma breve descrição.
- Estado: selecione Ativar.
- Tags: clique em Adicionar e especifique o seguinte para associar uma chave ao destino:
- KEY: insira um nome descritivo para a chave.
- VALUE: insira o valor da chave.
- Formato: selecione CEF.
- Protocolo: selecione UDP ou TCP (dependendo da configuração do agente do Bindplane).
- FQDN/IP: insira o endereço IP do agente do Bindplane.
- Porta: insira a porta do agente do Bindplane (o padrão é
514
para UDP).
- Clique em Salvar e fechar.
Tabela de mapeamento da UDM
Campo de registro | Mapeamento da UDM | Lógica |
---|---|---|
additional_list.key |
Esse campo é usado em um loop para iterar na matriz additional_list e extrair dados com base no valor do campo key . Ele não é mapeado diretamente para a UDM. |
|
additional_list.value |
principal.location.region_latitude , principal.location.region_longitude , target.location.region_latitude , target.location.region_longitude |
Esse campo é usado com additional_list.key para extrair valores específicos da matriz additional_list . A lógica para extrair e mapear o valor depende do key correspondente. Por exemplo: . Se additional_list.key for intel:source:ip:geoIP:location , extraia os valores de latitude e longitude usando grok e mapeie-os para principal.location.region_latitude e principal.location.region_longitude , respectivamente. : se additional_list.key for intel:destination:ip:geoIP:location , extraia os valores de latitude e longitude usando grok e mapeie-os para target.location.region_latitude e target.location.region_longitude , respectivamente. |
additional_string.key |
Semelhante a additional_list.key , esse campo é usado em um loop para iterar a matriz additional_string e extrair dados com base no valor key . Ele não é mapeado diretamente para a UDM. |
|
additional_string.value |
additional.fields.value.string_value , principal.location.country_or_region , target.location.country_or_region , src.ip , src.port , src.hostname , network.ip_protocol |
Usado com additional_string.key para extrair valores da matriz additional_string . A lógica para mapear o valor depende do key correspondente. Por exemplo: . Se additional_string.key for intel:source:ip:ip2asn:start_ip , intel:source:ip:ip2asn:finish_ip , intel:destination:ip:ip2asn:start_ip ou intel:destination:ip:ip2asn:finish_ip , mapeie o valor para additional.fields.value.string_value com a chave correspondente. : se additional_string.key for intel:source:ip:geoIP:country , mapeie o valor para principal.location.country_or_region . : se additional_string.key for intel:destination:ip:geoIP:country , mapeie o valor para target.location.country_or_region . : se additional_string.key for log:source:ip , mapeie o valor para src.ip . : se additional_string.key for log:source:port , mapeie o valor para src.port depois de convertê-lo em um número inteiro. : se additional_string.key for log:source:hostname , mapeie o valor para src.hostname . : se additional_string.key for log:cdh:input:protocol , mapeie o valor para network.ip_protocol depois de convertê-lo para maiúsculas. |
app_category |
security_result.category_details |
Mapeado diretamente. |
confidence |
security_result.confidence |
Mapeado com base na seguinte lógica: - Se confidence for LOW , mapeie para LOW_CONFIDENCE .: se confidence for MEDIUM , mapeie para MEDIUM_CONFIDENCE .: se confidence for HIGH , mapeie para HIGH_CONFIDENCE . |
country |
principal.location.name |
Mapeado diretamente, mas apenas se raw.infobloxb1region estiver vazio. |
device |
principal.ip , principal.asset.ip |
Mapeado diretamente, mas apenas se raw.dvc estiver vazio. |
dhcp_fingerprint |
security_result.detection_fields.value |
Mapeado diretamente com a chave dhcp_fingerprint . |
dns_view |
security_result.detection_fields.value |
Mapeado diretamente com a chave dns_view . |
endpoint_groups |
security_result.detection_fields.value |
Mapeado diretamente com a chave endpoint_groups . |
event_time |
metadata.event_timestamp.seconds |
Analisado como um carimbo de data/hora ISO8601, e o valor de segundos é extraído. Usado somente se o campo timestamp estiver vazio. |
feed_name |
principal.resource.name |
feed_name está mapeado para principal.resource.name . |
feed_type |
principal.resource.attribute.labels.value |
Mapeado diretamente com a chave feed_type . |
mac_address |
principal.mac |
Mapeado diretamente após a conversão para letras minúsculas. |
network |
principal.hostname , principal.asset.hostname |
Mapeado diretamente, mas somente se raw.dvchost e raw.dvc estiverem vazios. |
os_version |
principal.platform_version |
Mapeado diretamente. |
policy_action |
security_result.action_details , security_result.action |
policy_action é mapeado diretamente para security_result.action_details .security_result.action é derivado com base na seguinte lógica:- Se policy_action for Redirect ou Log , mapeie para ALLOW .: se policy_action for BLOCK , mapeie para BLOCK . |
policy_name |
security_result.detection_fields.value |
Mapeado diretamente com a chave policy_name . |
qname |
network.dns.questions.name |
Mapeado diretamente. |
qtype |
network.dns.questions.type |
Mapeado com base na seguinte lógica: - Se qtype for A , mapeie para 1 (convertido em um número inteiro sem sinal).: se qtype for PTR , mapeie para 12 (convertido em um número inteiro sem sinal). |
raw.act |
security_result.action_details |
Mapeado diretamente. |
raw.app |
network.application_protocol |
Mapeado diretamente após a conversão para maiúsculas. |
raw.deviceeventclassid |
metadata.product_event_type |
Concatenado com raw.name (separado por - ) e mapeado para metadata.product_event_type . |
raw.devicevendor |
metadata.vendor_name |
Mapeado diretamente. |
raw.deviceproduct |
metadata.product_name |
Mapeado diretamente. |
raw.deviceversion |
metadata.product_version |
Mapeado diretamente. |
raw.deviceseverity |
security_result.severity_details , security_result.severity |
raw.deviceseverity é mapeado diretamente para security_result.severity_details .security_result.severity é derivado com base na seguinte lógica:- Se raw.deviceseverity estiver em [0 , 1 , 2 , 3 ], mapeie para LOW .: se raw.deviceseverity estiver em [4 , 5 , 6 ], mapeie para MEDIUM .: se raw.deviceseverity estiver em [7 , 8 ], mapeie para HIGH .: se raw.deviceseverity estiver em [9 , 10 ], mapeie para CRITICAL . |
raw.dvc |
principal.ip , principal.asset.ip |
Mapeado diretamente. |
raw.dvchost |
principal.hostname , principal.asset.hostname |
Mapeado diretamente, mas apenas se não for igual a raw.dvc . |
raw.infobloxb1connectiontype |
additional.fields.value.string_value |
Mapeado diretamente com a chave infobloxb1connectiontype . |
raw.infobloxb1ophname |
observer.hostname , observer.asset.hostname |
Mapeado diretamente. |
raw.infobloxb1ophipaddress |
observer.ip |
Mapeado diretamente. |
raw.infobloxb1policyname |
security_result.detection_fields.value |
Mapeado diretamente com a chave infobloxb1policyname . |
raw.infobloxdnsqclass |
dns_question.class , dns_answer.class |
Usado para derivar dns_question.class e dns_answer.class com base em uma tabela de pesquisa definida no arquivo dns_query_class_mapping.include . |
raw.infobloxdnsqtype |
dns_question.type , dns_answer.type |
Usado para derivar dns_question.type e dns_answer.type com base em uma tabela de pesquisa definida no arquivo dns_record_type.include . |
raw.infobloxdnsrcode |
network.dns.response_code |
Usado para derivar network.dns.response_code com base em uma tabela de pesquisa definida no arquivo dns_response_code.include . |
raw.infobloxpolicyid |
security_result.detection_fields.value |
Mapeado diretamente com a chave infobloxpolicyid . |
raw.msg |
metadata.description |
raw.msg é mapeado diretamente para metadata.description depois da remoção das aspas à esquerda e à direita. |
raw.name |
metadata.product_event_type |
Concatenado com raw.deviceeventclassid (separado por - ) e mapeado para metadata.product_event_type . |
rcode |
security_result.detection_fields.value , network.dns.response_code |
rcode é mapeado diretamente para security_result.detection_fields.value com a chave rcode .Se rcode for NXDOMAIN , network.dns.response_code será definido como 3 (convertido para um número inteiro sem sinal). |
rdata |
network.dns.answers.data |
Mapeado diretamente. |
rip |
target.ip , target.asset.ip |
Mapeado diretamente. |
severity |
security_result.severity |
Mapeado com base na seguinte lógica: - Se severity for INFO (sem diferenciação entre maiúsculas e minúsculas), mapeie para INFORMATIONAL .: se severity for HIGH , mapeie para HIGH . |
tclass |
security_result.detection_fields.value |
Mapeado diretamente com a chave tclass . |
threat_indicator |
security_result.detection_fields.value |
Mapeado diretamente com a chave threat_indicator . |
timestamp |
metadata.event_timestamp.seconds |
Analisado como um carimbo de data/hora ISO8601, e o valor de segundos é extraído. |
user |
principal.user.user_display_name |
Mapeado diretamente. |
user_groups |
security_result.detection_fields.value |
Mapeado diretamente com a chave user_groups . |
N/A | principal.resource.resource_subtype |
Defina como Feed se feed_name não estiver vazio. |
N/A | metadata.log_type |
Defina como BLOXONE . |
N/A | additional.fields.key |
Defina como infobloxancount , infobloxarcount , infobloxb1connectiontype , infobloxnscount , intel:destination:ip:ip2asn:finish_ip , intel:destination:ip:ip2asn:start_ip , intel:source:ip:ip2asn:finish_ip ou intel:source:ip:ip2asn:start_ip com base nos campos raw correspondentes. |
N/A | metadata.event_type |
Defina como STATUS_UPDATE se has_principal for true . Caso contrário, defina como GENERIC_EVENT . |
N/A | network.dns.questions.type |
Definido como 1 para registros A e 12 para registros PTR , convertido em número inteiro sem sinal. |
N/A | network.dns.answers.name , network.dns.answers.type , network.dns.answers.class |
Extraído de raw.msg ao analisar a string de resposta DNS. |
N/A | intermediary.hostname , intermediary.ip , intermediary.asset.ip |
Extraído de raw.msg ao analisar a string de resposta DNS. |
Observação:esta tabela inclui apenas campos mapeados para a UDM. Alguns campos do registro bruto podem ser usados internamente pelo analisador, mas não são refletidos diretamente na saída final da UDM.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.