Raccogliere i log di Symantec VIP Authentication Hub

Supportato in:

Questo documento spiega come importare i log di Symantec VIP Authentication Hub in Google Security Operations utilizzando Bindplane. Il codice del parser pulisce e preelabora innanzitutto il messaggio di log di input, convertendo campi specifici e ristrutturando i dati dalle coppie chiave-valore. Poi estrae le informazioni pertinenti da vari campi utilizzando pattern grok e logica condizionale, mappandoli agli attributi corrispondenti all'interno di Unified Data Model (UDM) per una rappresentazione standardizzata degli eventi di sicurezza.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Host Windows 2016 o versioni successive o Linux con systemd
  • Se l'esecuzione avviene tramite un proxy, le porte del firewall sono aperte
  • Accesso con privilegi all'hub di autenticazione Symantec VIP

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

Installazione di Windows

  1. Apri il 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
    

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
    

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione, consulta la guida all'installazione.

Configura l'agente Bindplane per importare Syslog e inviarli a Google SecOps

  1. 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).
  2. 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: '/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: 'SYMANTEC_VIP_AUTHHUB'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Sostituisci la porta e l'indirizzo IP in base alle esigenze della tua infrastruttura.

  4. Sostituisci <customer_id> con l'ID cliente effettivo.

  5. 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 Syslog in Symantec VIP Authentication Hub

  1. Accedi alla UI web di Symantec VIP Gateway.
  2. Vai a Log > Configurazione Syslog.
  3. Se stai configurando Syslog per la prima volta, ti viene chiesto di configurare le impostazioni di Syslog. Seleziona .
  4. Se hai già configurato Syslog, fai clic su Modifica in fondo alla pagina.
  5. Fornisci i seguenti dettagli di configurazione:
    • Syslog Facility: seleziona LOG_LOCAL0.
    • Host syslog: inserisci l'indirizzo IP dell'agente Bindplane.
    • Porta Syslog: inserisci il numero di porta dell'agente Bindplane (ad esempio, 514 per UDP).
  6. Fai clic su Salva.
  7. Vai a Provider identità > Configurazione del portale self-service.
  8. Modifica i seguenti dettagli della configurazione:
    • Livello di logging: seleziona Informazioni.
    • Enable Syslog (Attiva Syslog): seleziona Yes (Sì).
  9. Fai clic su Invia.
  10. Vai a Provider identità > Configurazione dell'autenticazione di VIP Manager.
  11. Modifica i seguenti dettagli della configurazione:
    • Livello di logging: seleziona Informazioni.
    • Enable Syslog (Attiva Syslog): seleziona Yes (Sì).
  12. Fai clic su Invia.
  13. Vai a User Store > Sincronizzazione directory LDAP.
  14. Modifica i seguenti dettagli della configurazione:
    • Livello di log: seleziona Informazioni.
    • Enable Syslog (Attiva Syslog): seleziona Yes (Sì).
  15. Fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
/auth/v1/authenticate security_result.detection_fields[].value Il valore viene estratto dal campo /auth/v1/authenticate nel log non elaborato e assegnato a un oggetto security_result.detection_fields con la chiave api.
__isAuditIdLcmIdStore additional.fields[].value.string_value Il valore viene estratto dal campo __isAuditIdLcmIdStore nel log non elaborato e assegnato a un oggetto additional.fields con la chiave __isAuditIdLcmIdStore.
accessTokenScopes security_result.detection_fields[].value Il valore viene estratto dal campo accessTokenScopes nel log non elaborato e assegnato a un oggetto security_result.detection_fields con la chiave accessTokenScopes.
accessTokenTid security_result.detection_fields[].value Il valore viene estratto dal campo accessTokenTid nel log non elaborato e assegnato a un oggetto security_result.detection_fields con la chiave accessTokenTid.
api security_result.detection_fields[].value Il valore viene estratto dal campo api nel log non elaborato e assegnato a un oggetto security_result.detection_fields con la chiave api.
appId additional.fields[].value.string_value Il valore viene estratto dal campo appId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave appId.
appName principal.application Il valore viene estratto dal campo appName nel log non elaborato.
azpName additional.fields[].value.string_value Il valore viene estratto dal campo azpName nel log non elaborato e assegnato a un oggetto additional.fields con la chiave azpName.
bytes_sent network.sent_bytes Il valore viene estratto dal campo bytes_sent nel log non elaborato.
client principal.asset.ip, principal.ip L'indirizzo IP viene estratto dal campo client nel log non elaborato utilizzando un pattern grok e aggiunto ai campi principal.ip e principal.asset.ip.
clientId additional.fields[].value.string_value, principal.user.userid Il valore viene estratto dal campo clientId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave clientId. Se il campo clientId non è vuoto, viene utilizzato anche per compilare il campo principal.user.userid.
clientIp principal.asset.ip, principal.ip Il valore viene estratto dal campo clientIp nel log non elaborato e aggiunto ai campi principal.ip e principal.asset.ip.
clientTid additional.fields[].value.string_value Il valore viene estratto dal campo clientTid nel log non elaborato e assegnato a un oggetto additional.fields con la chiave clientTid.
clientTxnId additional.fields[].value.string_value Il valore viene estratto dal campo clientTxnId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave clientTxnId.
contentType additional.fields[].value.string_value Il valore viene estratto dal campo contentType nel log non elaborato e assegnato a un oggetto additional.fields con la chiave contentType.
countryISO principal.location.country_or_region Il valore viene estratto dal campo countryISO nel log non elaborato.
eventId metadata.product_event_type Il valore viene estratto dal campo eventId nel log non elaborato.
flowStateId additional.fields[].value.string_value Il valore viene estratto dal campo flowStateId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave flowStateId.
geo.city_name principal.location.city Il valore viene estratto dal campo geo.city_name nel log non elaborato.
geo.country_name principal.location.country_or_region Il valore viene estratto dal campo geo.country_name nel log non elaborato.
geo.location.lat principal.location.region_coordinates.latitude Il valore viene estratto dal campo geo.location.lat nel log non elaborato, convertito in un numero in virgola mobile e rinominato in principal.location.region_coordinates.latitude.
geo.location.lon principal.location.region_coordinates.longitude Il valore viene estratto dal campo geo.location.lon nel log non elaborato, convertito in un numero in virgola mobile e rinominato in principal.location.region_coordinates.longitude.
guid metadata.product_log_id Il valore viene estratto dal campo guid nel log non elaborato.
host principal.asset.hostname, principal.hostname Il valore viene estratto dal campo host nel log non elaborato, privato di eventuali virgolette e aggiunto ai campi principal.hostname e principal.asset.hostname.
httpMethod network.http.method Il valore viene estratto dal campo httpMethod nel log non elaborato.
httpReferrer network.http.referral_url Il valore viene estratto dal campo httpReferrer nel log non elaborato.
identitySourceId additional.fields[].value.string_value Il valore viene estratto dal campo identitySourceId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave identitySourceId.
internal-user-sync-ext-resourceGuid target.user.userid Il valore viene estratto dal campo internal-user-sync-ext-resourceGuid nel log non elaborato.
internal-user-sync-ext-resourceName target.user.email_addresses Il valore viene estratto dal campo internal-user-sync-ext-resourceName nel log non elaborato e aggiunto al campo target.user.email_addresses.
issuerUrl target.url Il valore viene estratto dal campo issuerUrl nel log non elaborato.
kubernetes.annotations.cni.projectcalico.org_containerID target.resource.product_object_id Il valore viene estratto dal campo kubernetes.annotations.cni.projectcalico.org_containerID nel log non elaborato.
kubernetes.annotations.cni.projectcalico.org_podIP target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.annotations.cni.projectcalico.org_podIP nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave podIP.
kubernetes.annotations.cni.projectcalico.org_podIPs target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.annotations.cni.projectcalico.org_podIPs nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave podIPs.
kubernetes.container_hash target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.container_hash nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave container_hash.
kubernetes.container_image target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.container_image nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave container_image.
kubernetes.container_name target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.container_name nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave container_name.
kubernetes.docker_id target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.docker_id nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave docker_id.
kubernetes.host principal.asset.hostname, principal.hostname Il valore viene estratto dal campo kubernetes.host nel log non elaborato e aggiunto ai campi principal.hostname e principal.asset.hostname.
kubernetes.labels.app Questo campo non è mappato all'oggetto IDM nell'UDM.
kubernetes.labels.app.kubernetes.io/component target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.app.kubernetes.io/component nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave io_component.
kubernetes.labels.app.kubernetes.io/instance target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.app.kubernetes.io/instance nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave io_instance.
kubernetes.labels.app.kubernetes.io/managed-by target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.app.kubernetes.io/managed-by nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave io_managed-by.
kubernetes.labels.app.kubernetes.io/name target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.app.kubernetes.io/name nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave io_name.
kubernetes.labels.app.kubernetes.io/part-of target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.app.kubernetes.io/part-of nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave io_part-of.
kubernetes.labels.app.kubernetes.io/version target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.app.kubernetes.io/version nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave io_version.
kubernetes.labels.helm.sh/chart target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.helm.sh/chart nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave helm_sh_chart.
kubernetes.labels.helmChartName target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.helmChartName nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave helmChartName.
kubernetes.labels.imageTag target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.imageTag nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave imageTag.
kubernetes.labels.pod-template-hash target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.labels.pod-template-hash nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave pod-template-hash.
kubernetes.namespace_name target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.namespace_name nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave namespace_name.
kubernetes.pod_id target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.pod_id nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave pod_id.
kubernetes.pod_name target.resource.attribute.labels[].value Il valore viene estratto dal campo kubernetes.pod_name nel log non elaborato e assegnato a un oggetto target.resource.attribute.labels con la chiave pod_name.
level security_result.severity Se il campo level nel log non elaborato corrisponde a notice o info (senza distinzione tra maiuscole e minuscole), il campo security_result.severity viene impostato su INFORMATIONAL.
log security_result.description, level, kv_data I campi level e kv_data vengono estratti dal campo log nel log non elaborato utilizzando un pattern grok. Il campo security_result.description viene compilato con l'intero campo log.
logtag additional.fields[].value.string_value Il valore viene estratto dal campo logtag nel log non elaborato e assegnato a un oggetto additional.fields con la chiave logtag.
method network.http.method Il valore viene estratto dal campo method nel log non elaborato.
msg metadata.event_type, security_result.description Il valore viene estratto dal campo msg nel log non elaborato e utilizzato per compilare il campo security_result.description. Il campo metadata.event_type è determinato in base ai contenuti del campo msg: * USER_CREATION se msg contiene Internal user created or updated. * USER_LOGIN se msg contiene Authorization Initiated Succesfully, Authentication Initiated Successfully o Authentication Successful. * USER_RESOURCE_ACCESS se msg contiene Token Generated o token verified. * NETWORK_CONNECTION se sia has_principal che has_target sono true. * STATUS_UPDATE se has_principal è true. * GENERIC_EVENT altrimenti.
path principal.file.full_path Il valore viene estratto dal campo path nel log non elaborato.
principalId additional.fields[].value.string_value, principal.user.userid Il valore viene estratto dal campo principalId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave principalId. Se il campo principalId non è clientId e non è vuoto, viene utilizzato anche per compilare il campo principal.user.userid.
principalType additional.fields[].value.string_value Il valore viene estratto dal campo principalType nel log non elaborato e assegnato a un oggetto additional.fields con la chiave principalType.
protocol network.application_protocol Se il campo protocol nel log non elaborato corrisponde a HTTP (senza distinzione tra maiuscole e minuscole), il campo network.application_protocol viene impostato su HTTP.
referrer network.http.referral_url Il valore viene estratto dal campo referrer nel log non elaborato, privato di eventuali virgolette e assegnato al campo network.http.referral_url.
relVersion metadata.product_version Il valore viene estratto dal campo relVersion nel log non elaborato.
remoteAddr additional.fields[].value.string_value Il valore viene estratto dal campo remoteAddr nel log non elaborato e assegnato a un oggetto additional.fields con la chiave remoteAddr.
requestId additional.fields[].value.string_value Il valore viene estratto dal campo requestId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave requestId.
requestTime additional.fields[].value.string_value Il valore viene estratto dal campo requestTime nel log non elaborato e assegnato a un oggetto additional.fields con la chiave requestTime.
responseCode network.http.response_code Il valore numerico viene estratto dal campo responseCode nel log non elaborato utilizzando un pattern grok, convertito in un numero intero e assegnato al campo network.http.response_code.
request method, path, protocol I campi method, path e protocol vengono estratti dal campo request nel log non elaborato utilizzando un pattern grok dopo aver rimosso le virgolette.
server target.asset.hostname, target.hostname Il valore viene estratto dal campo server nel log non elaborato e aggiunto ai campi target.hostname e target.asset.hostname.
service additional.fields[].value.string_value Il valore viene estratto dal campo service nel log non elaborato e assegnato a un oggetto additional.fields con la chiave service.
status network.http.response_code Il valore viene estratto dal campo status nel log non elaborato, convertito in un numero intero e assegnato al campo network.http.response_code.
stream additional.fields[].value.string_value Il valore viene estratto dal campo stream nel log non elaborato e assegnato a un oggetto additional.fields con la chiave stream.
sub additional.fields[].value.string_value Il valore viene estratto dal campo sub nel log non elaborato e assegnato a un oggetto additional.fields con la chiave sub.
subType additional.fields[].value.string_value Il valore viene estratto dal campo subType nel log non elaborato e assegnato a un oggetto additional.fields con la chiave subType.
tid additional.fields[].value.string_value Il valore viene estratto dal campo tid nel log non elaborato e assegnato a un oggetto additional.fields con la chiave tid.
timestamp metadata.event_timestamp Il valore viene estratto dal campo timestamp nel log non elaborato e analizzato come timestamp ISO8601.
tname additional.fields[].value.string_value Il valore viene estratto dal campo tname nel log non elaborato e assegnato a un oggetto additional.fields con la chiave tname.
txnId additional.fields[].value.string_value Il valore viene estratto dal campo txnId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave txnId.
type additional.fields[].value.string_value Il valore viene estratto dal campo type nel log non elaborato e assegnato a un oggetto additional.fields con la chiave type.
userAgent network.http.parsed_user_agent, network.http.user_agent Il valore viene estratto dal campo userAgent nel log non elaborato e assegnato ai campi network.http.user_agent e network.http.parsed_user_agent. Il campo network.http.parsed_user_agent viene quindi convertito in un oggetto user agent analizzato.
userDN additional.fields[].value.string_value Il valore viene estratto dal campo userDN nel log non elaborato e assegnato a un oggetto additional.fields con la chiave userDN.
userGuid additional.fields[].value.string_value Il valore viene estratto dal campo userGuid nel log non elaborato e assegnato a un oggetto additional.fields con la chiave userGuid.
userIdpGuid additional.fields[].value.string_value Il valore viene estratto dal campo userIdpGuid nel log non elaborato e assegnato a un oggetto additional.fields con la chiave userIdpGuid.
userIP principal.asset.ip, principal.ip, target.asset.ip, target.ip, intermediary.ip Gli indirizzi IP vengono estratti dal campo userIP nel log non elaborato utilizzando un pattern grok. Il primo indirizzo IP viene aggiunto ai campi principal.ip e principal.asset.ip. Il secondo indirizzo IP viene aggiunto ai campi target.ip e target.asset.ip. Il terzo indirizzo IP viene aggiunto al campo intermediary.ip.
userLoginId target.user.email_addresses Se il campo userLoginId nel log non elaborato non è vuoto e corrisponde a un pattern di indirizzo email, viene aggiunto al campo target.user.email_addresses.
userLoginIdAttributeMappingName target.user.user_display_name Il valore viene estratto dal campo userLoginIdAttributeMappingName nel log non elaborato.
userRiskLevel additional.fields[].value.string_value Il valore viene estratto dal campo userRiskLevel nel log non elaborato e assegnato a un oggetto additional.fields con la chiave userRiskLevel.
userRiskScore additional.fields[].value.string_value Il valore viene estratto dal campo userRiskScore nel log non elaborato e assegnato a un oggetto additional.fields con la chiave userRiskScore.
userIp principal.asset.ip, principal.ip Il valore viene estratto dal campo userIp nel log non elaborato e aggiunto ai campi principal.ip e principal.asset.ip.
userUniversalId additional.fields[].value.string_value Il valore viene estratto dal campo userUniversalId nel log non elaborato e assegnato a un oggetto additional.fields con la chiave userUniversalId.
vhost additional.fields[].value.string_value Il valore viene estratto dal campo vhost nel log non elaborato e assegnato a un oggetto additional.fields con la chiave vhost.
N/D extensions.auth.type Il valore è impostato su SSO se il campo metadata.event_type è USER_LOGIN.
N/D metadata.log_type Il valore è impostato su SYMANTEC_VIP_AUTHHUB.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.