Raccogliere i log di CrowdStrike Falcon Stream
Questo documento spiega come raccogliere i log di CrowdStrike Falcon Stream utilizzando Bindplane. Il parser estrae le coppie chiave-valore e le mappa nel modello Unified Data Model (UDM), gestendo diversi delimitatori e arricchendo i dati con un contesto aggiuntivo, come gravità e tipi di eventi. Esegue anche trasformazioni specifiche per determinati tipi di eventi e campi, ad esempio accessi utente e risultati di sicurezza.
Prima di iniziare
- Assicurati di avere un'istanza Google Security Operations.
- Assicurati di utilizzare Windows 2016 o versioni successive oppure un host Linux con
systemd
. - Se l'esecuzione avviene tramite un proxy, assicurati che le porte del firewall siano aperte.
- Assicurati di disporre dell'accesso con privilegi alla console CrowdStrike Falcon.
- Ottieni le credenziali API per Falcon Stream (ID client e client secret).
Recuperare il file di autenticazione importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installazione di Windows
- Apri il prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/Bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installazione di Linux
- Apri un terminale con privilegi di root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/Bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Risorse aggiuntive per l'installazione
- Per ulteriori opzioni di installazione, consulta questa guida all'installazione.
Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps
Accedi al file di configurazione:
- Individua il file
config.yaml
. In genere, si trova nella directory/etc/Bindplane-agent/
su Linux o nella directory di installazione su Windows. - Apri il file utilizzando un editor di testo (ad esempio
nano
,vi
o Blocco note).
- Individua il file
Modifica il file
config.yaml
come segue:receivers: tcplog: # Replace the port and IP address as required listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: SYSLOG namespace: cs_stream raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
- Sostituisci la porta e l'indirizzo IP in base alle esigenze della tua infrastruttura.
- Sostituisci
<customer_id>
con l'ID cliente effettivo. - Aggiorna
/path/to/ingestion-authentication-file.json
al percorso in cui è stato salvato il file di autenticazione nella sezione Recupera il file di autenticazione per l'importazione di Google SecOps.
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart Bindplane-agent
Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:
net stop BindplaneAgent && net start BindplaneAgent
Configurare e ottenere una chiave API CrowdStrike
- Accedi a CrowdStrike Falcon con un account con privilegi.
- Vai a Menu > Assistenza.
- Fai clic su Client API > Seleziona chiavi.
- Fai clic su Aggiungi nuovo client API.
- Nella sezione Ambiti API, seleziona Stream di eventi e poi attiva l'opzione Lettura.
- Fai clic su Aggiungi.
- Copia e salva l'ID client, il client secret e l'URL di base.
Installare Falcon SIEM Connector
- Scarica il pacchetto di installazione RPM per il tuo sistema operativo.
Installazione del pacchetto:
Sistema operativo CentOS:
sudo rpm -Uvh <installer package>
Sistema operativo Ubuntu:
sudo dpkg -i <installer package>
Directory di installazione predefinite:
- Falcon SIEM Connector -
/opt/crowdstrike/
. - Servizio:
/etc/init.d/cs.falconhoseclientd/
.
- Falcon SIEM Connector -
Configura il connettore SIEM per inoltrare gli eventi a Bindplane
- Accedi alla macchina con SIEM Connector installato come utente
sudo
. - Vai alla directory
/opt/crowdstrike/etc/
. - Rinomina
cs.falconhoseclient.leef.cfg
incs.falconhoseclient.cfg
.- SIEM Connector utilizza la configurazione
cs.falconhoseclient.cfg
per impostazione predefinita.
- SIEM Connector utilizza la configurazione
- Modifica il file
cs.falconhoseclient.cfg
e modifica o imposta i seguenti parametri:api_url:
: l'URL di base di CrowdStrike Falcon copiato dal passaggio precedente.app_id:
: qualsiasi stringa come identificatore per la connessione all'API Falcon Streaming; ad esempio, impostala suapp_id: SECOPS-LEEF
.client_id:
: il valoreclient_id
copiato dal passaggio precedente.client_secret:
: il valoreclient_secret
copiato dal passaggio precedente.send_to_syslog_server: true
: attiva il push al server Syslog.host:
: l'IP o il nome host dell'agente Bindplane.port:
: la porta dell'agente Bindplane.
- Salva il file
cs.falconhoseclient.cfg
. Avvia il servizio SIEM Connector:
Sistema operativo CentOS:
sudo service cs.falconhoseclientd start
Sistema operativo Ubuntu 16.04 o versioni successive:
sudo systemctl start cs.falconhoseclientd.service
(Facoltativo) Arresta il servizio SIEM Connector:
Sistema operativo CentOS:
sudo service cs.falconhoseclientd stop
Sistema operativo Ubuntu 16.04 o versioni successive:
sudo systemctl stop cs.falconhoseclientd.service
(Facoltativo) Riavvia il servizio SIEM Connector:
Sistema operativo CentOS:
sudo service cs.falconhoseclientd restart
Sistema operativo Ubuntu 16.04 o versioni successive:
sudo systemctl restart cs.falconhoseclientd.service
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
cat |
security_result.category_details |
Il valore del campo cat viene mappato direttamente al campo security_result.category_details . |
commandLine |
target.process.command_line |
Il valore del campo commandLine viene mappato direttamente al campo target.process.command_line . |
cs1 |
security_result.summary |
Se cs1Label è "incidentType", il valore di cs1 viene mappato a security_result.summary . In caso contrario, viene mappato come coppia chiave-valore in security_result.detection_fields con la chiave di cs1Label e il valore di cs1 . |
cs1Label |
security_result.detection_fields.key |
Utilizzato come chiave in security_result.detection_fields quando cs1 non è un tipo di incidente. |
cs2 |
security_result.detection_fields.value |
Mappato come coppia chiave-valore in security_result.detection_fields con la chiave di cs2Label e il valore di cs2 . |
cs2Label |
security_result.detection_fields.key |
Utilizzato come chiave in security_result.detection_fields insieme a cs2 . |
cs3 |
security_result.detection_fields.value |
Mappato come coppia chiave-valore in security_result.detection_fields con la chiave di cs3Label e il valore di cs3 . |
cs3Label |
security_result.detection_fields.key |
Utilizzato come chiave in security_result.detection_fields insieme a cs3 . |
cs4 |
security_result.about.url |
Se cs4Label è "falconHostLink", il valore di cs4 viene mappato a security_result.about.url . In caso contrario, viene mappato come coppia chiave-valore in security_result.detection_fields con la chiave di cs4Label e il valore di cs4 . |
cs4Label |
security_result.detection_fields.key |
Utilizzato come chiave in security_result.detection_fields quando cs4 non è un falconHostLink. |
description |
metadata.description |
Il valore del campo description viene mappato direttamente al campo metadata.description . Se è vuoto, vengono utilizzati incidentDescription , msg o serviceName . |
devTime |
metadata.event_timestamp |
Il valore del campo devTime viene analizzato e mappato al campo metadata.event_timestamp . |
deviceCustomDate1 |
metadata.event_timestamp |
Se devTime non è presente, il valore del campo deviceCustomDate1 viene analizzato e mappato al campo metadata.event_timestamp . |
domain |
principal.administrative_domain |
Estratto dal campo userName utilizzando un'espressione regolare e mappato a principal.administrative_domain . |
duser |
principal.user.userid |
Se presente, il valore di duser sovrascrive il campo usrName e viene utilizzato per compilare i campi utente. |
endpointName |
security_result.detection_fields.value |
Mappato come coppia chiave-valore in security_result.detection_fields con la chiave "endpointName". |
eventType |
metadata.product_event_type |
Il valore del campo eventType viene mappato direttamente al campo metadata.product_event_type . |
falconHostLink |
security_result.about.url |
Il valore del campo falconHostLink viene mappato direttamente al campo security_result.about.url . |
filePath |
target.process.file.full_path |
Il valore del campo filePath viene mappato direttamente al campo target.process.file.full_path . |
identityProtectionIncidentId |
security_result.detection_fields.value |
Mappato come coppia chiave-valore in security_result.detection_fields con la chiave "identityProtectionIncidentId". |
incidentDescription |
metadata.description |
Se description è vuoto, il valore del campo incidentDescription viene mappato al campo metadata.description . |
incidentType |
security_result.summary |
Il valore del campo incidentType viene mappato direttamente al campo security_result.summary . |
log_type |
metadata.log_type |
Il valore del campo log_type viene mappato direttamente al campo metadata.log_type . |
msg |
metadata.description |
Se description e incidentDescription sono vuoti, il valore del campo msg viene mappato al campo metadata.description . |
numbersOfAlerts |
security_result.detection_fields.value |
Mappato come coppia chiave-valore in security_result.detection_fields con la chiave "numbersOfAlerts". |
numberOfCompromisedEntities |
security_result.detection_fields.value |
Mappato come coppia chiave-valore in security_result.detection_fields con la chiave "numberOfCompromisedEntities". |
product |
metadata.product_name |
Il valore del campo product viene mappato direttamente al campo metadata.product_name . |
resource |
target.resource.name |
Il valore del campo resource viene mappato direttamente al campo target.resource.name . |
serviceName |
target.application |
Il valore del campo serviceName viene mappato direttamente al campo target.application . Utilizzato anche come fallback per metadata.description . |
severityName |
security_result.severity |
Il valore del campo severityName viene mappato al campo security_result.severity dopo essere stato convertito in maiuscolo. La logica di mappatura include conversioni specifiche per diversi nomi di gravità. |
sha256 |
target.file.sha256 |
Il valore del campo sha256 viene mappato direttamente al campo target.file.sha256 . |
src |
principal.ip |
Il valore del campo src viene mappato direttamente al campo principal.ip . |
srcMAC |
principal.mac |
Il valore del campo srcMAC viene mappato direttamente al campo principal.mac dopo aver sostituito i trattini con i due punti. |
state |
security_result.detection_fields.value |
Mappato come coppia chiave-valore in security_result.detection_fields con la chiave "state". |
success |
security_result.action |
Se success è "true", security_result.action è impostato su "ALLOW". Se success è "false", security_result.action è impostato su "BLOCK". |
userName |
principal.user.userid |
Se usrName non è presente, viene utilizzato il valore del campo userName per compilare i campi utente. Il dominio viene estratto, se presente. |
usrName |
principal.user.userid /target.user.userid |
Se presente, il valore del campo usrName viene mappato su principal.user.userid o target.user.userid a seconda di eventType . Se si tratta di un indirizzo email, viene aggiunto anche al rispettivo campo email_addresses . |
vendor |
metadata.vendor_name |
Il valore del campo vendor viene mappato direttamente al campo metadata.vendor_name . |
version |
metadata.product_version |
Il valore del campo version viene mappato direttamente al campo metadata.product_version . |
(Parser Logic) | extensions.auth.mechanism |
Imposta il valore "USERNAME_PASSWORD" se eventType è "saml2Assert" o "twoFactorAuthenticate". |
(Parser Logic) | extensions.auth.type |
Imposta "AUTHTYPE_UNSPECIFIED" se eventType è "assert" o "userAuthenticate". |
(Parser Logic) | metadata.event_timestamp |
Il timestamp del campo collection_time o timestamp del log non elaborato viene utilizzato come timestamp dell'evento. |
(Parser Logic) | metadata.event_type |
Determinato in base a eventType e ad altri campi. Il valore predefinito è "GENERIC_EVENT" e può essere modificato in "USER_LOGIN", "GROUP_MODIFICATION", "GROUP_DELETION", "SERVICE_STOP", "SERVICE_START" o "USER_UNCATEGORIZED". |
(Parser Logic) | target.resource.type |
Imposta su "GROUP" se eventType è "remove_group", "update_group" o "delete_group". |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.