Coletar registros de inteligência contra ameaças do STIX

Compatível com:

Neste documento, explicamos como ingerir registros de inteligência contra ameaças STIX no Google Security Operations usando o agente do Bindplane.

O STIX (Structured Threat Information Expression) é uma linguagem e um formato padronizados para compartilhar indicadores de comprometimento (IOCs, na sigla em inglês) e dados de inteligência contra ameaças entre organizações. Os dados STIX geralmente são recebidos como arquivos JSON ou arquivos XML de servidores TAXII ou plataformas de inteligência contra ameaças. O agente do Bindplane coleta arquivos de dados STIX diretamente do sistema de arquivos local.

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
  • Se estiver em execução atrás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
  • Um cliente TAXII ou uma plataforma de inteligência contra ameaças que salva arquivos formatados em STIX (JSON ou XML) em um diretório local

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 descontinuada 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 uma função 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 arquivo de chave é baixado para o 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 a configuração do 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. 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 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 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 precisa aparecer como active (running).

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

Localize 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:
      filelog:
        include:
          - /var/log/stix/*.json
        start_at: beginning
    
    exporters:
      chronicle/stix:
        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: STIX
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/stix_to_chronicle:
          receivers:
            - filelog
          exporters:
            - chronicle/stix
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição:

  • Configuração do receptor:

    • filelog: o tipo de receptor para coletar arquivos de registro do disco.
    • include: lista de caminhos de arquivo a serem monitorados. Defina o diretório em que os arquivos STIX são salvos:
      • Linux: /var/log/stix/*.json
      • Windows: C:\Logs\stix\*.json
    • start_at: defina como beginning para ler os registros atuais ou end para ler apenas as novas entradas.
  • Configuração do exportador:

    • stix: nome descritivo 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 da etapa anterior.
    • 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.
    • STIX: tipo de registro exatamente como aparece no Chronicle
    • ingestion_labels: rótulos opcionais no formato YAML (por exemplo, env: production)
  • Configuração do pipeline:

    • stix_to_chronicle: nome descritivo do pipeline.

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/stix:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: STIX
        raw_log_field: body
        ingestion_labels:
          env: production
    

Salve o arquivo de configuração.

  • Depois de editar, salve o arquivo:
    • Linux: pressione Ctrl+O, depois Enter e, em seguida, 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 em 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 a coleta de arquivos de dados STIX

O STIX é um formato de dados, não um produto. Os dados de inteligência contra ameaças STIX normalmente são recebidos como arquivos JSON ou XML de clientes TAXII, plataformas de inteligência contra ameaças ou downloads manuais. É preciso garantir que esses arquivos sejam colocados em um diretório monitorado pelo agente do Bindplane.

Linux

  1. Crie um diretório para armazenar arquivos de dados STIX:

    sudo mkdir -p /var/log/stix
    
  2. Configure seu cliente TAXII ou plataforma de inteligência contra ameaças para salvar arquivos STIX em /var/log/stix/.

  3. Verifique se a conta de serviço do agente do Bindplane tem acesso de leitura ao diretório:

    sudo chmod 755 /var/log/stix
    

Windows

  1. Crie um diretório para armazenar arquivos de dados STIX:

    mkdir C:\Logs\stix
    
  2. Configure seu cliente TAXII ou plataforma de inteligência contra ameaças para salvar arquivos STIX em `C:\Logs\stix`.

  3. Atualize o caminho include do agente do Bindplane em config.yaml para que ele corresponda a:

    include:
      - C:\Logs\stix\*.json
    

Tabela de mapeamento de UDM

Campo de registro Mapeamento de UDM Lógica
entity.administrative_domain Defina como "TEST".
assetid_value entity.asset.asset_id Valor de assetid_value, se não estiver vazio
condition_label, related_indicators_relationship_label, related_indicators_scope, indicator_types_label, valid_start_time_label, controlled_structure_label, marking_structure_label entity.asset.attribute.labels Unido de vários rótulos
nome entity.file.full_path Valor copiado diretamente
val, hash.simple_hash_value, MD5_val, hash_value entity.file.md5 Valor de val se corresponder à regex md5, caso contrário, hash.simple_hash_value se o tipo for MD5, caso contrário, MD5_val, caso contrário, hash_value
valor entity.file.names Valor copiado diretamente
val, hash.simple_hash_value, sha1_val, hash_value entity.file.sha1 Valor de val se corresponder à regex sha1, caso contrário, hash.simple_hash_value se o tipo for SHA1, caso contrário, sha1_val, caso contrário, hash_value
val, hash.simple_hash_value, sha256val, sha_value, sha_value entity.file.sha256 Valor de val se corresponder à regex sha256, caso contrário, hash.simple_hash_value se o tipo for SHA256, caso contrário, sha256val, caso contrário, sha_value
observable.object.properties.value, dom, value, host, name, external_references.0.source_name entity.hostname Valor de observable.object.properties.value se o tipo for FQDN, dom de grok, valor se o tipo for domain-name, host, name se main_observable_type for domain/hostname, external_references.0.source_name
ip_val, ipval, ip, source_ip, value, src_ip entity.ip Valor de ip_val se o grok corresponder, caso contrário, ipval se a categoria for ipv4-addr, caso contrário, ip do grok de padrão, caso contrário, source_ip, caso contrário, valor se o tipo for ipv4, caso contrário, src_ip do grok
source_port, src_port entity.port Valor de source_port ou src_port
indicator_label, extension_value1, extension_value2, extension_value3, extension_value4, revoked_value, spec_version_value, object_marking_ref_value, label_value entity.resource.attribute.labels Mesclado de vários rótulos
observable.object.properties.value, url_val, value, observable_properties_value entity.url Valor de observable.object.properties.value se o tipo for URL, caso contrário, url_val de grok, caso contrário, valor se o tipo for URL, caso contrário, observable_properties_value se não estiver vazio
email_val, mail, value entity.user.email_addresses Valor de email_val se o grok corresponder, caso contrário, e-mail do grok, caso contrário, valor se o tipo for email-addr
timestamp metadata.collected_timestamp Convertido usando a correspondência de data ISO8601/RFC 3339
title, description metadata.description Valor do título ou da descrição
Tipo de entidade metadata.entity_type Valor copiado diretamente
timestamp, valid_until metadata.interval.end_time Convertido de timestamp ou valid_until usando a correspondência de data ISO8601/RFC 3339
timestamp, valid_from, created metadata.interval.start_time Convertido de timestamp, valid_from, created ou timestamp usando a correspondência de data ISO8601/RFC 3339
ID metadata.product_entity_id Valor copiado diretamente
versão metadata.product_version Valor copiado diretamente
threat_detail metadata.threat Mesclado de "threat_detail"
threat_detail_category threat.category Valor copiado diretamente
confidence_value, confidence, x_stix_confidence, x_ctix_confidence_score threat.confidence_details Valor de "confidence_value", caso contrário, "confidence" se "no_value", caso contrário, "x_stix_confidence", caso contrário, "x_ctix_confidence_score"
value, confidence, x_ctix_confidence_score threat.confidence_score Valor de "value" se o nome for "Confidence Score", caso contrário, "confidence", "x_ctix_confidence_score", convertido para float
property_label, sha512_value, observable_id, observable_object_id, keyword_label threat.detection_fields Mesclado de vários rótulos
descrição threat.description Valor copiado diretamente
value, extensions.extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba.score threat.risk_score Valor de "value" se o nome for "Risk", caso contrário, pontuação de extensões, convertida em float
metadata.product_name Defina como "STIX".
metadata.vendor_name Defina como "STIX".
dom event.idm.entity.entity.hostname Mapeado do registro de alterações
name event.idm.entity.entity.url Mapeado do registro de alterações
valid_from event.idm.entity.entity.resource.attribute.labels Mapeado do registro de alterações
valid_until event.idm.entity.entity.resource.attribute.labels Mapeado do registro de alterações
pattern_version event.idm.entity.entity.resource.attribute.labels Mapeado do registro de alterações
observable.object.properties.value.condition event.idm.entity.entity.asset.attribute.labels Mapeado do registro de alterações
handling.controlled_structure event.idm.entity.entity.asset.attribute.labels Mapeado do registro de alterações
handling.marking_structures.color event.idm.entity.entity.asset.attribute.labels Mapeado do registro de alterações
related_indicators.related_indicators event.idm.entity.entity.asset.attribute.labels Mapeado do registro de alterações
related_indicators.scope event.idm.entity.entity.asset.attribute.labels Mapeado do registro de alterações
indicator_types event.idm.entity.entity.asset.attribute.labels Mapeado do registro de alterações
valid_time_positions event.idm.entity.entity.asset.attribute.labels Mapeado do registro de alterações
observable.object.properties.custom_properties event.idm.entity.metadata.threat.detection_fields Mapeado do registro de alterações
observable.object.properties.value event.ioc.domain_and_ports.domain Mapeado do registro de alterações
mitre-extension-definition.extension_type entity.resource.attribute.labels.value Mapeado do registro de alterações
sco-extension-definition.extension_type entity.resource.attribute.labels.value Mapeado do registro de alterações
x_ctix_confidence_score threat_detail.confidence_score Mapeado do registro de alterações
modified timestamp Mapeado do registro de alterações
valid_from entity_event.metadata.interval.start_time Mapeado do registro de alterações
confidence threat_detail.confidence_score Mapeado do registro de alterações
name entity.entity.file.full_path Mapeado do registro de alterações
description threat_detail.description Mapeado do registro de alterações
external_references.0.source_name entity_event.entity.hostname Mapeado do registro de alterações
entity_type IP_ADDRESS Mapeado do registro de alterações
entity_type USER Mapeado do registro de alterações
entity_type FILE Mapeado do registro de alterações
entity_type DOMAIN_NAME Mapeado do registro de alterações

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.