Recopila registros de Proofpoint On-Demand
En este documento, se explica cómo transferir registros de Proofpoint On-Demand a Google Security Operations con la integración de la API integrada. El analizador extrae campos de los registros JSON y los transforma al formato del UDM de Chronicle. Maneja dos formatos de registro principales: uno que contiene metadatos de correo electrónico y el otro que contiene detalles de transacciones SMTP, y usa lógica condicional para analizar los campos de forma adecuada y completar los campos del Modelo de datos unificado (UDM) según los datos disponibles. El analizador también realiza la limpieza de datos, como quitar caracteres extraños y convertir marcas de tiempo.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Licencia de Proofpoint On-Demand Remote Syslog
- Acceso con privilegios a Proofpoint
Configura el acceso a la API de Proofpoint On-Demand
- Accede al portal de administrador de Proofpoint.
- Copia tu ID de clúster (se muestra en la esquina superior derecha de la interfaz de administración, junto al número de versión).
- Ve a Configuración > Administración de claves de API.
- Haz clic en Crear nuevo para abrir el diálogo Crear clave de API nueva.
- Ingresa un Nombre único (por ejemplo,
Google SecOps Key). - Genera la clave de API.
- Selecciona Ver detalles en el menú de puntos suspensivos de la nueva clave de API.
- Copia la clave de API.
Configura feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- Haz clic en el paquete de feeds de Proofpoint.
- Selecciona el tipo de registro Proofpoint On-Demand.
- Haz clic en Siguiente.
- Especifica valores para los siguientes parámetros de entrada:
- Tipo de fuente: API de terceros
- Encabezados HTTP de autenticación: Ingresa la clave de API de Proofpoint en formato
Authorization: Bearer {API_KEY}y agrega una línea nueva con los siguientes datos de WebSocket-Key:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==. - ID de clúster: Ingresa el ID de clúster de Proofpoint que copiaste antes.
Opciones avanzadas
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Espacio de nombres del activo: Es el espacio de nombres asociado con el feed.
- Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.
- Haz clic en Crear feed.
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 que se encuentra antes de los 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 la codificación 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án presentes. |
envelope.rcpts |
network.email.to |
Las direcciones de correo electrónico en envelope.rcpts se combinan en el campo network.email.to si son direcciones de correo electrónico válidas. También se combina con sm.to o toAddresses si están presentes. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
Las direcciones de correo electrónico hasheadas en envelope.rcptsHashed se agregan como campos adicionales con claves como "toHashed_0", "toHashed_1", etcétera. |
eventTime |
@timestamp |
El valor se analiza a partir 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 esté presente tls.verify. |
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étera. |
fromAddress |
network.email.from |
Las direcciones de correo electrónico de fromAddress se reemplazan en el campo network.email.from si son direcciones de correo electrónico 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 a partir 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 |
Se extrae y se asigna la dirección de correo electrónico incluida entre <> en msg.header.reply-to.0. |
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 direcciones de correo electrónico 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 direcciones de correo electrónico válidas. |
msgParts |
read_only_udm.about |
Se crean varios objetos about, uno para cada entrada en msgParts. Se extraen los hashes, el tipo de MIME, el tamaño y otros metadatos del archivo. |
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 direcciones de correo electrónico válidas. |
replyToAddress |
network.email.reply_to |
Las direcciones de correo electrónico de replyToAddress se reemplazan en el campo network.email.reply_to si son direcciones de correo electrónico 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 direcciones de correo electrónico 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 la codificación sea "NONE". |
toAddresses |
network.email.to |
Las direcciones de correo electrónico en toAddresses se combinan en el campo network.email.to si son direcciones de correo electrónico válidas. |
ts |
@timestamp |
El valor se analiza a partir del campo ts con el formato ISO8601 o RFC 3339, después de un procesamiento previo para controlar los segundos fraccionarios adicionales. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.