Collecter les journaux Proofpoint On-Demand

Compatible avec :

Ce document explique comment ingérer les journaux Proofpoint On-Demand dans Google Security Operations à l'aide de l'intégration d'API intégrée. L'analyseur extrait les champs des journaux JSON et les transforme au format UDM de Chronicle. Il gère deux formats de journaux principaux : l'un contenant des métadonnées d'e-mails et l'autre contenant des détails sur les transactions SMTP. Il utilise une logique conditionnelle pour analyser les champs de manière appropriée et remplir les champs du modèle de données unifié (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 remplir les conditions suivantes :

  • Instance Google SecOps
  • Licence Proofpoint On-Demand Remote Syslog
  • Accès privilégié à Proofpoint

Configurer l'accès à l'API Proofpoint On-Demand

  1. Connectez-vous au portail Proofpoint Admin.
  2. Copiez votre ID de cluster (affiché en haut à droite de votre interface de gestion, à côté du numéro de version).
  3. Accédez à Paramètres > Gestion des clés API.
  4. Cliquez sur Créer pour ouvrir la boîte de dialogue Créer une clé API.
  5. Saisissez un nom unique (par exemple, Google SecOps Key).
  6. Générez la clé API.
  7. Sélectionnez Afficher les détails dans le menu à trois points de la nouvelle clé API.
  8. Copiez la clé API.

Configurer des flux

Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :

  • Paramètres SIEM> Flux
  • Plate-forme de contenu > Packs de contenu

Configurer des flux à partir de Paramètres SIEM > Flux

Pour configurer un flux, procédez comme suit :

  1. Accédez à Paramètres SIEM > Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, PoD Logs).
  5. Sélectionnez API tierce comme Type de source.
  6. Sélectionnez le type de journal Proofpoint On-Demand.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    • En-têtes HTTP d'authentification : saisissez la clé API Proofpoint au format Authorization: Bearer {API_KEY}, puis ajoutez une nouvelle ligne avec les données WebSocket-Key suivantes : Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==.
    • ID de cluster : saisissez l'ID de cluster Proofpoint que vous avez copié précédemment.
  9. Cliquez sur Suivant.

  10. Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Configurer des flux depuis le Hub de contenu

Indiquez les valeurs des champs suivants :

  • En-têtes HTTP d'authentification : saisissez la clé API Proofpoint au format Authorization: Bearer {API_KEY}, puis ajoutez une nouvelle ligne avec les données WebSocket-Key suivantes : Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==.
  • ID de cluster : saisissez l'ID de cluster Proofpoint que vous avez copié précédemment.

Options avancées

  • Nom du flux : valeur préremplie qui identifie le flux.
  • Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
  • Espace de noms de l'élément : espace de noms associé au flux.
  • Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.

Table 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 définie sur "NONE".
connection.tls.inbound.version network.tls.version La valeur provient directement du champ connection.tls.inbound.version du journal brut, sauf si le chiffrement est défini sur "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 s'il est présent.
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 analysée à partir 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 du 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 du 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 du 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 du 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 du 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 du 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 du 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 du 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 du 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 du 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 du 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 du 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 du 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", network.direction est défini sur "INBOUND". Si filter.routeDirection est défini sur "outbound", network.direction est défini sur "OUTBOUND".
filter.routes read_only_udm.additional.fields Chaque itinéraire de 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 analysée à partir 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 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 "about" 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 suppression des signes "<" 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 de 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 définie sur "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 du journal brut, sauf si le chiffrement est défini sur "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.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.