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 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 dispositivo Darktrace
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
  • Acesso privilegiado à interface da Web do Darktrace

Receber credenciais do Google SecOps para o agente do BindPlane

Para autenticar o agente do Bindplane no Google SecOps, escolha um dos seguintes métodos:

  • Novas implantações: use a API Chronicle (opção 1).
  • Implantações legadas: continue usando o arquivo de autenticação de ingestão (opção 2) até que a API Ingestion seja desativada em 20 de julho de 2027.
  1. Faça login no console doGoogle Cloud e selecione o projeto do Google Cloud vinculado à sua instância do Google SecOps.
  2. Acesse IAM e administrador > Contas de serviço.
  3. Clique em Criar conta de serviço.
  4. Informe os seguintes detalhes de configuração:
    • Nome da conta de serviço: insira um nome para a conta (por exemplo, bindplane-ingest).
    • Descrição da conta de serviço: insira uma descrição (por exemplo, Bindplane agent log ingestion).
  5. Clique em Criar e continuar.
  6. Na seção Conceder a essa conta de serviço acesso ao projeto, clique em Selecionar um papel e escolha Editor do Chronicle.
  7. Clique em Continuar e depois em Concluído.
  8. Clique na conta de serviço que você criou e acesse a guia Chaves.
  9. Clique em Adicionar chave > Criar nova chave.
  10. Selecione JSON e clique em Criar. O download do arquivo de chave é feito no seu computador.
  11. Salve o arquivo de chave como ingestion-auth.json no diretório do coletor do BindPlane (/opt/observiq-otel-collector/ingestion-auth.json no Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json no Windows) ou atualize creds_file_path em config.yaml para corresponder ao caminho em que você o salvou.
  12. Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para configurar o exportador.

Opção 2: fazer o download do arquivo de autenticação de ingestão (legado)

  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 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 de cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

Instale o agente do Bindplane no seu 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 precisa aparecer como RUNNING.

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
    
  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 o syslog e enviar ao Google SecOps

Localizar o arquivo de configuração

  • Linux:

    sudo nano /opt/observiq-otel-collector/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:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.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 ouvir 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 chave JSON da conta de serviço (opção 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: ID de cliente copiado do console do Google SecOps
    • location: substitua <LOCATION> pela região da sua instância do Google SecOps (por exemplo, us, europe ou asia-southeast1). O exportador prefixa chronicle.googleapis.com com esse valor. Consulte Endpoints regionais para ver a lista completa.
    • project: substitua <PROJECT_NUMBER> pelo número do projeto em IAM e administrador > Configurações.
    • endpoint: mantenha definido como chronicle.googleapis.com.

Exportador da API de ingestão legada

  • Se você usar o arquivo de autenticação de ingestão da Opção 2, substitua o bloco exporters pelo seguinte. Defina creds_file_path como o caminho para o arquivo de autenticação de ingestão e, se a instância estiver fora dos EUA, substitua malachiteingestion-pa.googleapis.com pelo endpoint regional (por exemplo, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/darktrace:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: DARKTRACE
        raw_log_field: body
    

Salvar 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 do 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 do 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 do UDM será definido como CRITICAL. Se o valor for Informational, o campo do UDM será definido como INFORMATIONAL. Se o valor for Suspicious, o campo do UDM será definido como HIGH e a categoria 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 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 do 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 alterações
device.credentials event.idm.read_only_udm.target.user.userid Mapeado do registro de alterações
url event.idm.read_only_udm.principal.url Mapeado do registro de alterações
username event.idm.read_only_udm.principal.user.userid Mapeado do registro de alterações
iris-event-type event.idm.read_only_udm.metadata.product_event_type Mapeado do registro de alterações
inhibitor event.idm.read_only_udm.target.ip Mapeado do registro de alterações
inhibitor event.idm.read_only_udm.target.asset.ip Mapeado do registro de alterações
inhibitor event.idm.read_only_udm.target.port Mapeado do registro de alterações
device.os event.idm.read_only_udm.principal.platform Mapeado do registro de alterações
device.typename event.idm.read_only_udm.principal.asset.type Mapeado do registro de alterações
device.ossource event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
model.tags event.idm.read_only_udm.additional.fields Mapeado do registro de alterações
codeid event.idm.read_only_udm.security_result.rule_id Mapeado do registro de alterações
inhibitor event.idm.read_only_udm.security_result.description Mapeado do registro de alterações
host_ip event.idm.read_only_udm.intermediary.ip Mapeado do registro de alterações
technique_data event.idm.read_only_udm.security_result.attack_details.techniques Mapeado do registro de alterações
tactics_data event.idm.read_only_udm.security_result.attack_details.tactics Mapeado do registro de alterações
model.created.userid principal.user.userid Mapeado do registro de alterações
model.edited.userid additional.fields Mapeado do registro de alterações
direction network.direction Mapeado do registro de alterações
filterType" under "triggeredFilters additional.fields Mapeado do registro de alterações
trigger.value" under "triggeredFilters additional.fields Mapeado do registro de alterações
from principal.user.email_addresses Mapeado do registro de alterações
subject metadata.description Mapeado do registro de alterações
anomaly_score", "tags", "link_hosts", and "message_id additional.fields Mapeado do registro de alterações
recipients observer.user.email_addresses Mapeado do registro de alterações
attachment_sha1s" and "attachment_sha256s security_result.detection_fields Mapeado do registro de alterações
triggeredFilter.trigger.value target.ip Mapeado do registro de alterações
from network.email.from Mapeado do registro de alterações
subject network.email.subject Mapeado do registro de alterações
attachment_sha1s", "attachment_sha256s", "recipients", "link_hosts", "tags", "actions", "anomaly_score", "message_id security_result.detection_fields Mapeado do registro de alterações
model.name principal.user.user_display_name Mapeado do registro de alterações
breachUrl security_result.url_back_to_product Mapeado do registro de alterações
device.typelabel", "device.sid", "device.typename principal.resource.attribute.labels Mapeado do registro de alterações
device.ips.0.subnet additional_fields Mapeado do registro de alterações
device.device.lastSeen principal.asset.last_seen_time Mapeado do registro de alterações
mitreTechniques security_result.attack_details.techniques Mapeado do registro de alterações
details sec_result.about.resource.attribute.labels Mapeado do registro de alterações
principal_port_no principal.port Mapeado do registro de alterações
location principal.location.country_or_region Mapeado do registro de alterações
target_host target.hostname Mapeado do registro de alterações
source_ip principal.ip Mapeado do registro de alterações
source_port principal.port Mapeado do registro de alterações
dest_ip target.ip Mapeado do registro de alterações
dest_port target.port Mapeado do registro de alterações
@host principal.hostname Mapeado do registro de alterações
note principal.application Mapeado do registro de alterações
@type sec_result.about.resource.attribute.labels Mapeado do registro de alterações
opcode sec_result.about.resource.attribute.labels Mapeado do registro de alterações
trans_id sec_result.about.resource.attribute.labels Mapeado do registro de alterações
query_class sec_result.about.resource.attribute.labels Mapeado do registro de alterações
deviceMacAddress principal.mac Mapeado do registro de alterações

Registro de alterações

Confira o registro de alterações deste analisador

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