Úvod
Programu Tripwire existuje několik verzí pod různými licencemi a pro různé operační systémy, já se budu zabývat verzí pro Linux (pod GPL) – Tripwire v2.3.
Cílem mého snažení bylo, aby na serveru, o který se starám, fungoval systém, který je schopen kontrolovat důležité soubory, a pravidelně mi posílal emailem informace o tom, zda se něco změnilo. Tak bych měl být schopen poznat, že se do systému dostal někdo, kdo tam nemá co dělat. Je jasné, že při instalaci nebo upgradu balíčků bude docházet k falešným poplachům, ale při normálním běhu by se to dít nemělo. Jak jsem později zjistil, může být Tripwire velmi užitečný u počítače, kde má práva administrátora více lidí. Máte pak alespoň přehled, co se kde změnilo, a také s jistotou poznáte, pokud někdo nainstaloval třeba nový program nebo vyměnil ovladač.
Někde jsem se dočetl, že rozumné uspořádání Tripwiru je následující: Na serveru, který chci hlídat, je Tripwire pravidelně spouštěn cronem, třeba jednou za den. Databáze, kde jsou informace o stavu souborů, je uložena na nějakém read-only médiu, ale občas (při updatu databáze) je nutné na něj povolit zápis. Nabízí se třeba disketa, ale tam je potřeba mít k hlídanému serveru fyzický přístup. Další možnost je použít pro databázi sdílený adresář (třeba přes NFS) z jiného počítače. Když už tak dbáme o bezpečnost systému, že instalujeme Tripwire, dá se určitě položit otázka, jestli je rozumné tam zavést potenciálně nebezpečnou službu, jako je SunRPC/NFS. Asi by bylo lepší použít něco jiného, co umožňuje read-only mountování adresáře (snad AFS). Já jsem nakonec zvolil NFS pro jeho jednoduchou a bezproblémovou instalaci.
Instalace
Používám Debian (woody), takže balíčky jsem sehnal na oficiálním serveru a nemusel jsem se zdržovat kompilací. Při konfiguraci balíčku bude nutné nastavit dvě hesla, jedno „local“ a jedno „site“. Ta jsou potřeba později při různých manipulacích s konfiguračními soubory nebo s databází.
Vytvoření databáze
Nejdříve je potřeba upravit konfigurační soubor Tripwiru. Nachází se v /etc/tripwire/tw.cfg, ale jeho čitelná verze je v /etc/tripwire/twcfg.txt. Já jsem tam změnil položku DBFILE, která určuje, kde je uložena databáze, a položku REPORTFILE pro ukládání výsledků kontroly integrity. Konkrétně:
DBFILE =/mnt/muj_pocitac/tripwire/$(HOSTNAME).twd
REPORTFILE =/pub/admin/tripwire/report/$(HOSTNAME)-$(DATE).twr
Pozn.: V /mnt/muj_pocitac je přes NFS vyexportovaný a namountovaný jeden adresář ze vzdáleného stroje.
Pak se ze souboru twcfg.txt vytvoří binární tw.cfg, kterému rozumí Tripwire:
twadmin –create-cfgfile –site-keyfile site.key twcfg.txt
V tuto chvíli už po vás program bude chtít site passphrase.
Stejně tak se dá z binárního tw.cfg vytvořit textový twcfg.txt:
twadmin --print-cfgfile > twcfg.txt
To, jaké soubory (resp. jejich datumy, kontrolní součty a plno dalších informací) se uloží do databáze, záleží na nastavení policy v souboru twpol.txt a jeho binárním bratříčkovi tw.pol. Je tam seznam všech souborů a adresářů, které se mají kontrolovat. A také informace o tom, co všechno se má u nich kontrolovat.
Po instalaci tam už je jakýsi default policy soubor. Navíc se nějaké příklady dají nalézt v /usr/share/doc/tripwire/examples, nebo možná u jiných distribucí někde jinde. Já jsem tam našel ještě verzi pro Debian a pro RedHat 7.0. Soubor /etc/tripwire/twpol.txt je opět potřeba přeložit na binární tw.pol:
twadmin --create-polfile --site-keyfile site.key twpol.txt
Pokud použijete některý example, tak se připravte na to, že dost souborů, které tam jsou nastaveny pro hlídání, se ve vašem systému vůbec vyskytovat nebude. Případně bude, ale v jiných adresářích, což je ještě horší, protože je bude potřeba najít a změnit u nich cestu v twpol.txt. Pokud si věříte, že jste si dobře vědomi toho, co je potřeba hlídat, tak je lepší si vytvořit vlastní seznam souborů.
Nakonec tedy už můžete vytvořit databázi:
/usr/sbin/tripwire --init
Program po vás bude chtít local passphrase a připravte se na to, že vytvoření databáze chvíli potrvá.
Kontrola systému
Teď už můžete zkusit provést kontrolu integrity systému. Stačí vám na to mít read-only přístup k databázi a zadat:
/usr/sbin/tripwire --check
Tripwire přitom vypíše informace o změnách na stdout a také vytvoří report soubor, který uloží tam, kde to máte nastaveno v /etc/tw.cfg. Report je opět binární a můžete se na něj podívat pomocí twprint:
/usr/sbin/twprint --print-report -r report_soubor
Report soubor je navíc potřeba při updatu databáze, což ze začátku budete dělat hodně často. Nejspíš do té doby, než se vám podaří vyladit policy natolik, aby se hlídalo jen to, co je potřeba, a nehlásil se vám třeba každý zápis do nějakého log souboru.
Posílání reportu emailem
Pokud spouštíte kontrolu pomocí cronu (deb balíček vytvoří soubor /etc/cron.daily/tripwire), tak vám nejspíš výpis na stdout přijde automaticky mailem. Tripwire má ale také vlastní systém, jak posílat mailem informace o změnách. Dá se říci, že u každého kontrolovaného souboru, adresáře nebo jejich skupiny můžete nastavit email(y), kam se bude posílat výpis v případě jejich změny. Nastavuje se to v policy a je potřeba si k tomu přečíst manuálovou stránku (man twpolicy). Způsob, jakým se bude mail posílat (SMTP nebo sendmail), se určuje v tw.cfg (man twconfig).
Update databáze
Obvykle je po tom, co uděláte nějaký zásah do systému, potřeba udělat příslušné změny v databázi, abyste při každé kontrole nebyli zahlceni výpisy změn, které jste provedli vy, a neuniklo vám tak něco důležitého. Databáze se updatuje vždy vzhledem k nějakému report souboru.
Způsob, jakým provádějte změny systému, je následující:
- Spusťte kontrolu z databáze
- Prohlédněte si report, nemělo by tam být nic podezřelého
- Udělejte potřebný zásah (např. nainstalujte balíček, přidejte uživatele, …)
- Znovu zkontrolujte systém z databáze
- Pečlivě si prohlédněte report (často je poučné vidět, co všechno se změnilo)
- Udělejte update databáze (použiji při tom poslední report)
Takhle máte celkem slušnou jistotu, že jste do updatu databáze zahrnuli jenom ty změny, které jste udělali vy sami.
Pro update budete potřebovat povolení zápisu do databáze. Parametry pro Tripwire jsou následující:
/usr/sbin/tripwire --update -r report_soubor
Ve vašem editoru (viz /etc/tripwire/tw.cfg) se vám otevře seznam toho, co všechno se změnilo. U každé položky je křížek [x], který tam buď necháte, nebo ho nahradíte mezerou, a tím určíte, zda se daná změna uloží do databáze. Default volba je provést všechny změny. Soubor tedy uložíte a editor ukončíte (ve „vi“ např pomocí „shift+zz“). Tripwire se vás ještě zeptá na local passphrase a změny provede.
Změna konfiguračního souboru
Je možné, že někdy budete chtít změnit nastavení v tw.cfg. Stačí na to upravit /etc/tripwire/twcfg.txt a stejně jako předtím spustit:
twadmin –create-cfgfile –site-keyfile site.key twcfg.txt
Pozn.: Program po vás bude chtít site passphrase.
Změna policy souboru
Stejně tak určitě budete chtít měnit seznam toho, co se má kontrolovat. Upravíte soubor /etc/tripwire/twpol.txt a spustíte
tripwire --update-policy --secure-mode low twpol.txt
Při tom se zcela logicky celá databáze vytvoří znovu, takže ji potom nebudete muset updatovat. Z toho je vidět, že změna policy je poměrně nebezpečná a měli byste mít jistotu, že v danou chvíli není systém kompromitovaný. Pozn.: Pro změnu policy je potřeba site i local passphrase.
Doporučení na závěr
- Rozhodně je dobré si přečíst manuálové stránky:
man tripwire
man twadmin
man twconfig
man twpolicy
man twprint - Textové soubory twcfg.txt a twpol.txt doporučuji po jejich převedení do binární polohy mazat. Vždy je totiž můžete vytvořit znovu a nemusíte se zabývat tím, jestli v nich někdo něco nezměnil. Sice byste je měli mít hlídané Tripwirem, ale vy sami je občas budete měnit, a tak by se informace o jejich modifikaci někým jiným dala lehce přehlédnout. Pokud by někdo chtěl změnit binární policy a config, musel by nejdříve obejít kontrolu hesla, což určitě lze, ale je to další dobrá překážka pro potenciálního crackera.
- Nejspíš si časem vytvoříte nějaké skripty na spouštění tripwiru (nebo třeba použijete ty moje). V každé případě nezapomeňte přidat do policy také jejich kontrolu.