Recopila registros de Microsoft Defender for IoT (CyberX)

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de Microsoft Defender for IoT (CyberX) a Google Security Operations con Bindplane.

Microsoft Defender for IoT (anteriormente CyberX) es una plataforma de seguridad de IoT/OT sin agentes que proporciona detección de activos, administración de vulnerabilidades y supervisión continua de amenazas para entornos de sistemas de control industrial (ICS) y tecnología operativa (OT). Detecta comportamientos anómalos y amenazas conocidas en las redes de IoT/OT sin afectar los procesos operativos. El analizador extrae campos de los registros con formato de clave-valor y syslog de CyberX. Utiliza grok o kv para analizar el mensaje de registro y, luego, asigna estos valores al Modelo de datos unificados (UDM). También establece valores de metadatos predeterminados para el origen y el tipo del evento.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Windows Server 2016 o versiones posteriores, o host de Linux con systemd
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
  • Acceso con privilegios a la consola del sensor de Microsoft Defender para IoT

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de BindPlane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el comando siguiente:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Espera a que se complete la instalación.

  4. Ejecute el siguiente comando para verificar la instalación:

    sc query observiq-otel-collector
    

El servicio debe mostrarse como RUNNING.

Instalación en Linux

  1. Abre una terminal con privilegios de administrador o sudo.
  2. Ejecuta el comando siguiente:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Espera a que se complete la instalación.

  4. Ejecute el siguiente comando para verificar la instalación:

    sudo systemctl status observiq-otel-collector
    

El servicio debería mostrarse como activo (en ejecución).

Recursos de instalación adicionales

Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

Ubica el archivo de configuración

  • Linux:

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

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

Edita el archivo de configuración

  • Reemplaza todo el contenido de config.yaml con la siguiente configuración:

    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 configuración

  • Reemplaza los marcadores de posición que se indican más abajo:

    • Configuración del receptor:

      • udplog: Usa udplog para el registro del sistema UDP o tcplog para el registro del sistema TCP.
      • 0.0.0.0: Dirección IP en la que se realizará la escucha (0.0.0.0 para escuchar en todas las interfaces)
      • 514: Número de puerto en el que se debe escuchar (puerto syslog estándar)
    • Configuración del exportador:

      • creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:
        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: ID de cliente de la sección Obtén el ID de cliente
      • endpoint: URL del extremo regional:
        • EE.UU.: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
        • Consulta Extremos regionales para obtener la lista completa.
      • log_type: Tipo de registro tal como aparece en Chronicle (CYBERX)

Guarda el archivo de configuración

  • Después de editarlo, guarda el archivo:
    • Linux: Presiona Ctrl+O, luego Enter y, después, Ctrl+X.
    • Windows: Haz clic en Archivo > Guardar

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifica que el servicio esté en ejecución:

        sudo systemctl status observiq-otel-collector
      
    2. Revisa los registros en busca de errores:

        sudo journalctl -u observiq-otel-collector -f
      
  • Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:

    • Símbolo del sistema o PowerShell como administrador:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Consola de Services:

      1. Presiona Win+R, escribe services.msc y presiona Intro.
      2. Busca observIQ OpenTelemetry Collector.
      3. Haz clic con el botón derecho y selecciona Reiniciar.

      4. Verifica que el servicio esté en ejecución:

        sc query observiq-otel-collector
        
      5. Revisa los registros en busca de errores:

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

Configura el reenvío de Syslog en Microsoft Defender para IoT (CyberX)

  1. Accede a la consola del sensor de Microsoft Defender for IoT (anteriormente CyberX).
  2. Ve a Configuración del sistema > Reenvío.
  3. Haz clic en Agregar (o +) para crear una regla de reenvío nueva.
  4. Proporciona los siguientes detalles de configuración:
    • Nombre de la regla: Ingresa un nombre descriptivo (por ejemplo, Google-SecOps-Bindplane).
    • Gravedad: Selecciona Todas (o selecciona niveles de gravedad específicos: Menor, Mayor, Crítica).
    • Protocolo: Selecciona Todos (o selecciona protocolos específicos para supervisar).
    • Motor: Selecciona Todos (o selecciona motores de detección específicos).
    • Acción: Selecciona Enviar Syslog.
  5. En la configuración de Servidor Syslog, haz lo siguiente:
    • Host: Ingresa la dirección IP del host del agente de BindPlane.
    • Puerto: Ingresa 514.
    • Protocolo: Selecciona UDP.
    • Formato: Selecciona CEF (formato de evento común).
    • Zona horaria: Selecciona UTC (recomendado).
  6. Haz clic en Guardar.
  7. Habilita la regla de reenvío cambiando el botón de activación a Activa.
  8. Para verificar que se envíen los mensajes de syslog, consulta los registros del agente de Bindplane.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
Máscara de acceso security_result.detection_fields.value Valor de access_mask del access_request_kvdata analizado
Dominio de la cuenta principal.administrative_domain Valor de principal_domain de principal_kvdata analizado
Dominio de la cuenta target.administrative_domain Valor de target_domain del target_kvdata analizado
Nombre de la cuenta principal.user.userid Valor de principal_account_name de principal_kvdata analizado
Nombre de la cuenta target.user.userid Valor de target_account_name del target_kvdata analizado
acción security_result.action_details Valor de la acción
acción security_result.action Derivado. Si la acción es "accept", "passthrough", "pass", "permit", "detected" o "close", se asigna a "ALLOW". Si la acción es "deny", "dropped" o "blocked", se asigna a "BLOCK". Si la acción es "timeout", se asigna a "FAIL". De lo contrario, se asigna a "UNKNOWN_ACTION".
Nombre del algoritmo security_result.detection_fields.value Valor de algorithm_name de cryptographic_kvdata analizado
app target.application Valor del servicio si app_protocol_output está vacío
appcat security_result.detection_fields.value Valor de appcat
Nombre de la app principal.application Valor de application_name
Paquete de autenticación security_result.about.resource.name Valor de authentication_package
Alerta de Azure Defender para IoT security_result.detection_fields.value Valor de azure_defender_for_iot_alert
canal security_result.detection_fields.value Valor del canal
Dirección del cliente principal.ip, principal.asset.ip Valor de source_ip
Puerto de cliente principal.port Valor de source_port
craction security_result.detection_fields.value Valor de la fracción
Se hizo una copia de seguridad de las credenciales del Administrador de credenciales security_result.description Valor de la descripción
Se leyeron las credenciales del Administrador de credenciales. security_result.description Valor de la descripción
crscore security_result.severity_details Valor de crscore
crlevel security_result.severity, security_result.severity_details Es el valor de crlevel. Si crlevel es "HIGH", "MEDIUM", "LOW" o "CRITICAL", se debe asignar a la gravedad correspondiente del UDM.
Operación criptográfica metadata.description Valor de product_desc
Nombre de la plataforma de CyberX security_result.detection_fields.value Valor de cyberx_platform_name
Descripción security_result.description Valor de la descripción si el mensaje está vacío
Destino target.ip, target.asset.ip o target.hostname Si el destino es una dirección IP, se debe asignar a target.ip y target.asset.ip. De lo contrario, se asigna a target.hostname.
Dirección de destino target.ip, target.asset.ip Valor de destination_ip de network_information analizado
DRA de destino target.resource.name Valor de destination_dra
IP de destino target.ip, target.asset.ip Valor de destination_ip
Puerto de destino target.port Valor de destination_port de network_information analizado
devid principal.resource.product_object_id Valor de devid
devname principal.resource.name Valor de devname
Dirección network.direction Si la dirección es "incoming", "inbound" o "response", se asigna a "INBOUND". Si la dirección es "saliente", "externa" o "solicitud", se asigna a "EXTERNA".
dstip target.ip, target.asset.ip Valor de dstip si destination_ip está vacío
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 si es "WINDOWS", "LINUX" o "MAC".
dstport target.port Valor de dstport si destination_port está vacío
dstswversion target.platform_version Valor de dstswversion
duración network.session_duration.seconds Valor de la duración
event_id security_result.rule_name Se usa para construir el nombre de la regla como "EventID: %{event_id}".
event_in_sequence security_result.detection_fields.value Valor de event_in_sequence
ID de tiempo de ejecución del filtro security_result.detection_fields.value Valor de filter_run_time_id de filter_information analizado
Membresía la grupo security_result.detection_fields.value Valor de group_membership si event_id no es 4627
Membresía la grupo target.user.group_identifiers Valores de group_membership analizados si event_id es 4627
handle_id security_result.detection_fields.value Valor de handle_id del objeto object_kvdata analizado
ID de identificador security_result.detection_fields.value Valor de handle_id del objeto object_kvdata analizado
impersonation_level security_result.detection_fields.value Valor de impersonation_level de logon_information_kvdata analizado
Longitud de la clave security_result.detection_fields.value Valor de key_length del auth_kvdata analizado
Nombre de la clave security_result.detection_fields.value Valor de key_name de cryptographic_kvdata analizado
Tipo de clave security_result.detection_fields.value Valor de key_type del objeto cryptographic_kvdata analizado
palabras clave security_result.detection_fields.value Valor de las palabras clave
Nombre de la capa security_result.detection_fields.value Valor de layer_name del filter_information analizado
ID de tiempo de ejecución de la capa security_result.detection_fields.value Valor de layer_run_time_id del filter_information analizado
logid metadata.product_log_id Valor de logid
GUID de inicio de sesión principal.resource.product_object_id Valor de logon_guid
ID de acceso security_result.detection_fields.value Valor de logon_id
logon_type event.idm.read_only_udm.extensions.auth.mechanism Derivado. Si logon_type es "3", se asigna a "NETWORK". Si es "4", se asigna a "BATCH". Si es "5", se asigna a "SERVICE". Si es "8", se asigna a "NETWORK_CLEAR_TEXT". Si es "9", se asigna a "NEW_CREDENTIALS". Si es "10", se asigna a "REMOTE_INTERACTIVE". Si es "11", se asigna a "CACHED_INTERACTIVE". De lo contrario, si no está vacío, se asigna a "MECHANISM_OTHER".
Cuenta de acceso security_result.detection_fields.value Valor de logon_id del análisis de Grok
Proceso de acceso security_result.detection_fields.value Valor de logon_process de auth_kvdata analizado
Etiqueta obligatoria security_result.detection_fields.value Valor de mandatory_label
mastersrcmac principal.mac Valor de mastersrcmac
Mensaje security_result.description Valor del mensaje
new_process_id target.process.pid Valor de new_process_id del proceso_kvdata analizado
new_process_name target.process.file.full_path Valor de new_process_name del process_kvdata analizado
Nombre del objeto security_result.detection_fields.value Valor de object_name del objeto object_kvdata analizado
Servidor de objetos security_result.detection_fields.value Valor de object_server del objeto object_kvdata analizado
Tipo de objeto security_result.detection_fields.value Valor de object_type del objeto object_kvdata analizado
osname principal.platform Valor de osname si es "WINDOWS", "LINUX" o "MAC".
Nombre del paquete (solo NTLM) security_result.detection_fields.value Valor de package_name del auth_kvdata analizado
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 de proceso principal.process.pid Valor de process_id
Nombre del proceso principal.process.file.full_path Valor de creator_process_name del proceso_kvdata analizado
profile_changed security_result.detection_fields.value Valor de profile_changed
Se cambió el perfil security_result.detection_fields.value Valor de profile_changed del análisis de Grok
protocolo network.ip_protocol Si el valor de proto es "17", se asigna a "UDP". Si "6" o el subtipo es "wad", se asigna a "TCP". Si es "41", asigna "IP6IN4". Si el servicio es "PING", el proto es "1" o el servicio contiene "ICMP", se asigna a "ICMP".
Protocolo network.application_protocol Valor de app_protocol_output derivado de Protocol
Nombre del proveedor security_result.detection_fields.value Valor de provider_name de provider_kvdata o cryptographic_kvdata analizados
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 analizado
Código de retorno security_result.detection_fields.value Valor de return_code de cryptographic_kvdata analizado
respuesta security_result.detection_fields.value Valor de la respuesta
rule_id security_result.rule_id Valor de rule_id
ID de seguridad principal.user.windows_sid Valor de principal_security_id de principal_kvdata analizado
ID de seguridad target.user.windows_sid Valor de target_security_id del target_kvdata analizado
sentbyte network.sent_bytes Valor de sentbyte
sentpkt security_result.detection_fields.value Valor de sentpkt
servicio network.application_protocol o target.application Es el valor de app_protocol_output derivado del servicio. Si app_protocol_output está vacío, se asigna a target.application.
ID de servicio security_result.detection_fields.value Valor de service_id del service_kvdata analizado
Nombre del servicio security_result.detection_fields.value Valor de service_name del service_kvdata analizado
sessionid network.session_id Valor de sessionid
Gravedad security_result.severity, security_result.severity_details Si la gravedad es "ERROR" o "CRITICAL", se debe asignar a la gravedad correspondiente del UDM. Si es "INFO", asigna "INFORMATIONAL". Si es "MINOR", se asigna a "LOW". Si es "WARNING", se asigna a "MEDIUM". Si es "MAJOR", se asigna a "HIGH". También asigna el valor sin procesar a severity_details.
gravedad, security_result.severity, security_result.severity_details Si la gravedad es "1", "2" o "3", se asigna a "BAJA". Si es "4", "5" o "6", se asigna a "MEDIUM". Si es "7", "8" o "9", se asigna a "ALTA". También asigna el valor sin procesar a severity_details.
Nombre del elemento compartido security_result.detection_fields.value Valor de share_name de share_information_kvdata analizado
Compartir ruta security_result.detection_fields.value Valor de share_path del share_information_kvdata analizado
Fuente principal.ip, principal.asset.ip o principal.hostname, principal.asset.hostname Si la fuente es una dirección IP, se debe asignar a principal.ip y principal.asset.ip. De lo contrario, se debe asignar a principal.hostname y principal.asset.hostname.
Dirección de origen principal.ip, principal.asset.ip Valor de source_ip de network_information analizado
DRA de origen principal.resource.name Valor de source_dra
IP de origen principal.ip Valor de source_ip
Dirección de red de origen principal.ip, principal.asset.ip Valor de source_ip
Puerto de origen principal.port Valor de source_port de network_information analizado
Estación de trabajo de origen workstation_name Valor de source_workstation_name
srcip source_ip Valor de srcip si source_ip está vacío
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 si source_port está vacío
srcswversion principal.platform_version Valor de srcswversion
Código de estado network.http.response_code Valor de status_code
Tipo de elevación del token security_result.detection_fields.value Valor de token_elevation_type
transited_services security_result.detection_fields.value Valor de transited_services del auth_kvdata analizado
transip principal.nat_ip Valor de transip
transporte principal.nat_port Valor del transporte
tipo metadata.product_event_type Se usa con el subtipo para crear metadata.product_event_type
Tipo security_result.detection_fields.value Valor de Type
UUID metadata.product_log_id Valor del UUID
vd principal.administrative_domain Valor de vd
virtual_account security_result.detection_fields.value Valor de virtual_account de logon_information_kvdata analizado
Nombre de la estación de trabajo principal.hostname, principal.asset.hostname Valor de workstation_name si no hay otro identificador principal presente
metadata.event_type metadata.event_type Derivado. Si principal_present y target_present son verdaderos, se asigna a "NETWORK_CONNECTION". Si user_present es verdadero, se debe asignar a "USER_RESOURCE_ACCESS". Si principal_present es verdadero, se asigna a "STATUS_UPDATE". De lo contrario, se asigna a "GENERIC_EVENT".
metadata.log_type metadata.log_type Está codificado como "CYBERX".
metadata.product_name metadata.product_name Está codificado como "CYBERX".
metadata.vendor_name metadata.vendor_name Está codificado como "CYBERX".
metadata.event_timestamp metadata.event_timestamp Se copia del campo de marca de tiempo de nivel superior o se deriva de los campos de fecha y hora o de eventtime.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.