Un SYSCALL si verifica ogni volta che un utente esegue un comando che richiede che il kernel Linux fornisca un servizio. Esistono diversi SYSCALL come mount, umount, kill, open ecc. Questi SYSCALL possono essere monitorati con il sistema auditd. Prendiamo come esempio "kill" SYSCALL.
L'utente vuole catturare chi ha terminato un determinato processo nel sistema. Questo può essere ottenuto facilmente scrivendo una regola auditd in grado di acquisire il kill SYSCALL ogni volta che viene chiamato.
Installazione e configurazione di auditd
auditd è per lo più preinstallato su distribuzioni Linux. Nel caso in cui non sia disponibile, puoi utilizzare il rispettivo gestore di pacchetti del sistema operativo per installarlo. Ad esempio, in caso di CentOS/RHEL:
# yum install auditd
Abilita l'avvio del servizio auditd all'avvio e avvialo utilizzando il comando "service".
# systemctl enable auditd # service start auditd
Configurazione della regola auditd per monitorare SYSCALL
Creiamo una regola per monitorare il "kill" SYSCALL che può essere utilizzato per trovare tutti i processi di uccisione.
1. Aggiungi la regola seguente al file di configurazione delle regole auditd /etc/audit/rules.d/audit.rules :
# vi /etc/audit/rules.d/audit.rules -a exit,always -F arch=b64 -S kill -k kill_ruleSu CentOS/RHEL 6, il file di configurazione è /etc/audit/audit.rules invece di /etc/audit/rules.d/audit.rules.
Ecco,
-un'uscita, sempre – Qui abbiamo l'azione e l'elenco. Ogni volta che il sistema operativo esce da una chiamata di sistema, l'elenco di uscite verrà utilizzato per determinare se è necessario generare un evento di controllo.
-F arch=b64 – L'opzione -F viene utilizzata per creare un campo regola. Il b64 significa che il computer è in esecuzione con una CPU x86_64. (Che si tratti di Intel o AMD non importa.)
-S kill – L'opzione -S specifica la chiamata di sistema che vogliamo monitorare.
-k – Questo è un nome di regola definito dall'utente.
2. Riavviare il servizio auditd affinché la nuova regola sia effettiva.
# service restart auditd
3. Puoi verificare se le regole definite sono attive, usando il comando “auditctl -l”.
# auditctl -l -a always,exit -F arch=b64 -S kill -F key=kill_rule
Verifica
Vediamo un esempio se la regola che abbiamo appena creato funziona davvero o meno. Inizieremo semplicemente un processo "sleep 500" e lo uccideremo. Questo dovrebbe generare un registro di controllo con tutti i dettagli come chi ha ucciso il processo (uid) con quale programma/comando ecc.
1. Genera un semplice processo di sospensione in background.
# sleep 600 &
2. Verifica l'ID del processo di sospensione e terminalo.
# ps -ef | grep sleep root 2089 1784 0 15:12 pts/0 00:00:00 sleep 600
# kill -9 2089
3. Cerca il file di registro di controllo /var/log/audit/audit.log per i registri di controllo delle uccisioni. Il registro dovrebbe essere simile a quello mostrato di seguito.
# tail -f /var/log/audit/audit.log type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"
4. A volte nel log di audit può essere difficile cercare i log che ci interessano. In tal caso puoi anche utilizzare il comando “ausearch” con la chiave definita con la regola. Ad esempio:
# ausearch -k kill_rule ... time->Wed Jun 20 15:13:11 2018 type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"