auditd odpovedá na otázky, ktoré vyvstanú až po udalosti: kto zmenil tento súbor, kedy bol založený tento používateľ, odkiaľ bol spustený tento proces. Žiadny iný nástroj na ne neodpovie — v logoch aplikácií také údaje nie sú a históriu príkazov upraví ten, kto ju zanechal.

Problém je v tom, že samotná inštalácia balíka nedá nič. Predvolené pravidlá prakticky neexistujú, log sa zapisuje, ale obsahovo je prázdny, a zistí sa to v najhoršej možnej chvíli: keď sú dáta potrebné a nie sú.

Inštalácia

sudo apt install auditd audispd-plugins
sudo systemctl status auditd

Jedna zvláštnosť: v niektorých verziách sa auditd nereštartuje cez systemctl restart — službu riadi vlastný príkaz. Pravidlá sa načítajú znova takto:

sudo augenrules --load
sudo auditctl -l

Druhý príkaz ukazuje, čo je skutočne načítané. Jemu treba veriť, nie obsahu súborov.

Sada pravidiel

Pravidlá sa ukladajú do /etc/audit/rules.d/ ako samostatný súbor. Nižšie je minimálna sada, ktorá sa vyplatí: odpovedá na väčšinu otázok pri incidente a nezapĺňa disk.

sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## Používatelia a oprávnenia
-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

## Prístup SSH
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys

## Naplánované úlohy
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

## Moduly jadra
-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

## Použitie sudo a su
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load

Syntax je krátka: -w je sledovaná cesta, -p wa znamená reakciu na zápis a zmenu atribútov, -p x na spustenie a -k je kľúč, podľa ktorého sa potom hľadá. Práve kľúče sú hlavným pohodlím: bez nich sa hľadanie v logu premení na prechádzanie gigabajtu textu.

Čo v tejto sade nie je a prečo

Návody často navrhujú zaznamenávať všetky volania execve — teda každé spustenie každého programu. Pokušenie je pochopiteľné: úplný obraz činností. V praxi to na prevádzkovom serveri dá stovky megabajtov denne, zožerie badateľnú časť procesora a vedie k tomu, že sa log musí orezávať skôr, než bude potrebný. Ak je taká podrobnosť nutná, zapínajte ju bodovo — pre jedného používateľa alebo na čas vyšetrovania.

To isté platí pre sledovanie adresára webu: zapisuje sa tam nepretržite a pravidlo premení log na prúd bezvýznamných udalostí.

Čítanie

Hľadanie podľa kľúča s prevodom číselných identifikátorov na mená:

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

Prepínač -i je pre čitateľnosť nevyhnutný: bez neho uvidíte namiesto mien používateľov a systémových volaní čísla. -ts obmedzuje obdobie (today, recent alebo konkrétny dátum).

Súhrn za obdobie:

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

V zázname udalosti sú zaujímavé tri polia: auid — identifikátor používateľa, ktorý začal reláciu, uid — identita, pod ktorou bol úkon vykonaný, a exe — program, ktorý ho vykonal. Rozdiel medzi auid a uid je odpoveďou na otázku „kto presne sa stal rootom“: uid=0 s auid konkrétnej osoby jednoznačne ukazuje na vinníka, nech sa počas relácie vydával za kohokoľvek.

Disk

Nastavenia objemu sú v /etc/audit/auditd.conf:

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

Zvlášť sa pozrite na disk_full_action. V niektorých konfiguráciách je predvolené zastavenie systému pri zaplnení disku — správanie oprávnené na strojoch s auditnými požiadavkami a úplne nemiestne na webovom serveri. Túto hodnotu treba skontrolovať skôr, než sa disk zaplní.

Režim nemenných pravidiel

Riadok -e 2 na konci súboru pravidiel zakazuje ich zmenu až do reštartu — aj tomu, kto získal root. To badateľne zvyšuje hodnotu logu: útočník nemôže sledovanie vypnúť bez reštartu stroja a reštart je sám osebe nápadný.

Druhá strana je zrejmá: ani vlastné pravidlá nezmeníte bez reštartu. Zapínať to sa oplatí, až sa sada ustáli a mesiac s ňou vydržíte.

Prečo to na bežnom serveri

auditd ničomu nepredchádza. Jeho hodnota sa prejaví presne raz — keď treba zrekonštruovať sled udalostí a dáta buď sú, alebo nie sú. Spätne ich pozbierať nemožno, a preto sa sada pravidiel zakladá s predstihom a potom sa nechá tak.

Praktický znak toho, že konfigurácia je správna: zoznam pravidiel nie je prázdny, log nerastie nekontrolovane a udalosti s kľúčmi identity a privileges sa objavujú zriedka a každú možno vysvetliť. Ako to vyzerá na jednej stránke, ukazuje ukážka nižšie.