Coletar registros da BloxOne Threat Defense

Compatível com:

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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. 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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

Instalação do Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. 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

  1. 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).
  2. 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
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID real do cliente.

  5. 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

  1. Faça login no Portal Infoblox.
  2. Acesse Configurar > Administração > Conector de dados.
  3. Selecione a guia Configuração do destino.
  4. Clique em Criar > Syslog.
  5. 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.
  6. 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.