Raccogli i log di CyberArk PAM
Questo codice del parser estrae innanzitutto i campi dai messaggi syslog di CyberArk Privileged Access Manager (PAM) utilizzando espressioni regolari. Poi mappa i campi estratti a un modello di 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 o un host Linux con systemd.
- Se il servizio è in esecuzione dietro un proxy, assicurati che le porte del firewall siano aperte.
Recupera il file di autenticazione di importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'importazione.
Ottenere 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 BindPlane Agent
- Per l'installazione su 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.
Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps
- Accedi al computer su cui è installato BindPlane.
Modifica il file
config.yaml
come 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_labels
Riavvia l'agente BindPlane per applicare le modifiche:
sudo systemctl restart bindplane
Configurare Syslog Export per CyberArk Vault
- Accedi al server Vault.
- Apri il file di configurazione
dbparm.ini
, che si trova inC:\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=Syslog
Salva 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 nel file
Web.config
.Riavvia il servizio IIS:
iisreset
Configurare l'esportazione Syslog in PTA
- Accedi al server PTA tramite 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 | Logica |
---|---|---|
agire | 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 valore 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 viene 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 target. |
tempo | metadata.event_timestamp.seconds | Mappato direttamente dal campo time dopo la conversione in formato timestamp. |
tempo | metadata.event_timestamp.nanos | Mappato direttamente dal campo time dopo la conversione in 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 | Hardcoded su "CYBERARK_PAM". | |
extensions.auth.mechanism | Imposta su "USERNAME_PASSWORD" se event_type è "USER_LOGIN". |
Modifiche
2024-05-05
- Parser appena creato.