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.