Správa linuxového serveru: Sledování změn v souborech pomocí AIDE

V minulém díle jsem probral detektory rootkitů a obecné rady, jak postupovat v případě průniku útočníka do systému. Zajímavými nástroji, které mohou částečně pomoci při detekci, ale hlavně po případném průniku, jsou nástroje sledující změny v souborech. Jedním z těchto nástrojů je AIDE, kterým se bude zabývat tento díl.

Úvod

Nástroje pro sledování změn v souborech pracují obvykle velmi jednoduše. Vytvoří si databázi hashí jednotlivých souborů (které to jsou, to se obvykle dá nastavit) a s tou pak porovnávají současný stav. Pokud tedy útočník změní některé soubory, změní se i jejich hash, což by mělo vyvolat poplach.

Zde je ovšem třeba jednoznačně zdůraznit, že kompromitovanému systému (tj. nástrojům a datům na něm) nelze věřit. Měl-li útočník možnost pozměnit systémové nástroje jako lspsnetstat apod., měl i příležitost pozměnit libovolné jiné nástroje a jejich data, včetně těch určených ke sledování změn v souborech.

V ideálním případě by databáze měla být pořízena před vypuštěním serveru na síť a bezpečně uložena, přičemž kontroly by měly běžet offline, tj. např. z live CD. V praxi je to obtížně proveditelné, zejména pak vzhledem k tomu, že po aplikování nutných aktualizací dochází ke změnám v souborech, čímž databáze zastarává. Jde to samozřejmě řešit provedením kontroly před aktualizací, provedením aktualizace a následně aktualizací či vygenerováním nové databáze hashí. To je ale samozřejmě nepraktické.

AIDE v Debianu je zkompilováno staticky, což znamená, že samotné binárky nevyužívají systémové knihovny. To sice útočníkovi zkomplikuje život, jelikož změnou příslušných knihoven nedojde k ovlivnění AIDE, ale není to nic, co by se nedalo překonat (rootkit upravující funkčnost jádra, úprava AIDE samotného). Budete-li tedy AIDE používat jiným než výše naznačeným ideálním způsobem, musíte počítat s tím, že chytrý útočník obejde i tento nástroj a vy se o změnách nedozvíte.

Jelikož AIDE používá celou řadu hashovacích algoritmů pro jednotlivé soubory, jeho běh je náročný na procesor i čas. Budete-li jej pouštět ručně na běžícím serveru, zvažte úpravu jeho priority (nástroj nice, popř. ještě ionice).

Instalace

Instalace AIDE je jednoduchá, stačí využít správce balíčků, v Debianu je možné použít následující příkaz:

aptitude install aide

Upozorňuji, že pokud byste chtěli dynamicky sestavenou binárku AIDE místo statické, budete muset nainstalovat balíček aide-dynamic. To ale s největší pravděpodobností asi chtít nebudete.

Konfigurace

Sledujete-li tento seriál pravidelně, popřípadě znáte-li Debian, asi už tušíte, že Debian si konfiguraci AIDE upravuje po svém. V případě AIDE je konfigurace přizpůsobena poměrně značně. Jde to tak daleko, že konfigurační soubor je sestavován skriptem update-aide.conf, který sesbírá všechna nastavení ze souborů uložených v /etc/aide/aide.conf.d a zapíše je do jediného konfiguračního souboru, který pak využívá „obalovač“ (wrapper) AIDE, tedy aide.wrapper.

Za základ konfigurace je třeba považovat soubor /etc/default/aide, který obsahuje nastavení pro příslušnou úlohu cronu, jež provádí denní kontroly. Tento soubor je dobře zdokumentovaný, takže si jej projděte a nastavte podle svých potřeb.

Za volby hodné zvláštní pozornosti považuji následující:

AIDE je v Debianu nastaveno tak, že prohledává poměrně velkou část souborového systému, včetně adresáře /home, což může působit řadu zbytečných „poplachů“, máte-li aktivní uživatele. Nechcete-li, aby AIDE prohledávalo /home, můžete využít ukázkového skriptu v /usr/share/doc/aide-common/examples a zařadit jej do konfigurace, takto:

cp /usr/share/doc/aide-common/examples/31_example_exclude-homes /etc/aide/aide.conf.d/
chmod a+x /usr/share/doc/aide-common/examples/31_example_exclude-homes

AIDE také prohledává cache správce balíčků Apt, což rovněž nemusí být zrovna to, co chcete. Nechcete-li, aby AIDE brala v úvahu uložené balíčky ve /var/cache/apt/archives, upravte soubor /etc/aide/aide.settings.d/31_aide_apt_settings, ve kterém nastavte proměnnou IGNORE_ARCHIVES na "yes":

Inicializace databáze

Až budete hotovi s nastavováním (ne dříve!), můžete inicializovat databázi AIDE:

aideinit

Po případných úpravách konfigurace je vhodné znovu inicializovat databázi AIDE, takto:

update-aide.conf && aideinit -y -f

Manuální spuštění AIDE

Chcete-li zkontrolovat integritu databáze, nejjednodušší je pustit samotnou úlohu pro cron:

/etc/cron.daily/aide

Chcete-li použít samotný nástroj aide, použijte příslušný „obalovač“, který zajistí, že se použijí správně sestavené konfigurační soubory. Tento „obalovač“ je k dispozici jako aide.wrapper.

Úprava konfigurace

Nepochybně zjistíte, že AIDE v Debianu prohledává kdeco a budete tedy chtít některé soubory či adresáře z prohledávání vyřadit. Rovnou předešlu, že úprava nastavení není úplně triviální, jelikož Debian nabízí opravdu značné množství konfiguračních souborů i skriptů v /etc/aide/aide.conf.d, které se pak spouští, spojují a kompletují do jediného velkého konfiguračního souboru.

Zde doporučuji prostudovat manuál k AIDE (a ještě manuál k aide.conf: man aide.conf), jelikož obsahuje příslušnou syntax a potřebné informace. Zásadní informace je, že jednotlivá pravidla jsou de facto regulární výrazy, čemuž byste měli přizpůsobit psaní pravidel, zejména si dejte pozor na tečky (tečka odpovídá jednomu libovolnému znaku), které raději escapujte (umístěním zpětného lomítka před tečku, takto: \.). Regulárními výrazy se zde zabývat nebudu, avšak pod článkem jsem vám připravil odkazy na česky psané materiály, ze kterých se příslušnou syntaxi můžete snadno a rychle naučit.

Co se týká pořadí pravidel (opět odkazuji na manuál), je vhodné obecnější pravidla umisťovat níže a specifičtější pravidla výše. Asi nejčastější úpravou konfigurace bude specifikace souborů, které nechcete, aby se do databáze zařadily. V takovém případě si vytvořte vhodný soubor v /etc/aide/aide.conf.d, ale jelikož záleží na pořadí, zařaďte jej do struktury pomocí úvodního čísla, tzn. např. 50_aide_moje-pravidla. Do tohoto souboru pak přidejte příslušná pravidla - pro ignorování určitého souboru zapište příslušný regulární výraz z vykřičníkem na začátku, např. takto:

!/var/cache/munin/www

AIDE pak bude takový soubor či adresář ignorovat. AIDE v zásadě podporuje tři typy pravidel, a sice regulární výrazy (začínají lomítkem), přesné specifikace konkrétního souboru či adresáře ("equal matching", začínají znakem =) a vylučovací regulární výrazy (začínají vykřičníkem). U pravidel, která zařazují soubory či adresáře do databáze, je třeba specifikovat parametr, který odpovídá operacím, jež se mají s daným souborem provést. Zde opět odkazuji na manuál, kde jsou všechny popsány. Můžete si ušetřit práci tím, že si sadu operací pojmenujete, a pak se na ni budete odkazovat, takto:

MojeAkce = p+i+MojeJineAkce

Jak si můžete všimnout, ve specifikaci vlastních operací se můžete odkazovat na jiné vlastní operace. Konfigurace Debianu používá řadu vlastních pojmenovaných operací, které naleznete v /etc/aide/aide.conf. Jedno z pravidel je např. Full, které kdybyste chtěli aplikovat na konkrétní soubor či adresář, zapíšete:

/home/secret$ Full

Pokud by v tomto případě byl secret adresář, zaznamenaly by se jen jeho parametry, ale soubory v něm obsažené by se ignorovaly. Pokud byste chtěli přidat i jeho obsah, stačí vynechat znak konce řádky v regulárním výrazu (tedy znak dolaru), takto:

/home/secret Full

Tolik k běžným úpravám nastavení AIDE. Nezapomeňte, že po úpravě konfigurace musíte znovu inicializovat databázi, viz sekce Inicializace databáze výše.