Coletar registros do Darktrace

Versão do analisador:19.0

Compatível com:

Este documento explica como ingerir registros do Darktrace no Google Security Operations usando o agente do Bindplane.

A Darktrace é uma plataforma de cibersegurança com tecnologia de IA que detecta ameaças e anomalias em tempo real. O analisador processa registros do Darktrace formatados em CEF e JSON, extraindo campos e mapeando-os para o modelo de dados unificado (UDM).

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Windows Server 2016 ou mais recente ou host Linux com systemd
  • Conectividade de rede entre o agente do Bindplane e o appliance Darktrace
  • Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.
  • Acesso privilegiado à UI da Web do Darktrace

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. Baixe o arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o agente do 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

Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.

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
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sc query observiq-otel-collector
    

    O serviço vai aparecer como EM EXECUÇÃO.

Instalação do Linux

  1. Abra um terminal com privilégios de root 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
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sudo systemctl status observiq-otel-collector
    

    O serviço vai aparecer como ativo (em execução).

Outros recursos de instalação

Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.

Configurar o agente do Bindplane para ingerir syslog e enviar ao Google SecOps

Localizar o arquivo de configuração

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Editar o arquivo de configuração

  • Substitua todo o conteúdo de config.yaml pela seguinte configuração:

    receivers:
        tcplog:
            listen_address: "0.0.0.0:10282"
    
    exporters:
        chronicle/darktrace:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: DARKTRACE
            raw_log_field: body
    
    service:
        pipelines:
            logs/darktrace_to_chronicle:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/darktrace
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição:

  • Configuração do receptor:

    • listen_address: endereço IP e porta a serem detectados:
      • 0.0.0.0 para detectar em todas as interfaces (recomendado)
      • A porta 10282 é a porta syslog CEF padrão do Darktrace. Ajuste conforme necessário.
  • Configuração do exportador:

    • creds_file_path: caminho completo para o arquivo de autenticação de ingestão:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: ID do cliente copiado do console do Google SecOps
    • endpoint: URL do endpoint regional:
      • EUA: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Ásia: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Consulte a lista completa em Endpoints regionais.

Salve o arquivo de configuração.

  • Depois de editar, salve o arquivo:
    • Linux: pressione Ctrl+O, Enter e Ctrl+X.
    • Windows: clique em Arquivo > Salvar.

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 observiq-otel-collector
    
    1. Verifique se o serviço está em execução:

      sudo systemctl status observiq-otel-collector
      
    2. Verifique se há erros nos registros:

      sudo journalctl -u observiq-otel-collector -f
      
  • Para reiniciar o agente do Bindplane no Windows, escolha uma das seguintes opções:

    • Prompt de comando ou PowerShell como administrador:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console de serviços:

      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o Coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.
      4. Verifique se o serviço está em execução:

        sc query observiq-otel-collector
        
      5. Verifique se há erros nos registros:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurar o syslog no Darktrace

  1. Faça login na UI da Web do Darktrace.
  2. Acesse Administrador > Configuração do sistema.
  3. Clique em Verificar configurações de alerta.
  4. Informe os seguintes detalhes de configuração:
    • Alertas do Syslog CEF: selecione Verdadeiro.
    • Servidor Syslog CEF: insira o endereço IP do Bindplane.
    • Porta do servidor Syslog do CEF: insira o número da porta do Bindplane (por exemplo, 10282).
    • Alerta TCP do Syslog CEF: selecione True.
  5. Clique em Salvar.

Registros de amostra do Darktrace compatíveis

  • SYSLOG + KV (CEF)

    {
    "acknowledged": false,
    "commentCount": 0,
    "pbid": 900000001,
    "time": 1604055367000,
    "creationTime": 1604055367000,
    "model": {
        "name": "Compromise::Agent Beacon to New Endpoint",
        "uuid": "dfd6f10b-b91c-4244-9fd5-7c35caf21b33",
        "description": "A device is initiating multiple connections to a new external endpoint...",
        "priority": 2,
        "category": "Informational",
        "mitre": {
        "tactics": [
            "command-and-control"
        ],
        "techniques": [
            "T1071.001"
        ]
        }
    },
    "triggeredComponents": [
        {
        "time": 1677679818000,
        "ip": " ",
        "port": 443,
        "metric": {
            "name": "externalconnections"
        },
        "triggeredFilters": [
            {
            "filterType": "Connection hostname",
            "trigger": {
                "value": "beacon.external.io"
            }
            }
        ]
        }
    ],
    "score": 0.85,
    "device": {
        "did": 90001,
        "macaddress": " ",
        "ip": " ",
        "hostname": "user-laptop-1"
    }
    }
    
  • SYSLOG + JSON

    {
    "dpi_engine": "dt-sensor-101",
    "proto": "tcp",
    "source_ip": " ",
    "source_port": 51000,
    "dest_ip": " ",
    "dest_port": 389,
    "src": " ",
    "dst": " ",
    "details": "AP request: srealm is [TESTDOMAIN.LOCAL], service is [LDAP/DC99.testdomain.local/testdomain.local], ST cipher is [aes256-cts-hmac-sha1-96]",
    "epochdate": 1690471502.2252,
    "@host": "log-collector-host",
    "uid": "ABCDEFGHIJ1234567890",
    "note": "KERBEROS::App",
    "@type": "notice"
    }
    

Tabela de mapeamento de UDM

Campo de registro Mapeamento de UDM Lógica
darktraceUrl security_result.url_back_to_product O valor é extraído do campo darktraceUrl.
darktrace_host observer.hostname O valor é extraído do campo darktrace_host se não for um endereço IP.
darktrace_ip observer.ip O valor é extraído do campo darktrace_ip.
darktrace_user observer.user.userid O valor é extraído do campo darktrace_user.
descrição security_result.summary, metadata.description O valor é extraído do campo description.
device.customFields.DT-AUTO.macaddress principal.mac O valor é extraído do campo device.customFields.DT-AUTO.macaddress.
device.did principal.asset.asset_id O valor é extraído do campo device.did, convertido em uma string e prefixado com Device ID:.
device.firstSeen principal.asset.first_seen_time O valor é extraído do campo device.firstSeen, convertido em uma string e analisado como um carimbo de data/hora UNIX em milissegundos.
device.hostname principal.hostname, principal.asset.hostname O valor é extraído do campo device.hostname.
device.ip principal.ip, principal.asset.ip O valor é extraído do campo device.ip se corresponder ao formato de endereço IP.
device.ips.0.subnet additional.fields.subnet O valor é extraído do campo device.ips.0.subnet e tem o prefixo subnet.
device.ips.ip principal.ip, principal.asset.ip O valor é extraído do campo device.ips.ip para cada endereço IP na lista.
device.lastSeen principal.asset.last_discover_time O valor é extraído do campo device.lastSeen, convertido em uma string e analisado como um carimbo de data/hora UNIX em milissegundos.
device.macaddress principal.mac O valor é extraído do campo device.macaddress.
device.objecttype principal.asset.type Se o valor for device, o campo UDM será definido como WORKSTATION.
device.sid principal.resource.attribute.labels.sid O valor é extraído do campo device.sid e convertido em uma string.
device.typelabel principal.resource.attribute.labels.typelabel O valor é extraído do campo device.typelabel.
device.typename principal.resource.attribute.labels.typename O valor é extraído do campo device.typename.
dst target.ip, target.asset.ip O valor é extraído do campo dst.
dpt target.port O valor é extraído do campo dpt e convertido em um número inteiro.
dvc principal.ip, principal.asset.ip Se o valor de dvc for um endereço IP, ele será adicionado ao campo da UDM.
dvchost principal.hostname, principal.asset.hostname O valor é extraído do campo dvchost.
endpoint target.url O valor é extraído do campo endpoint.
event_time metadata.event_timestamp O valor é extraído do campo event_time e analisado como um carimbo de data/hora ISO8601.
externalId metadata.product_log_id O valor é extraído do campo externalId.
incidentEventUrl principal.url O valor é extraído do campo incidentEventUrl.
ip principal.ip, principal.asset.ip O valor é extraído do campo ip se corresponder ao formato de endereço IP.
issue_msg security_result.summary O valor é extraído do campo issue_msg.
mensagem security_result.description O valor é extraído do campo message.
método network.http.method O valor é extraído do campo method.
model.description metadata.description O valor é extraído do campo model.description.
model.name metadata.product_event_type O valor é extraído do campo model.name.
model.now.category security_result.severity Se o valor for critical, o campo UDM será definido como CRITICAL. Se o valor for Informational, o campo UDM será definido como INFORMATIONAL. Se o valor for Suspicious, o campo UDM será definido como HIGH e a categoria será definida como NETWORK_SUSPICIOUS.
model.now.description metadata.description O valor é extraído do campo model.now.description.
model.now.message security_result.description O valor é extraído do campo model.now.message.
model.now.name metadata.product_event_type O valor é extraído do campo model.now.name.
model.now.pid principal.process.pid O valor é extraído do campo model.now.pid e convertido em uma string.
model.now.uuid principal.user.userid O valor é extraído do campo model.now.uuid, e o tipo de evento é definido como USER_UNCATEGORIZED.
model.pid principal.process.pid O valor é extraído do campo model.pid e convertido em uma string.
model.then.description principal.resource.attribute.labels.Model Then Description O valor é extraído do campo model.then.description.
model.then.name principal.resource.attribute.labels.Model Then Name O valor é extraído do campo model.then.name.
model.then.pid principal.resource.attribute.labels.Model Then Pid O valor é extraído do campo model.then.pid e convertido em uma string.
model.then.uuid principal.resource.attribute.labels.Model Then UUID O valor é extraído do campo model.then.uuid.
model.uuid principal.user.userid O valor é extraído do campo model.uuid, e o tipo de evento é definido como USER_UNCATEGORIZED.
relatedBreaches.0.modelName security_result.description O valor é extraído do campo relatedBreaches.0.modelName.
score security_result.priority, security_result.priority_details Se o valor estiver entre 0,8 e 1, a prioridade será definida como HIGH_PRIORITY. Se o valor estiver entre 0,5 e 0,79, a prioridade será definida como MEDIUM_PRIORITY. Se o valor estiver entre 0 e 0,49, a prioridade será definida como LOW_PRIORITY. Os detalhes de prioridade são definidos como Score :, seguidos pelo valor de score convertido em uma string.
gravidade, security_result.severity Se o valor for 2, o campo UDM será definido como MEDIUM. Se o valor for maior que 2, o campo UDM será definido como HIGH.
shost principal.hostname, principal.asset.hostname O valor é extraído do campo shost.
smac principal.mac O valor é extraído do campo smac.
src principal.ip, principal.asset.ip O valor é extraído do campo src.
status network.http.response_code O valor é extraído do campo status e convertido em uma string.
resumo metadata.description O valor é extraído do campo summary.
tempo O valor é extraído do campo time, convertido em uma string e analisado como um carimbo de data/hora UNIX em milissegundos.
timestamp O valor é extraído do campo timestamp e analisado como um carimbo de data/hora ISO8601 ou um carimbo de data/hora UNIX em milissegundos.
título security_result.summary O valor é extraído do campo title.
triggeredComponents.ip intermediary.ip O valor é extraído do campo triggeredComponents.ip se corresponder ao formato de endereço IP.
triggeredComponents.port intermediary.port O valor é extraído do campo triggeredComponents.port e convertido em um número inteiro.
nome de usuário principal.user.userid O valor é extraído do campo username.
metadata.vendor_name Defina como DARKTRACE.
metadata.product_name Defina como DCIP.
metadata.log_type Defina como DARKTRACE.
network.ip_protocol Defina como TCP se issue_msg não contiver UDP. Caso contrário, defina como UDP.
security_result.action Defina como BLOCK se status for 401. Caso contrário, defina como ALLOW.
security_result.severity Defina como INFORMATIONAL.
network.application_protocol Defina como HTTP se method não estiver vazio.
metadata.event_type Defina como NETWORK_HTTP se method não estiver vazio. Defina como USER_LOGIN se description contiver logged into \\\\S+ over ssh. Defina como NETWORK_CONNECTION se target_ip não estiver vazio. Caso contrário, defina como STATUS_UPDATE.
extensions.auth.type Defina como MACHINE se description contiver logged into \\\\S+ over ssh.
security_result.category Defina como DATA_EXFILTRATION se issue_msg contiver Exfiltration. Defina como NETWORK_MALICIOUS se issue_msg contiver Compromise. Caso contrário, defina como NETWORK_SUSPICIOUS.
percentScore event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
device.credentials event.idm.read_only_udm.target.user.userid Mapeado do registro de mudanças
url event.idm.read_only_udm.principal.url Mapeado do registro de mudanças
username event.idm.read_only_udm.principal.user.userid Mapeado do registro de mudanças
iris-event-type event.idm.read_only_udm.metadata.product_event_type Mapeado do registro de mudanças
inhibitor event.idm.read_only_udm.target.ip Mapeado do registro de mudanças
inhibitor event.idm.read_only_udm.target.asset.ip Mapeado do registro de mudanças
inhibitor event.idm.read_only_udm.target.port Mapeado do registro de mudanças
device.os event.idm.read_only_udm.principal.platform Mapeado do registro de mudanças
device.typename event.idm.read_only_udm.principal.asset.type Mapeado do registro de mudanças
device.ossource event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
model.tags event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
codeid event.idm.read_only_udm.security_result.rule_id Mapeado do registro de mudanças
inhibitor event.idm.read_only_udm.security_result.description Mapeado do registro de mudanças
host_ip event.idm.read_only_udm.intermediary.ip Mapeado do registro de mudanças
technique_data event.idm.read_only_udm.security_result.attack_details.techniques Mapeado do registro de mudanças
tactics_data event.idm.read_only_udm.security_result.attack_details.tactics Mapeado do registro de mudanças
model.created.userid principal.user.userid Mapeado do registro de mudanças
model.edited.userid additional.fields Mapeado do registro de mudanças
direction network.direction Mapeado do registro de mudanças
filterType" under "triggeredFilters additional.fields Mapeado do registro de mudanças
trigger.value" under "triggeredFilters additional.fields Mapeado do registro de mudanças
from principal.user.email_addresses Mapeado do registro de mudanças
subject metadata.description Mapeado do registro de mudanças
anomaly_score", "tags", "link_hosts", and "message_id additional.fields Mapeado do registro de mudanças
recipients observer.user.email_addresses Mapeado do registro de mudanças
attachment_sha1s" and "attachment_sha256s security_result.detection_fields Mapeado do registro de mudanças
triggeredFilter.trigger.value target.ip Mapeado do registro de mudanças
from network.email.from Mapeado do registro de mudanças
subject network.email.subject Mapeado do registro de mudanças
attachment_sha1s", "attachment_sha256s", "recipients", "link_hosts", "tags", "actions", "anomaly_score", "message_id security_result.detection_fields Mapeado do registro de mudanças
model.name principal.user.user_display_name Mapeado do registro de mudanças
breachUrl security_result.url_back_to_product Mapeado do registro de mudanças
device.typelabel", "device.sid", "device.typename principal.resource.attribute.labels Mapeado do registro de mudanças
device.ips.0.subnet additional_fields Mapeado do registro de mudanças
device.device.lastSeen principal.asset.last_seen_time Mapeado do registro de mudanças
mitreTechniques security_result.attack_details.techniques Mapeado do registro de mudanças
details sec_result.about.resource.attribute.labels Mapeado do registro de mudanças
principal_port_no principal.port Mapeado do registro de mudanças
location principal.location.country_or_region Mapeado do registro de mudanças
target_host target.hostname Mapeado do registro de mudanças
source_ip principal.ip Mapeado do registro de mudanças
source_port principal.port Mapeado do registro de mudanças
dest_ip target.ip Mapeado do registro de mudanças
dest_port target.port Mapeado do registro de mudanças
@host principal.hostname Mapeado do registro de mudanças
note principal.application Mapeado do registro de mudanças
@type sec_result.about.resource.attribute.labels Mapeado do registro de mudanças
opcode sec_result.about.resource.attribute.labels Mapeado do registro de mudanças
trans_id sec_result.about.resource.attribute.labels Mapeado do registro de mudanças
query_class sec_result.about.resource.attribute.labels Mapeado do registro de mudanças
deviceMacAddress principal.mac Mapeado do registro de mudanças

Registro de alterações

Ver o registro de alterações deste analisador

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.