Coletar registros do Microsoft Defender para IoT (CyberX)
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- 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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- 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
- Abra o prompt de comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAguarde a conclusão da instalação.
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
- Abra um terminal com privilégios de root ou sudo.
Execute este comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAguarde a conclusão da instalação.
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.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de
config.yamlpela 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: useudplogpara syslog UDP outcplogpara syslog TCP.0.0.0.0: endereço IP para escutar (0.0.0.0para 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
- Linux:
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.
- EUA:
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,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
- Linux: pressione
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-collectorVerifique se o serviço está em execução:
sudo systemctl status observiq-otel-collectorVerifique 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-collectorConsole de serviços:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize o Coletor do OpenTelemetry da observIQ.
Clique com o botão direito do mouse e selecione Reiniciar.
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Pressione
Configurar o encaminhamento do Syslog no Microsoft Defender para IoT (CyberX)
- Faça login no console do sensor do Microsoft Defender para IoT (antigo CyberX).
- Acesse Configurações do sistema > Encaminhamento.
- Clique em Adicionar (ou +) para criar uma regra de encaminhamento.
- 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.
- Nome da regra: insira um nome descritivo (por exemplo,
- 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).
- Clique em Salvar.
- Ative a regra de encaminhamento mudando o status dela para Ativa.
- 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.