Recolha registos do BloxOne Threat Defense
Este documento explica como carregar registos do BloxOne Threat Defense para o Google Security Operations através do Bindplane. O analisador Logstash extrai campos dos registos BLOXONE DNS
recebidos no formato SYSLOG ou JSON. Primeiro, normaliza a mensagem de registo num objeto JSON e, em seguida, mapeia os campos extraídos para o modelo de dados unificado (UDM), enriquecendo os dados com detalhes de geolocalização e DNS para análise de segurança.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps
- Windows 2016 ou posterior, ou um anfitrião Linux com
systemd
- Se estiver a ser executado através de um proxy, as portas da firewall estão abertas
- Acesso privilegiado ao Infoblox BloxOne
Obtenha o ficheiro de autenticação de carregamento do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.
Obtenha o ID de cliente do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte 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 raiz ou sudo.
Execute o seguinte comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalação adicionais
Para ver opções de instalação adicionais, consulte o guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
- Aceda ao ficheiro de configuração:
- Localize o ficheiro
config.yaml
. Normalmente, encontra-se no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o ficheiro com um editor de texto (por exemplo,
nano
,vi
ou Bloco de notas).
- Localize o ficheiro
Edite o ficheiro
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 de cliente real.Atualize
/path/to/ingestion-authentication-file.json
para o caminho onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.
Reinicie o agente do Bindplane para aplicar as alterações
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, pode usar a consola Services ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure o Syslog no Infoblox BloxOne
- Inicie sessão no portal do Infoblox.
- Aceda a Configurar > Administração > Conector de dados.
- Selecione o separador Configuração do destino.
- Clique em Criar > Syslog.
- Indique os seguintes detalhes de configuração:
- Nome: indique um nome descritivo (por exemplo, coletor do Google SecOps).
- Descrição: indique uma breve descrição.
- Estado: selecione Ativar.
- Etiquetas: clique em Adicionar e especifique o seguinte para associar uma chave ao destino:
- KEY: introduza um nome descritivo para a chave.
- VALUE: introduza o valor da chave.
- Formato: selecione CEF.
- Protocolo: selecione UDP ou TCP (consoante a configuração do agente Bindplane).
- FQDN/IP: introduza o endereço IP do agente Bindplane.
- Porta: introduza a porta do agente Bindplane (a predefinição é
514
para UDP).
- Clique em Guardar e fechar.
Tabela de mapeamento do UDM
Campo de registo | Mapeamento do UDM | Lógica |
---|---|---|
additional_list.key |
Este campo é usado num ciclo para iterar a matriz additional_list e extrair dados com base no valor do campo key . Não está diretamente mapeado para o UDM. |
|
additional_list.value |
principal.location.region_latitude , principal.location.region_longitude , target.location.region_latitude , target.location.region_longitude |
Este campo é usado em conjunto 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 através do grok e mapeie-os para principal.location.region_latitude e principal.location.region_longitude , respetivamente. : se additional_list.key for intel:destination:ip:geoIP:location , extraia os valores de latitude e longitude através do grok e mapeie-os para target.location.region_latitude e target.location.region_longitude , respetivamente. |
additional_string.key |
Semelhante a additional_list.key , este campo é usado num ciclo para iterar a matriz additional_string e extrair dados com base no valor key . Não está diretamente mapeado para o 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 o converter num 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 o converter em letras 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 tecla dhcp_fingerprint . |
dns_view |
security_result.detection_fields.value |
Mapeado diretamente com a tecla dns_view . |
endpoint_groups |
security_result.detection_fields.value |
Mapeado diretamente com a tecla endpoint_groups . |
event_time |
metadata.event_timestamp.seconds |
Analisado como uma indicação de tempo ISO8601 e o valor dos segundos é extraído. Usado apenas 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 tecla feed_type . |
mac_address |
principal.mac |
Mapeado diretamente após a conversão para minúsculas. |
network |
principal.hostname , principal.asset.hostname |
Mapeado diretamente, mas apenas 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 está diretamente mapeado 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 tecla 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 número inteiro não assinado).- Se qtype for PTR , mapeie para 12 (convertido em número inteiro não assinado). |
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 está diretamente mapeado 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 .- If raw.deviceseverity is in [4 , 5 , 6 ], map to 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 tecla 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 tecla infobloxb1policyname . |
raw.infobloxdnsqclass |
dns_question.class , dns_answer.class |
Usado para obter dns_question.class e dns_answer.class com base numa tabela de pesquisa definida no ficheiro dns_query_class_mapping.include . |
raw.infobloxdnsqtype |
dns_question.type , dns_answer.type |
Usado para obter dns_question.type e dns_answer.type com base numa tabela de pesquisa definida no ficheiro dns_record_type.include . |
raw.infobloxdnsrcode |
network.dns.response_code |
Usado para derivar network.dns.response_code com base numa tabela de pesquisa definida no ficheiro dns_response_code.include . |
raw.infobloxpolicyid |
security_result.detection_fields.value |
Mapeado diretamente com a tecla infobloxpolicyid . |
raw.msg |
metadata.description |
raw.msg é mapeado diretamente para metadata.description após a remoção das aspas iniciais e finais. |
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 é definido como 3 (convertido em número inteiro não assinado). |
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 distinçã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 tecla tclass . |
threat_indicator |
security_result.detection_fields.value |
Mapeado diretamente com a tecla threat_indicator . |
timestamp |
metadata.event_timestamp.seconds |
Analisado como uma indicação de tempo ISO8601 e o valor dos segundos é extraído. |
user |
principal.user.user_display_name |
Mapeado diretamente. |
user_groups |
security_result.detection_fields.value |
Mapeado diretamente com a tecla user_groups . |
N/A | principal.resource.resource_subtype |
Definido como Feed se feed_name não estiver vazio. |
N/A | metadata.log_type |
Definido como BLOXONE . |
N/A | additional.fields.key |
Definido 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 |
Definido como STATUS_UPDATE se has_principal for true . Caso contrário, é definido como GENERIC_EVENT . |
N/A | network.dns.questions.type |
Definido como 1 para registos A e 12 para registos PTR , convertidos em número inteiro não assinado. |
N/A | network.dns.answers.name , network.dns.answers.type , network.dns.answers.class |
Extraído de raw.msg através da análise da string de resposta DNS. |
N/A | intermediary.hostname , intermediary.ip , intermediary.asset.ip |
Extraído de raw.msg através da análise da string de resposta DNS. |
Nota: esta tabela só inclui campos mapeados para o UDM. Alguns campos do registo não processado podem ser usados internamente pelo analisador, mas não são refletidos diretamente no resultado final do UDM.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.