Recopila registros de Proofpoint On-Demand

Compatible con:

Este analizador extrae campos de los registros JSON On-Demand de Proofpoint y los transforma en el formato UDM. Controla dos formatos de registro principales: uno que contiene metadatos de correo electrónico y otro que contiene detalles de transacciones SMTP, y usa lógica condicional para analizar los campos de forma adecuada y propagar los campos de la UDM según los datos disponibles. El analizador también realiza la limpieza de datos, como quitar caracteres innecesarios y convertir marcas de tiempo.

Antes de comenzar

  • Asegúrate de tener una instancia de Google Security Operations.
  • Asegúrate de tener la licencia de Syslog remoto a pedido de Proofpoint.
  • Asegúrate de tener acceso con privilegios a Proofpoint.

Configura el acceso a la API de Proofpoint on Demand

  1. Accede al portal de administración de Proofpoint.
  2. Copia el ID del clúster, que se muestra en la interfaz de administración junto al número de versión.
  3. Selecciona Configuración > Administración de claves de API.
  4. Haz clic en Crear para mostrar el diálogo Crear clave de API nueva.
  5. Ingresa un Nombre único (por ejemplo, Google SecOps).
  6. Genera la clave de API.
  7. Selecciona Ver detalles en el menú de la nueva clave de API.
  8. Copia la clave de API.

Configura un feed en Google SecOps para transferir registros de Proofpoint On Demand (PoD)

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de PoD).
  4. Selecciona API de terceros como el Tipo de origen.
  5. Selecciona Proofpoint On Demand como el tipo de registro.
  6. Haz clic en Siguiente.
  7. Especifica valores para los siguientes parámetros de entrada:
    • Encabezados HTTP de autenticación: Ingresa la clave de API de Proofpoint en formato key:<value>.
    • ID de clúster: Ingresa el ID de clúster de Proofpoint que copiaste antes.
    • Espacio de nombres de recursos: Es el espacio de nombres de recursos.
    • Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
  8. Haz clic en Siguiente.
  9. Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
classification security_result.detection_fields.classification El valor proviene directamente del campo classification en el registro sin procesar.
cluster security_result.detection_fields.cluster El valor proviene directamente del campo cluster en el registro sin procesar.
completelyRewritten security_result.detection_fields.completelyRewritten El valor proviene directamente del campo completelyRewritten en el registro sin procesar.
connection.country principal.location.country_or_region El valor proviene directamente del campo connection.country en el registro sin procesar, a menos que sea "**".
connection.host principal.hostname El valor proviene directamente del campo connection.host en el registro sin procesar.
connection.ip principal.ip El valor proviene directamente del campo connection.ip en el registro sin procesar, si es una dirección IPv4 válida. También se combina con senderIP, si está presente.
connection.protocol network.application_protocol La parte del protocolo antes del dos puntos en connection.protocol se extrae con gsub y se asigna. Por ejemplo, "smtp:smtp" se convierte en "SMTP".
connection.tls.inbound.cipher network.tls.cipher El valor proviene directamente del campo connection.tls.inbound.cipher en el registro sin procesar, a menos que sea "NONE".
connection.tls.inbound.version network.tls.version El valor proviene directamente del campo connection.tls.inbound.version en el registro sin procesar, a menos que el algoritmo de cifrado sea “NONE”.
envelope.from network.email.from El valor proviene directamente del campo envelope.from en el registro sin procesar. También se reemplaza por sm.from o fromAddress, si está presente.
envelope.rcpts network.email.to Las direcciones de correo electrónico en envelope.rcpts se combinan en el campo network.email.to si son válidas. También se combina con sm.to o toAddresses si está presente.
envelope.rcptsHashed read_only_udm.additional.fields Las direcciones de correo electrónico con hash en envelope.rcptsHashed se agregan como campos adicionales con claves como "toHashed_0", "toHashed_1", etcétera.
eventTime @timestamp El valor se analiza del campo eventTime con el formato ISO8601 o RFC 3339.
eventType security_result.summary El valor proviene directamente del campo eventType en el registro sin procesar.
filter.disposition security_result.action_details El valor proviene directamente del campo filter.disposition en el registro sin procesar, a menos que tls.verify esté presente.
filter.modules.av.virusNames.0 security_result.threat_name El valor proviene directamente del campo filter.modules.av.virusNames.0 en el registro sin procesar.
filter.modules.dmarc.authResults read_only_udm.additional.fields El método y el resultado de cada entrada en filter.modules.dmarc.authResults se agregan como campos adicionales con claves como "authResultsMethod_0", "authResults_result_0", "authResultsMethod_1", etcétera.
filter.modules.spam.langs read_only_udm.additional.fields Cada idioma en filter.modules.spam.langs se agrega como un campo adicional con claves como "lang_0", "lang_1", etcétera.
filter.modules.spam.safeBlockedListMatches.0.listType security_result.detection_fields.safeBlockedListMatches_listType El valor proviene directamente del campo filter.modules.spam.safeBlockedListMatches.0.listType en el registro sin procesar.
filter.modules.spam.safeBlockedListMatches.0.rule security_result.detection_fields.safeBlockedListMatches_rule El valor proviene directamente del campo filter.modules.spam.safeBlockedListMatches.0.rule en el registro sin procesar.
filter.modules.spam.scores.classifiers.adult security_result.detection_fields.adult El valor proviene directamente del campo filter.modules.spam.scores.classifiers.adult en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.bulk security_result.detection_fields.bulk El valor proviene directamente del campo filter.modules.spam.scores.classifiers.bulk en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.impostor security_result.detection_fields.impostor El valor proviene directamente del campo filter.modules.spam.scores.classifiers.impostor en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.lowpriority security_result.detection_fields.lowpriority El valor proviene directamente del campo filter.modules.spam.scores.classifiers.lowpriority en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.malware security_result.detection_fields.malware El valor proviene directamente del campo filter.modules.spam.scores.classifiers.malware en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.mlx security_result.detection_fields.mlx El valor proviene directamente del campo filter.modules.spam.scores.classifiers.mlx en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.mlxlog security_result.detection_fields.mlxlog El valor proviene directamente del campo filter.modules.spam.scores.classifiers.mlxlog en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.phish security_result.detection_fields.phish El valor proviene directamente del campo filter.modules.spam.scores.classifiers.phish en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.spam security_result.detection_fields.spam El valor proviene directamente del campo filter.modules.spam.scores.classifiers.spam en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.classifiers.suspect security_result.detection_fields.suspect El valor proviene directamente del campo filter.modules.spam.scores.classifiers.suspect en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.engine security_result.detection_fields.engine El valor proviene directamente del campo filter.modules.spam.scores.engine en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.scores.overall security_result.detection_fields.overall El valor proviene directamente del campo filter.modules.spam.scores.overall en el registro sin procesar, si no está vacío o es 0.
filter.modules.spam.version.definitions security_result.summary El valor proviene directamente del campo filter.modules.spam.version.definitions en el registro sin procesar.
filter.modules.spam.version.engine metadata.product_version El valor proviene directamente del campo filter.modules.spam.version.engine en el registro sin procesar.
filter.modules.urldefense.counts.rewritten read_only_udm.additional.fields.urldefenseCountsRewritten El valor proviene directamente del campo filter.modules.urldefense.counts.rewritten en el registro sin procesar.
filter.modules.urldefense.counts.total security_result.detection_fields.urldefense_total El valor proviene directamente del campo filter.modules.urldefense.counts.total en el registro sin procesar.
filter.modules.zerohour.score read_only_udm.additional.fields.zeroHourScore El valor proviene directamente del campo filter.modules.zerohour.score en el registro sin procesar.
filter.origGuid read_only_udm.additional.fields.origGuid El valor proviene directamente del campo filter.origGuid en el registro sin procesar.
filter.qid read_only_udm.additional.fields.filterQid El valor proviene directamente del campo filter.qid en el registro sin procesar.
filter.quarantine.folder security_result.detection_fields.filter_quarantine_folder El valor proviene directamente del campo filter.quarantine.folder en el registro sin procesar.
filter.quarantine.folderId security_result.detection_fields.filter_quarantine_folderId El valor proviene directamente del campo filter.quarantine.quarantine.folderId en el registro sin procesar.
filter.quarantine.module security_result.detection_fields.filter_quarantine_module El valor proviene directamente del campo filter.quarantine.module en el registro sin procesar.
filter.quarantine.rule security_result.detection_fields.filter_quarantine_rule El valor proviene directamente del campo filter.quarantine.rule en el registro sin procesar.
filter.quarantine.type security_result.detection_fields.filter_quarantine_type El valor proviene directamente del campo filter.quarantine.type en el registro sin procesar.
filter.routeDirection network.direction Si filter.routeDirection es "inbound", network.direction se establece en "INBOUND". Si filter.routeDirection es "outbound", network.direction se establece en "OUTBOUND".
filter.routes read_only_udm.additional.fields Cada ruta en filter.routes se agrega como un campo adicional con claves como "filterRoutes_0", "filterRoutes_1", etc.
fromAddress network.email.from Las direcciones de correo electrónico en fromAddress se reemplazan en el campo network.email.from si son válidas.
guid metadata.product_log_id El valor proviene directamente del campo guid en el registro sin procesar.
GUID metadata.product_log_id El valor proviene directamente del campo GUID en el registro sin procesar.
headerFrom network.email.from El valor proviene directamente del campo headerFrom en el registro sin procesar.
impostorScore security_result.detection_fields.impostorScore El valor proviene directamente del campo impostorScore en el registro sin procesar.
malwareScore security_result.detection_fields.malwareScore El valor proviene directamente del campo malwareScore en el registro sin procesar.
messageID network.email.mail_id El valor proviene directamente del campo messageID en el registro sin procesar.
messageSize security_result.detection_fields.messageSize El valor proviene directamente del campo messageSize en el registro sin procesar.
messageTime @timestamp El valor se analiza del campo messageTime con el formato ISO8601 o RFC 3339.
metadata.customerId principal.labels.customerId El valor proviene directamente del campo metadata.customerId en el registro sin procesar.
metadata.origin.data.agent network.http.user_agent El valor proviene directamente del campo metadata.origin.data.agent en el registro sin procesar.
metadata.origin.data.cid principal.user.userid El valor proviene directamente del campo metadata.origin.data.cid en el registro sin procesar.
metadata.origin.data.version metadata.product_version El valor proviene directamente del campo metadata.origin.data.version en el registro sin procesar.
msg.header.from read_only_udm.additional.fields.msgHeaderFrom El valor proviene directamente del campo msg.header.from.0 en el registro sin procesar.
msg.header.reply-to network.email.reply_to La dirección de correo electrónico encerrada entre <> en msg.header.reply-to.0 se extrae y asigna.
msg.header.subject network.email.subject El valor proviene directamente del campo msg.header.subject en el registro sin procesar.
msg.header.to read_only_udm.additional.fields.msgHeaderTo El valor proviene directamente del campo msg.header.to en el registro sin procesar.
msg.normalizedHeader.subject network.email.subject El valor proviene directamente del campo msg.normalizedHeader.subject en el registro sin procesar.
msg.parsedAddresses.cc network.email.cc Las direcciones de correo electrónico en msg.parsedAddresses.cc se combinan en el campo network.email.cc si son válidas.
msg.parsedAddresses.ccHashed read_only_udm.additional.fields Las direcciones de correo electrónico con codificación hash en msg.parsedAddresses.ccHashed se agregan como campos adicionales con claves como "ccHashed_0", "ccHashed_1", etcétera.
msg.parsedAddresses.from read_only_udm.additional.fields.msgParsedAddressesFrom El valor proviene directamente del campo msg.parsedAddresses.from.0 en el registro sin procesar.
msg.parsedAddresses.from.0 principal.user.email_addresses El valor proviene directamente del campo msg.parsedAddresses.from.0 en el registro sin procesar.
msg.parsedAddresses.fromHashed read_only_udm.additional.fields.fromHashed El valor proviene directamente del campo msg.parsedAddresses.fromHashed.0 en el registro sin procesar.
msg.parsedAddresses.to target.user.email_addresses Las direcciones de correo electrónico en msg.parsedAddresses.to se combinan en el campo target.user.email_addresses si son válidas.
msgParts read_only_udm.about Se crean varios objetos about, uno para cada entrada en msgParts. Se extraen los hashes de archivos, el tipo de MIME, el tamaño y otros metadatos.
QID security_result.detection_fields.QID El valor proviene directamente del campo QID en el registro sin procesar.
recipient target.user.email_addresses Las direcciones de correo electrónico en recipient se combinan en el campo target.user.email_addresses si son válidas.
replyToAddress network.email.reply_to Las direcciones de correo electrónico en replyToAddress se reemplazan en el campo network.email.reply_to si son válidas.
sender principal.user.email_addresses El valor proviene directamente del campo sender en el registro sin procesar, si es una dirección de correo electrónico válida.
senderIP principal.ip El valor proviene directamente del campo senderIP en el registro sin procesar.
sm.from network.email.from El valor proviene directamente del campo sm.from en el registro sin procesar.
sm.msgid network.email.mail_id El valor proviene directamente del campo sm.msgid en el registro sin procesar, después de quitar "<" y ">".
sm.proto network.application_protocol El valor proviene directamente del campo sm.proto en el registro sin procesar.
sm.qid security_result.detection_fields.QUID El valor proviene directamente del campo sm.qid en el registro sin procesar.
sm.relay intermediary.hostname, intermediary.ip El nombre de host y la dirección IP se extraen de sm.relay con grok.
sm.stat security_result.detection_fields.Stat La primera palabra de sm.stat se extrae con grok y se asigna.
sm.to network.email.to Las direcciones de correo electrónico en sm.to se combinan en el campo network.email.to si son válidas.
spamScore security_result.detection_fields.spamScore El valor proviene directamente del campo spamScore en el registro sin procesar.
subject network.email.subject El valor proviene directamente del campo subject en el registro sin procesar.
threat security_result.detection_fields.threat El valor proviene directamente del campo threat en el registro sin procesar.
threatsInfoMap security_result.detection_fields Los pares clave-valor de cada entrada en threatsInfoMap se agregan como campos de detección.
threatType security_result.detection_fields.threatType El valor proviene directamente del campo threatType en el registro sin procesar.
tls.cipher network.tls.cipher El valor proviene directamente del campo tls.cipher en el registro sin procesar, a menos que sea "NONE".
tls.verify security_result.action_details El valor proviene directamente del campo tls.verify en el registro sin procesar.
tls.version network.tls.version El valor proviene directamente del campo tls.version en el registro sin procesar, a menos que el algoritmo de cifrado sea “NONE”.
toAddresses network.email.to Las direcciones de correo electrónico en toAddresses se combinan en el campo network.email.to si son válidas.
ts @timestamp El valor se analiza desde el campo ts con el formato ISO8601 o RFC 3339, después de un procesamiento previo para controlar los segundos fraccionarios adicionales.

Cambios

2024-11-28

  • Mejora:
  • Se asignaron "msgParts.metadata.company" y "msgParts.metadata.author" a "security_result.detection_fields".
  • Se quitó la asignación duplicada de "email.subject".
  • Se cambió la asignación de los campos "filter.modules.dmarc.authResults" de "additional.fields" a "security_result.detection_fields".

2024-08-28

  • Mejora:
  • Se cambió la clave "security_result.detection_fields" de "filterQid" a "qid".

2024-08-21

  • Mejora:
  • Se asignó "metadata.origin.data.cid" a "additional.fields".

2024-07-22

  • Mejora:
  • Si "about.file.size" es un número entero sin signo válido, se asigna "msgPart.detectedSizeBytes" a "about.file.size".
  • Se agregó compatibilidad con el nuevo patrón de registros SYSLOG.

2024-07-09

  • Mejora:
  • Se asignó "msg.header.x-mailer" a "additional.fields".

2024-07-09

  • Mejora:
  • Se asignó "msg.header.x-mailer" a "additional.fields".

2023-11-13

  • Se asignó "subject" a "network.email.subject".
  • Se asignó "messageID" a "network.email.mail_id".
  • Se asignó "fromAddress" a "network.email.from".
  • Se asignó "ccAddresses" a "network.email.cc".
  • Se asignó "replyToAddress" a "network.email.reply_to".
  • Se asignó "toAddresses" a "network.email.to".
  • Se asignó "sender" a "principal.user.email_addresses".
  • Se asignó "senderIP" a "principal.ip".
  • Se asignó "recipient" a "target.user.email_addresses".
  • Se asignaron "spamScore", "phishScore", "threatsInfoMap", "impostorScore", "malwareScore" y "" a "security_result.detection_fields".

2023-10-26

  • Se asignó "msg.headeparsedAddressesr.from.0" a "principal.user.email_addresses".
  • Se modificaron las asignaciones de usar campos del UDM obsoletos a campos alternativos.
  • Se agregó la asignación de "about.labels" a "about.resource.attribute.labels".
  • Se agregó la asignación de "principal.labels" a "principal.resource.attribute.labels".

2023-06-05

  • Se agregó una verificación a "msg.header.reply-to.0" antes de la asignación a la AUA para verificar si es un array de correos electrónicos.
  • Se agregó una verificación que no sea "-1" a "msgPart.detectedSizeBytes" antes de la asignación a la UDM.

2022-07-14

  • Se mejoró la asignación del siguiente elemento al elemento UDM:
  • Se asignaron idiomas a additional.fields.
  • Definiciones asignadas a security_result.summary.
  • Se asignó el motor a metadata.product_version.

2022-06-29

  • Mejora: Se agregó gsub para quitar "<>" de los campos "sm.msgid" y "msg.header.message-id.0" asignados a "network.email.mail_id".

2022-05-20

  • Se realizaron mejoras para asignar los siguientes elementos a elementos de la UDM:
  • Se asignaron "tls.verify" y "filter.disposition" a "security_result.action_details".
  • Se asignó "filter.modules.dmarc.authResults.result" a "additional.fields".
  • Se asignaron "filter.quarantine.module", "filter.quarantine.folder", "filter.quarantine.type", "filter.quarantine.folderId", "filter.modules.spam.scores.overall", "filter.modules.spam.scores.engine", "filter.modules.spam.scores.classifiers.spam", "filter.modules.spam.scores.classifiers.mlxlog", "filter.modules.spam.scores.classifiers.phish", "filter.modules.spam.scores.classifiers.impostor", "filter.modules.spam.scores.classifiers.lowpriority", "filter.modules.spam.scores.classifiers.mlx", "filter.modules.spam.scores.classifiers.bulk", "filter.modules.spam.scores.classifiers.suspect", "filter.modules.spam.scores.classifiers.malware", "filter.modules.spam.scores.classifiers.adult" a "security_result.detection_fields".

2022-04-13

  • Se mejoró la asignación del siguiente elemento al elemento UDM:
  • Se asignó filter.modules.av.virusNames a "security_result.threat_name".