Recopila registros de ManageEngine ADManager Plus

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de ManageEngine ADManager Plus a Google Security Operations con el agente de Bindplane.

ManageEngine ADManager Plus ofrece una solución basada en la Web para la administración simplificada de AD, que incluye la creación y modificación de usuarios, la seguridad basada en roles y los informes detallados. La integración de ADManager Plus con los servidores de Splunk y Syslog permite a las organizaciones reenviar registros de todas las acciones de administración de Active Directory, Microsoft 365 y Google Workspace que se realizan en ADManager Plus.

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
  • Conectividad de red entre el agente de Bindplane y ManageEngine ADManager Plus
  • 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 de administración de ManageEngine ADManager Plus

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. Haz clic en Descargar para descargar el archivo de autenticación de la transferencia.
  4. Guarda el archivo de forma segura en el sistema en el que se instalará el agente de 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 siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-otel-collector/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 debería mostrarse como RUNNING.

Instalación en Linux

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

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/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 el syslog y enviarlo a Google SecOps

Ubica el archivo de configuración

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

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

Edita el archivo de configuración

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

    receivers:
      tcplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/admanager_plus:
        compression: gzip
        creds_file_path: '<CREDS_FILE_PATH>'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: ADMANAGER_PLUS
        raw_log_field: body
        ingestion_labels:
          log_source: admanager_plus
    
    service:
      pipelines:
        logs/admanager_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/admanager_plus
    
  2. Reemplaza los marcadores de posición que se indican más abajo:

    • Configuración del receptor:

      • El receptor usa tcplog para recibir datos de syslog en el puerto TCP 514.
      • listen_address: Configúralo como 0.0.0.0:514 para escuchar en todas las interfaces del puerto 514.
    • Configuración del exportador:

      • <CREDS_FILE_PATH>: Ruta de acceso completa al archivo de autenticación de la transferencia:
        • Linux: /opt/observiq-otel-collector/ingestion-auth.json
        • Windows: C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
      • <CUSTOMER_ID>: Es el ID de cliente del paso anterior.
      • 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: Se debe establecer en ADMANAGER_PLUS exactamente como aparece en Chronicle.
      • ingestion_labels: Son etiquetas opcionales en formato YAML.

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

Linux

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

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

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

    sudo journalctl -u observiq-otel-collector -f
    

Windows

  1. Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:

    • Con el símbolo del sistema o PowerShell como administrador, haz lo siguiente:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Usa la consola de Services:

      1. Presiona Win+R, escribe services.msc y presiona Intro.
      2. Busca observIQ Distro for OpenTelemetry Collector.
      3. Haz clic con el botón derecho y selecciona Reiniciar.
  2. Verifica que el servicio esté en ejecución:

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

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

Configura el reenvío de Syslog de ManageEngine ADManager Plus

  1. Accede a ADManager Plus.
  2. Navega a la pestaña Administrador.
  3. En Configuración del sistema, haz clic en Integraciones.
  4. En Log Forwarding, haz clic en Syslog.

  5. Configura los siguientes campos:

    • Servidor Syslog: Ingresa el nombre del servidor Syslog. Ingresa la dirección IP o el nombre de host del host del agente de Bindplane.
    • Puerto: Ingresa el número de puerto. Ingresa 514.
    • Protocol: Elige el protocolo adecuado, TCP o UDP, para reenviar los registros. Selecciona TCP.
    • Estándar de Syslog: Selecciona el formato de mensaje de syslog deseado: RFC 3164, RFC 5424 o RawLog. Selecciona RFC 5424 (recomendado).
    • Formato de datos: Ingresa el formato de datos. Configura el formato de datos según sea necesario para tu entorno.
  6. Haz clic en Guardar para guardar la configuración.

Después de la configuración, ADManager Plus comenzará a reenviar los registros de las acciones de administración al agente de BindPlane, que luego los enviará a Google SecOps.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
ipPhone event.idm.read_only_udm.additional.fields Se combinó como etiqueta con la clave "ipPhone" y el valor de ipPhone si ipPhone != ""
l event.idm.read_only_udm.additional.fields Se combinó como etiqueta con la clave "l" y el valor de l si l != ""
lockoutTime event.idm.read_only_udm.additional.fields Se combinó como etiqueta con la clave "lockoutTime" y el valor de lockoutTime si lockoutTime != ""
Mover desde event.idm.read_only_udm.additional.fields Se combinó como etiqueta con la clave "Move From" y el valor de Move_From si Move_From != ""
Mover a event.idm.read_only_udm.additional.fields Se combinó como etiqueta con la clave "Mover a" y el valor de Move_To si Move_To != ""
msg event.idm.read_only_udm.additional.fields Se fusionó como etiqueta con la clave "member" y el valor del mensaje si msg != ""
sn event.idm.read_only_udm.additional.fields Se combinó como etiqueta con la clave "sn" y el valor de sn si sn != ""
st event.idm.read_only_udm.additional.fields Se combinó como etiqueta con la clave "st" y el valor de st si st != ""
Nombre de la plantilla event.idm.read_only_udm.additional.fields Se fusionó como etiqueta con la clave "Nombre de la plantilla" y el valor de Template_Name si Template_Name != ""
Estado event.idm.read_only_udm.metadata.description Valor tomado de Status si Status != ""
hora event.idm.read_only_udm.metadata.event_timestamp Se convirtió del formato de hora al de marca de tiempo si la hora no es "".
event.idm.read_only_udm.metadata.event_type Derivado: Si has_principal_user == "true", entonces "USER_UNCATEGORIZED"; de lo contrario, si has_principal == "true", entonces "STATUS_UPDATE"; de lo contrario, "GENERIC_EVENT"
TechnicianName event.idm.read_only_udm.metadata.product_event_type El valor se toma de TechnicianName si TechnicianName != ""
event.idm.read_only_udm.metadata.product_name Se establece en "ADMANAGER_PLUS".
event.idm.read_only_udm.metadata.vendor_name Se establece en "ADMANAGER_PLUS".
Nombre de dominio event.idm.read_only_udm.principal.administrative_domain El valor se toma de Domain_Name si Domain_Name != "".
Nombre de host event.idm.read_only_udm.principal.asset.hostname El valor se toma del nombre de host si hostname != "".
correo event.idm.read_only_udm.principal.email Valor tomado del correo electrónico si mail != ""
Nombre de host event.idm.read_only_udm.principal.hostname El valor se toma del nombre de host si hostname != "".
co event.idm.read_only_udm.principal.location.city Valor tomado de co si co != ""
Tarea event.idm.read_only_udm.principal.resource.name Valor tomado de la tarea si Task != ""
wWWHomePage event.idm.read_only_udm.principal.url Se toma el valor de wWWHomePage si wWWHomePage != ""
Tipo de contraseña event.idm.read_only_udm.principal.user.attribute.labels Se fusionó como etiqueta con la clave "Tipo de contraseña" y el valor de Password_Type si Password_Type != ""
Código de país event.idm.read_only_udm.principal.user.attribute.labels Se combinó como etiqueta con la clave "countryCode" y el valor de countryCode si countryCode != ""
contraseña event.idm.read_only_udm.principal.user.attribute.labels Se combinó como etiqueta con la clave "password" y el valor de la contraseña si la contraseña != ""
postalCode event.idm.read_only_udm.principal.user.attribute.labels Se fusionó como etiqueta con la clave "postalCode" y el valor de postalCode si postalCode != ""
primaryGroupID event.idm.read_only_udm.principal.user.attribute.labels Se fusionó como etiqueta con la clave "primaryGroupID" y el valor de primaryGroupID si primaryGroupID != ""
userAccountControl event.idm.read_only_udm.principal.user.attribute.labels Se combinó como etiqueta con la clave "userAccountControl" y el valor de userAccountControl si userAccountControl != ""
userPrincipalName event.idm.read_only_udm.principal.user.attribute.labels Se combina como etiqueta con la clave "userPrincipalName" y el valor de userPrincipalName si userPrincipalName != ""
company event.idm.read_only_udm.principal.user.company_name El valor se toma de la empresa si empresa != ""
departamento event.idm.read_only_udm.principal.user.department Se combina con el departamento si department != ""
givenName event.idm.read_only_udm.principal.user.first_name El valor se toma de givenName si givenName != "".
physicalDeliveryOfficeName event.idm.read_only_udm.principal.user.office_address.name Valor tomado de physicalDeliveryOfficeName si physicalDeliveryOfficeName != ""
streetAddress event.idm.read_only_udm.principal.user.personal_address.name Valor tomado de streetAddress si streetAddress != ""
homePhone event.idm.read_only_udm.principal.user.phone_numbers Se combina con homePhone si homePhone != ""
Nombre del usuario event.idm.read_only_udm.principal.user.user_display_name El valor se toma de User_Name si User_Name != ""; de lo contrario, se toma de Object_Name si Object_Name != "".
sAMAccountName event.idm.read_only_udm.principal.user.userid Valor tomado de sAMAccountName si sAMAccountName != ""
ACCIÓN event.idm.read_only_udm.security_result.action_details Valor tomado de ACTION si ACTION != ""
descripción event.idm.read_only_udm.security_result.description Valor tomado de la descripción si description != ""
Nombre del contenedor event.idm.read_only_udm.security_result.detection_fields Se deriva de container_Name grok: Se fusiona como etiqueta con la clave "Container_Name_DC_value1" y el valor de dc_label_1 si dc_label_1 != ""
Nombre del contenedor event.idm.read_only_udm.security_result.detection_fields Se deriva de container_Name grok: Se combina como etiqueta con la clave "Container_Name_DC_value2" y el valor de dc_label_2 si dc_label_2 != ""
Nombre del contenedor event.idm.read_only_udm.security_result.detection_fields Se deriva de container_Name grok: Se combina como etiqueta con la clave "Container_Name_OU_value1" y el valor de ou_label_1 si ou_label_1 != ""
Nombre del contenedor event.idm.read_only_udm.security_result.detection_fields Se deriva de container_Name grok: se combina como etiqueta con la clave "Container_Name_OU_value2" y el valor de ou_label_2 si ou_label_2 != ""
Nombre del contenedor event.idm.read_only_udm.security_result.detection_fields Se deriva de container_Name grok: Se fusiona como etiqueta con la clave "Container_Name_OU_value3" y el valor de ou_label_3 si ou_label_3 != ""
Grupo principal event.idm.read_only_udm.security_result.detection_fields Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_CN_value1" y el valor de cn_label_1 si cn_label_1 != ""
Grupo principal event.idm.read_only_udm.security_result.detection_fields Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_CN_value2" y el valor de cn_label_2 si cn_label_2 != ""
Grupo principal event.idm.read_only_udm.security_result.detection_fields Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_DC_value1" y el valor de primary_dc_label_1 si primary_dc_label_1 != ""
Grupo principal event.idm.read_only_udm.security_result.detection_fields Se deriva de Primary_Group grok: Se fusiona como etiqueta con la clave "Primary_Group_DC_value2" y el valor de primary_dc_label_2 si primary_dc_label_2 != ""
accountExpires event.idm.read_only_udm.security_result.detection_fields Se combinó como etiqueta con la clave "accountExpires" y el valor de accountExpires si accountExpires != ""
administrador event.idm.read_only_udm.security_result.detection_fields Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_cn_value1" y el valor de manager_cn_value1 si manager_cn_value1 != ""
administrador event.idm.read_only_udm.security_result.detection_fields Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_dc_value1" y el valor de manager_dc_value1 si manager_dc_value1 != ""
administrador event.idm.read_only_udm.security_result.detection_fields Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_dc_value2" y el valor de manager_dc_value2 si manager_dc_value2 != ""
administrador event.idm.read_only_udm.security_result.detection_fields Se deriva de manager grok: se fusiona como etiqueta con la clave "manager_ou_value1" y el valor de manager_ou_value1 si manager_ou_value1 != ""
administrador event.idm.read_only_udm.security_result.detection_fields Se deriva de manager grok: se fusiona como etiqueta con la clave "manager_ou_value2" y el valor de manager_ou_value2 si manager_ou_value2 != ""
administrador event.idm.read_only_udm.security_result.detection_fields Se deriva de manager grok: Se fusiona como etiqueta con la clave "manager_ou_value3" y el valor de manager_ou_value3 si manager_ou_value3 != ""
pwdLastSet event.idm.read_only_udm.security_result.detection_fields Se combinó como etiqueta con la clave "pwdLastSet" y el valor de pwdLastSet si pwdLastSet != ""
ModuleName event.idm.read_only_udm.target.resource.name El valor se toma de ModuleName si ModuleName != "".

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