Nota:

Eseguire l'audit di Oracle Linux con Auditd

Introduzione

Auditd è un daemon del sistema di spazio utente eseguito in background che genera log su diverse attività eseguite su Oracle Linux.

Questa esercitazione descrive le procedure per l'installazione, la configurazione e l'utilizzo di auditd.

Obiettivi

In questo laboratorio imparerai a:

Prerequisiti

Installazione del package di audit

Nota: quando si utilizza l'ambiente di laboratorio gratuito, vedere Oracle Linux Lab Basics per le connessioni e altre istruzioni d'uso.

Per impostazione predefinita, Oracle Linux installa il pacchetto di controllo.

Se non è già connesso, aprire un terminale e connettersi tramite ssh al sistema ol8-server.

ssh oracle@<ip_address_of_ol8-server>

Verificare se il sistema ha preinstallato il pacchetto audit.

sudo dnf list installed "audit"

In caso contrario, installarlo.

sudo dnf install -y audit

Il file di configurazione predefinito per il daemon auditd si trova in /etc/audit/auditd.conf.

Gestisci il servizio di audit

Dopo aver installato il pacchetto di controllo, avviare il servizio auditd. Controllare innanzitutto lo stato corrente.

sudo systemctl status auditd

Output di esempio:

[oracle@ol8-server ~]$ sudo systemctl status auditd
* auditd.service - Security Auditing Service
   Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor pres>
   Active: active (running) since Fri 2022-04-01 23:59:52 GMT; 2min 38s ago
     Docs: man:auditd(8)
           https://github.com/linux-audit/audit-documentation
 Main PID: 1385 (auditd)
    Tasks: 2 (limit: 100140)
   Memory: 2.5M
   CGroup: /system.slice/auditd.service
           `-1385 /sbin/auditd

Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: enabled 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: failure 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: pid 1385
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: rate_limit 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_limit 8192
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: lost 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain systemd[1]: Started Security Auditing Ser>
lines 1-21/21 (END)

L'output mostra che il servizio è (running) e enabled.

Lo stato enabled indica che il servizio è stato configurato per l'avvio al momento del boot. In caso contrario, avviare il servizio come utente root per raccogliere le informazioni di audit e scriverle nei log.

Avviare il servizio.

sudo service auditd start

Configurare auditd per l'avvio al momento del boot.

sudo systemctl enable auditd

Nota: il metodo solo per interagire in modo appropriato con il daemon auditd utilizza il comando service.

Il comando service garantisce la registrazione del valore auid. Utilizzare il comando systemctl solo con le azioni enable e status.

Abilita e disabilita temporaneamente il controllo

La utility di controllo di audit, auditctl, interagisce con il componente di audit kernel per gestire le regole e controllare molte impostazioni e parametri del processo di generazione degli eventi.

Controllare lo stato del sottosistema di audit kernel.

sudo auditctl -s

Output di esempio:

[oracle@ol8-server ~]$ sudo auditctl -s
enabled 1
failure 1
pid 1399
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
loginuid_immutable 0 unlocked

Disabilitare temporaneamente auditd.

sudo auditctl -e 0

Abilitare di nuovo auditd.

sudo auditctl -e 1

Nota: in pid viene visualizzato l'ID del processo del servizio auditd. Il valore pid di 0 indica che il servizio non è in esecuzione.

Il flag di abilitazione auditctl -e accetta anche un valore 2, che blocca la configurazione di audit.

Se la configurazione di controllo è bloccata in questo modo, è necessario eseguire il reboot per sbloccarla. Per approfondire: in man auditctl.

Individua regole e log di controllo

Per impostazione predefinita, Oracle Linux memorizza i log di controllo in /var/log/audit/audit.log.

Le regole di controllo si trovano in /ect/audit/audit.rules. Oracle Linux genera il set di regole predefinito dal file /etc/audit/rules.d/audit.rules.

sudo cat /etc/audit/audit.rules
sudo cat /etc/audit/rules.d/audit.rules

Output di esempio:

## First rule - delete all
-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
-b 8192

## This determine how long to wait in burst of events
--backlog_wait_time 60000

## Set failure mode to syslog
-f 1

Regole con utility Audit Control

Utilizzare il programma auditctl per controllare il funzionamento, ottenere lo stato e aggiungere o eliminare le regole.

Aggiungere una regola di audit che registra qualsiasi tentativo di lettura o modifica del file /etc/ssh/sshd_config.

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config

Dove:

Mostrare la regola.

sudo auditctl -l

Le nuove regole vengono aggiunte alla fine dell'elenco, ma è anche possibile aggiungerle all'inizio.

Controllare se la nuova regola è stata aggiunta nel file /etc/audit/audit.rules.

sudo cat /etc/audit/audit.rules

Output di esempio:

[oracle@ol8-server ~]$ sudo cat /etc/audit/audit.rules
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
--backlog_wait_time 60000

La regola non viene visualizzata nel file. Perché no?

Le regole create da auditctl non vengono aggiunte al file audit.rules. Pertanto, queste modifiche sono transitorie e non sopravvivono al reboot del sistema.

Rendere permanente la regola aggiungendola a un file set di regole personalizzato in /etc/audit/rules.d/my.rules. Il formato della regola aggiunta corrisponde alla sintassi del comando auditctl senza utilizzare auditctl. Le regole devono essere scritte per riga e combinate per ottimizzare le prestazioni.

sudo tee /etc/audit/rules.d/my.rules > /dev/null <<'EOF'
-w /etc/ssh/sshd_config -p rwxa -k sshd_config
EOF

Mostrare la regola.

sudo cat /etc/audit/rules.d/my.rules

Eseguire il test della regola.

cat /etc/ssh/sshd_config

Il comando restituisce cat: /etc/ssh/sshd_config: Permission denied e genera l'evento riportato di seguito in audit.log.

sudo cat /var/log/audit/audit.log | grep sshd_config

Output di esempio:

type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1AUID="oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"ARCH=x86_64 SYSCALL=openat AUID="oracle" 
UID="oracle" GID="oracle" EUID="oracle" SUID="oracle" FSUID="oracle" EGID="oracle" SGID="oracle" FSGID="oracle"
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0OUID="root" OGID="root"

Cerca nei log di audit

Un altro metodo per cercare i log consiste nell'utilizzare il comando ausearch.

Ottenere le stesse informazioni utilizzando questo comando.

sudo ausearch --key sshd_config

Output di esempio:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
time->Sat Apr  2 17:02:03 2022
type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1
----
time->Sat Apr  2 18:19:43 2022
type=PROCTITLE msg=audit(1648923583.793:268315): proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0
type=CWD msg=audit(1648923583.793:268315): cwd="/home/oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"

L'output di ausearch è più facile da usare e leggere in base al formato di output. È possibile aggiungere facilmente il log mediante l'aggiunta dell'opzione -i o --interpret. Questa opzione interpreta le entità numeriche in testo, ad esempio la conversione di un uid in un nome di account.

sudo ausearch -i -k sshd_config

Output di esempio:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
type=CONFIG_CHANGE msg=audit(04/02/2022 17:02:03.746:266810) : auid=oracle ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=sshd_config list=exit res=yes 
----
type=PROCTITLE msg=audit(04/02/2022 18:19:43.793:268315) : proctitle=cat /etc/ssh/sshd_config 
type=PATH msg=audit(04/02/2022 18:19:43.793:268315) : item=0 name=/etc/ssh/sshd_config inode=67688941 dev=fc:00 
mode=file,600 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none 
cap_fe=0 cap_fver=0 cap_frootid=0 
type=CWD msg=audit(04/02/2022 18:19:43.793:268315) : cwd=/home/oracle 
type=SYSCALL msg=audit(04/02/2022 18:19:43.793:268315) : arch=x86_64 syscall=openat success=no exit=EACCES(Permission 
denied) a0=0xffffff9c a1=0x7ffd08b6c575 a2=O_RDONLY a3=0x0 items=1 ppid=3406680 pid=3428336 auid=oracle uid=oracle 
gid=oracle euid=oracle suid=oracle fsuid=oracle egid=oracle sgid=oracle fsgid=oracle tty=pts0 ses=15792 comm=cat exe=/
usr/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=sshd_config 

Per ulteriori opzioni di formattazione e per cercare in audit.log, vedere man ausearch.

Carica regole preconfigurate

Oracle Linux fornisce uno script che unisce tutti i file delle regole di audit dei componenti trovati in /etc/audit/rules.d. Dopo l'unione, il nuovo file sostituisce il file /etc/audit/audit.rules esistente. Questo script è incorporato nel file del servizio auditd ed viene eseguito all'avvio del servizio.

Verificare se sono presenti modifiche regola da caricare.

sudo augenrules --check

Gli stati di output, Rules have changed and should be updated. Questa modifica è dovuta al file my.rules creato in precedenza che si trova in /etc/audit/rules.d.

Eliminare la regola personalizzata sshd_config aggiunta in precedenza per tenere traccia facilmente delle nuove aggiunte di regole.

sudo auditctl -D -k sshd_config

Unire il file di regole personalizzato my.rules.

sudo augenrules --load

Output di esempio:

[oracle@ol8-server ~]$ sudo augenrules --load
No rules
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000

Controllare le regole di audit attive.

sudo auditctl -l

Output di esempio:

[oracle@ol-lab-2022-03-23-182415-0 ~]$ sudo auditctl -l
-w /etc/ssh/sshd_config -p rwxa -k sshd_config

Aggiungere regole aggiuntive a un nuovo file, new.rules.

Nota: solo i file che terminano in .rules vengono letti da augenrules e caricati.

sudo tee /etc/audit/rules.d/new.rules > /dev/null <<'EOF'
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
EOF

Caricare le nuove regole.

sudo augenrules --load

Controllare di nuovo le regole attive.

sudo auditctl -l

Le nuove regole vengono caricate e unite nel file audit.rules.

sudo cat /etc/audit/audit.rules

Il sistema ha creato un file di backup /etc/audit/audit.rules.prev nell'ambito dell'unione.

sudo ls -l /etc/audit

Informazioni fornite dal sistema di auditing di Oracle Linux supportano il rilevamento delle intrusioni.

Per le utility mostrate, vedere le pagine man. Utilizzare quindi gli elementi appresi per aggiungere regole di audit personalizzate al sistema per eventi di log specifici.

Per ulteriori informazioni

Vedere altre risorse correlate:

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi ad altri contenuti per la formazione gratuita sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione sul prodotto, visitare Oracle Help Center.