Raccogliere i log di sistema Linux auditd e AIX
Questo parser gestisce i log di controllo Linux in formato SYSLOG, trasformandoli in UDM. Elabora i messaggi di log in formato JSON e in testo normale, estraendo i campi utilizzando le tecniche di analisi grok, XML e JSON e mappandoli ai campi UDM appropriati in base al tipo di evento. Il parser gestisce anche formati di log di controllo specifici dei sistemi AIX e arricchisce 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 root all'host Auditd.
- Assicurati di aver installato rsyslog sull'host Auditd.
- Assicurati di avere un host Windows 2012 SP2 o versioni successive o 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 questo 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 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
Riavvia 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 i log di controllo.
Apri il file di configurazione di Auditd (in genere si trova 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 la funzionalità Syslog: aggiungi o modifica la seguente riga in auditd.conf
:
```none
syslog_facility = LOG_AUTHPRIV
```
Apri il file di configurazione di audispd (in genere si trova 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 vengano inviati i log di Auditd: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/il nome host del server. - Sostituisci
<BindPlane_Port>
con la porta del tuo server.
Riavvia il servizio rsyslog per applicare le modifiche:
sudo systemctl restart rsyslog
Tabella di mappatura UDM
Campo log | Mappatura UDM | Remark |
---|---|---|
acct |
target.user.user_display_name |
Il valore di acct del log non elaborato viene mappato al campo target.user.user_display_name in UDM. Rappresenta l'account associato all'evento. |
addr |
principal.ip |
Il valore di addr del log non elaborato viene mappato al campo principal.ip in UDM. Rappresenta l'indirizzo IP del soggetto coinvolto 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 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 |
Derivato dal campo terminal nel log non elaborato o da altri campi come exe a seconda del tipo di log. Rappresenta l'applicazione coinvolta. |
arch |
security_result.about.platform_version |
L'architettura del campo arch del log non elaborato viene 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 è l'ora di raccolta dei log e non è mappato all'oggetto IDM in UDM. |
comm |
principal.application |
Il nome del comando (comm ) è mappato a principal.application . |
COMMAND |
target.process.command_line |
|
compute.googleapis.com/resource_name |
principal.hostname |
Il nome della risorsa di questa etichetta è mappato su 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 e viene elaborato dal parser per estrarre vari campi. Non è mappato direttamente a un singolo campo UDM. |
exe |
target.process.file.full_path |
Il percorso eseguibile (exe ) è mappato a target.process.file.full_path . |
extensions.auth.type |
extensions.auth.type |
Il tipo di autenticazione viene impostato dalla logica del parser 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 . |
_Item_Id |
metadata.product_log_id |
|
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 dal parser. |
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. |
metadata.product_event_type |
SECCOMP | La curva di scambio delle chiavi viene estratta dal log non elaborato e mappata a questo campo. |
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 del parser in base al tipo di evento (ad es. SSH, HTTP). |
network.direction |
network.direction |
Impostato dalla logica del parser 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 sulla crittografia 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 ) viene mappato su 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 padre (ppid ) viene mappato su 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 del parser in base al sistema operativo (ad es. LINUX). |
principal.port |
principal.port |
Il numero di porta associato all'entità. |
principal.user.group_identifiers |
principal.user.group_identifiers |
ID gruppo associati all'utente principale. |
process.name |
target.process.file.full_path |
|
receiveTimestamp |
(Non mappato) | Questo campo è il timestamp di ricezione del log e non è mappato all'oggetto IDM in UDM. |
res |
security_result.action_details |
Il risultato (res ) è mappato a security_result.action_details . |
_Resource_Id |
target.resource.product_object_id |
|
resource.labels |
(Non mappato) | Queste etichette sono presenti in alcuni log non elaborati, ma non sono mappate all'oggetto IDM nel modello 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 del parser in base al campo res (ad es. CONSENTI, BLOCCA). |
security_result.detection_fields |
security_result.detection_fields |
A questo array vengono aggiunti vari campi del log non elaborato come coppie chiave-valore 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 del parser 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 nel modello UDM. |
subj |
(Elaborato) | Il campo dell'oggetto (subj ) viene elaborato per estrarre le informazioni sul contesto di sicurezza e dell'utente. |
syscall |
security_result.about.labels.Syscall |
Il numero della chiamata di sistema 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 target. |
target.ip |
target.ip |
L'indirizzo IP della destinazione. |
target.port |
target.port |
Il numero di porta associato alla destinazione. |
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 del parser (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. |
TenantId |
metadata.product_deployment_id |
|
textPayload |
(Elaborato) | Il payload di testo del log, elaborato dal parser 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 |
target.user.userid |
L'ID utente (uid ) è mappato a target.user.userid . |
Riferimento del delta di mappatura UDM
Il 23 settembre 2025, Google SecOps ha rilasciato una nuova versione del parser Okta, che include modifiche significative al mapping dei campi dei log Okta ai campi UDM e modifiche al mapping dei tipi di eventi.
Delta della mappatura dei campi di log
La tabella seguente elenca il delta di mappatura per i campi dei log Okta in UDM esposti prima del 23 settembre 2025 e successivamente (elencati rispettivamente nelle colonne Mappatura precedente e Mappatura attuale).
Campo log | Mappatura precedente | Mappatura attuale | Esempio di log di riferimento |
---|---|---|---|
1.1.1.1 (indirizzo IP) |
src.ip |
principal.ip |
"<163>Apr 10 09:00:05 hostname.com sshd[3318513]: Accepted password for abc from 1.1.1.1 port 33988 ssh2" |
1.1.1.1 (indirizzo IP) |
principal.ip |
target.ip |
"<29>Oct 5 08:37:16 abc ProxySG: E0000 Access Log HTTP (main): Connecting to server 1.1.1.1 on port 4433.(0) NORMAL_EVENT alog_stream_http.cpp 261" |
abc (utente) |
principal.user.userid |
target.user.userid |
"<85>Feb 27 08:26:55 offozcav login: FAILED LOGIN 1 FROM ::ffff:1.1.1.1 FOR abc, Authentication failure\r\n\r\n" |
abc.abc (utente) |
principal.user.userid |
target.user.userid |
"<86>Feb 27 08:29:19 offozcav login: LOGIN ON pts/43 BY abc.abc FROM\r\n\r\n::ffff:1.1.1.1" |
COMMAND |
principal.process.command_line |
target.process.command_line |
"<85>Sep 24 14:33:59 abc sudo: abc : \r\nTTY=unknown ; PWD=/abc ; USER=abc ; COMMAND=/sbin/iptables -t nat -nL \r\n--line-number" |
exe |
target.process.file.full_path |
principal.process.file.full_path |
|
_ItemId |
additional.fields |
metadata.product_log_id |
|
metadata.product_event_type |
PATH |
SECCOMP |
|
process.name |
principal.process.file.full_path |
target.process.file.full_path |
|
_ResourceId |
additional.fields |
target.resource.product_object_id |
|
TenantId |
additional.fields |
metadata.product_deployment_id |
|
uid |
principal.user.userid |
target.user.userid |
|
USER |
principal.user.user_display_name |
target.user.userid |
"<85>Sep 24 14:33:59 abc sudo: abc : \r\nTTY=unknown ; PWD=/abc ; USER=abc ; COMMAND=/sbin/iptables -t nat -nL \r\n--line-number" |
user |
principal.user.userid |
target.user.userid |
"29>Jan 16 11:28:00 san-auth-1-irl2 tac_plus[17329]: login failure: user 1.1.1.1 (1.1.1.1) vty0" |
user |
principal.user.userid |
target.user.userid |
"<87>Jul 15 10:27:01 xpgjrconfdb01 crond[1045]: pam_unix(crond:account): expired password for user root (password aged)" |
Delta della mappatura dei tipi di eventi
Più eventi precedentemente classificati come eventi generici ora sono classificati correttamente con tipi di eventi significativi.
La tabella seguente elenca la differenza per la gestione dei tipi di eventi Okta prima del 23 settembre 2025 e successivamente (elencati rispettivamente nelle colonne Old event_type e Current event-type).
eventType from log | Old event_type | Current event_type |
---|---|---|
aix_event_type=CRON_Start |
USER_LOGIN |
PROCESS_LAUNCH |
CRYPTO_KEY_USER |
NETWORK_CONNECTION |
USER_LOGIN |
FILE_Mknod |
USER_LOGIN |
FILE_CREATION |
FILE_Rename |
USER_LOGIN |
FILE_MODIFICATION |
FILE_Stat |
USER_LOGIN |
FILE_OPEN |
FILE_Unlink |
USER_LOGIN |
FILE_DELETION |
FS_Chabc |
USER_LOGIN |
PROCESS_UNCATEGORIZED |
FS_Mkdir |
USER_LOGIN |
FILE_CREATION |
FS_Rmdir |
USER_LOGIN |
FILE_DELETION |
PROC_Execute |
USER_LOGIN |
PROCESS_LAUNCH |
type=ANOM_ABEND |
STATUS_UPDATE |
PROCESS_TERMINATION |
type=ANOM_PROMISCUOUS |
SETTING_MODIFICATION |
|
type=CRED_REFR |
USER_LOGIN |
USER_CHANGE_PERMISSIONS |
type=PROCTILE |
PROCESS_UNCATEGORIZED |
PROCESS_LAUNCH |
type=SERVICE_START |
USER_RESOURCE_ACCESS |
SERVICE_START |
type=SERVICE_STOP |
USER_RESOURCE_ACCESS |
SERVICE_STOP |
type=USER_ACCT |
USER_LOGIN/SETTING_MODIFICTION |
USER_LOGIN |
type=USER_MGMT |
SETTING_MODIFICATION/GROUP_MODIFICATION |
GROUP_MODIFICATION |
USER_ERR |
USER_LOGOUT |
USER_LOGIN |
Modifiche aggiuntive
- È stata rimossa la mappatura duplicata di
res
dasecurity_result.description
. È acquisito insecurity_result.action_details
. - Rimozione di
auditd_msg_data
non necessari dai campi aggiuntivi. - Rimozione di
auditd_msg_data
non necessari dasecurity_result.summary
. - Il giorno
type=ADD_USER
è stata rimossa la mappatura duplicata diacct
atarget.user.display_name
. È già mappato intarget.user.userid
. - È stata rimossa la mappatura duplicata di
comm
daprincipal.process.command_line
eprincipal.process.file.names
. È acquisito inprincipal.application
. - È stata rimossa la mappatura duplicata di
target.hostname
quando il valore è presente inprincipal
. - Rimossa la mappatura hardcoded non necessaria di
target.resource.type
aSETTING
. - Sono state rimosse le mappature delle etichette About perché sono deprecate.
- Mappatura corretta: ora gli IP vengono indirizzati a
principal.ip
, non aprincipal.hostname
. - È stata corretta la generazione della ripetizione degli eventi.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.