Raccogli i log di Cisco Secure ACS
Questo documento spiega come importare i log di Cisco Secure ACS in Google Security Operations utilizzando Bindplane.
L'analizzatore sintattico estrae i campi dai log formattati in formato syslog e chiave-valore di Cisco Secure ACS. Utilizza grok e/o kv per analizzare il messaggio di log e quindi mappa questi valori al modello UDM (Unified Data Model). Imposta anche i valori predefiniti dei metadati per l'origine e il tipo di evento.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Windows Server 2016 o versioni successive oppure host 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 privilegiato all'interfaccia web di Cisco Secure ACS
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 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" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo il comando:
sc query observiq-otel-collector
Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.
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.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo il comando:
sudo systemctl status observiq-otel-collector
Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la Guida all'installazione dell'agente Bindplane.
Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps
Individua il file di configurazione
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di
config.yamlcon la seguente configurazione:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'CISCO_ACS' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Parametri di configurazione
Sostituisci i seguenti segnaposto:
Configurazione del ricevitore:
udplog: utilizzaudplogper syslog UDP otcplogper syslog TCP0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0per ascoltare su tutte le interfacce)514: Numero di porta su cui ascoltare (porta syslog standard)
Configurazione dell'esportatore:
creds_file_path: percorso completo del file di autenticazione importazione:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera ID clienteendpoint: URL endpoint regionale:- Stati Uniti:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Per l'elenco completo, vedi Endpoint regionali.
- Stati Uniti:
log_type: Tipo di log esattamente come appare in Chronicle (CISCO_ACS)
Salvare il file di configurazione
- Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva.
- Linux: premi
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per individuare eventuali errori:
sudo journalctl -u observiq-otel-collector -f
Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:
Prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole dei servizi:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
Fai clic con il tasto destro del mouse e seleziona Riavvia.
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Premi
Configurare l'inoltro di Syslog su Cisco Secure ACS
- Accedi all'interfaccia web di Cisco Secure ACS.
- Vai ad Amministrazione di sistema > Configurazione > Configurazione log > Destinazioni log remoti.
- Fai clic su Crea per aggiungere una nuova destinazione log remota.
- Fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome descrittivo (ad esempio,
Google-SecOps-Bindplane). - Descrizione: (facoltativo) inserisci una descrizione.
- Indirizzo IP: inserisci l'indirizzo IP dell'host dell'agente Bindplane.
- Porta: inserisci
514. - Codice struttura: seleziona LOCAL6 (o la struttura che preferisci).
- Nome: inserisci un nome descrittivo (ad esempio,
- Fai clic su Invia.
- Vai ad Amministrazione di sistema > Configurazione > Configurazione log > Categorie di logging.
- Seleziona le categorie di log da inoltrare:
- AAA Audit
- Diagnostica AAA
- Controllo amministrativo e operativo
- Diagnostica del sistema
- Per ogni categoria selezionata, fai clic sul nome della categoria.
- Vai alla scheda Destinazione log remota.
- Sposta la destinazione log remota creata (ad esempio
Google-SecOps-Bindplane) da Disponibile a Selezionata. - Fai clic su Salva.
- Verifica che i messaggi syslog vengano inviati controllando i log dell'agente Bindplane.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| Acct-Authentic | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Authentic. |
| Acct-Delay-Time | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Delay-Time. |
| Acct-Input-Octets | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Input-Octets. |
| Acct-Input-Packets | additional.fields[].value.string_value | Il valore viene tratto dal campo Acct-Input-Packets. |
| Acct-Output-Octets | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Output-Octets. |
| Acct-Output-Packets | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Output-Packets. |
| Acct-Session-Id | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Session-Id. |
| Acct-Session-Time | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Session-Time. |
| Acct-Status-Type | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Status-Type. |
| Acct-Terminate-Cause | additional.fields[].value.string_value | Il valore viene estratto dal campo Acct-Terminate-Cause. |
| ACSVersion | additional.fields[].value.string_value | Il valore viene estratto dal campo ACSVersion. |
| AD-Domain | principal.group.group_display_name | Il valore viene estratto dal campo AD-Domain. |
| AD-IP-Address | principal.ip | Il valore viene estratto dal campo AD-IP-Address. |
| Called-Station-ID | additional.fields[].value.string_value | Il valore viene estratto dal campo ID stazione chiamata. |
| Calling-Station-ID | additional.fields[].value.string_value | Il valore viene estratto dal campo Calling-Station-ID. |
| Classe | additional.fields[].value.string_value | Il valore viene preso dal campo Classe. |
| CmdSet | (non mappato) | Non mappato all'oggetto IDM. |
| ConfigVersionId | additional.fields[].value.number_value | Il valore viene estratto dal campo ConfigVersionId e convertito in un numero in virgola mobile. |
| DestinationIPAddress | target.ip, intermediary.ip | Il valore viene estratto dal campo DestinationIPAddress. intermediary.ip deriva dall'indirizzo IP del dispositivo. |
| DestinationPort | target.port | Il valore viene estratto dal campo DestinationPort e convertito in un numero intero. |
| Indirizzo IP del dispositivo | intermediary.ip | Il valore viene estratto dal campo Indirizzo IP dispositivo. |
| Porta del dispositivo | intermediary.port | Il valore viene estratto dal campo Porta dispositivo e convertito in un numero intero. |
| DetailedInfo | security_result.summary, security_result.description, security_result.action | Se DetailedInfo è "Authentication succeed", security_result.summary è "successful login occurred" e security_result.action è ALLOW. Se DetailedInfo contiene "Invalid username or password specified" (Nome utente o password non validi), security_result.summary è "failed login occurred" (Tentativo di accesso non riuscito) e security_result.action è BLOCK (BLOCCO). security_result.description deriva da log_header. |
| Framed-IP-Address | principal.ip | Il valore viene estratto dal campo Framed-IP-Address. |
| Framed-Protocol | additional.fields[].value.string_value | Il valore viene estratto dal campo Framed-Protocol. |
| NAS-IP-Address | target.ip | Il valore viene estratto dal campo NAS-IP-Address. |
| NAS-Port | additional.fields[].value.string_value | Il valore viene estratto dal campo NAS-Port. |
| NAS-Port-Id | target.port | Il valore viene estratto dal campo NAS-Port-Id e convertito in un numero intero. |
| NAS-Port-Type | additional.fields[].value.string_value | Il valore viene estratto dal campo NAS-Port-Type. |
| NetworkDeviceName | target.hostname | Il valore viene estratto dal campo NetworkDeviceName. |
| Protocollo | additional.fields[].value.string_value | Il valore viene estratto dal campo Protocollo. |
| RadiusPacketType | (non mappato) | Non mappato all'oggetto IDM. |
| Remote-Address | principal.ip, target.ip | Il valore viene estratto dal campo Remote-Address e analizzato come indirizzo IP. È mappato a principal.ip per gli eventi di autenticazione e a target.ip per gli eventi di contabilità e diagnostica. |
| RequestLatency | additional.fields[].value.string_value | Il valore viene estratto dal campo RequestLatency. |
| Risposta | principal.user.userid | Se Response contiene "User-Name", il nome utente viene estratto e mappato a principal.user.userid. |
| SelectedAccessService | additional.fields[].value.string_value | Il valore viene estratto dal campo SelectedAccessService. |
| SelectedAuthenticationIdentityStores | security_result.detection_fields[].value | Il valore viene estratto dal campo SelectedAuthenticationIdentityStores. |
| SelectedAuthorizationProfiles | security_result.detection_fields[].value | Il valore viene estratto dal campo SelectedAuthorizationProfiles. |
| Service-Type | additional.fields[].value.string_value | Il valore viene estratto dal campo Tipo di servizio. |
| Tunnel-Client-Endpoint | additional.fields[].value.string_value | Il valore viene estratto dal campo Tunnel-Client-Endpoint e analizzato come indirizzo IP. |
| Utente | target.user.userid | Il valore viene preso dal campo Utente. |
| Nome utente | target.user.userid, principal.mac | Se UserName è un indirizzo MAC, viene analizzato e mappato a principal.mac. In caso contrario, viene mappato a target.user.userid. |
| ac-user-agent | network.http.user_agent | Il valore viene estratto dal campo ac-user-agent. |
| gatto | metadata.description | Il valore viene preso dal campo cat. |
| device-mac | principal.mac | Il valore viene estratto dal campo device-mac, vengono aggiunti i due punti e il valore viene convertito in minuscolo. Se device-mac è "00", viene sostituito con "00:00:00:00:00:00". |
| device-platform | principal.asset.platform_software.platform | Se device-platform è "win", al campo principal.asset.platform_software.platform viene assegnato il valore "WINDOWS". |
| device-platform-version | principal.asset.platform_software.platform_version | Il valore viene estratto dal campo device-platform-version. |
| device-public-mac | principal.mac | Il valore viene estratto dal campo device-public-mac, i trattini vengono sostituiti con i due punti e il valore viene convertito in minuscolo. |
| device-type | principal.asset.hardware.model | Il valore viene preso dal campo tipo di dispositivo. |
| device-uid | principal.asset.asset_id | Il valore viene estratto dal campo device-uid e preceduto da "ASSET ID: ". |
| device-uid-global | principal.asset.product_object_id | Il valore viene estratto dal campo device-uid-global. |
| nome host | principal.hostname | Il valore viene estratto dal campo del nome host. |
| ip:source-ip | principal.ip | Il valore viene estratto dal campo ip:source-ip. |
| kv.ADDomain | (non mappato) | Non mappato all'oggetto IDM. |
| kv.Airespace-Wlan-Id | (non mappato) | Non mappato all'oggetto IDM. |
| kv.AuthenticationIdentityStore | (non mappato) | Non mappato all'oggetto IDM. |
| kv.AVPair | (non mappato) | Non mappato all'oggetto IDM. |
| kv.CVPN3000/ASA/PIX7.x-DAP-Tunnel-Group-Name | (non mappato) | Non mappato all'oggetto IDM. |
| kv.CVPN3000/ASA/PIX7.x-Group-Based-Address-Pools | (non mappato) | Non mappato all'oggetto IDM. |
| kv.ExternalGroups | (non mappato) | Non mappato all'oggetto IDM. |
| kv.FailureReason | (non mappato) | Non mappato all'oggetto IDM. |
| kv.IdentityAccessRestricted | (non mappato) | Non mappato all'oggetto IDM. |
| kv.IdentityGroup | (non mappato) | Non mappato all'oggetto IDM. |
| kv.NAS-Identifier | (non mappato) | Non mappato all'oggetto IDM. |
| kv.SelectedShellProfile | (non mappato) | Non mappato all'oggetto IDM. |
| kv.ServiceSelectionMatchedRule | (non mappato) | Non mappato all'oggetto IDM. |
| kv.State | (non mappato) | Non mappato all'oggetto IDM. |
| kv.Step | (non mappato) | Non mappato all'oggetto IDM. |
| kv.Tunnel-Medium-Type | (non mappato) | Non mappato all'oggetto IDM. |
| kv.Tunnel-Private-Group-ID | (non mappato) | Non mappato all'oggetto IDM. |
| kv.Tunnel-Type | (non mappato) | Non mappato all'oggetto IDM. |
| kv.UseCase | (non mappato) | Non mappato all'oggetto IDM. |
| kv.UserIdentityGroup | (non mappato) | Non mappato all'oggetto IDM. |
| kv.VendorSpecific | (non mappato) | Non mappato all'oggetto IDM. |
| kv.attribute-131 | (non mappato) | Non mappato all'oggetto IDM. |
| kv.attribute-89 | (non mappato) | Non mappato all'oggetto IDM. |
| kv.cisco-av-pair | (non mappato) | Non mappato all'oggetto IDM. |
| kv.cisco-av-pair:CiscoSecure-Group-Id | (non mappato) | Non mappato all'oggetto IDM. |
| leef_version | (non mappato) | Non mappato all'oggetto IDM. |
| log_header | metadata.description | Il valore viene estratto dal campo log_header. |
| log_id | metadata.product_log_id | Il valore viene estratto dal campo log_id. |
| log_type | metadata.product_event_type | Il valore viene estratto dal campo log_type. |
| message_severity | (non mappato) | Non mappato all'oggetto IDM. |
| prodotto | metadata.product_name | Il valore viene estratto dal campo del prodotto. |
| product_version | metadata.product_version | Il valore viene tratto dal campo product_version. |
| server_host | target.hostname | Il valore viene estratto dal campo server_host. |
| timestamp | metadata.event_timestamp | Il valore viene estratto dal campo timestamp e dal campo fuso orario (dopo la rimozione dei due punti). Il valore combinato viene analizzato come timestamp. |
| url | network.dns.questions[].name | Il valore viene estratto dal campo URL. |
| vendor | metadata.vendor_name | Il valore viene preso dal campo fornitore. Impostato inizialmente su "GENERIC_EVENT", poi potenzialmente sovrascritto in base a log_type e ai campi analizzati. Può essere "USER_LOGIN", "USER_UNCATEGORIZED", "NETWORK_DNS", "NETWORK_CONNECTION", "STATUS_UPDATE" o "STATUS_UNCATEGORIZED". Inizialmente impostato su "Cisco", poi potenzialmente sovrascritto dal campo fornitore. Impostato inizialmente su "ACS", poi potenzialmente sovrascritto dal campo prodotto. Imposta il valore su "CISCO_ACS". Imposta su "USERNAME_PASSWORD". Imposta "TACACS". Imposta "UDP" per gli eventi di diagnostica e contabilità RADIUS. Imposta "DNS" per gli eventi DNS. Derivato dal campo security_action, che viene impostato in base all'esito dell'accesso. Impostato su "accesso riuscito" per gli accessi riusciti e su "accesso non riuscito" per gli accessi non riusciti. Può anche essere impostato su "superato" per determinati eventi di diagnostica dell'archivio delle identità. Imposta su "BASSA" per i tentativi di accesso non riusciti. Costruito anteponendo "ASSET ID: " al campo device-uid. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.