Raccogliere i log on demand di Proofpoint
Questo documento spiega come importare i log Proofpoint On-Demand in Google Security Operations utilizzando l'integrazione API integrata. Il parser estrae i campi dai log JSON, trasformandoli nel formato UDM di Chronicle. 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 Unified Data Model (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 soddisfare i seguenti prerequisiti:
- Istanza Google SecOps
- Licenza Proofpoint On-Demand Remote Syslog
- Accesso privilegiato a Proofpoint
Configurare l'accesso all'API Proofpoint On-Demand
- Accedi al portale Proofpoint Admin.
- Copia l'ID cluster (visualizzato nell'angolo in alto a destra dell'interfaccia di gestione, accanto al numero di versione).
- Vai a Impostazioni > Gestione delle chiavi API.
- Fai clic su Crea nuova per aprire la finestra di dialogo Crea nuova chiave API.
- Inserisci un Nome univoco (ad esempio,
Google SecOps Key
). - Genera la chiave API.
- Seleziona Visualizza dettagli dal menu con i tre puntini sulla nuova chiave API.
- Copia la chiave API.
Configurare i feed
Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:
- Impostazioni SIEM > Feed
- Hub dei contenuti > Pacchetti di contenuti
Configura i feed da Impostazioni SIEM > Feed
Per configurare un feed:
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
PoD Logs
). - Seleziona API di terze parti come Tipo di origine.
- Seleziona il tipo di log Proofpoint On-Demand.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- Intestazioni HTTP di autenticazione: inserisci la chiave API Proofpoint nel formato
Authorization: Bearer {API_KEY}
e aggiungi una nuova riga con i seguenti dati della chiave WebSocket:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
. - ID cluster: inserisci l'ID cluster Proofpoint che hai copiato in precedenza.
- Intestazioni HTTP di autenticazione: inserisci la chiave API Proofpoint nel formato
Fai clic su Avanti.
Controlla la configurazione del feed nella schermata Finalizza e poi fai clic su Invia.
Configurare i feed dall'hub dei contenuti
Specifica i valori per i seguenti campi:
- Intestazioni HTTP di autenticazione: inserisci la chiave API Proofpoint in formato
Authorization: Bearer {API_KEY}
e aggiungi una nuova riga con i seguenti dati della chiave WebSocket:Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==
. - ID cluster: inserisci l'ID cluster Proofpoint che hai copiato in precedenza.
Opzioni avanzate
- Nome feed:un valore precompilato che identifica il feed.
- Tipo di origine:metodo utilizzato per raccogliere i log in Google SecOps.
- Spazio dei nomi dell'asset:lo spazio dei nomi associato al feed.
- Etichette di importazione:etichette applicate a tutti gli eventi di questo feed.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
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 è un indirizzo IPv4 valido. Viene anche 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 "NONE". |
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 cifra non sia "NONE". |
envelope.from |
network.email.from |
Il valore proviene direttamente dal campo envelope.from nel log non elaborato. Viene inoltre sostituito da sm.from o fromAddress , se presenti. |
envelope.rcpts |
network.email.to |
Gli indirizzi email in envelope.rcpts vengono uniti nel campo network.email.to se sono indirizzi email validi. Viene anche unito a sm.to o toAddresses , se presenti. |
envelope.rcptsHashed |
read_only_udm.additional.fields |
Gli indirizzi email sottoposti 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 è "inbound", 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 nel campo network.email.cc se sono indirizzi email 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 nel campo target.user.email_addresses se sono indirizzi email validi. |
msgParts |
read_only_udm.about |
Vengono creati più oggetti About, uno per ogni voce in msgParts . Vengono estratti gli hash, il tipo MIME, le dimensioni e altri metadati del file. |
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 nel campo target.user.email_addresses se sono indirizzi email 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 deriva direttamente dal campo sender nel log non elaborato, se è 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 deriva 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 nel campo network.email.to se sono indirizzi email 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 "NONE". |
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 cifra non sia "NONE". |
toAddresses |
network.email.to |
Gli indirizzi email in toAddresses vengono uniti nel campo network.email.to se sono indirizzi email validi. |
ts |
@timestamp |
Il valore viene analizzato dal campo ts utilizzando il formato ISO8601 o RFC 3339, dopo un po' di preelaborazione per gestire i secondi frazionari aggiuntivi. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.