Raccogliere i log di Cisco eStreamer
Questo documento spiega come importare i log Cisco eStreamer in Google Security Operations utilizzando Bindplane. Il parser estrae i campi dai messaggi SYSLOG in formato chiave-valore, utilizzando grok per analizzare il messaggio iniziale e kv per gestire i dati chiave-valore. Successivamente, esegue il mapping di questi campi estratti al modello di dati unificato (UDM), gestendo vari tipi di dati e arricchendo l'evento con metadati come il tipo di evento in base alla presenza di informazioni su principal e target.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un host Windows Server 2012 SP2 o versioni successive o Linux con
systemd
- Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
- Accesso con privilegi a Cisco Firepower Management Center (FMC)
- Un sistema Linux per eseguire il client CLI eNcore
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
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
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 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 la 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/opt/observiq-otel-collector/
su Linux o nella directory `C:\Programmi\observIQ OpenTelemetry Collector` 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: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'CISCO_ESTREAMER' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog 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
Configura l'inoltro di Syslog su Cisco eStreamer
Configura eStreamer in Firepower Management Center
- Accedi a Firepower Management Center.
- Vai a Sistema > Integrazione > eStreamer.
- Fai clic su eStreamer per accedere alla configurazione degli eventi eStreamer.
- Seleziona le caselle di controllo accanto ai tipi di eventi che vuoi acquisire:
- Eventi di intrusione: per gli eventi di rilevamento delle intrusioni
- Dati dei pacchetti di eventi di intrusione: per acquisizioni di pacchetti associati a eventi di intrusione
- Eventi di connessione: per i dati di connessione di rete
- Eventi di intelligence sulla sicurezza: per i dati di intelligence sulle minacce
- Eventi file: per gli eventi di analisi dei file
- Eventi malware: per gli eventi di rilevamento di malware
- Fai clic su Salva.
Crea client eStreamer
- Nella pagina eStreamer, fai clic su Crea client.
- Fornisci i seguenti dettagli di configurazione:
- Nome host: inserisci l'indirizzo IP del sistema Linux in cui verrà eseguito il client eNcore.
- Password: inserisci una password per criptare il file del certificato.
- Fai clic su Salva.
- Scarica il file del certificato PKCS12 generato e trasferiscilo al sistema client eNcore.
Installa e configura il client CLI eNcore
- Sul sistema Linux, scarica il client CLI eStreamer eNcore da Cisco.
Estrai il pacchetto eNcore:
tar -xzf eStreamer-eNcore-*.tar.gz cd eStreamer-eNcore-*
Esegui lo script di configurazione:
./encore.sh setup
Quando richiesto, scegli il formato di output per le coppie chiave-valore (compatibile con i sistemi SIEM).
Inserisci l'indirizzo IP di FMC e la password del certificato PKCS12.
Configura il file
estreamer.conf
per inviare i messaggi syslog all'agente Bindplane:- Apri il file
estreamer.conf
in un editor di testo. Individua la sezione degli output e configurala per inviare syslog all'agente Bindplane:
{ "handler": { "outputters": [ { "name": "syslog", "adapter": "kvpair", "enabled": true, "stream": { "uri": "udp://BINDPLANE_AGENT_IP:514" } } ] } }
- Apri il file
Sostituisci
BINDPLANE_AGENT_IP
con l'indirizzo IP dell'agente Bindplane.
Avviare eNcore Client
Testa la connessione in modalità in primo piano:
./encore.sh foreground
Una volta verificato, avvia eNcore come servizio in background:
./encore.sh start
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
act |
security_result.action_details |
A questo campo viene assegnato il valore di act dal log non elaborato. |
act |
security_result.action |
Se il valore di act è "Allow" (senza distinzione tra maiuscole e minuscole), a questo campo viene assegnato il valore "ALLOW". |
app |
network.http.user_agent |
A questo campo viene assegnato il valore di app (rinominato come requestClientApplication nel parser) del log non elaborato. |
blockLength |
security_result.detection_fields[].key |
A questo campo è assegnata la stringa "blocklength". |
blockLength |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di blockLength del log non elaborato, convertito in una stringa. |
blockType |
security_result.detection_fields[].key |
A questo campo è assegnata la stringa "blockType". |
blockType |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di blockType del log non elaborato, convertito in una stringa. |
bytesIn |
network.received_bytes |
Il valore di bytesIn del log non elaborato viene assegnato a questo campo e convertito in un numero intero senza segno. |
bytesOut |
network.sent_bytes |
Il valore di bytesOut del log non elaborato viene assegnato a questo campo e convertito in un numero intero senza segno. |
cat |
security_result.category_details |
A questo campo viene assegnato il valore di cat dal log non elaborato. |
cs1 |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di cs1 dal log non elaborato. |
cs1Label |
security_result.detection_fields[].key |
A questo campo viene assegnato il valore di cs1Label dal log non elaborato. |
cs2 |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di cs2 dal log non elaborato. |
cs2Label |
security_result.detection_fields[].key |
A questo campo viene assegnato il valore di cs2Label dal log non elaborato. |
cs3 |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di cs3 dal log non elaborato. |
cs3Label |
security_result.detection_fields[].key |
A questo campo viene assegnato il valore di cs3Label dal log non elaborato. |
cs4 |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di cs4 dal log non elaborato. |
cs4Label |
security_result.detection_fields[].key |
A questo campo viene assegnato il valore di cs4Label dal log non elaborato. |
cs5 |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di cs5 dal log non elaborato. |
cs5Label |
security_result.detection_fields[].key |
A questo campo viene assegnato il valore di cs5Label dal log non elaborato. |
cs6 |
security_result.detection_fields[].value |
A questo campo viene assegnato il valore di cs6 dal log non elaborato. |
cs6 |
security_result.rule_id |
A questo campo viene assegnato il valore di cs6 dal log non elaborato. |
cs6Label |
security_result.detection_fields[].key |
A questo campo viene assegnato il valore di cs6Label dal log non elaborato. |
data |
security_result.detection_fields[].value |
Il valore di data dell'oggetto JSON suser nel log non elaborato viene assegnato a questo campo se il campo suser è un JSON. |
deviceInboundInterface |
additional.fields[].key |
A questo campo viene assegnata la stringa "deviceInboundInterface". |
deviceInboundInterface |
additional.fields[].value.string_value |
A questo campo viene assegnato il valore di deviceInboundInterface dal log non elaborato. |
deviceOutboundInterface |
additional.fields[].key |
A questo campo viene assegnata la stringa "deviceOutboundInterface". |
deviceOutboundInterface |
additional.fields[].value.string_value |
A questo campo viene assegnato il valore di deviceOutboundInterface dal log non elaborato. |
dpt |
target.port |
Il valore di dpt del log non elaborato viene assegnato a questo campo e convertito in un numero intero. |
dst |
target.asset.ip |
A questo campo viene assegnato il valore di dst dal log non elaborato. |
dst |
target.ip |
A questo campo viene assegnato il valore di dst dal log non elaborato. |
dvcpid |
security_result.about.process.pid |
A questo campo viene assegnato il valore di dvcpid dal log non elaborato. |
dvchost |
target.asset.hostname |
A questo campo viene assegnato il valore di dvchost dal log non elaborato. |
dvchost |
target.hostname |
A questo campo viene assegnato il valore di dvchost dal log non elaborato. |
hostname |
principal.asset.hostname |
A questo campo viene assegnato il valore di hostname dal log non elaborato. |
hostname |
principal.hostname |
A questo campo viene assegnato il valore di hostname dal log non elaborato. Determinato dalla logica del parser in base alla presenza delle informazioni principal e target . Se sono presenti entrambi, il valore è "NETWORK_CONNECTION". Se è presente solo principal , il valore è "STATUS_UPDATE". Se è presente solo target , il valore è "USER_UNCATEGORIZED". In caso contrario, il valore è "GENERIC_EVENT". |
product_event_type |
metadata.product_event_type |
A questo campo viene assegnato il valore di product_event_type dal log non elaborato. |
product_name |
metadata.product_name |
A questo campo viene assegnato il valore di product_name dal log non elaborato. |
proto |
network.ip_protocol |
Il valore di proto del log non elaborato viene convertito in un numero intero, quindi mappato al nome del protocollo IP corrispondente (ad es. 6 diventa TCP, 17 diventa UDP) utilizzando una ricerca inclusa in "parse_ip_protocol.include". |
severity |
security_result.severity_details |
A questo campo viene assegnato il valore di severity dal log non elaborato. |
spt |
principal.port |
Il valore di spt del log non elaborato viene assegnato a questo campo e convertito in un numero intero. |
src |
principal.asset.ip |
A questo campo viene assegnato il valore di src dal log non elaborato. |
src |
principal.ip |
A questo campo viene assegnato il valore di src dal log non elaborato. |
suser |
security_result.detection_fields[].value |
Il valore di suser del log non elaborato viene assegnato a questo campo se non è un oggetto JSON. Se è un JSON, viene utilizzato il campo data dell'oggetto suser . |
suser |
security_result.detection_fields[].key |
A questo campo viene assegnata la stringa "suser". |
ts |
metadata.event_timestamp |
Il valore di ts del log non elaborato viene analizzato come timestamp e assegnato a questo campo. Vengono provati diversi formati di timestamp finché non viene eseguita l'analisi. |
vendor_name |
metadata.vendor_name |
A questo campo viene assegnato il valore di vendor_name dal log non elaborato. |
version |
metadata.product_version |
A questo campo viene assegnato il valore di version dal log non elaborato. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.