Raccogliere i log di sistema Linux auditd e AIX
Questo parser gestisce gli audit log Linux in formato SYSLOG, trasformandoli in UDM. Elabora i messaggi di log sia in formato JSON che in testo normale, estrae i campi utilizzando tecniche di analisi XML e JSON e Grok e li mappa ai campi UDM appropriati in base al tipo di evento. Il parser gestisce anche formati specifici dei log di controllo dei sistemi AIX e arricchisce l'UDM con campi aggiuntivi come security_result
e dettagli intermedi.
Prima di iniziare
- Assicurati di avere un'istanza Google Security Operations.
- Assicurati di disporre dell'accesso come utente root all'host Auditd.
- Assicurati di aver installato rsyslog sull'host Auditd.
- Assicurati di avere Windows 2012 SP2 o versioni successive o un host Linux con systemd.
- Se il servizio viene eseguito 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: auditd raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
Riavviare BindPlane Agent per applicare le modifiche utilizzando il seguente comando:
sudo systemctl bindplane restart
Esportazione di Syslog da Auditd
- Accedi alla macchina da cui vuoi esportare gli audit log.
Apri il file di configurazione di Auditd (in genere in
/etc/audit/auditd.conf
).sudo vi /etc/audit/auditd.conf
Trova o aggiungi le seguenti righe per configurare auditd:
active = yes output = syslog log_format = ENRICHED dispatcher = /sbin/audispd
(Facoltativo) Specifica il Facility Syslog: aggiungi o modifica la seguente riga in auditd.conf
:
```none
syslog_facility = LOG_AUTHPRIV
```
Apri il file di configurazione di audispd (in genere in
/etc/audisp/plugins.d/syslog.conf
):sudo vi /etc/audisp/plugins.d/syslog.conf
Trova o aggiungi le seguenti righe per configurare audispd:
active = yes direction = out path = builtin_syslog type = builtin args = LOG_INFO format = string
Riavvia il servizio Auditd per applicare le modifiche:
sudo systemctl restart auditd
Utilizza uno strumento come
tail
per monitorare il syslog e verificare che i log di Auditd vengano inviati:tail -f /var/log/syslog | grep auditd # Follow syslog and filter for auditd messages (path may vary depending on your system)
Modifica
rsyslog.conf
o crea una configurazione personalizzata:sudo vi /etc/rsyslog.d/50-audit-forwarding.conf
Aggiungi una regola per inoltrare i log:
if $programname == 'auditd' then @@<BindPlane_Agent>:<BindPlane_Port>
- Utilizza
@
per UDP o@@
per TCP - Sostituisci
<BindPlane_Agent>
con l'indirizzo IP/nome host del server. - Sostituisci
<BindPlane_Port>
con la porta del server.
Riavvia il servizio rsyslog per applicare le modifiche:
sudo systemctl restart rsyslog
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
acct |
target.user.user_display_name |
Il valore di acct dal log non elaborato è mappato al campo target.user.user_display_name nell'UDM. Rappresenta l'account associato all'evento. |
addr |
principal.ip |
Il valore di addr dal log non elaborato è mappato al campo principal.ip nell'UDM. Rappresenta l'indirizzo IP dell'entità principale coinvolta nell'evento. |
additional.fields |
additional.fields |
I campi aggiuntivi delle coppie chiave-valore o delle etichette analizzate vengono aggiunti all'array additional.fields nell'UDM. |
agent.googleapis.com/log_file_path |
(Non mappato) | Questa etichetta è presente in alcuni log non elaborati, ma non è mappata all'oggetto IDM nell'UDM. |
algo |
(non utilizzato in questo esempio) | Sebbene sia presente nel parser e in alcuni log non elaborati, questo campo non viene utilizzato nell'esempio fornito e non viene visualizzato nell'UDM finale. |
application |
principal.application |
Dedotto dal campo terminal nel log non elaborato o da altri campi come exe , a seconda del tipo di log. Rappresenta l'applicazione interessata. |
arch |
security_result.about.platform_version |
L'architettura del campo arch del log non elaborato è mappata a security_result.about.platform_version . |
auid |
about.user.userid , security_result.detection_fields.auid |
L'ID utente di controllo (auid ) viene mappato a about.user.userid e aggiunto come campo di rilevamento in security_result . |
cmd |
target.process.command_line |
Il comando del campo cmd del log non elaborato è mappato a target.process.command_line . |
collection_time |
(Non mappato) | Questo campo indica l'ora di raccolta dei log e non è mappato all'oggetto IDM nell'UDM. |
comm |
principal.application |
Il nome del comando (comm ) è mappato a principal.application . |
compute.googleapis.com/resource_name |
principal.hostname |
Il nome della risorsa di questa etichetta è mappato a principal.hostname . |
create_time |
(Non mappato) | Questo campo non è mappato all'oggetto IDM nell'UDM. |
cwd |
security_result.detection_fields.cwd |
La directory di lavoro corrente (cwd ) viene aggiunta come campo di rilevamento in security_result . |
data |
(Elaborato) | Il campo data contiene il messaggio di log principale ed è elaborato dall'analizzatore per estrarre vari campi. Non è mappato direttamente a un singolo campo UDM. |
exe |
principal.process.file.full_path , target.process.file.full_path |
Il percorso dell'eseguibile (exe ) è mappato a principal.process.file.full_path o target.process.file.full_path , a seconda del contesto. |
extensions.auth.type |
extensions.auth.type |
Il tipo di autenticazione viene impostato dalla logica dell'analizzatore in base al tipo di evento. Spesso impostato su MACHINE o AUTHTYPE_UNSPECIFIED . |
fp |
network.tls.client.certificate.sha256 |
L'impronta (fp ) viene analizzata per estrarre l'hash SHA256 e mappata a network.tls.client.certificate.sha256 . |
insertId |
(Non mappato) | Questo campo non è mappato all'oggetto IDM nell'UDM. |
jsonPayload.message |
(Elaborato) | Questo campo contiene il messaggio di log principale in formato JSON ed è elaborato dall'analizzatore. |
key |
security_result.about.registry.registry_key |
Il campo della chiave è mappato a security_result.about.registry.registry_key . |
labels |
(Elaborato) | Le etichette del log non elaborato vengono elaborate e mappate a vari campi UDM o aggiunte a additional.fields . |
logName |
(Non mappato) | Questo campo non è mappato all'oggetto IDM nell'UDM. |
msg |
security_result.summary |
Il messaggio (msg ) viene spesso utilizzato per compilare il campo security_result.summary . |
network.application_protocol |
network.application_protocol |
Impostato dalla logica dell'analizzatore in base al tipo di evento (ad es. SSH, HTTP). |
network.direction |
network.direction |
Impostato dalla logica dell'analizzatore in base al tipo di evento (ad es. INBOUND, OUTBOUND). |
network.ip_protocol |
network.ip_protocol |
Impostato dalla logica del parser, in genere su TCP per gli eventi SSH. |
network.session_id |
network.session_id |
Mappato dal campo ses o derivato da altri campi. |
network.tls.cipher |
network.tls.cipher |
Le informazioni sul cifrario vengono estratte dal log non elaborato e mappate a questo campo. |
network.tls.curve |
network.tls.curve |
La curva di scambio delle chiavi viene estratta dal log non elaborato e mappata a questo campo. |
pid |
principal.process.pid , target.process.pid |
L'ID processo (pid ) è mappato a principal.process.pid o target.process.pid , a seconda del contesto. |
ppid |
principal.process.parent_process.pid , target.process.parent_process.pid |
L'ID processo principale (ppid ) è mappato a principal.process.parent_process.pid o target.process.parent_process.pid , a seconda del contesto. |
principal.asset.hostname |
principal.asset.hostname |
Copiato da principal.hostname . |
principal.asset.ip |
principal.asset.ip |
Copiato da principal.ip . |
principal.platform |
principal.platform |
Impostato dalla logica dell'analizzatore in base al sistema operativo (ad es. LINUX). |
principal.port |
principal.port |
Il numero di porta associato al principale. |
principal.user.group_identifiers |
principal.user.group_identifiers |
ID gruppo associati all'utente principale. |
receiveTimestamp |
(Non mappato) | Questo campo è il timestamp di ricezione del log e non è mappato all'oggetto IDM nell'UDM. |
res |
security_result.action_details |
Il risultato (res ) è mappato a security_result.action_details . |
resource.labels |
(Non mappato) | Queste etichette sono presenti in alcuni log non elaborati, ma non sono mappate all'oggetto IDM nell'UDM. |
resource.type |
(Non mappato) | Questo campo è presente in alcuni log non elaborati, ma non è mappato all'oggetto IDM nell'UDM. |
security_result.action |
security_result.action |
Impostato dalla logica dell'analizzatore in base al campo res (ad es. ALLOW, BLOCK). |
security_result.detection_fields |
security_result.detection_fields |
Vari campi del log non elaborato vengono aggiunti come coppie chiave-valore a questo array per il contesto. |
security_result.rule_id |
security_result.rule_id |
Impostato dalla logica del parser, spesso su type_name per gli eventi syscall. |
security_result.severity |
security_result.severity |
Impostato dalla logica dell'analizzatore in base al livello di gravità nel log non elaborato. |
security_result.summary |
security_result.summary |
Un riepilogo dell'evento, spesso derivato dal campo msg o da altri campi pertinenti. |
ses |
network.session_id |
L'ID sessione (ses ) è mappato a network.session_id . |
source |
(Non mappato) | Questo campo contiene metadati sull'origine log e non è mappato all'oggetto IDM nell'UDM. |
subj |
(Elaborato) | Il campo dell'oggetto (subj ) viene elaborato per estrarre informazioni sul contesto di sicurezza e sull'utente. |
syscall |
security_result.about.labels.Syscall |
Il numero di syscall viene aggiunto come etichetta in security_result.about . |
target.administrative_domain |
target.administrative_domain |
Il dominio dell'utente di destinazione. |
target.group.group_display_name |
target.group.group_display_name |
Il nome del gruppo di destinazione. |
target.ip |
target.ip |
L'indirizzo IP della destinazione. |
target.port |
target.port |
Il numero di porta associato al target. |
target.process.command_line |
target.process.command_line |
La riga di comando del processo di destinazione. |
target.resource.type |
target.resource.type |
Il tipo di risorsa target, impostato dalla logica dell'analizzatore (ad es. CREDENTIAL, SETTING). |
target.user.attribute.permissions |
target.user.attribute.permissions |
Autorizzazioni correlate all'utente di destinazione. |
target.user.group_identifiers |
target.user.group_identifiers |
ID gruppo associati all'utente di destinazione. |
target.user.userid |
target.user.userid |
L'ID utente del target. |
textPayload |
(Elaborato) | Il payload di testo del log, elaborato dall'analizzatore per estrarre vari campi. |
timestamp |
metadata.event_timestamp |
Il timestamp dell'evento. |
tty |
security_result.about.labels.tty |
Il tty viene aggiunto come etichetta in security_result.about . |
type |
metadata.product_event_type |
Il tipo di evento (type ) è mappato a metadata.product_event_type . |
uid |
principal.user.userid , target.user.userid |
L'ID utente (uid ) è mappato a principal.user.userid o target.user.userid a seconda del contesto. |
Modifiche
2024-05-08
- Quando il valore non è "?", mappa "field" a "field33" in "security_result.detection_fields".
- Quando "type_name" è "CRYPTO_KEY_USER", "exe" viene mappato a "principal.process.file.full_path".
- Quando "type_name" è "CRYPTO_KEY_USER", "fp" viene mappato a "network.tls.client.certificate.sha256".
- Quando "type_name" è "CRYPTO_KEY_USER", "pid" viene mappato a "principal.process.pid".
- Sono stati aggiunti pattern Grok per analizzare il nuovo pattern dei log.
- "syslog-tag" è stato mappato a "security_result.detection_fields".
- "inter_ip" è stato mappato a "intermediary.ip".
- "inter_hostname" è stato mappato a "intermediary.hostname".
2024-05-02
- Quando "type_name" è "USER_MGMT", "grp" viene mappato a "target.group.group_display_name".
- Quando "type_name" è "USER_MGMT", la mappatura di "uid" è stata modificata da "principal.user.userid" a "target.user.userid".
- Quando "type_name" è "USER_MGMT" e "op" è uguale a "deleting-user-from-group", imposta "metadata.event_type" su "GROUP_MODIFICATION".
- Quando "type_name" è "USER_MGMT", la mappatura di "exe" è stata modificata da "target.process.file.full_path" a "principal.process.file.full_path".
- Quando "type_name" è "USER_MGMT", mappa "id" a "about.user.userid".
2024-04-08
- Quando "type_name" è "ADD_USER", principal_user_present è "true", target_user_present è "true" e has_principal è "true", imposta "metadata.event_type" su "USER_CREATION".
- Quando "type_name" è "USER_AUTH", mappa "acct" a "target.user.user_display_name".
- Quando "type_name" è "USER_AUTH", mappa "uid" a "principal.user.userid".
- Quando "type_name" non è in "ADD_USER","USER_AUTH","CRED_ACQ" e "USER_MGMT", mappa "auid" a "about.user.userid".
- Quando "type_name" è "ADD_USER", mappa "auid" a "target.user.userid".
- Quando "type_name" è "ADD_USER" o "USER_AUTH", mappa "exe" a "principal.process.file.full_path".
- Quando "type_name" è "ADD_USER", mappa "op" e "id" a "security_result.summary".
- Quando "type_name" è "USER_AUTH", mappa "op" e "acct" a "security_result.summary".
2024-03-22
- È stato aggiunto il supporto per il nuovo pattern dei log JSON.
- Sono stati mappati "labels.compute.googleapis.com/resource_name","jsonPayload._HOSTNAME", "CollectorHostName", "HOSTNAME" e "Computer" a "principal.hostname".
- "HostIP" è stato mappato a "principal.ip".
- "ProcessID" e "jsonPayload._PID" sono stati mappati a "principal.process.pid".
- "SyslogMessage" è stato mappato a "metadata.description".
- "TenantId", "_ItemId", "_Internal_WorkspaceResourceId", "_ResourceId" e "Facility" sono stati mappati a "additional.fields".
- "SeverityLevel" è stato mappato a "security_result.severity".
- "SourceSystem" è stato mappato a "principal.platform".
- "jsonPayload._COMM" è stato mappato a "principal.application".
- "jsonPayload._EXE" è stato mappato a "target.process.file.full_path".
- "jsonPayload._AUDIT_FIELD_FILE" è stato mappato a "target.file.full_path".
- "jsonPayload._AUDIT_FIELD_HASH" è stato mappato a "target.file.hash".
- "jsonPayload._AUDIT_SESSION" è stato mappato a "network.session_id".
- "jsonPayload._PPID" è stato mappato a "principal.process.parent_process.pid".
- Sono stati mappati "jsonPayload._AUDIT_FIELD_A0", "jsonPayload._AUDIT_FIELD_A1", "jsonPayload._AUDIT_FIELD_A2", "jsonPayload._AUDIT_FIELD_A3", "jsonPayload._BOOT_ID" e "jsonPayload._AUDIT_FIELD_EXIT" a "security_result.detection_fields".
2023-11-27
- È stato aggiunto un controllo di convalida per assicurarsi che "principal_user_present", "target_user_present" o "has_principal" sia true prima di impostare "metadata.event_type" su "USER_LOGIN".
- È stato aggiunto un controllo di convalida per assicurarsi che "principal_user_present", "target_user_present" o "has_principal" sia true prima di impostare "metadata.event_type" su "USER_LOGOUT".
- È stato aggiunto un controllo di convalida per assicurarsi che "principal_user_present", "target_user_present" o "has_principal" sia true prima di impostare "metadata.event_type" su "USER_CREATION".
- È stato aggiunto un controllo di convalida per assicurarsi che "principal_user_present", "target_user_present" o "has_principal" sia true prima di impostare "metadata.event_type" su "USER_DELETION".
- È stato aggiunto un controllo di convalida per assicurarsi che "principal_user_present", "target_user_present" o "has_principal" sia true prima di impostare "metadata.event_type" su "USER_UNCATEGORIZED".
- È stato aggiunto un controllo di convalida per assicurarsi che "principal_user_present", "target_user_present" o "has_principal" sia true prima di impostare "metadata.event_type" su "USER_RESOURCE_ACCESS".
- È stato aggiunto un controllo di convalida per assicurarsi che "principal_user_present", "target_user_present" o "has_principal" sia true prima di impostare "metadata.event_type" su "USER_CHANGE_PERMISSIONS".
- Quando sono presenti i dettagli dell'utente e non sono presenti i dettagli della macchina principale, la mappatura di "metadata.event_type" è stata modificata da "USER_CREATION" a "USER_UNCATEGORIZED".
- Quando sono presenti i dettagli dell'utente e non sono presenti i dettagli della macchina principale, la mappatura di "metadata.event_type" è stata modificata da "USER_DELETION" a "USER_UNCATEGORIZED".
2023-09-06
- È stata aggiunta la mappatura di "CMD" a "target.process.command_line" per "cron daemon(CROND)".
2023-06-20
- Miglioramento: sono state aggiunte o modificate le seguenti mappature quando type="ADD_USER" e "DEL_USER":
- È stata modificata la mappatura di "uid" da "target.user.userid" a "principal.user.userid".
- "id" è stato mappato a "target.user.userid".
- "ID" è stato mappato a "target.user.user_display_name".
- È stata modificata la mappatura di "UID" da "principal.user.userid" a "principal.user.user_display_name".
- È stata modificata la mappatura di "acct" da "principal.user.user_display_name" a "target.user.user_display_name" e "target.user.userid".
2023-06-09
- Miglioramento: modifica di "event_type" da "USER_LOGIN" a "USER_CREATION" quando "type=ADD_USER".
2023-04-17
- Miglioramento
- È stata aggiunta la funzione gsub per sostituire il carattere "GS - Separatore di gruppi" che interrompe la costruzione del JSON.
2023-04-10
- Miglioramento
- Sono stati aggiunti i campi "gid","euid","egid","suid","fsuid","sgid","fsgid","tty","items" a security_result.detection_fields.
- Inoltre, è stato mappato "gid" a "principal.user.group_identifiers".
- È stato mappato "euid" a "target.user.userid".
- È stata mappata la proprietà "egid" a "target.user.group_identifiers".
2023-03-27
- Miglioramento: è stato aggiunto il supporto per "jsonPayload" contenente i log.
2023-02-28
- Correzione di bug: parser migliorato per convertire la stringa codificata esadecimale in ASCII.
2023-02-09
- Miglioramento: è stato modificato il pattern grok per i log contenenti "type=PATH" per recuperare il nome host corretto dai log.
2023-01-24
- Miglioramento:
- Log analizzato con eventType come "tac_plus".
- Sono state aggiunte condizioni per la mappatura di diversi tipi di eventi "NETWORK_CONNECTION", "NETWORK_HTTP", "USER_LOGIN".
2022-12-02
- Miglioramento:
- "user_name" è stato mappato a "principal.user.userid".
- È stato aggiunto il controllo condizionale per "dst_ip", "dst_port".
2022-10-31
- Miglioramento:
- È stato migliorato il parser per analizzare il log con type=ADD_USER, USER_MGMT, DEL_USER.
- Sono stati aggiunti controlli null per "principal_hostname".
- Sono stati aggiunti controlli on_error per "principal.process.file.full_path", "type_syscall_props.key", "type_syscall_props.arch", "msg2".
- Sono stati aggiunti controlli condizionali per la mappatura a event_type="FILE_OPEN", "USER_UNCATEGORIZED", "STATUS_UPDATE", "USER_DELETION".
- "principal_user_userid" è stato mappato a "principal.user.userid".
2022-11-16
- Miglioramento:
- "GENERIC_EVENT" è stato migliorato in "STATUS_UPDATE" per i tipi di log contenenti "Access Logs".
2022-10-14
- Miglioramento:
- È stata eseguita la migrazione del parser dei clienti al parser predefinito.
2022-10-13
- Miglioramento: "vendor_name" è stato mappato a "Linux".
- "product_name" è stato mappato a "AuditD".
- Sono stati analizzati i log contenenti "ProxySG" e sono stati mappati "ip" a "target.ip" e "port" a "target.port", ove possibile.
- "event_type" modificato da "GENERIC_EVENT" a "STATUS_UPDATE".
- Mappatura modificata per "intermediary.hostname" in "principal.hostname".
2022-07-28
- Miglioramento:
- È stato mappato il campo "auid" ad about.user.userid".
- È stato mappato il campo "AUID" a "about.user.user_display_name".
- È stato mappato il campo "proctitle" a "target.process.file.full_path".
- È stato migliorato il parser per analizzare il log con type=DAEMON_END, CRYPTO_SESSION, CONFIG_CHANGE, PROCTITLE, USER_ERR, CRYPTO_KEY_USER.
- È stato aggiunto il controllo condizionale per laddr, addr, cipher, pfs, direction, acct, pid, ppid, cmd, exe, ses.
2022-06-17
- Miglioramento: sono stati mappati/modificati i seguenti campi:
- È stata modificata la mappatura di "auid" da "security_result.about.user.userid" a "about.user.userid".
- "event_type" per type=SYSCALL è stato modificato da "SYSTEM_AUDIT_LOG_UNCATEGORIZED" a "USER_UNCATEGORIZED".
- "success" è stato mappato a "security_result.summary".
- Sono stati mappati "syscall", "exit", "tty", "a0", "a1", "a2", "a3" a "security_result.about.labels".
- I log sono stati eliminati in formato ASCII.
2022-06-14
- miglioramento
- È stato migliorato il parser per analizzare il tipo di log USER_CMD.
- Il campo "cmd" è stato mappato a "principal.process.command_line".
- Il campo "ses" è stato mappato a "network.session_id".
- Il campo "res" è stato mappato a "security_result.action" e "security_result.action_details".
- I campi "auid" e "cwd" sono stati mappati a "security_result.detection_fields".
2022-04-26
- miglioramento
- È stata aumentata la percentuale di analisi mediante l'analisi di tutti i log non analizzati.