Nota:
- Questa esercitazione è disponibile in un ambiente di laboratorio gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituire questi valori con quelli specifici del tuo ambiente cloud.
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:
- Installare i pacchetti di controllo
- Gestire il servizio di audit
- Crea regole di audit
- Cerca nei log di audit
Prerequisiti
- Un sistema con Oracle Linux 8 installato con la seguente configurazione:
- un utente non root con autorizzazioni
sudo
- un utente non root con autorizzazioni
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 comandoservice
garantisce la registrazione del valoreauid
. Utilizzare il comandosystemctl
solo con le azionienable
estatus
.
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 servizioauditd
. Il valorepid
di0
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:
-w
: crea un orologio sul percorso specificato.-p
: imposta le autorizzazioni [lettura, scrittura, esecuzione, attributo] che attivano l'orologio.-k
: imposta un filtro chiave che identifica in modo univoco i record di audit prodotti da una regola.
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 daaugenrules
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.