Coletar registros da BloxOne Threat Defense
Este documento explica como transferir os registros da BloxOne Threat Defense para as operações de segurança do Google 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, em seguida, mapeia os campos extraídos para o modelo de dados unificado (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 em execução 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.
- Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.
Receber o ID de 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 raiz 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 processar o Syslog e enviar ao Google SecOps
- Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está 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 Notepad).
- 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 real do cliente.Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber o 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 Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o Syslog no Infoblox BloxOne
- Faça login no Portal Infoblox.
- Acesse Configurar > Administração > Conector de dados.
- Selecione a guia Configuração do destino.
- Clique em Criar > Syslog.
- Informe os seguintes detalhes de configuração:
- Nome: informe 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 de UDM | Lógica |
---|---|---|
additional_list.key |
Esse campo é usado em um loop para iterar a matriz additional_list e extrair dados com base no valor do campo key . Ele não é mapeado diretamente para o UDM. |
|
additional_list.value |
principal.location.region_latitude , principal.location.region_longitude , target.location.region_latitude , target.location.region_longitude |
Esse 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 usando o grok e os mapeie 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 o grok e mapeie-os para target.location.region_latitude e target.location.region_longitude , respectivamente. |
additional_string.key |
Assim como 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 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 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 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 letras maiúsculas. |
raw.deviceeventclassid |
metadata.product_event_type |
Concatenado com raw.name (separados 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 somente 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 após a remoção das aspas iniciais e finais. |
raw.name |
metadata.product_event_type |
Concatenado com raw.deviceeventclassid (separados 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 em 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 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 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 |
Defina como 1 para registros A e 12 para registros PTR , convertidos em números inteiros não assinados. |
N/A | network.dns.answers.name , network.dns.answers.type , network.dns.answers.class |
Extraídos de raw.msg analisando a string de resposta do DNS. |
N/A | intermediary.hostname , intermediary.ip , intermediary.asset.ip |
Extraídos de raw.msg analisando a string de resposta do DNS. |
Observação:esta tabela inclui apenas campos mapeados para o UDM. Alguns campos do registro bruto podem ser usados internamente pelo analisador, mas não são refletidos diretamente na saída final do UDM.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.