Collecter les journaux Proofpoint à la demande
Cet analyseur extrait des champs des journaux JSON Proofpoint à la demande et les transforme au format UDM. Il gère deux formats de journal principaux: l'un contenant des métadonnées de messagerie et l'autre des informations sur les transactions SMTP, à l'aide d'une logique conditionnelle pour analyser correctement les champs et renseigner les champs UDM en fonction des données disponibles. L'analyseur effectue également un nettoyage des données, par exemple en supprimant les caractères superflus et en convertissant les codes temporels.
Avant de commencer
- Assurez-vous de disposer d'une instance Google Security Operations.
- Assurez-vous de disposer de la licence Proofpoint On Demand Remote Syslog.
- Assurez-vous de disposer d'un accès privilégié à Proofpoint.
Configurer l'accès à l'API Proofpoint on Demand
- Connectez-vous au portail d'administration Proofpoint.
- Copiez votre ID de cluster, qui s'affiche dans votre interface de gestion à côté du numéro de version.
- Sélectionnez Settings (Paramètres) > API Key Management (Gestion des clés API).
- Cliquez sur Créer pour afficher la boîte de dialogue Créer une clé API.
- Saisissez un nom unique (par exemple, Google SecOps).
- Générez la clé API.
- Sélectionnez Afficher les détails dans le menu de la nouvelle clé API.
- Copiez la clé API.
Configurer un flux dans Google SecOps pour ingérer les journaux Proofpoint On Demand (PoD)
- Accédez à Paramètres du SIEM > Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux de POD).
- Sélectionnez API tierce comme type de source.
- Sélectionnez Proofpoint On Demand comme type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- En-têtes HTTP d'authentification: saisissez la clé API Proofpoint au format
key:<value>
. - ID de cluster: saisissez l'ID de cluster Proofpoint que vous avez copié précédemment.
- Espace de noms des éléments: espace de noms des éléments.
- Libellés d'ingestion: libellé appliqué aux événements de ce flux.
- En-têtes HTTP d'authentification: saisissez la clé API Proofpoint au format
- Cliquez sur Suivant.
- Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
classification |
security_result.detection_fields.classification |
La valeur provient directement du champ classification du journal brut. |
cluster |
security_result.detection_fields.cluster |
La valeur provient directement du champ cluster du journal brut. |
completelyRewritten |
security_result.detection_fields.completelyRewritten |
La valeur provient directement du champ completelyRewritten du journal brut. |
connection.country |
principal.location.country_or_region |
La valeur provient directement du champ connection.country du journal brut, sauf si elle est "**". |
connection.host |
principal.hostname |
La valeur provient directement du champ connection.host du journal brut. |
connection.ip |
principal.ip |
La valeur provient directement du champ connection.ip du journal brut, s'il s'agit d'une adresse IPv4 valide. Il est également fusionné avec senderIP , le cas échéant. |
connection.protocol |
network.application_protocol |
La partie du protocole avant le deux-points dans connection.protocol est extraite à l'aide de gsub et mappée. Par exemple, "smtp:smtp" devient "SMTP". |
connection.tls.inbound.cipher |
network.tls.cipher |
La valeur provient directement du champ connection.tls.inbound.cipher du journal brut, sauf si elle est "NONE". |
connection.tls.inbound.version |
network.tls.version |
La valeur provient directement du champ connection.tls.inbound.version dans le journal brut, sauf si le chiffrement est "NONE". |
envelope.from |
network.email.from |
La valeur provient directement du champ envelope.from du journal brut. Il est également remplacé par sm.from ou fromAddress , le cas échéant. |
envelope.rcpts |
network.email.to |
Les adresses e-mail de envelope.rcpts sont fusionnées dans le champ network.email.to si elles sont valides. Il est également fusionné avec sm.to ou toAddresses , le cas échéant. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
Les adresses e-mail hachées dans envelope.rcptsHashed sont ajoutées en tant que champs supplémentaires avec des clés telles que "toHashed_0", "toHashed_1", etc. |
eventTime |
@timestamp |
La valeur est extraite du champ eventTime au format ISO8601 ou RFC 3339. |
eventType |
security_result.summary |
La valeur provient directement du champ eventType du journal brut. |
filter.disposition |
security_result.action_details |
La valeur provient directement du champ filter.disposition dans le journal brut, sauf si tls.verify est présent. |
filter.modules.av.virusNames.0 |
security_result.threat_name |
La valeur provient directement du champ filter.modules.av.virusNames.0 du journal brut. |
filter.modules.dmarc.authResults |
read_only_udm.additional.fields |
La méthode et le résultat de chaque entrée dans filter.modules.dmarc.authResults sont ajoutés en tant que champs supplémentaires avec des clés telles que "authResultsMethod_0", "authResults_result_0", "authResultsMethod_1", etc. |
filter.modules.spam.langs |
read_only_udm.additional.fields |
Chaque langue dans filter.modules.spam.langs est ajoutée en tant que champ supplémentaire avec des clés telles que "lang_0", "lang_1", etc. |
filter.modules.spam.safeBlockedListMatches.0.listType |
security_result.detection_fields.safeBlockedListMatches_listType |
La valeur provient directement du champ filter.modules.spam.safeBlockedListMatches.0.listType du journal brut. |
filter.modules.spam.safeBlockedListMatches.0.rule |
security_result.detection_fields.safeBlockedListMatches_rule |
La valeur provient directement du champ filter.modules.spam.safeBlockedListMatches.0.rule du journal brut. |
filter.modules.spam.scores.classifiers.adult |
security_result.detection_fields.adult |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.adult dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.bulk |
security_result.detection_fields.bulk |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.bulk dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.impostor |
security_result.detection_fields.impostor |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.impostor dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.lowpriority |
security_result.detection_fields.lowpriority |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.lowpriority dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.malware |
security_result.detection_fields.malware |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.malware dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.mlx |
security_result.detection_fields.mlx |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.mlx dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.mlxlog |
security_result.detection_fields.mlxlog |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.mlxlog dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.phish |
security_result.detection_fields.phish |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.phish dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.spam |
security_result.detection_fields.spam |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.spam dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.classifiers.suspect |
security_result.detection_fields.suspect |
La valeur provient directement du champ filter.modules.spam.scores.classifiers.suspect dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.engine |
security_result.detection_fields.engine |
La valeur provient directement du champ filter.modules.spam.scores.engine dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.scores.overall |
security_result.detection_fields.overall |
La valeur provient directement du champ filter.modules.spam.scores.overall dans le journal brut, s'il n'est pas vide ni égal à 0. |
filter.modules.spam.version.definitions |
security_result.summary |
La valeur provient directement du champ filter.modules.spam.version.definitions du journal brut. |
filter.modules.spam.version.engine |
metadata.product_version |
La valeur provient directement du champ filter.modules.spam.version.engine du journal brut. |
filter.modules.urldefense.counts.rewritten |
read_only_udm.additional.fields.urldefenseCountsRewritten |
La valeur provient directement du champ filter.modules.urldefense.counts.rewritten du journal brut. |
filter.modules.urldefense.counts.total |
security_result.detection_fields.urldefense_total |
La valeur provient directement du champ filter.modules.urldefense.counts.total du journal brut. |
filter.modules.zerohour.score |
read_only_udm.additional.fields.zeroHourScore |
La valeur provient directement du champ filter.modules.zerohour.score du journal brut. |
filter.origGuid |
read_only_udm.additional.fields.origGuid |
La valeur provient directement du champ filter.origGuid du journal brut. |
filter.qid |
read_only_udm.additional.fields.filterQid |
La valeur provient directement du champ filter.qid du journal brut. |
filter.quarantine.folder |
security_result.detection_fields.filter_quarantine_folder |
La valeur provient directement du champ filter.quarantine.folder du journal brut. |
filter.quarantine.folderId |
security_result.detection_fields.filter_quarantine_folderId |
La valeur provient directement du champ filter.quarantine.quarantine.folderId du journal brut. |
filter.quarantine.module |
security_result.detection_fields.filter_quarantine_module |
La valeur provient directement du champ filter.quarantine.module du journal brut. |
filter.quarantine.rule |
security_result.detection_fields.filter_quarantine_rule |
La valeur provient directement du champ filter.quarantine.rule du journal brut. |
filter.quarantine.type |
security_result.detection_fields.filter_quarantine_type |
La valeur provient directement du champ filter.quarantine.type du journal brut. |
filter.routeDirection |
network.direction |
Si filter.routeDirection est défini sur "inbound" (entrant), network.direction est défini sur "INBOUND". Si filter.routeDirection est "outbound", network.direction est défini sur "OUTBOUND". |
filter.routes |
read_only_udm.additional.fields |
Chaque itinéraire dans filter.routes est ajouté en tant que champ supplémentaire avec des clés telles que "filterRoutes_0", "filterRoutes_1", etc. |
fromAddress |
network.email.from |
Les adresses e-mail de fromAddress sont remplacées dans le champ network.email.from si elles sont valides. |
guid |
metadata.product_log_id |
La valeur provient directement du champ guid du journal brut. |
GUID |
metadata.product_log_id |
La valeur provient directement du champ GUID du journal brut. |
headerFrom |
network.email.from |
La valeur provient directement du champ headerFrom du journal brut. |
impostorScore |
security_result.detection_fields.impostorScore |
La valeur provient directement du champ impostorScore du journal brut. |
malwareScore |
security_result.detection_fields.malwareScore |
La valeur provient directement du champ malwareScore du journal brut. |
messageID |
network.email.mail_id |
La valeur provient directement du champ messageID du journal brut. |
messageSize |
security_result.detection_fields.messageSize |
La valeur provient directement du champ messageSize du journal brut. |
messageTime |
@timestamp |
La valeur est extraite du champ messageTime au format ISO8601 ou RFC 3339. |
metadata.customerId |
principal.labels.customerId |
La valeur provient directement du champ metadata.customerId du journal brut. |
metadata.origin.data.agent |
network.http.user_agent |
La valeur provient directement du champ metadata.origin.data.agent du journal brut. |
metadata.origin.data.cid |
principal.user.userid |
La valeur provient directement du champ metadata.origin.data.cid du journal brut. |
metadata.origin.data.version |
metadata.product_version |
La valeur provient directement du champ metadata.origin.data.version du journal brut. |
msg.header.from |
read_only_udm.additional.fields.msgHeaderFrom |
La valeur provient directement du champ msg.header.from.0 du journal brut. |
msg.header.reply-to |
network.email.reply_to |
L'adresse e-mail placée entre <> dans msg.header.reply-to.0 est extraite et mappée. |
msg.header.subject |
network.email.subject |
La valeur provient directement du champ msg.header.subject du journal brut. |
msg.header.to |
read_only_udm.additional.fields.msgHeaderTo |
La valeur provient directement du champ msg.header.to du journal brut. |
msg.normalizedHeader.subject |
network.email.subject |
La valeur provient directement du champ msg.normalizedHeader.subject du journal brut. |
msg.parsedAddresses.cc |
network.email.cc |
Les adresses e-mail de msg.parsedAddresses.cc sont fusionnées dans le champ network.email.cc si elles sont valides. |
msg.parsedAddresses.ccHashed |
read_only_udm.additional.fields |
Les adresses e-mail hachées dans msg.parsedAddresses.ccHashed sont ajoutées en tant que champs supplémentaires avec des clés telles que "ccHashed_0", "ccHashed_1", etc. |
msg.parsedAddresses.from |
read_only_udm.additional.fields.msgParsedAddressesFrom |
La valeur provient directement du champ msg.parsedAddresses.from.0 du journal brut. |
msg.parsedAddresses.from.0 |
principal.user.email_addresses |
La valeur provient directement du champ msg.parsedAddresses.from.0 du journal brut. |
msg.parsedAddresses.fromHashed |
read_only_udm.additional.fields.fromHashed |
La valeur provient directement du champ msg.parsedAddresses.fromHashed.0 du journal brut. |
msg.parsedAddresses.to |
target.user.email_addresses |
Les adresses e-mail de msg.parsedAddresses.to sont fusionnées dans le champ target.user.email_addresses si elles sont valides. |
msgParts |
read_only_udm.about |
Plusieurs objets "à propos" sont créés, un pour chaque entrée dans msgParts . Les hachages de fichier, le type MIME, la taille et d'autres métadonnées sont extraits. |
QID |
security_result.detection_fields.QID |
La valeur provient directement du champ QID du journal brut. |
recipient |
target.user.email_addresses |
Les adresses e-mail de recipient sont fusionnées dans le champ target.user.email_addresses si elles sont valides. |
replyToAddress |
network.email.reply_to |
Les adresses e-mail de replyToAddress sont remplacées dans le champ network.email.reply_to si elles sont valides. |
sender |
principal.user.email_addresses |
La valeur provient directement du champ sender du journal brut, s'il s'agit d'une adresse e-mail valide. |
senderIP |
principal.ip |
La valeur provient directement du champ senderIP du journal brut. |
sm.from |
network.email.from |
La valeur provient directement du champ sm.from du journal brut. |
sm.msgid |
network.email.mail_id |
La valeur provient directement du champ sm.msgid du journal brut, après avoir supprimé "<" et ">". |
sm.proto |
network.application_protocol |
La valeur provient directement du champ sm.proto du journal brut. |
sm.qid |
security_result.detection_fields.QUID |
La valeur provient directement du champ sm.qid du journal brut. |
sm.relay |
intermediary.hostname , intermediary.ip |
Le nom d'hôte et l'adresse IP sont extraits de sm.relay à l'aide de grok. |
sm.stat |
security_result.detection_fields.Stat |
Le premier mot de sm.stat est extrait à l'aide de grok et mappé. |
sm.to |
network.email.to |
Les adresses e-mail de sm.to sont fusionnées dans le champ network.email.to si elles sont valides. |
spamScore |
security_result.detection_fields.spamScore |
La valeur provient directement du champ spamScore du journal brut. |
subject |
network.email.subject |
La valeur provient directement du champ subject du journal brut. |
threat |
security_result.detection_fields.threat |
La valeur provient directement du champ threat du journal brut. |
threatsInfoMap |
security_result.detection_fields |
Les paires clé-valeur de chaque entrée dans threatsInfoMap sont ajoutées en tant que champs de détection. |
threatType |
security_result.detection_fields.threatType |
La valeur provient directement du champ threatType du journal brut. |
tls.cipher |
network.tls.cipher |
La valeur provient directement du champ tls.cipher du journal brut, sauf si elle est "NONE". |
tls.verify |
security_result.action_details |
La valeur provient directement du champ tls.verify du journal brut. |
tls.version |
network.tls.version |
La valeur provient directement du champ tls.version dans le journal brut, sauf si le chiffrement est "NONE". |
toAddresses |
network.email.to |
Les adresses e-mail de toAddresses sont fusionnées dans le champ network.email.to si elles sont valides. |
ts |
@timestamp |
La valeur est analysée à partir du champ ts au format ISO8601 ou RFC 3339, après un prétraitement pour gérer les secondes fractionnaires supplémentaires. |
Modifications
2024-11-28
- Amélioration:
- Mappage de "msgParts.metadata.company" et "msgParts.metadata.author" sur "security_result.detection_fields".
- Suppression de la mise en correspondance en double de "email.subject".
- Modification de la mise en correspondance des champs "filter.modules.dmarc.authResults." de "additional.fields" à "security_result.detection_fields".
2024-08-28
- Amélioration:
- La clé "security_result.detection_fields" est passée de "filterQid" à "qid".
2024-08-21
- Amélioration:
- Mappage de "metadata.origin.data.cid" sur "additional.fields".
2024-07-22
- Amélioration:
- Si "about.file.size" est un entier non signé valide, mappez "msgPart.detectedSizeBytes" sur "about.file.size".
- Ajout de la compatibilité avec un nouveau format de journaux SYSLOG.
2024-07-09
- Amélioration:
- Mappage de "msg.header.x-mailer" sur "additional.fields".
2024-07-09
- Amélioration:
- Mappage de "msg.header.x-mailer" sur "additional.fields".
2023-11-13
- Mappage de "subject" sur "network.email.subject".
- "messageID" a été mappé sur "network.email.mail_id".
- Mappage de "fromAddress" sur "network.email.from".
- Mappage de "ccAddresses" sur "network.email.cc".
- Mappage de "replyToAddress" sur "network.email.reply_to".
- Mappage de "toAddresses" sur "network.email.to".
- Mappage de "sender" sur "principal.user.email_addresses".
- Mappage de "senderIP" sur "principal.ip".
- Mappage de "recipient" sur "target.user.email_addresses".
- Mappage de "spamScore", "phishScore", "threatsInfoMap", "impostorScore", "malwareScore" et "" sur "security_result.detection_fields".
2023-10-26
- Mappage de "msg.headeparsedAddressesr.from.0" sur "principal.user.email_addresses".
- Les mappages ont été modifiés pour passer des champs UDM obsolètes à d'autres champs.
- Ajout de la mise en correspondance de "about.labels" à "about.resource.attribute.labels".
- Ajout de la mise en correspondance de "principal.labels" à "principal.resource.attribute.labels".
2023-06-05
- Ajout d'une vérification de "msg.header.reply-to.0" avant le mappage vers UDM pour vérifier s'il s'agit d'un tableau d'adresses e-mail.
- Ajout d'une vérification de non-valeur "-1" à "msgPart.detectedSizeBytes" avant le mappage vers UDM.
2022-07-14
- Amélioration de la mise en correspondance de l'élément suivant avec l'élément UDM:
- Langues mappées sur additional.fields.
- Définitions mappées sur security_result.summary.
- Moteur mappé sur metadata.product_version.
2022-06-29
- Amélioration : ajout de gsub pour supprimer "<>' des champs "sm.msgid" et "msg.header.message-id.0" mappés sur "network.email.mail_id".
2022-05-20
- Amélioration de la mise en correspondance des éléments suivants avec des éléments UDM:
- Mappage de "tls.verify" et "filter.disposition" sur "security_result.action_details".
- Correspondance de "filter.modules.dmarc.authResults.result" avec "additional.fields".
- Mappage de "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" sur "security_result.detection_fields".
2022-04-13
- Amélioration de la mise en correspondance de l'élément suivant avec l'élément UDM:
- Mappage de filter.modules.av.virusNames sur "security_result.threat_name".