auditd odgovara na pitanja koja se javljaju posle događaja: ko je izmenio ovaj fajl, kada je kreiran ovaj korisnik, odakle je pokrenut ovaj proces. Nijedan drugi alat na njih ne odgovara — dnevnici aplikacija tu informaciju ne drže, a istoriju ljuske uređuje onaj ko ju je i ostavio.

Teškoća je u tome što vam instalacija paketa sama po sebi ne daje ništa. Podrazumevanih pravila praktično nema, dnevnik se upisuje ali je suštinski prazan, a to se otkriva u najgorem mogućem trenutku — kada su podaci potrebni a nema ih.

Instalacija

sudo apt install auditd audispd-plugins
sudo systemctl status auditd

Jedna osobenost: na nekim verzijama auditd se ne može ponovo pokrenuti preko systemctl restart — servisom se upravlja sopstvenom komandom. Pravila se ponovo učitavaju ovako:

sudo augenrules --load
sudo auditctl -l

Druga komanda prikazuje šta je zaista učitano. Verujte njoj, a ne sadržaju fajlova.

Skup pravila

Pravila idu u /etc/audit/rules.d/ kao zaseban fajl. Ispod je minimalan skup koji se isplati: odgovara na većinu pitanja koja se postavljaju tokom incidenta bez zatrpavanja diska.

sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## Korisnici i privilegije
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k privileges
-w /etc/sudoers.d/ -p wa -k privileges

## SSH pristup
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys

## Zakazani poslovi
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

## Moduli jezgra
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

## Upotreba sudo i su
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load

Sintaksa je kratka: -w je putanja koja se prati, -p wa znači reagovati na upise i izmene atributa, -p x na izvršavanje, -k je ključ za kasniju pretragu. Ti ključevi su glavna pogodnost: bez njih se pretraga dnevnika pretvara u prosejavanje gigabajta teksta.

Šta nije na toj listi, i zašto

Vodiči često predlažu beleženje svakog execve poziva — to jest svakog pokretanja svakog programa. Iskušenje je razumljivo: potpuna slika onoga što je rađeno. U praksi to na radnom serveru proizvodi stotine megabajta dnevno, jede primetan deo procesora i dovodi do toga da se dnevnik skraćuje pre nego što zatreba. Ako je takav nivo detalja potreban, uključite ga usko — za jednog korisnika ili za trajanje istrage.

Isto važi za praćenje direktorijuma sajta: upisi u njega su neprekidni, a pravilo pretvara dnevnik u tok besmislenih događaja.

Čitanje

Pretraga po ključu, sa brojčanim identifikatorima prevedenim u imena:

sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today

Zastavica -i neophodna je za čitljivost: bez nje dobijate brojeve umesto korisničkih imena i sistemskih poziva. -ts ograničava period (today, recent ili određeni datum).

Sažetak za period:

sudo aureport --summary -i
sudo aureport --auth -i --failed

Tri polja u zapisu događaja su zanimljiva: auid, identifikator korisnika koji je pokrenuo sesiju, uid, identitet pod kojim je radnja izvršena, i exe, program koji ju je izveo. Razlika između auid i uid odgovor je na pitanje „ko je tačno postao root": uid=0 sa auid-om određene osobe nedvosmisleno imenuje krivca, šta god da je tvrdio da jeste unutar sesije.

Disk

Podešavanja veličine žive u /etc/audit/auditd.conf:

max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG

Posebno pogledajte disk_full_action. Neke konfiguracije podrazumevaju zaustavljanje sistema kada se disk napuni — ponašanje opravdano na mašinama sa revizorskim zahtevima i sasvim neumesno na veb serveru. Proverite tu vrednost pre nego što disk nestane.

Nepromenljiva pravila

Red -e 2 na kraju fajla pravila zabranjuje njihovu izmenu do ponovnog pokretanja — uključujući i onome ko je dobio root. To osetno podiže vrednost dnevnika: napadač ne može isključiti praćenje bez ponovnog pokretanja mašine, a ponovno pokretanje je i samo po sebi upadljivo.

Druga strana je očigledna: ni vi ne možete promeniti sopstvena pravila bez ponovnog pokretanja. Uključite to kada se skup pravila slegne i kada sa njim proživite mesec dana.

Čemu sve to na običnom serveru

auditd ne sprečava ništa. Njegova vrednost pokazuje se tačno jednom — kada treba rekonstruisati redosled događaja, a podaci ili postoje ili ne. Ne mogu se prikupiti unazad, zbog čega se skup pravila postavlja unapred i onda ostavlja na miru.

Praktičan znak da je raspored ispravan: lista pravila nije prazna, dnevnik ne raste nekontrolisano, a događaji sa ključevima identity i privileges pojavljuju se retko i svaki se može objasniti. Kako to izgleda na jednoj stranici pokazuje demo ispod.