Raccogliere i log di CyberArk PAM
Questo codice del parser estrae innanzitutto i campi dai messaggi syslog di CyberArk Privileged Access Manager (PAM) utilizzando le espressioni regolari. Dopodiché, mappa i campi estratti su un modello dei dati unificato (UDM), arricchendo i dati con un contesto aggiuntivo e standardizzando il tipo di evento in base a criteri specifici.
Prima di iniziare
- Assicurati di avere un'istanza Google Security Operations.
- Assicurati di utilizzare Windows 2016 o versioni successive oppure un host Linux con systemd.
- Se l'esecuzione avviene tramite un proxy, assicurati che le porte del firewall siano aperte.
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.
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
- Per l'installazione di Windows, esegui il seguente script:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet - Per l'installazione di Linux, esegui il seguente script:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh - Ulteriori opzioni di installazione sono disponibili in questa guida all'installazione.
Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps
- Accedi alla macchina in cui è installato l'agente Bindplane.
Modifica il file
config.yamlcome segue:receivers: tcplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: Cyberark_PAM raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labelsRiavvia l'agente Bindplane per applicare le modifiche:
sudo systemctl restart bindplane
Configurare l'esportazione Syslog per CyberArk Vault
- Accedi al server Vault.
- Apri il file di configurazione
dbparm.ini, che si trova in:C:\Program Files (x86)\CyberArk\Vault\Server\dbparm.ini. Aggiungi o modifica i seguenti parametri:
SyslogServer=<syslog_server_ip> SyslogPort=<syslog_server_port> SyslogProtocol=<TCP or UDP> SyslogFormat=SyslogSalva il file
dbparm.ini.Riavvia il server Vault:
net stop CyberArkVault net start CyberArkVault
Configurare l'esportazione Syslog in PVWA
- Accedi al server PVWA.
- Apri il file
Web.config, che si trova in:C:\inetpub\wwwroot\PasswordVault\ Aggiungi o modifica le seguenti chiavi:
<add key="SyslogServer" value="<syslog_server_ip>" /> <add key="SyslogPort" value="<syslog_server_port>" /> <add key="SyslogProtocol" value="<TCP or UDP>" /> <add key="SyslogFormat" value="Syslog" />Salva le modifiche apportate al file
Web.config.Riavvia il servizio IIS:
iisreset
Configura l'esportazione Syslog in PTA
- Accedi al server PTA utilizzando SSH.
- Apri il file
application.properties, che si trova in:/opt/cta/config/application.properties Aggiungi o modifica le seguenti righe:
syslog.server.ip=<syslog_server_ip> syslog.server.port=<syslog_server_port> syslog.protocol=<TCP or UDP>Salva il file
application.properties.Riavvia il servizio PTA per applicare le modifiche:
sudo service pta restart
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| atto | metadata.description | Mappato direttamente dal campo act. |
| cn1 | additional.fields.value.string_value | Mappato direttamente dal campo cn1 quando cn1Label non è vuoto. |
| cn1Label | additional.fields.key | Mappato direttamente dal campo cn1Label quando cn1 non è vuoto. |
| cn2 | additional.fields.value.string_value | Mappato direttamente dal campo cn2 quando cn2Label non è vuoto. |
| cn2Label | additional.fields.key | Mappato direttamente dal campo cn2Label quando cn2 non è vuoto. |
| cs1 | additional.fields.value.string_value | Mappato direttamente dal campo cs1 quando cs1Label non è vuoto. |
| cs1Label | additional.fields.key | Mappato direttamente dal campo cs1Label quando cs1 non è vuoto. |
| cs2 | additional.fields.value.string_value | Mappato direttamente dal campo cs2 quando cs2Label non è vuoto. |
| cs2Label | additional.fields.key | Mappato direttamente dal campo cs2Label quando cs2 non è vuoto. |
| cs3 | additional.fields.value.string_value | Mappato direttamente dal campo cs3 quando cs3Label non è vuoto. |
| cs3Label | additional.fields.key | Mappato direttamente dal campo cs3Label quando cs3 non è vuoto. |
| cs4 | additional.fields.value.string_value | Mappato direttamente dal campo cs4 quando cs4Label non è vuoto. |
| cs4Label | additional.fields.key | Mappato direttamente dal campo cs4Label quando cs4 non è vuoto. |
| cs5 | additional.fields.value.string_value | Mappato direttamente dal campo cs5 quando cs5Label non è vuoto. |
| cs5Label | additional.fields.key | Mappato direttamente dal campo cs5Label quando cs5 non è vuoto. |
| dhost | target.hostname | Mappato dal campo dhost se non è un indirizzo IP. Se dhost è vuoto, viene mappato da shost (IP o nome host). |
| dhost | target.asset.hostname | Mappato dal campo dhost se non è un indirizzo IP. Se dhost è vuoto, viene mappato da shost (IP o nome host). |
| dhost | target.ip | Mappato dal campo dhost se si tratta di un indirizzo IP. |
| dhost | target.asset.ip | Mappato dal campo dhost se si tratta di un indirizzo IP. |
| duser | target.user.userid | Mappato direttamente dal campo duser. |
| dvc | intermediary.ip | Mappato dal campo dvc se si tratta di un indirizzo IP. |
| externalId | metadata.product_log_id | Mappato direttamente dal campo externalId. |
| fname | target.file.full_path | Mappato direttamente dal campo fname. |
| nome | metadata.event_type | Utilizzato per determinare il event_type in base alla combinazione dei campi name, shost e dhost. Valori possibili: USER_CHANGE_PASSWORD, FILE_READ, USER_LOGIN, FILE_OPEN, FILE_DELETION. Se non viene trovata alcuna corrispondenza e has_principal è true e has_target è false, event_type è impostato su STATUS_UPDATE. In caso contrario, il valore predefinito è GENERIC_EVENT. |
| prin_hostname | principal.hostname | Mappato direttamente dal campo prin_hostname. Se è vuoto, viene mappato da shost se shost non è un indirizzo IP. |
| prin_hostname | principal.asset.hostname | Mappato direttamente dal campo prin_hostname. Se è vuoto, viene mappato da shost se shost non è un indirizzo IP. |
| prin_ip | principal.ip | Mappato direttamente dal campo prin_ip. Se è vuoto, viene mappato da shost se shost è un indirizzo IP. |
| prin_ip | principal.asset.ip | Mappato direttamente dal campo prin_ip. Se è vuoto, viene mappato da shost se shost è un indirizzo IP. |
| prodotto | metadata.product_name | Mappato direttamente dal campo product. Se non è presente nel log, il valore predefinito è "PAM". |
| motivo | security_result.description | Mappato direttamente dal campo reason. |
| gravità | security_result.severity | Mappato dal campo severity in base alla seguente logica: 1-3: INFORMATIVO, 4: ERRORE, 5: CRITICO. |
| shost | principal.hostname | Mappato a prin_hostname se prin_hostname è vuoto e shost non è un indirizzo IP. |
| shost | principal.asset.hostname | Mappato a prin_hostname se prin_hostname è vuoto e shost non è un indirizzo IP. |
| shost | principal.ip | Mappato a prin_ip se prin_ip è vuoto e shost è un indirizzo IP. |
| shost | principal.asset.ip | Mappato a prin_ip se prin_ip è vuoto e shost è un indirizzo IP. |
| shost | target.hostname | Mappato a target.hostname se dhost è vuoto e shost non è un indirizzo IP. |
| shost | target.asset.hostname | Mappato a target.hostname se dhost è vuoto e shost non è un indirizzo IP. |
| shost | target.ip | Mappato a target.ip se dhost è vuoto e shost è un indirizzo IP. |
| shost | target.asset.ip | Mappato a target.ip se dhost è vuoto e shost è un indirizzo IP. |
| stato | additional.fields.value.string_value | Mappato direttamente dal campo status. |
| suser | principal.user.userid | Mappato dal campo suser. Se duser è vuoto, viene considerato l'ID utente di destinazione. |
| tempo | metadata.event_timestamp.seconds | Mappato direttamente dal campo time dopo la conversione nel formato timestamp. |
| tempo | metadata.event_timestamp.nanos | Mappato direttamente dal campo time dopo la conversione nel formato timestamp. |
| vendor | metadata.vendor_name | Mappato direttamente dal campo vendor. Se non è presente nel log, il valore predefinito è "CYBERARK". |
| versione | metadata.product_version | Mappato direttamente dal campo version. |
| metadata.log_type | Codificato in modo permanente su "CYBERARK_PAM". | |
| extensions.auth.mechanism | Imposta su "USERNAME_PASSWORD" se event_type è "USER_LOGIN". |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.