Raccogliere i log di Proofpoint On-Demand
Questo parser estrae i campi dai log JSON di Proofpoint On-Demand e li trasforma nel formato UDM. Gestisce due formati di log principali: uno contenente i metadati delle email e l'altro contenente i dettagli delle transazioni SMTP, utilizzando la logica condizionale per analizzare i campi in modo appropriato e compilare i campi UDM in base ai dati disponibili. Il parser esegue anche la pulizia dei dati, ad esempio la rimozione di caratteri estranei e la conversione dei timestamp.
Prima di iniziare
- Assicurati di avere un'istanza Google Security Operations.
- Assicurati di disporre della licenza Proofpoint On Demand Remote Syslog.
- Assicurati di disporre di accesso privilegiato a Proofpoint.
Configurare l'accesso all'API Proofpoint on Demand
- Accedi al portale di amministrazione di Proofpoint.
- Copia l'ID cluster, visualizzato nell'interfaccia di gestione accanto al numero della release.
- Seleziona Impostazioni > Gestione chiavi API.
- Fai clic su Crea nuova per visualizzare la finestra di dialogo Crea nuova chiave API.
- Inserisci un nome univoco (ad esempio Google SecOps).
- Genera la chiave API.
- Seleziona Visualizza dettagli dal menu della nuova chiave API.
- Copia la chiave API.
Configurare un feed in Google SecOps per importare i log di Proofpoint On Demand (PoD)
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuova.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log PoD).
- Seleziona API di terze parti come Tipo di origine.
- Seleziona Proofpoint On Demand come tipo di log.
- Fai clic su Avanti.
- Specifica i valori per i seguenti parametri di input:
- Intestazioni HTTP di autenticazione: inserisci la chiave API Proofpoint in un formato
key:<value>
. - ID cluster: inserisci l'ID cluster Proofpoint che hai copiato in precedenza.
- Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- Intestazioni HTTP di autenticazione: inserisci la chiave API Proofpoint in un formato
- Fai clic su Avanti.
- Controlla la configurazione del feed nella schermata Concludi e poi fai clic su Invia.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
classification |
security_result.detection_fields.classification |
Il valore proviene direttamente dal campo classification nel log non elaborato. |
cluster |
security_result.detection_fields.cluster |
Il valore proviene direttamente dal campo cluster nel log non elaborato. |
completelyRewritten |
security_result.detection_fields.completelyRewritten |
Il valore proviene direttamente dal campo completelyRewritten nel log non elaborato. |
connection.country |
principal.location.country_or_region |
Il valore proviene direttamente dal campo connection.country nel log non elaborato, a meno che non sia "**". |
connection.host |
principal.hostname |
Il valore proviene direttamente dal campo connection.host nel log non elaborato. |
connection.ip |
principal.ip |
Il valore proviene direttamente dal campo connection.ip nel log non elaborato, se si tratta di un indirizzo IPv4 valido. Viene inoltre unito a senderIP , se presente. |
connection.protocol |
network.application_protocol |
La parte del protocollo prima dei due punti in connection.protocol viene estratta utilizzando gsub e mappata. Ad esempio, "smtp:smtp" diventa "SMTP". |
connection.tls.inbound.cipher |
network.tls.cipher |
Il valore proviene direttamente dal campo connection.tls.inbound.cipher nel log non elaborato, a meno che non sia "NESSUNO". |
connection.tls.inbound.version |
network.tls.version |
Il valore proviene direttamente dal campo connection.tls.inbound.version nel log non elaborato, a meno che la crittografia non sia "NESSUNA". |
envelope.from |
network.email.from |
Il valore proviene direttamente dal campo envelope.from nel log non elaborato. Viene sostituito anche da sm.from o fromAddress , se presenti. |
envelope.rcpts |
network.email.to |
Gli indirizzi email in envelope.rcpts vengono uniti al campo network.email.to se sono validi. Viene inoltre unito a sm.to o toAddresses , se presente. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
Gli indirizzi email sottomessi ad hashing in envelope.rcptsHashed vengono aggiunti come campi aggiuntivi con chiavi come "toHashed_0", "toHashed_1" e così via. |
eventTime |
@timestamp |
Il valore viene analizzato dal campo eventTime utilizzando il formato ISO8601 o RFC 3339. |
eventType |
security_result.summary |
Il valore proviene direttamente dal campo eventType nel log non elaborato. |
filter.disposition |
security_result.action_details |
Il valore proviene direttamente dal campo filter.disposition nel log non elaborato, a meno che non sia presente tls.verify . |
filter.modules.av.virusNames.0 |
security_result.threat_name |
Il valore proviene direttamente dal campo filter.modules.av.virusNames.0 nel log non elaborato. |
filter.modules.dmarc.authResults |
read_only_udm.additional.fields |
Il metodo e il risultato di ogni voce in filter.modules.dmarc.authResults vengono aggiunti come campi aggiuntivi con chiavi come "authResultsMethod_0", "authResults_result_0", "authResultsMethod_1" e così via. |
filter.modules.spam.langs |
read_only_udm.additional.fields |
Ogni lingua in filter.modules.spam.langs viene aggiunta come campo aggiuntivo con chiavi come "lang_0", "lang_1" e così via. |
filter.modules.spam.safeBlockedListMatches.0.listType |
security_result.detection_fields.safeBlockedListMatches_listType |
Il valore proviene direttamente dal campo filter.modules.spam.safeBlockedListMatches.0.listType nel log non elaborato. |
filter.modules.spam.safeBlockedListMatches.0.rule |
security_result.detection_fields.safeBlockedListMatches_rule |
Il valore proviene direttamente dal campo filter.modules.spam.safeBlockedListMatches.0.rule nel log non elaborato. |
filter.modules.spam.scores.classifiers.adult |
security_result.detection_fields.adult |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.adult nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.bulk |
security_result.detection_fields.bulk |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.bulk nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.impostor |
security_result.detection_fields.impostor |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.impostor nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.lowpriority |
security_result.detection_fields.lowpriority |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.lowpriority nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.malware |
security_result.detection_fields.malware |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.malware nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.mlx |
security_result.detection_fields.mlx |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.mlx nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.mlxlog |
security_result.detection_fields.mlxlog |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.mlxlog nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.phish |
security_result.detection_fields.phish |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.phish nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.spam |
security_result.detection_fields.spam |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.spam nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.classifiers.suspect |
security_result.detection_fields.suspect |
Il valore proviene direttamente dal campo filter.modules.spam.scores.classifiers.suspect nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.engine |
security_result.detection_fields.engine |
Il valore proviene direttamente dal campo filter.modules.spam.scores.engine nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.scores.overall |
security_result.detection_fields.overall |
Il valore proviene direttamente dal campo filter.modules.spam.scores.overall nel log non elaborato, se non è vuoto o 0. |
filter.modules.spam.version.definitions |
security_result.summary |
Il valore proviene direttamente dal campo filter.modules.spam.version.definitions nel log non elaborato. |
filter.modules.spam.version.engine |
metadata.product_version |
Il valore proviene direttamente dal campo filter.modules.spam.version.engine nel log non elaborato. |
filter.modules.urldefense.counts.rewritten |
read_only_udm.additional.fields.urldefenseCountsRewritten |
Il valore proviene direttamente dal campo filter.modules.urldefense.counts.rewritten nel log non elaborato. |
filter.modules.urldefense.counts.total |
security_result.detection_fields.urldefense_total |
Il valore proviene direttamente dal campo filter.modules.urldefense.counts.total nel log non elaborato. |
filter.modules.zerohour.score |
read_only_udm.additional.fields.zeroHourScore |
Il valore proviene direttamente dal campo filter.modules.zerohour.score nel log non elaborato. |
filter.origGuid |
read_only_udm.additional.fields.origGuid |
Il valore proviene direttamente dal campo filter.origGuid nel log non elaborato. |
filter.qid |
read_only_udm.additional.fields.filterQid |
Il valore proviene direttamente dal campo filter.qid nel log non elaborato. |
filter.quarantine.folder |
security_result.detection_fields.filter_quarantine_folder |
Il valore proviene direttamente dal campo filter.quarantine.folder nel log non elaborato. |
filter.quarantine.folderId |
security_result.detection_fields.filter_quarantine_folderId |
Il valore proviene direttamente dal campo filter.quarantine.quarantine.folderId nel log non elaborato. |
filter.quarantine.module |
security_result.detection_fields.filter_quarantine_module |
Il valore proviene direttamente dal campo filter.quarantine.module nel log non elaborato. |
filter.quarantine.rule |
security_result.detection_fields.filter_quarantine_rule |
Il valore proviene direttamente dal campo filter.quarantine.rule nel log non elaborato. |
filter.quarantine.type |
security_result.detection_fields.filter_quarantine_type |
Il valore proviene direttamente dal campo filter.quarantine.type nel log non elaborato. |
filter.routeDirection |
network.direction |
Se filter.routeDirection è "in entrata", network.direction è impostato su "INBOUND". Se filter.routeDirection è "outbound", network.direction è impostato su "OUTBOUND". |
filter.routes |
read_only_udm.additional.fields |
Ogni percorso in filter.routes viene aggiunto come campo aggiuntivo con chiavi come "filterRoutes_0", "filterRoutes_1" e così via. |
fromAddress |
network.email.from |
Gli indirizzi email in fromAddress vengono sostituiti nel campo network.email.from se sono indirizzi email validi. |
guid |
metadata.product_log_id |
Il valore proviene direttamente dal campo guid nel log non elaborato. |
GUID |
metadata.product_log_id |
Il valore proviene direttamente dal campo GUID nel log non elaborato. |
headerFrom |
network.email.from |
Il valore proviene direttamente dal campo headerFrom nel log non elaborato. |
impostorScore |
security_result.detection_fields.impostorScore |
Il valore proviene direttamente dal campo impostorScore nel log non elaborato. |
malwareScore |
security_result.detection_fields.malwareScore |
Il valore proviene direttamente dal campo malwareScore nel log non elaborato. |
messageID |
network.email.mail_id |
Il valore proviene direttamente dal campo messageID nel log non elaborato. |
messageSize |
security_result.detection_fields.messageSize |
Il valore proviene direttamente dal campo messageSize nel log non elaborato. |
messageTime |
@timestamp |
Il valore viene analizzato dal campo messageTime utilizzando il formato ISO8601 o RFC 3339. |
metadata.customerId |
principal.labels.customerId |
Il valore proviene direttamente dal campo metadata.customerId nel log non elaborato. |
metadata.origin.data.agent |
network.http.user_agent |
Il valore proviene direttamente dal campo metadata.origin.data.agent nel log non elaborato. |
metadata.origin.data.cid |
principal.user.userid |
Il valore proviene direttamente dal campo metadata.origin.data.cid nel log non elaborato. |
metadata.origin.data.version |
metadata.product_version |
Il valore proviene direttamente dal campo metadata.origin.data.version nel log non elaborato. |
msg.header.from |
read_only_udm.additional.fields.msgHeaderFrom |
Il valore proviene direttamente dal campo msg.header.from.0 nel log non elaborato. |
msg.header.reply-to |
network.email.reply_to |
L'indirizzo email racchiuso tra <> in msg.header.reply-to.0 viene estratto e mappato. |
msg.header.subject |
network.email.subject |
Il valore proviene direttamente dal campo msg.header.subject nel log non elaborato. |
msg.header.to |
read_only_udm.additional.fields.msgHeaderTo |
Il valore proviene direttamente dal campo msg.header.to nel log non elaborato. |
msg.normalizedHeader.subject |
network.email.subject |
Il valore proviene direttamente dal campo msg.normalizedHeader.subject nel log non elaborato. |
msg.parsedAddresses.cc |
network.email.cc |
Gli indirizzi email in msg.parsedAddresses.cc vengono uniti al campo network.email.cc se sono validi. |
msg.parsedAddresses.ccHashed |
read_only_udm.additional.fields |
Gli indirizzi email sottoposti ad hashing in msg.parsedAddresses.ccHashed vengono aggiunti come campi aggiuntivi con chiavi come "ccHashed_0", "ccHashed_1" e così via. |
msg.parsedAddresses.from |
read_only_udm.additional.fields.msgParsedAddressesFrom |
Il valore proviene direttamente dal campo msg.parsedAddresses.from.0 nel log non elaborato. |
msg.parsedAddresses.from.0 |
principal.user.email_addresses |
Il valore proviene direttamente dal campo msg.parsedAddresses.from.0 nel log non elaborato. |
msg.parsedAddresses.fromHashed |
read_only_udm.additional.fields.fromHashed |
Il valore proviene direttamente dal campo msg.parsedAddresses.fromHashed.0 nel log non elaborato. |
msg.parsedAddresses.to |
target.user.email_addresses |
Gli indirizzi email in msg.parsedAddresses.to vengono uniti al campo target.user.email_addresses se sono validi. |
msgParts |
read_only_udm.about |
Vengono creati più oggetti about, uno per ogni voce in msgParts . Vengono estratti gli hash dei file, il tipo MIME, le dimensioni e altri metadati. |
QID |
security_result.detection_fields.QID |
Il valore proviene direttamente dal campo QID nel log non elaborato. |
recipient |
target.user.email_addresses |
Gli indirizzi email in recipient vengono uniti al campo target.user.email_addresses se sono validi. |
replyToAddress |
network.email.reply_to |
Gli indirizzi email in replyToAddress vengono sostituiti nel campo network.email.reply_to se sono indirizzi email validi. |
sender |
principal.user.email_addresses |
Il valore proviene direttamente dal campo sender nel log non elaborato, se si tratta di un indirizzo email valido. |
senderIP |
principal.ip |
Il valore proviene direttamente dal campo senderIP nel log non elaborato. |
sm.from |
network.email.from |
Il valore proviene direttamente dal campo sm.from nel log non elaborato. |
sm.msgid |
network.email.mail_id |
Il valore proviene direttamente dal campo sm.msgid nel log non elaborato, dopo aver rimosso "<" e ">". |
sm.proto |
network.application_protocol |
Il valore proviene direttamente dal campo sm.proto nel log non elaborato. |
sm.qid |
security_result.detection_fields.QUID |
Il valore proviene direttamente dal campo sm.qid nel log non elaborato. |
sm.relay |
intermediary.hostname , intermediary.ip |
Il nome host e l'indirizzo IP vengono estratti da sm.relay utilizzando grok. |
sm.stat |
security_result.detection_fields.Stat |
La prima parola di sm.stat viene estratta utilizzando grok e mappata. |
sm.to |
network.email.to |
Gli indirizzi email in sm.to vengono uniti al campo network.email.to se sono validi. |
spamScore |
security_result.detection_fields.spamScore |
Il valore proviene direttamente dal campo spamScore nel log non elaborato. |
subject |
network.email.subject |
Il valore proviene direttamente dal campo subject nel log non elaborato. |
threat |
security_result.detection_fields.threat |
Il valore proviene direttamente dal campo threat nel log non elaborato. |
threatsInfoMap |
security_result.detection_fields |
Le coppie chiave-valore di ogni voce in threatsInfoMap vengono aggiunte come campi di rilevamento. |
threatType |
security_result.detection_fields.threatType |
Il valore proviene direttamente dal campo threatType nel log non elaborato. |
tls.cipher |
network.tls.cipher |
Il valore proviene direttamente dal campo tls.cipher nel log non elaborato, a meno che non sia "NESSUNO". |
tls.verify |
security_result.action_details |
Il valore proviene direttamente dal campo tls.verify nel log non elaborato. |
tls.version |
network.tls.version |
Il valore proviene direttamente dal campo tls.version nel log non elaborato, a meno che la crittografia non sia "NESSUNA". |
toAddresses |
network.email.to |
Gli indirizzi email in toAddresses vengono uniti al campo network.email.to se sono validi. |
ts |
@timestamp |
Il valore viene analizzato dal campo ts utilizzando il formato ISO8601 o RFC 3339, dopo un'elaborazione preliminare per gestire i secondi frazionari aggiuntivi. |
Modifiche
2024-11-28
- Miglioramento:
- "msgParts.metadata.company" e "msgParts.metadata.author" sono stati mappati a "security_result.detection_fields".
- È stata rimossa la mappatura duplicata di "email.subject".
- È stata modificata la mappatura dei campi "filter.modules.dmarc.authResults" da "additional.fields" a "security_result.detection_fields".
2024-08-28
- Miglioramento:
- La chiave "security_result.detection_fields" è stata modificata da "filterQid" in "qid".
2024-08-21
- Miglioramento:
- "metadata.origin.data.cid" è stato mappato a "additional.fields".
2024-07-22
- Miglioramento:
- Se "about.file.size" è un numero intero non firmato valido, mappa "msgPart.detectedSizeBytes" a "about.file.size".
- È stato aggiunto il supporto per un nuovo pattern di log SYSLOG.
2024-07-09
- Miglioramento:
- "msg.header.x-mailer" è stato mappato a "additional.fields".
2024-07-09
- Miglioramento:
- "msg.header.x-mailer" è stato mappato a "additional.fields".
2023-11-13
- "subject" è stato mappato a "network.email.subject".
- "messageID" è stato mappato a "network.email.mail_id".
- "fromAddress" è stato mappato a "network.email.from".
- "ccAddresses" è stato mappato a "network.email.cc".
- "replyToAddress" è stato mappato a "network.email.reply_to".
- "toAddresses" è stato mappato a "network.email.to".
- "sender" è stato mappato a "principal.user.email_addresses".
- "senderIP" è stato mappato a "principal.ip".
- "recipient" è stato mappato a "target.user.email_addresses".
- "spamScore", "phishScore", "threatsInfoMap", "impostorScore", "malwareScore", "" sono stati mappati a "security_result.detection_fields".
2023-10-26
- "msg.headeparsedAddressesr.from.0" è stato mappato a "principal.user.email_addresses".
- Mappature modificate dall'utilizzo di campi UDM obsoleti a campi alternativi.
- È stata aggiunta la mappatura da "about.labels" a "about.resource.attribute.labels".
- È stata aggiunta la mappatura da "principal.labels" a "principal.resource.attribute.labels".
2023-06-05
- È stato aggiunto un controllo a "msg.header.reply-to.0" prima della mappatura a UDM per verificare se si tratta di un array di email.
- È stato aggiunto il controllo non "-1" a "msgPart.detectedSizeBytes" prima della mappatura a UDM.
2022-07-14
- Miglioramento per mappare l'elemento successivo all'elemento UDM:
- Le lingue mappate a additional.fields.
- Definizioni mappate a security_result.summary.
- Motore mappato a metadata.product_version.
2022-06-29
- Miglioramento: è stata aggiunta la funzione gsub per rimuovere "<>' dai campi "sm.msgid" e "msg.header.message-id.0" mappati a "network.email.mail_id".
2022-05-20
- Miglioramento per mappare i seguenti elementi agli elementi UDM:
- Sono stati mappati "tls.verify" e "filter.disposition" a "security_result.action_details".
- È stato mappato "filter.modules.dmarc.authResults.result" a "additional.fields".
- Sono stati mappati "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
- Miglioramento per mappare l'elemento successivo all'elemento UDM:
- È stato eseguito il mapping di filter.modules.av.virusNames a "security_result.threat_name".