Recopila registros de Microsoft Defender for IoT (CyberX)
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
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- 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
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- 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
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietEspera a que se complete la instalación.
Ejecute el siguiente comando para verificar la instalación:
sc query observiq-otel-collector
El servicio debe mostrarse como RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de administrador o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shEspera a que se complete la instalación.
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.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de
config.yamlcon 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: Usaudplogpara el registro del sistema UDP otcplogpara el registro del sistema TCP.0.0.0.0: Dirección IP en la que se realizará la escucha (0.0.0.0para 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
- Linux:
YOUR_CUSTOMER_ID: ID de cliente de la sección Obtén el ID de clienteendpoint: 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.
- EE.UU.:
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, luegoEntery, después,Ctrl+X. - Windows: Haz clic en Archivo > Guardar
- Linux: Presiona
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-collectorVerifica que el servicio esté en ejecución:
sudo systemctl status observiq-otel-collectorRevisa 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-collectorConsola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
Haz clic con el botón derecho y selecciona Reiniciar.
Verifica que el servicio esté en ejecución:
sc query observiq-otel-collectorRevisa los registros en busca de errores:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Presiona
Configura el reenvío de Syslog en Microsoft Defender para IoT (CyberX)
- Accede a la consola del sensor de Microsoft Defender for IoT (anteriormente CyberX).
- Ve a Configuración del sistema > Reenvío.
- Haz clic en Agregar (o +) para crear una regla de reenvío nueva.
- 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.
- Nombre de la regla: Ingresa un nombre descriptivo (por ejemplo,
- 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).
- Haz clic en Guardar.
- Habilita la regla de reenvío cambiando el botón de activación a Activa.
- 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.