Raccogliere i log EDR di Carbon Black
Questo documento spiega come raccogliere i log di Carbon Black EDR dagli ambienti cloud e on-premise utilizzando AWS S3. Il parser estrae i campi dai messaggi in formato JSON, CSV o syslog, li normalizza e li mappa all'UDM. Gestisce vari tipi di eventi Carbon Black, tra cui connessioni di rete, eventi di processo, modifiche ai file, modifiche al registro e hit IOC, arricchendo i dati con informazioni sulla minaccia e sul dispositivo, se disponibili.
Prima di iniziare
Assicurati di avere:
- Un'istanza Google SecOps configurata.
- Accesso con privilegi ad AWS IAM e S3.
- Accesso con privilegi a Carbon Black EDR on-prem o su cloud.
Configurare Carbon Black EDR on-prem
Configura il bucket Amazon S3 per l'on-premise
- Crea un bucket Amazon S3 seguendo questa guida dell'utente: Creare un bucket
- Salva Nome e Regione del bucket per utilizzarli in un secondo momento.
- Crea un utente seguendo questa guida dell'utente: Creare un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file CSV per salvare la chiave di accesso e la chiave di accesso segreta per utilizzarle in un secondo momento.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Norme relative alle autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Collega direttamente i criteri.
- Cerca e seleziona il criterio AmazonS3FullAccess.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Installa cb-event-forwarder sul server EDR on-premise
Installa il repository CbOpenSource se non è già presente:
cd /etc/yum.repos.d curl -O https://opensource.carbonblack.com/release/x86_64/CbOpenSource.repo
Installa l'RPM utilizzando YUM:
yum install cb-event-forwarder
Se utilizzi EDR 7.1.0 o versioni successive, esegui il seguente script per impostare le autorizzazioni appropriate necessarie per EDR:
/usr/share/cb/integrations/event-forwarder/cb-edr-fix-permissions.sh
Configura cb-event-forwarder per generare log JSON
Apri il file di configurazione:
sudo nano /etc/cb/integrations/event-forwarder/cb-event-forwarder.conf
Modifica i seguenti parametri:
[event_forwarder] output_format=json # Enable JSON format output_type=s3 # Send logs to AWS S3 s3_bucket_name=YOUR-S3-BUCKET-NAME s3_region=YOUR-S3-BUCKET-NAME s3_access_key_id=YOUR_AWS_ACCESS_KEY s3_secret_access_key=YOUR_AWS_SECRET_KEY s3_prefix=carbonblack/edr/logs
Salva ed esci utilizzando la tastiera:
- Ctrl + X, quindi Y e Invio.
Avvia cb-event-forwarder:
sudo systemctl enable cb-event-forwarder sudo systemctl restart cb-event-forwarder sudo systemctl status cb-event-forwarder
Configurare Carbon Black Cloud Event Forwarder per S3
Crea un bucket AWS S3
- Accedi alla Console di gestione AWS.
- Assicurati che la regione AWS corrisponda a quella di Event Forwarder:
- Nella pagina Console AWS, individua la regione.
- Utilizza il menu a discesa per selezionare la regione corretta del tuo Event Forwarder.
- Il seguente elenco indica la regione AWS applicabile per ogni URL di Carbon Black EDR.
- "instance-alias".my.carbonblack.io - Regione: US East (N. del Nord) (us-east-1)
- "instance-alias".my.cbcloud.de - Regione: Europa (Francoforte) (eu-central-1)
- Regione "instance-alias".my.cbcloud.sg: Asia Pacifico (Singapore) (ap-southeast-1)
- Seleziona Servizi.
- Vai alla console S3.
- Fai clic su Crea bucket per aprire la procedura guidata Crea bucket.
- In Nome bucket, inserisci un nome univoco per il bucket (ad esempio CB-EDR).
- Assicurati che il valore predefinito di Regione sia quello selezionato in precedenza.
- Aggiorna i valori predefiniti di Blocca accesso pubblico in modo da consentire l'accesso pubblico (questo è necessario per l'importazione dei log in Google SecOps).
- Seleziona Crea bucket.
Configura il bucket S3 per consentire a Event Forwarder di scrivere eventi
- Crea un utente seguendo questa guida dell'utente: Creare un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file CSV per salvare la chiave di accesso e la chiave di accesso segreta per utilizzarle in un secondo momento.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Norme relative alle autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Collega direttamente i criteri.
- Cerca il criterio AmazonS3FullAccess.
- Seleziona il criterio.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Configurare il forwarding degli eventi nella console EDR
- Accedi a VMware Carbon Black Cloud.
- Vai alla scheda Inoltro eventi
- Attiva gli eventi che vuoi che il prodotto carichi su S3.
- Vai a Output e tipo e imposta S3.
- Fornisci il nome del bucket S3 nel seguente formato
<region>:<bucket-name>
(ad esempious-east-1:cb-edr
). - Seleziona il file carica credenziali AWS in formato INI.
Di seguito è riportato un esempio di profilo:
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-east-1
Fai clic su Salva e riavvia il servizio per applicare le modifiche.
Configura un feed in Google SecOps per importare i log EDR di Carbon Black
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log EDR di Carbon Black).
- Seleziona Amazon S3 come Tipo di origine.
- Seleziona Carbon Black EDR come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- Regione: la regione in cui si trova il bucket Amazon S3.
- URI S3: l'URI del bucket.
s3:/BUCKET_NAME
- Sostituisci
BUCKET_NAME
con il nome effettivo del bucket.
- Sostituisci
- L'URI è un: seleziona URI_TYPE in base alla configurazione dello stream di log (File singolo | Directory | Directory che include sottodirectory).
- Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
- ID chiave di accesso: la chiave di accesso utente con accesso al bucket S3.
- Chiave di accesso segreta: la chiave segreta dell'utente con accesso al bucket S3.
- Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
action |
security_result.detection_fields[?key == 'action'].value |
Il valore del campo action dal log non elaborato. |
cb_server |
intermediary.hostname |
Il valore del campo cb_server dal log non elaborato. |
cb_version |
metadata.product_version |
Il valore del campo cb_version dal log non elaborato. |
child_pid |
target.process.pid (per eventi ingress.event.childproc ) |
Il valore del campo child_pid dal log non elaborato quando type è ingress.event.childproc . |
child_process_guid |
target.process.product_specific_process_id (per eventi ingress.event.childproc ) |
"CB:" concatenato con il valore del campo child_process_guid del log non elaborato quando type è ingress.event.childproc . |
child_username |
target.user.userid (per eventi ingress.event.childproc ) |
Il valore del campo child_username dal log non elaborato quando type è ingress.event.childproc . |
childproc_guid |
target.process.product_specific_process_id (per eventi endpoint.event.procstart ) |
"CB:" concatenato con il valore del campo childproc_guid del log non elaborato quando type è endpoint.event.procstart . |
childproc_hash.0 |
target.process.file.md5 (per eventi endpoint.event.procstart ) |
Il primo elemento dell'array childproc_hash dal log non elaborato quando type è endpoint.event.procstart . |
childproc_hash.1 |
target.process.file.sha256 (per eventi endpoint.event.procstart ) |
Il secondo elemento dell'array childproc_hash del log non elaborato quando type è endpoint.event.procstart . |
childproc_name |
target.process.file.full_path (per eventi endpoint.event.procstart ) |
Il valore del campo childproc_name dal log non elaborato quando type è endpoint.event.procstart . |
childproc_pid |
target.process.pid (per eventi endpoint.event.procstart ) |
Il valore del campo childproc_pid dal log non elaborato quando type è endpoint.event.procstart . |
childproc_publisher.0.name |
security_result.detection_fields[?key == 'childproc_publisher_name'].value (per eventi endpoint.event.procstart ) |
"childproc_publisher_name:" concatenato con il valore di childproc_publisher.0.name dal log non elaborato quando type è endpoint.event.procstart . |
childproc_publisher.0.state |
security_result.detection_fields[?key == 'childproc_publisher_state'].value (per eventi endpoint.event.procstart ) |
"childproc_publisher_state:" concatenato con il valore di childproc_publisher.0.state dal log non elaborato quando type è endpoint.event.procstart . |
childproc_reputation |
security_result.detection_fields[?key == 'childproc_reputation'].value (per eventi endpoint.event.procstart ) |
Il valore del campo childproc_reputation dal log non elaborato quando type è endpoint.event.procstart . |
childproc_username |
target.user.userid (per eventi endpoint.event.procstart ) |
Il valore del campo childproc_username dal log non elaborato quando type è endpoint.event.procstart . |
clientIp |
principal.ip , principal.asset.ip |
Il valore del campo clientIp dal log non elaborato. |
cmdline |
target.process.command_line (per gli eventi feed.query.hit.process e feed.storage.hit.process ), additional.fields[?key == 'cmdline_*'].value.string_value (per gli eventi watchlist.storage.hit.process ) |
Il valore del campo cmdline dal log non elaborato quando type è feed.query.hit.process o feed.storage.hit.process . Per gli eventi watchlist.storage.hit.process , viene archiviato in additional.fields con la chiave "cmdline_*". |
command_line |
target.process.command_line (per eventi ingress.event.procstart ) |
Il valore del campo command_line dal log non elaborato quando type è ingress.event.procstart . |
comms_ip |
intermediary.ip |
Il valore del campo comms_ip dal log non elaborato. |
computer_name |
principal.hostname , principal.asset.hostname |
Il valore del campo computer_name dal log non elaborato. |
crossproc_api |
additional.fields[?key == 'crossproc_api'].value.string_value (per eventi endpoint.event.apicall ) |
Il valore del campo crossproc_api dal log non elaborato quando type è endpoint.event.apicall . |
crossproc_guid |
additional.fields[?key == 'crossproc_guid'].value.string_value (per eventi endpoint.event.crossproc ) |
Il valore del campo crossproc_guid dal log non elaborato quando type è endpoint.event.crossproc . |
crossproc_hash.0 |
additional.fields[?key == 'crossproc_md5'].value.string_value (per eventi endpoint.event.crossproc ) |
Il primo elemento dell'array crossproc_hash dal log non elaborato quando type è endpoint.event.crossproc . |
crossproc_hash.1 |
additional.fields[?key == 'crossproc_sha256'].value.string_value (per eventi endpoint.event.crossproc ) |
Il secondo elemento dell'array crossproc_hash del log non elaborato quando type è endpoint.event.crossproc . |
crossproc_name |
target.process.file.full_path (per eventi endpoint.event.crossproc ) |
Il valore del campo crossproc_name dal log non elaborato quando type è endpoint.event.crossproc . |
crossproc_publisher.0.name |
security_result.detection_fields[?key == 'crossproc_publisher_name'].value (per eventi endpoint.event.crossproc ) |
"crossproc_publisher_name:" concatenato con il valore di crossproc_publisher.0.name dal log non elaborato quando type è endpoint.event.crossproc . |
crossproc_publisher.0.state |
security_result.detection_fields[?key == 'crossproc_publisher_state'].value (per eventi endpoint.event.crossproc ) |
"crossproc_publisher_state:" concatenato con il valore di crossproc_publisher.0.state dal log non elaborato quando type è endpoint.event.crossproc . |
crossproc_reputation |
additional.fields[?key == 'crossproc_reputation'].value.string_value (per eventi endpoint.event.crossproc ) |
Il valore del campo crossproc_reputation dal log non elaborato quando type è endpoint.event.crossproc . |
crossproc_target |
additional.fields[?key == 'crossproc_target'].value.string_value (per eventi endpoint.event.crossproc ) |
Il valore del campo crossproc_target dal log non elaborato quando type è endpoint.event.crossproc . Convertito in una stringa "true" o "false". |
Modifiche
2024-05-13
- Il campo "alert_url" è stato mappato al campo UDM "metadata.url_back_to_product".
2024-01-19
- È stato aggiunto un controllo null per "filemod_hash.0" e "filemod_hash.1" prima della mappatura.
2023-12-27
- "filemod_hash.0" e "filemod_hash.1" sono stati inizializzati a null per analizzare i log non analizzati.
2023-10-26
- È stata aggiunta la funzione "gsub" per analizzare i campi non analizzati.
2023-10-13
- Sono stati gestiti i nuovi log JSON aggiungendo un blocco JSON.
- È stato rimosso il codice ridondante per i campi "computer_name", "parent_name", "process_name", "pid", "process_path", "md5", "sha256", "process_guid", "parent_pid", "docs.0.process_pid", "cb_version", "process_hash.0", "process_hash.1", "parent_hash.0" e "parent_hash.1".
2023-07-21
- Sono stati aggiunti dettagli sulle tattiche e sulle tecniche MITRE ATT&CK a "security_result.attack_details".
2023-03-24
- Il campo "protocol" è stato mappato a "network.ip_protocol".
- È stato aggiunto il controllo condizionale null per i campi "child_username", "child_pid", "child_command_line".
- "metadata.event_type" è stato modificato da "GENERIC_EVENT" in "STATUS_UPDATE" quando "principal.hostname" o "principal.ip" non è nullo.
2023-03-14
- Correzione di bug:
- Sono stati mappati i seguenti campi quando il campo "type" è null:
- È stato mappato il campo "process_guid" a "principal.process.product_specific_process_id".
- È stato mappato il campo "device_external_ip" a "target.ip".
- Il campo "device_os" è stato mappato a "principal.platform".
- È stato mappato il campo "device_group" a "principal.group.group_display_name".
- È stato mappato il campo "process_pid" a "principal.process.pid".
- È stato mappato il campo "process_path" a "principal.process.file.full_path".
- Il campo "process_cmdline" è stato mappato a "principal.process.command_line".
- È stato mappato il campo "process_hash.0" a "principal.process.file.md5".
- È stato mappato il campo "principal.1" a "principal.process.file.sha256".
- Il campo "process_username" è stato mappato a "principal.user.userid".
- Il campo "clientIp" è stato mappato a "principal.ip".
- È stato mappato il campo "description" a "metadata.description".
- È stato mappato il campo "orgName" a "principal.administrative_domain".
- Sono stati mappati i seguenti campi quando il campo "ruleName" contiene "CYDERES":
- È stato mappato il campo "deviceInfo.internalIpAddress" a "principal.ip".
- È stato mappato il campo "deviceInfo.externalIpAddress" a "target.ip".
- Il campo "ruleName" è stato mappato a "security_result.rule_name".
- È stato mappato il campo "deviceInfo.deviceType" a "principal.asset.platform_software.platform".
- Il campo "domain" è stato mappato a "principal.administrative_domain".
- È stato mappato il campo "deviceInfo.groupName" a "principal.group.group_display_name".
- È stato mappato il campo "deviceInfo.deviceVersion" a "principal.asset.platform_software.platform_version".
- È stato mappato il campo "deviceInfo.deviceId" a "principal.asset.asset_id".
- Il campo "eventId" è stato mappato a "additional.fields".
- "metadata.event_type" è stato modificato da "GENERIC_EVENT" in "NETWORK_CONNECTION" quando "principal.ip" e "target.ip" non sono null.
- "metadata.event_type" è stato modificato da "GENERIC_EVENT" in "STATUS_UPDATE" quando "principal.ip" non è nullo.
2023-02-03
- Correzione di bug: mappa "filemod_hash" a "target.file" anziché a "target.process.file".
2023-01-20
- Correzione di bug: è stata interrotta la compilazione e la mappatura di product_specific_process_id per gli ID processo vuoti.
2022-11-25
- È stato mappato "remote_ip" a "principal.ip" e "local_ip" a "target.ip" per gli eventi TCP/UDP "In entrata".
- È stata mappata "remote_port" a "principal.port" e "local_port" a "target.port" per gli eventi TCP/UDP "In entrata".
2022-10-06
- È stata eseguita la migrazione di tutti gli analizzatori sintattici specifici del cliente all'analizzatore sintattico predefinito.
2022-07-10
- Mappatura aggiornata di "event_type" a "PROCESS_LAUNCH" per i log di tipo "endpoint.event.'."
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.