Raccogliere i log di Cisco Secure ACS
Questo documento descrive come raccogliere i log di Cisco Secure Access Control Server (ACS) utilizzando un forwarder di Google Security Operations.
Per ulteriori informazioni, consulta Importazione dei dati in Google Security Operations.
Un'etichetta di importazione identifica l'analizzatore sintattico che normalizza i dati dei log non elaborati in formato UDM strutturato. Le informazioni contenute in questo documento si applicano all'interprete con l'etichetta di importazione CISCO_ACS
.
Configura Cisco Secure ACS
- Accedi alla console Cisco Secure ACS utilizzando le credenziali di amministratore.
- Nella console Cisco Secure ACS, seleziona Amministrazione di sistema > Configurazione > Configurazione dei log > Destinatari dei log remoti.
- Fai clic su Crea.
Nella finestra Crea, specifica i valori per i seguenti campi:
Campo Descrizione Nome Nome del forwarder di Google Security Operations. Descrizione Descrizione del forwarder di Google Security Operations. Indirizzo IP Indirizzo IP del forwarder di Google Security Operations. Utilizzare le opzioni syslog avanzate Seleziona questa opzione per attivare le opzioni syslog avanzate. Tipo target Seleziona syslog TCP o syslog UDP. Porta Utilizza una porta alta, ad esempio 10514. Codice struttura LOCAL6 (codice = 22; predefinito). Lunghezza massima Il valore consigliato è 1024. Fai clic su Invia. Viene visualizzata la finestra Destinazioni log remote con la nuova configurazione del destinazione log remoto.
Nella console Cisco Secure ACS, seleziona Amministrazione di sistema > Configurazione > Configurazione log > Categorie di log > Per istanza.
Seleziona ACS e poi fai clic su Configura.
Nella finestra Per istanza, seleziona una categoria di log e poi fai clic su Modifica.
Nella scheda Generale, per alcune categorie di log, la gravità del logging deve essere impostata su predefinita o come fornita dal fornitore.
Per Cisco Secure ACS, la gravità predefinita è Avviso per tutte le categorie di registrazione, ad eccezione di quelle per le quali non è possibile modificare la gravità, come avviso di controllo AAA, avviso di fatturazione, avviso di controllo amministrativo e operativo e avviso di statistiche di sistema.
Fai clic sulla scheda Target syslog remoto e sposta il target remoto appena creato da Target disponibili a Target selezionati.
Fai clic su Invia.
Per configurare i target remoti per altre categorie di log, ripeti i passaggi da 8 a 10.
Configura il forwarder di Google Security Operations e syslog per importare i log di Cisco Secure ACS
- Vai a Impostazioni SIEM > Inoltratori.
- Fai clic su Aggiungi nuovo mittente.
- Nel campo Nome del forwarder, inserisci un nome univoco per il forwarder.
- Fai clic su Invia. Il forwarder viene aggiunto e viene visualizzata la finestra Aggiungi configurazione del collettore.
- Digita un nome nel campo Nome del raccoglitore.
- Seleziona Cisco ACS come Tipo di log.
- Seleziona Syslog come Tipo di collettore.
- Configura i seguenti parametri di input obbligatori:
- Protocollo: specifica il protocollo.
- Indirizzo: specifica l'indirizzo IP o il nome host di destinazione in cui risiede il collector e gli indirizzi dei dati syslog.
- Porta: specifica la porta di destinazione in cui risiede il raccoglitore e che ascolta i dati syslog.
- Fai clic su Invia.
Per ulteriori informazioni sui forwarder di Google Security Operations, consulta la documentazione sui forwarder di Google Security Operations. Per informazioni sui requisiti per ciascun tipo di inoltro, consulta Configurazione degli inoltratori per tipo. Se riscontri problemi durante la creazione dei reindirizzamenti, contatta l'assistenza di Google Security Operations.
Riferimento alla mappatura dei campi
Questo parser gestisce i log di Cisco ACS, tra cui autenticazione, fatturazione, diagnostica e statistiche di sistema. Utilizza pattern grok per estrarre i campi da vari formati di log (SYSLOG + KV, LEEF), normalizza i timestamp e i fusi orari e mappa i campi chiave all'UDM, gestendo diversi tipi di log con una logica specifica per i successi/errori di autenticazione, il calcolo del costo TACACS+ e gli eventi RADIUS. Inoltre, arricchisce l'UDM con campi aggiuntivi come informazioni sul dispositivo e dettagli di autenticazione.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
Acct-Authentic |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Authentic . |
Acct-Delay-Time |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Delay-Time . |
Acct-Input-Octets |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Input-Octets . |
Acct-Input-Packets |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Input-Packets . |
Acct-Output-Octets |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Output-Octets . |
Acct-Output-Packets |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Output-Packets . |
Acct-Session-Id |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Session-Id . |
Acct-Session-Time |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Session-Time . |
Acct-Status-Type |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Status-Type . |
Acct-Terminate-Cause |
additional.fields[].value.string_value |
Il valore viene preso dal campo Acct-Terminate-Cause . |
ACSVersion |
additional.fields[].value.string_value |
Il valore viene preso dal campo ACSVersion . |
AD-Domain |
principal.group.group_display_name |
Il valore viene preso dal campo AD-Domain . |
AD-IP-Address |
principal.ip |
Il valore viene preso dal campo AD-IP-Address . |
Called-Station-ID |
additional.fields[].value.string_value |
Il valore viene preso dal campo Called-Station-ID . |
Calling-Station-ID |
additional.fields[].value.string_value |
Il valore viene preso dal campo Calling-Station-ID . |
Class |
additional.fields[].value.string_value |
Il valore viene preso dal campo Class . |
CmdSet |
(non mappato) | Non mappato all'oggetto IDM. |
ConfigVersionId |
additional.fields[].value.number_value |
Il valore viene preso dal campo ConfigVersionId e convertito in un valore a virgola mobile. |
DestinationIPAddress |
target.ip , intermediary.ip |
Il valore viene preso dal campo DestinationIPAddress . intermediary.ip è derivato da Device IP Address . |
DestinationPort |
target.port |
Il valore viene preso dal campo DestinationPort e convertito in un numero intero. |
Device IP Address |
intermediary.ip |
Il valore viene preso dal campo Device IP Address . |
Device Port |
intermediary.port |
Il valore viene preso dal campo Device Port e convertito in un numero intero. |
DetailedInfo |
security_result.summary , security_result.description , security_result.action |
Se DetailedInfo è "Autenticazione riuscita", security_result.summary è "Accesso riuscito" e security_result.action è ALLOW. Se DetailedInfo contiene "Invalid username or password specified" (Nome utente o password non validi specificati), security_result.summary è "failed login occurred" (Accesso non riuscito) e security_result.action è BLOCK. security_result.description è derivato da log_header . |
Framed-IP-Address |
principal.ip |
Il valore viene preso dal campo Framed-IP-Address . |
Framed-Protocol |
additional.fields[].value.string_value |
Il valore viene preso dal campo Framed-Protocol . |
NAS-IP-Address |
target.ip |
Il valore viene preso dal campo NAS-IP-Address . |
NAS-Port |
additional.fields[].value.string_value |
Il valore viene preso dal campo NAS-Port . |
NAS-Port-Id |
target.port |
Il valore viene preso dal campo NAS-Port-Id e convertito in un numero intero. |
NAS-Port-Type |
additional.fields[].value.string_value |
Il valore viene preso dal campo NAS-Port-Type . |
NetworkDeviceName |
target.hostname |
Il valore viene preso dal campo NetworkDeviceName . |
Protocol |
additional.fields[].value.string_value |
Il valore viene preso dal campo Protocol . |
RadiusPacketType |
(non mappato) | Non mappato all'oggetto IDM. |
Remote-Address |
principal.ip , target.ip |
Il valore viene preso 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 fatturazione e diagnostica. |
RequestLatency |
additional.fields[].value.string_value |
Il valore viene preso dal campo RequestLatency . |
Response |
principal.user.userid |
Se Response contiene "Nome-utente", il nome utente viene estratto e mappato a principal.user.userid . |
SelectedAccessService |
additional.fields[].value.string_value |
Il valore viene preso dal campo SelectedAccessService . |
SelectedAuthenticationIdentityStores |
security_result.detection_fields[].value |
Il valore viene preso dal campo SelectedAuthenticationIdentityStores . |
SelectedAuthorizationProfiles |
security_result.detection_fields[].value |
Il valore viene preso dal campo SelectedAuthorizationProfiles . |
Service-Type |
additional.fields[].value.string_value |
Il valore viene preso dal campo Service-Type . |
Tunnel-Client-Endpoint |
additional.fields[].value.string_value |
Il valore viene preso dal campo Tunnel-Client-Endpoint e analizzato come indirizzo IP. |
User |
target.user.userid |
Il valore viene preso dal campo User . |
UserName |
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 preso dal campo ac-user-agent . |
cat |
metadata.description |
Il valore viene preso dal campo cat . |
device-mac |
principal.mac |
Il valore viene preso 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", il valore "WINDOWS" viene assegnato a principal.asset.platform_software.platform . |
device-platform-version |
principal.asset.platform_software.platform_version |
Il valore viene preso dal campo device-platform-version . |
device-public-mac |
principal.mac |
Il valore viene preso dal campo device-public-mac , i trattini vengono sostituiti con due punti e il valore viene convertito in lettere minuscole. |
device-type |
principal.asset.hardware.model |
Il valore viene preso dal campo device-type . |
device-uid |
principal.asset.asset_id |
Il valore viene preso dal campo device-uid e preceduto da "ID ASSET: ". |
device-uid-global |
principal.asset.product_object_id |
Il valore viene preso dal campo device-uid-global . |
hostname |
principal.hostname |
Il valore viene preso dal campo hostname . |
ip:source-ip |
principal.ip |
Il valore viene preso 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 preso dal campo log_header . |
log_id |
metadata.product_log_id |
Il valore viene preso dal campo log_id . |
log_type |
metadata.product_event_type |
Il valore viene preso dal campo log_type . |
message_severity |
(non mappato) | Non mappato all'oggetto IDM. |
product |
metadata.product_name |
Il valore viene preso dal campo product . |
product_version |
metadata.product_version |
Il valore viene preso dal campo product_version . |
server_host |
target.hostname |
Il valore viene preso dal campo server_host . |
timestamp |
metadata.event_timestamp |
Il valore viene preso dal campo timestamp e dal campo timezone (dopo aver rimosso i due punti). Il valore combinato viene analizzato come timestamp. |
url |
network.dns.questions[].name |
Il valore viene preso dal campo url . |
vendor |
metadata.vendor_name |
Il valore viene preso dal campo vendor . 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". Impostato inizialmente su "Cisco", quindi potenzialmente sovrascritto dal campo vendor . Impostato inizialmente su "ACS", quindi potenzialmente sovrascritto dal campo product . Impostato su "CISCO_ACS". Impostato su "USERNAME_PASSWORD". Impostato su "TACACS". Imposta su "UDP" per gli eventi di fatturazione e diagnostica RADIUS. Imposta su "DNS" per gli eventi DNS. Derivato dal campo security_action , che viene impostato in base al fatto che l'accesso sia andato a buon fine o meno. Imposta su "Accesso riuscito" per gli accessi riusciti e su "Accesso non riuscito" per gli accessi non riusciti. Può essere impostato anche su "passed" per determinati eventi di diagnostica dell'archivio delle identità. Imposta su "LOW" per i tentativi di accesso non riusciti. Viene creato anteponendo "ASSET ID: " al campo device-uid . |
Modifiche
2023-09-26
- Miglioramento:
- È stato inizializzato "hostname" su null e aggiunto un controllo del nome host non null prima di impostare "metadata.event_type" su "STATUS_UPDATE".
- È stato aggiunto un controllo dell'indirizzo IP valido a "kv.DeviceIPAddress", "kv.Remote-Address" prima della mappatura ai campi UDM.
2022-08-19
- Miglioramento:
- "Nome utente" è stato mappato a "principal.user.userid".
- È stato rinominato ip:source-ip in "source_ip" e mappato a "principal.ip".
- "kv.audit-session-id" è stato rinominato in "kv.audit_session_id" e mappato a "network.session_id".
- "kv.AuthenticationMethod" è stato mappato a "additional.fields".
- "kv.SelectedAccessService" è stato mappato a "additional.fields".
- "kv.SelectedAuthorizationProfiles" è stato mappato a "security_result.detection_fields".
- "kv.SelectedAuthenticationIdentityStores" è stato mappato a "security_result.detection_fields".
- "kv.device-uid-global" è stato mappato a "principal.asset.product_object_id".
- "kv.device-uid" è stato mappato a "principal.asset.asset_id".
- "metadata.event_type" è stato mappato a "USER_UNCATEGORIZED" se kv.DestinationIPAddress e kv.NAS-IP-Address e kv.NAS-IP-Address e kv.UserName e kv.NetworkDeviceName sono null.
- È stato aggiunto il supporto per i log con formato LEEF.
2022-06-14
- Miglioramento: è stato modificato il pattern grok per analizzare i log di log_type = "CSCOacs_Passed_Authentications" che non andavano a buon fine a causa di più spazi.
- È stato sostituito il valore di "device-mac" con il valore fittizio "00:00:00:00:00:00" per il tipo di log "CSCOacs_RADIUS_Accounting" in caso di valore non valido (00).
2022-06-06
- Miglioramento: sono stati analizzati i log di tipo "CSCOacs_Passed_Authentications" che non contengono "DestinationIPAddress" o "NAS-IP-Address".
- Modifica di metadata.event_type da "USER_UNCATEGORIZED" a "USER_LOGIN" per i log di tipo "CSCOacs_Passed_Authentications"
2022-05-05
- Miglioramento: i log appena importati che non hanno il codice messaggio vengono analizzati e ignorati.
2022-04-27
- Miglioramento: sono stati analizzati i log con log_type=CISE_TACACS_Accounting.