Coletar registros do Microsoft Defender para IoT (CyberX)

Compatível com:

Este documento explica como ingerir registros do Microsoft Defender para IoT (CyberX) no Google Security Operations usando o Bindplane.

O Microsoft Defender para IoT (antigo CyberX) é uma plataforma de segurança de IoT/OT sem agente que oferece descoberta de recursos, gerenciamento de vulnerabilidades e monitoramento contínuo de ameaças para sistemas de controle industrial (ICS) e ambientes de tecnologia operacional (OT). Ele detecta comportamentos anômalos e ameaças conhecidas em redes de IoT/OT sem afetar os processos operacionais. O analisador extrai campos do syslog do CyberX e registros formatados em chave-valor. Ele usa grok e/ou kv para analisar a mensagem de registro e mapeia esses valores para o modelo de dados unificado (UDM). Ele também define valores de metadados padrão para a origem e o tipo do evento.

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 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 Bindplane.
  • Acesso privilegiado ao console do sensor do Microsoft Defender para IoT

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. Salve o arquivo de forma segura 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

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:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: 'CYBERX'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

Parâmetros de configuração

  • Substitua os seguintes marcadores de posição:

    • Configuração do receptor:

      • udplog: use udplog para syslog UDP ou tcplog para syslog TCP.
      • 0.0.0.0: endereço IP para escutar (0.0.0.0 para escutar em todas as interfaces)
      • 514: número da porta a ser detectada (porta syslog padrão).
    • 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
      • YOUR_CUSTOMER_ID: ID do cliente da seção "Receber ID do cliente"
      • 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.
      • log_type: tipo de registro exatamente como aparece no Chronicle (CYBERX)

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 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 o encaminhamento do Syslog no Microsoft Defender para IoT (CyberX)

  1. Faça login no console do sensor do Microsoft Defender para IoT (antigo CyberX).
  2. Acesse Configurações do sistema > Encaminhamento.
  3. Clique em Adicionar (ou +) para criar uma regra de encaminhamento.
  4. Informe os seguintes detalhes de configuração:
    • Nome da regra: insira um nome descritivo (por exemplo, Google-SecOps-Bindplane).
    • Gravidade: selecione Todas ou níveis específicos: Leve, Grave, Crítica.
    • Protocolo: selecione Todos ou protocolos específicos para monitorar.
    • Mecanismo: selecione Todos ou mecanismos de detecção específicos.
    • Ação: selecione Enviar Syslog.
  5. Na configuração do Servidor Syslog:
    • Host: insira o endereço IP do host do agente do Bindplane.
    • Porta: insira 514.
    • Protocolo: selecione UDP.
    • Formato: selecione CEF (Common Event Format).
    • Fuso horário: selecione UTC (recomendado).
  6. Clique em Salvar.
  7. Ative a regra de encaminhamento mudando o status dela para Ativa.
  8. Verifique se as mensagens syslog estão sendo enviadas conferindo os registros do agente Bindplane.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
Máscara de acesso security_result.detection_fields.value Valor de access_mask de access_request_kvdata analisado.
Domínio da conta principal.administrative_domain Valor de principal_domain de principal_kvdata analisado.
Domínio da conta target.administrative_domain Valor de target_domain de target_kvdata analisado.
Nome da conta principal.user.userid Valor de "principal_account_name" de "principal_kvdata" analisado.
Nome da conta target.user.userid Valor de target_account_name de target_kvdata analisado
ação security_result.action_details Valor da ação
ação security_result.action Derivada. Se a ação for "accept", "passthrough", "pass", "permit", "detected" ou "close", mapeie para "ALLOW". Se a ação for "deny", "dropped" ou "blocked", mapeie para "BLOCK". Se a ação for "timeout", mapeie para "FAIL". Caso contrário, mapeie para "UNKNOWN_ACTION".
Nome do algoritmo security_result.detection_fields.value Valor de "algorithm_name" de "cryptographic_kvdata" analisado
app target.application Valor do serviço se app_protocol_output estiver vazio
appcat security_result.detection_fields.value Valor de appcat
Nome do aplicativo principal.application Valor de "application_name"
Pacote de autenticação security_result.about.resource.name Valor de authentication_package
Alerta do Azure Defender para IoT security_result.detection_fields.value Valor de "azure_defender_for_iot_alert"
canal security_result.detection_fields.value Valor do canal
Endereço do cliente principal.ip, principal.asset.ip Valor de source_ip
Porta de cliente principal.port Valor de source_port
cração security_result.detection_fields.value Valor da craction
As credenciais do Gerenciador de credenciais foram armazenadas em backup security_result.description Valor da descrição
As credenciais do Credential Manager foram lidas. security_result.description Valor da descrição
crscore security_result.severity_details Valor de crscore
crlevel security_result.severity, security_result.severity_details Valor de crlevel. Se crlevel for "HIGH", "MEDIUM", "LOW" ou "CRITICAL", mapeie para a gravidade correspondente do UDM.
Operação criptográfica metadata.description Valor de product_desc
Nome da plataforma CyberX security_result.detection_fields.value Valor de cyberx_platform_name
Descrição security_result.description Valor da descrição se a mensagem estiver vazia
Destino target.ip, target.asset.ip ou target.hostname Se o destino for um endereço IP, mapeie para target.ip e target.asset.ip. Caso contrário, mapeie para target.hostname.
Endereço de destino target.ip, target.asset.ip Valor de destination_ip de network_information analisado
DRA de destino target.resource.name Valor de destination_dra
IP de destino target.ip, target.asset.ip Valor de destination_ip
Porta de destino target.port Valor de destination_port de network_information analisado.
devid principal.resource.product_object_id Valor de devid
devname principal.resource.name Valor de devname
Direção network.direction Se a direção for "incoming", "inbound" ou "response", mapeie para "INBOUND". Se a direção for "outgoing", "outbound" ou "request", mapeie para "OUTBOUND".
dstip target.ip, target.asset.ip Valor de dstip se destination_ip estiver vazio
dstcountry target.location.country_or_region Valor de dstcountry
dstintf security_result.detection_fields.value Valor de dstintf
dstintfrole security_result.detection_fields.value Valor de dstintfrole
dstosname target.platform Valor de dstosname se for "WINDOWS", "LINUX" ou "MAC".
dstport target.port Valor de dstport se destination_port estiver vazio
dstswversion target.platform_version Valor de dstswversion
duration network.session_duration.seconds Valor da duração
event_id security_result.rule_name Usado para criar o nome da regra como "EventID: %{event_id}"
event_in_sequence security_result.detection_fields.value Valor de event_in_sequence
Filtrar ID do tempo de execução security_result.detection_fields.value Valor de filter_run_time_id de filter_information analisado
Filiação a grupo security_result.detection_fields.value Valor de group_membership se event_id não for 4627
Filiação a grupo target.user.group_identifiers Valores de group_membership analisados se event_id for 4627
handle_id security_result.detection_fields.value Valor de handle_id de object_kvdata analisado
ID do identificador security_result.detection_fields.value Valor de handle_id de object_kvdata analisado
impersonation_level security_result.detection_fields.value Valor de "impersonation_level" de "logon_information_kvdata" analisado.
Comprimento da chave security_result.detection_fields.value Valor de key_length de auth_kvdata analisado.
Nome da chave security_result.detection_fields.value Valor de key_name de cryptographic_kvdata analisado
Tipo de chave security_result.detection_fields.value Valor de key_type de cryptographic_kvdata analisado
palavras-chave security_result.detection_fields.value Valor das palavras-chave
Nome da camada security_result.detection_fields.value Valor de layer_name de filter_information analisado
ID do ambiente de execução da camada security_result.detection_fields.value Valor de layer_run_time_id de filter_information analisado
logid metadata.product_log_id Valor de logid
GUID de logon principal.resource.product_object_id Valor de logon_guid
ID de logon security_result.detection_fields.value Valor de logon_id
logon_type event.idm.read_only_udm.extensions.auth.mechanism Derivada. Se logon_type for "3", mapeie para "NETWORK". Se for "4", mapeie para "BATCH". Se for "5", mapeie para "SERVICE". Se for "8", mapeie para "NETWORK_CLEAR_TEXT". Se for "9", mapeie para "NEW_CREDENTIALS". Se for "10", mapeie para "REMOTE_INTERACTIVE". Se for "11", mapeie para "CACHED_INTERACTIVE". Caso contrário, se não estiver vazio, mapeie para "MECHANISM_OTHER".
Conta de logon security_result.detection_fields.value Valor de logon_id da análise grok
Processo de logon security_result.detection_fields.value Valor de logon_process de auth_kvdata analisado.
Marcador obrigatório security_result.detection_fields.value Valor de mandatory_label
mastersrcmac principal.mac Valor de mastersrcmac
Mensagem security_result.description Valor da mensagem
new_process_id target.process.pid Valor de new_process_id de process_kvdata analisado.
new_process_name target.process.file.full_path Valor de new_process_name de process_kvdata analisado
Nome do objeto security_result.detection_fields.value Valor de object_name do object_kvdata analisado
Servidor de objetos security_result.detection_fields.value Valor de object_server do object_kvdata analisado
Tipo de objeto security_result.detection_fields.value Valor de "object_type" do "object_kvdata" analisado.
osname principal.platform Valor de osname se for "WINDOWS", "LINUX" ou "MAC".
Nome do pacote (somente NTLM) security_result.detection_fields.value Valor de package_name de auth_kvdata analisado
policyid security_result.rule_id Valor de policyid
policyname security_result.rule_name Valor de policyname
policytype security_result.rule_type Valor de policytype
ID do processo principal.process.pid Valor de process_id
Nome do processo principal.process.file.full_path Valor de creator_process_name de process_kvdata analisado.
profile_changed security_result.detection_fields.value Valor de "profile_changed"
Perfil alterado security_result.detection_fields.value Valor de "profile_changed" da análise grok
proto network.ip_protocol Se proto for "17", mapeie para "UDP". Se "6" ou o subtipo for "wad", mapeie para "TCP". Se for "41", mapeie para "IP6IN4". Se o serviço for "PING", o protocolo for "1" ou o serviço contiver "ICMP", mapeie para "ICMP".
Protocolo network.application_protocol Valor de app_protocol_output derivado do protocolo
Nome do provedor security_result.detection_fields.value Valor de "provider_name" de "provider_kvdata" ou "cryptographic_kvdata" analisados.
rcvdbyte network.received_bytes Valor de rcvdbyte
rcvdpkt security_result.detection_fields.value Valor de rcvdpkt
restricted_admin_mode security_result.detection_fields.value Valor de "restricted_admin_mode" de "logon_information_kvdata" analisado.
Código de retorno security_result.detection_fields.value Valor de "return_code" de "cryptographic_kvdata" analisado.
resposta security_result.detection_fields.value Valor da resposta
rule_id security_result.rule_id Valor de rule_id
ID de segurança principal.user.windows_sid Valor de principal_security_id de principal_kvdata analisado
ID de segurança target.user.windows_sid Valor de target_security_id de target_kvdata analisado.
sentbyte network.sent_bytes Valor de sentbyte
sentpkt security_result.detection_fields.value Valor de sentpkt
serviço network.application_protocol ou target.application Valor de app_protocol_output derivado do serviço. Se app_protocol_output estiver vazio, mapeie para target.application.
ID do serviço security_result.detection_fields.value Valor de service_id de service_kvdata analisado.
Nome do serviço security_result.detection_fields.value Valor de service_name de service_kvdata analisado
sessionid network.session_id Valor de sessionid
Gravidade security_result.severity, security_result.severity_details Se a gravidade for "ERROR" ou "CRITICAL", mapeie para a gravidade correspondente da UDM. Se for "INFO", mapeie para "INFORMATIONAL". Se for "MINOR", mapeie para "LOW". Se for "WARNING", mapeie para "MEDIUM". Se for "MAJOR", mapeie para "HIGH". Mapeie também o valor bruto para severity_details.
gravidade, security_result.severity, security_result.severity_details Se a gravidade for "1", "2" ou "3", mapeie para "LOW". Se for "4", "5" ou "6", mapeie para "MEDIUM". Se for "7", "8" ou "9", mapeie para "ALTA". Mapeie também o valor bruto para severity_details.
Nome do compartilhamento security_result.detection_fields.value Valor de share_name de share_information_kvdata analisado.
Compartilhar trajeto security_result.detection_fields.value Valor de share_path de share_information_kvdata analisado.
Origem principal.ip, principal.asset.ip ou principal.hostname, principal.asset.hostname Se a origem for um endereço IP, mapeie para principal.ip e principal.asset.ip. Caso contrário, mapeie para principal.hostname e principal.asset.hostname.
Endereço de origem principal.ip, principal.asset.ip Valor de source_ip das network_information analisadas
DRA de origem principal.resource.name Valor de source_dra
IP de origem principal.ip Valor de source_ip
Endereço de rede de origem principal.ip, principal.asset.ip Valor de source_ip
Porta de origem principal.port Valor de "source_port" de "network_information" analisado.
Estação de trabalho de origem workstation_name Valor de source_workstation_name
srcip source_ip Valor de srcip se source_ip estiver vazio
srccountry principal.location.country_or_region Valor de srccountry
srcmac principal.mac Valor de srcmac
srcname principal.hostname, principal.asset.hostname Valor de srcname
srcport source_port Valor de srcport se source_port estiver vazio
srcswversion principal.platform_version Valor de srcswversion
Código de status network.http.response_code Valor de status_code
Tipo de elevação do token security_result.detection_fields.value Valor de token_elevation_type
transited_services security_result.detection_fields.value Valor de transited_services de auth_kvdata analisado.
transip principal.nat_ip Valor de transip
transport principal.nat_port Valor do transporte
tipo metadata.product_event_type Usado com o subtipo para criar metadata.product_event_type.
Tipo security_result.detection_fields.value Valor do tipo
UUID metadata.product_log_id Valor do UUID
vd principal.administrative_domain Valor de vd
virtual_account security_result.detection_fields.value Valor de virtual_account de logon_information_kvdata analisado.
Nome da estação de trabalho principal.hostname, principal.asset.hostname Valor de "workstation_name" se nenhum outro identificador principal estiver presente
metadata.event_type metadata.event_type Derivada. Se "principal_present" e "target_present" forem verdadeiros, mapeie para "NETWORK_CONNECTION". Se user_present for verdadeiro, mapeie para "USER_RESOURCE_ACCESS". Se "principal_present" for verdadeiro, mapeie para "STATUS_UPDATE". Caso contrário, mapeie para "GENERIC_EVENT".
metadata.log_type metadata.log_type Fixado no código como "CYBERX".
metadata.product_name metadata.product_name Fixado no código como "CYBERX".
metadata.vendor_name metadata.vendor_name Fixado no código como "CYBERX".
metadata.event_timestamp metadata.event_timestamp Copiado do campo de carimbo de data/hora de nível superior ou derivado dos campos eventtime ou data e hora.

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