Recopila registros de ManageEngine Exchange Reporter Plus

Compatible con:

En este documento, se explica cómo configurar ManageEngine Exchange Reporter Plus para enviar registros a Google Security Operations a través de webhooks.

ManageEngine Exchange Reporter Plus es una solución de informes, auditoría y supervisión basada en la Web para entornos de Microsoft Exchange Server y Exchange Online. Proporciona informes integrales sobre los tamaños de los buzones, el tráfico de correo electrónico, las carpetas públicas, los registros de Exchange ActiveSync y los registros de auditoría para las actividades del administrador y los cambios de configuración en las implementaciones híbridas de Exchange.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • ManageEngine Exchange Reporter Plus instalado y configurado para supervisar Exchange Server o Exchange Online
  • Acceso administrativo a la consola web de ManageEngine Exchange Reporter Plus
  • Acceso a la Google Cloud Console (para la creación de claves de API)

Crea un feed de webhook en Google SecOps

Crea el feed

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. En la siguiente página, haz clic en Configurar un solo feed.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, ManageEngine Exchange Reporter Plus Logs).
  5. Selecciona Webhook como el Tipo de origen.
  6. Selecciona ManageEngine Exchange Reporter Plus como el Tipo de registro.
  7. Haz clic en Siguiente.
  8. Especifica valores para los siguientes parámetros de entrada:
    • Delimitador de división (opcional): Ingresa \n para dividir eventos de varias líneas.
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
  9. Haz clic en Siguiente.
  10. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Genera y guarda la clave secreta

Después de crear el feed, debes generar una clave secreta para la autenticación:

  1. En la página de detalles del feed, haz clic en Generar clave secreta.
  2. Un diálogo muestra la clave secreta.
  3. Copia y guarda la clave secreta de forma segura.

Importante: La clave secreta solo se muestra una vez y no se puede recuperar más adelante. Si la pierdes, tendrás que generar una nueva.

Obtén la URL del extremo del feed

  1. Ve a la pestaña Detalles del feed.
  2. En la sección Endpoint Information, copia la URL del extremo del feed.
  3. El formato de la URL es el siguiente:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    o

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. Guarda esta URL para los próximos pasos.

  5. Haz clic en Listo.

Crea una clave de API de Google Cloud

Chronicle requiere una clave de API para la autenticación. Crea una clave de API restringida en la Google Cloud Console.

Crea la clave de API

  1. Ve a la página Credenciales de la consola de Google Cloud.
  2. Selecciona tu proyecto (el proyecto asociado con tu instancia de Chronicle).
  3. Haz clic en Crear credenciales > Clave de API.
  4. Se creará una clave de API y se mostrará en un diálogo.
  5. Haz clic en Editar clave de API para restringir la clave.

Restringe la clave de API

  1. En la página de configuración de la clave de API, haz lo siguiente:
    • Nombre: Ingresa un nombre descriptivo (por ejemplo, Chronicle Webhook API Key).
  2. En Restricciones de API, haz lo siguiente:
    1. Selecciona Restringir clave.
    2. En el menú desplegable Seleccionar APIs, busca y selecciona Google SecOps API (o Chronicle API).
  3. Haz clic en Guardar.
  4. Copia el valor de la clave de API del campo Clave de API en la parte superior de la página.
  5. Guarda la clave de API de forma segura.

Configura el webhook de ManageEngine Exchange Reporter Plus

Construye la URL del webhook

  • Combina la URL del extremo de Chronicle, la clave de API y la clave secreta:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • Ejemplo:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    

Configura el reenvío de registros en Exchange Reporter Plus

  1. Accede a la consola web de ManageEngine Exchange Reporter Plus como administrador.
  2. Ve a Configuración > Administrador > Configuración general > Reenvío de registros.
  3. Selecciona la casilla de verificación Habilitar reenvío de registros.
  4. Haz clic en la pestaña Webhook.
  5. Proporciona los siguientes detalles de configuración:
    • Método HTTP: Selecciona POST.
    • URL de HTTP: Pega la URL completa del webhook que creaste en el paso anterior (la URL del extremo de Chronicle con la clave de API y la clave secreta agregadas como parámetros de búsqueda).
  6. En la sección Configuración avanzada, haz lo siguiente:
    1. Haz clic en Encabezados de solicitud HTTP.
    2. Agrega el siguiente encabezado:
      • Key: Content-Type
      • Value: application/json
  7. Haz clic en Guardar.

Verifica el reenvío de registros

  1. Después de guardar la configuración, Exchange Reporter Plus comenzará a reenviar los registros de auditoría a Google SecOps a través del extremo del webhook.
  2. Accede a la consola de Google SecOps y verifica que los registros aparezcan en la interfaz de Search con la etiqueta de transferencia MANAGE_ENGINE_REPORTER_PLUS.

Configuración de firewall

Asegúrate de que estén configuradas las siguientes reglas de firewall.

Saliente desde el servidor de Exchange Reporter Plus:

  • Protocolo: HTTPS (TCP 443)
  • Destino: Extremo regional de Chronicle (malachiteingestion-pa.googleapis.com o tu extremo regional)
  • Propósito: Entrega de registros a Google SecOps a través de webhook

Referencia de métodos de autenticación

Los feeds de webhook de Chronicle admiten varios métodos de autenticación. Elige el método que admite tu proveedor.

Si tu proveedor admite encabezados HTTP personalizados, usa este método para mejorar la seguridad.

  • Formato de la solicitud:

    POST <ENDPOINT_URL> HTTP/1.1
    Content-Type: application/json
    x-goog-chronicle-auth: <API_KEY>
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Ventajas:

  • La clave y el secreto de la API no son visibles en la URL
  • Más seguro (los encabezados no se registran en los registros de acceso al servidor web)
  • Método preferido cuando el proveedor lo admite

Método 2: Parámetros de consulta

Si tu proveedor no admite encabezados personalizados, agrega credenciales a la URL.

  • Formato de URL:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • Ejemplo:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
    
  • Formato de la solicitud:

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Desventajas: - Las credenciales son visibles en la URL. - Es posible que se registren en los registros de acceso del servidor web. - Son menos seguras que los encabezados.

Método 3: Híbrido (URL + encabezado)

Algunas configuraciones usan la clave de API en la URL y la clave secreta en el encabezado.

  • Formato de la solicitud:

    POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1
    Content-Type: application/json
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

Nombres de encabezados de autenticación

Chronicle acepta los siguientes nombres de encabezado para la autenticación:

Para la clave de API, haz lo siguiente:

  • x-goog-chronicle-auth (recomendada)
  • X-Goog-Chronicle-Auth (no distingue mayúsculas de minúsculas)

Para la clave secreta, haz lo siguiente:

  • x-chronicle-auth (recomendada)
  • X-Chronicle-Auth (no distingue mayúsculas de minúsculas)

Límites y prácticas recomendadas para webhooks

Límites de solicitudes

Límite Valor
Tamaño máximo de la solicitud 4 MB
QPS máx. (consultas por segundo) 15,000
Tiempo de espera de la solicitud 30 segundos
Comportamiento de reintento Automática con retirada exponencial

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
msg.OrganizationId additional.fields Etiquetas combinadas con la clave "OrganizationId" y el valor de msg.OrganizationId; la clave "MailboxGuid" y el valor de msg.MailboxGuid; la clave "RecordType" y el valor de msg.RecordType
msg.MailboxGuid additional.fields
msg.RecordType additional.fields
msg.CreationTime metadata.event_type Se establece en el valor de event_type si no está vacío; de lo contrario, se establece en "USER_UNCATEGORIZED" si msg.Operation == "Update"; de lo contrario, se establece en "USER_CREATION" si msg.Operation == "Create" y msg.MailboxOwnerUPN no está vacío; de lo contrario, se establece en "USER_UNCATEGORIZED" si msg.Operation == "Create"; de lo contrario, se establece en "USER_UNCATEGORIZED" si msg.UserId no está vacío; de lo contrario, se establece en "STATUS_UPDATE" si msg.ClientIP no está vacío; de lo contrario, se establece en "GENERIC_EVENT".
msg.Operation metadata.product_event_type Valor copiado directamente
msg.Id metadata.product_log_id Valor copiado directamente
msg.ClientVersion metadata.product_version Valor de msg.ClientVersion si no está vacío; de lo contrario, msg.Version se convierte en una cadena.
msg.Version metadata.product_version
AffectedItems.0.InternetMessageId network.email.mail_id Gsub <
AffectedItems network.email.subject Se analizó como JSON, se extrajo el elemento Subject y se combinó si se encontró.
msg.ClientInfoString network.http.user_agent Valor de msg.ClientInfoString si no está vacío; de lo contrario, msg.Client
msg.Client network.http.user_agent
msg.ClientProcessName principal.application Valor copiado directamente
msg.OriginatingServer principal.hostname Se extrae con el patrón de Grok si se realiza correctamente; de lo contrario, se copia el valor directamente.
clientIP principal.ip Se extrajo de msg.ClientIP con grok
clientPort principal.port Se extrae de msg.ClientIP con grok y se convierte en un número entero.
msg.UserKey principal.user.attribute.labels Establece la clave de la etiqueta en "UserKey", el valor en msg.UserKey y la combinación.
msg.UserType principal.user.attribute.roles Establece roles.name en msg.UserType, combinado
msg.UserId principal.user.email_addresses Se fusiona si msg.UserId coincide con la regex de correo electrónico
msg.UserId principal.user.userid Valor copiado directamente
msg.MailboxOwnerSid principal.user.windows_sid Valor de msg.MailboxOwnerSid si no está vacío; de lo contrario, msg.LogonUserSid
msg.LogonUserSid principal.user.windows_sid
security_result security_result Se combinó a partir del hash de security_result
security_result_action security_result.action Se combinó de security_result_action
msg.ResultStatus security_result.action_details Valor copiado directamente
msg.RecordType security_result.detection_fields Se convirtió en cadena, se estableció la clave "RecordType", se estableció el valor en msg.RecordType y se combinó.
msg.OrganizationName target.administrative_domain Valor copiado directamente
msg.DestFolder target.file.full_path Se extrajeron fileId y filePath con grok, se reemplazaron las barras inversas con gsubs y se concatenaron como fileId/filePath.
host target.hostname Valor copiado directamente
msg.Folder target.process.parent_process.file.full_path Se extrajeron parentFileId y parentFilePath con grok, se reemplazaron las barras inversas con gsubs y se concatenaron como parentFileId/parentFilePath.
msg.MailboxOwnerUPN target.user.email_addresses Se combina si coincide con la regex de correo electrónico
msg.MailboxOwnerUPN target.user.user_display_name Se establece si contiene un espacio.
msg.MailboxOwnerUPN target.user.userid Se establece si no es un correo electrónico y no hay espacio.
metadata.product_name metadata.product_name Configurado como "Administrar motor"
metadata.vendor_name metadata.vendor_name Establece el valor en "Administrar Engine Reporter Plus".

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