Raccogli i log di Cisco Secure ACS

Supportato in:

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

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. 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

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. 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

  1. Apri Prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo il comando:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.

Installazione di Linux

  1. Apri un terminale con privilegi di root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendi il completamento dell'installazione.

  4. 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.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifica il file di configurazione

  • Sostituisci l'intero contenuto di config.yaml con 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: utilizza udplog per syslog UDP o tcplog per syslog TCP
      • 0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0 per 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
      • YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera ID cliente
      • endpoint: 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.
      • 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, poi Enter e infine Ctrl+X.
    • Windows: fai clic su File > Salva.

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifica che il servizio sia in esecuzione:

        sudo systemctl status observiq-otel-collector
      
    2. Controlla 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-collector
      
    • Console dei servizi:

      1. Premi Win+R, digita services.msc e premi Invio.
      2. Individua observIQ OpenTelemetry Collector.
      3. Fai clic con il tasto destro del mouse e seleziona Riavvia.

      4. Verifica che il servizio sia in esecuzione:

        sc query observiq-otel-collector
        
      5. Controlla i log per individuare eventuali errori:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurare l'inoltro di Syslog su Cisco Secure ACS

  1. Accedi all'interfaccia web di Cisco Secure ACS.
  2. Vai ad Amministrazione di sistema > Configurazione > Configurazione log > Destinazioni log remoti.
  3. Fai clic su Crea per aggiungere una nuova destinazione log remota.
  4. 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).
  5. Fai clic su Invia.
  6. Vai ad Amministrazione di sistema > Configurazione > Configurazione log > Categorie di logging.
  7. Seleziona le categorie di log da inoltrare:
    • AAA Audit
    • Diagnostica AAA
    • Controllo amministrativo e operativo
    • Diagnostica del sistema
  8. Per ogni categoria selezionata, fai clic sul nome della categoria.
  9. Vai alla scheda Destinazione log remota.
  10. Sposta la destinazione log remota creata (ad esempio Google-SecOps-Bindplane) da Disponibile a Selezionata.
  11. Fai clic su Salva.
  12. 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.