auditd odpovídá na otázky, které vyvstanou až po události: kdo změnil tento soubor, kdy byl založen tento uživatel, odkud byl spuštěn tento proces. Žádný jiný nástroj na ně neodpoví — v logách aplikací takové údaje nejsou a historii příkazů upraví ten, kdo ji zanechal.
Potíž je v tom, že samotná instalace balíčku nedá nic. Výchozí pravidla prakticky neexistují, log se zapisuje, ale obsahově je prázdný, a zjistí se to v nejhorší možnou chvíli: když jsou data potřeba a nejsou.
Instalace
sudo apt install auditd audispd-plugins
sudo systemctl status auditd
Jedna zvláštnost: v některých verzích se auditd nerestartuje přes systemctl restart — službu řídí vlastní příkaz. Pravidla se načtou znovu takto:
sudo augenrules --load
sudo auditctl -l
Druhý příkaz ukazuje, co je skutečně načteno. Jemu je třeba věřit, ne obsahu souborů.
Sada pravidel
Pravidla se ukládají do /etc/audit/rules.d/ jako samostatný soubor. Níže je minimální sada, která se vyplatí: odpovídá na většinu otázek při incidentu a nezaplňuje disk.
sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## Uživatelé a oprávnění
-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
## Pří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 jádra
-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žití sudo a su
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load
Syntaxe je krátká: -w je sledovaná cesta, -p wa znamená reakci na zápis a změnu atributů, -p x na spuštění a -k je klíč, podle kterého se pak hledá. Právě klíče jsou hlavním pohodlím: bez nich se hledání v logu promění v procházení gigabajtu textu.
Co v této sadě není a proč
Návody často navrhují zaznamenávat všechna volání execve — tedy každé spuštění každého programu. Pokušení je pochopitelné: úplný obraz činností. V praxi to na provozním serveru dá stovky megabajtů denně, sežere znatelnou část procesoru a vede k tomu, že se log musí ořezávat dřív, než bude potřeba. Je-li taková podrobnost nutná, zapínejte ji bodově — pro jednoho uživatele nebo na dobu vyšetřování.
Totéž platí pro sledování adresáře webu: zapisuje se tam nepřetržitě a pravidlo promění log v proud bezvýznamných událostí.
Čtení
Hledání podle klíče s převodem číselných identifikátorů na jména:
sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today
Přepínač -i je pro čitelnost nezbytný: bez něj uvidíte místo jmen uživatelů a systémových volání čísla. -ts omezuje období (today, recent nebo konkrétní datum).
Souhrn za období:
sudo aureport --summary -i
sudo aureport --auth -i --failed
V záznamu události jsou zajímavá tři pole: auid — identifikátor uživatele, který zahájil sezení, uid — identita, pod níž byl úkon proveden, a exe — program, který jej provedl. Rozdíl mezi auid a uid je odpovědí na otázku „kdo přesně se stal rootem“: uid=0 s auid konkrétní osoby jednoznačně ukazuje na viníka, ať už se během sezení vydával za kohokoli.
Disk
Nastavení objemu jsou 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ášť se podívejte na disk_full_action. V některých konfiguracích je výchozí zastavení systému při zaplnění disku — chování oprávněné na strojích s auditními požadavky a zcela nemístné na webovém serveru. Tuto hodnotu je třeba zkontrolovat dřív, než se disk zaplní.
Režim neměnných pravidel
Řádek -e 2 na konci souboru pravidel zakazuje jejich změnu až do restartu — i tomu, kdo získal root. To znatelně zvyšuje hodnotu logu: útočník nemůže sledování vypnout, aniž by stroj restartoval, a restart je sám o sobě nápadný.
Druhá strana je zřejmá: ani vlastní pravidla nezměníte bez restartu. Zapínat to stojí za to, až se sada ustálí a měsíc s ní vydržíte.
Proč to na běžném serveru
auditd ničemu nepředchází. Jeho hodnota se projeví přesně jednou — když je třeba zrekonstruovat sled událostí a data buď jsou, nebo nejsou. Zpětně je posbírat nelze, a proto se sada pravidel zakládá s předstihem a pak se nechá být.
Praktická známka toho, že konfigurace je správná: seznam pravidel není prázdný, log neroste nekontrolovaně a události s klíči identity a privileges se objevují zřídka a každou lze vysvětlit. Jak to vypadá na jedné stránce, ukazuje ukázka níže.