Správa linuxového serveru: Rootkity

Když se útočníkovi podaří proniknout na váš server a získat patřičná práva, obvykle nainstaluje tzv. rootkit, tedy sadu nástrojů pro snadnější ovládnutí kompromitovaného počítače. Co přesně rootkity jsou a jak se jim bránit, to se dozvíte v tomto dílu seriálu.

Úvod

Rootkit je sada nástrojů zajišťující několik věcí. Nejčastěji se v souvislosti s nimi zmiňuje skrývání přítomnosti útočníka (a rootkitu samotného) v systému. Děje se tak obvykle modifikací standardních nástrojů jako pslsnetstat tak, aby neukazovaly soubory, procesy a síťová spojení patřící rootkitu nebo jeho „uživateli“.

Funkce rootkitu ale také obvykle zahrnují vytvoření zadních vrátek, tedy mechanismu, kterým může útočník získat do kompromitovaného systému pozdější přístup. Rookit také může provádět různé „šmírování“, tedy např. zaznamenávání přístupových údajů uživatelů, když se přihlašují, zaznamenávání stisků kláves atd. Kromě toho může obsahovat i nástroje na zametání stop, mazání logů a realizaci nejrůznějších typů útoků.

Jiný druh rootkitů používá místo modifikace systémových nástrojů LKM, tedy modulů jádra, které lze za běhu systému zavést. Po zavedení příslušného modulu může rootkit skrýt svou přítomnost efektivněji, modifikací systémových volání (syscall). Tím si zajistí, že bez ohledu na použitý nástroj nebudou komponenty rootkitu vidět.

Rootkity nejsou pouze doménou unixových systémů – existují i v systémech od společnosti Microsoft. Takové rootkity byly dokonce jednou využity společností Sony BMG jako „ochrana“ proti kopírování hudebních CD. Postiženo bylo dle Wikipedie přes sto titulů. Aby toho ještě nebylo málo, časem vyšlo najevo, že součástí „ochrany“ proti kopírování bylo i využití softwaru chráněného GNU/GPL a GNU/LGPL licencí, který byl samozřejmě využit v rozporu s licencí. Některé laptopy patrně sužuje nebo sužoval rootkit v BIOSu, který uměl zpřístupnit NTFS oddíl a nainstalovat se do Windows po spuštění počítače. Oficiálním důvodem byla údajně snaha o možnost vystopování ukradených notebooků, bohužel za cenu kompromitace systému a možnosti jedné firmy vzdáleně ovládat kvanta počítačů (ano, tomu se obvykle říká botnet). Ale to jen tak na okraj. Jak je vidět, rootkity se mohou dostat do vašeho systému nejrůznějšími cestami, nikoliv nezbytně ze sítě. Mohou být součástí instalovaného proprietárního softwaru, ale mohou být klidně i součástí svobodného softwaru, který někdo poupraví.

Běžná prevence

Do běžné prevence patří všechna základní pravidla zabezpečení serverů, tedy především znalost konfigurace daného serveru, všeho, co na něm běží, přehled o dění na něm (čtení logů). Sledování dění kolem Linuxu, zejména pak kolem vámi používané distribuce, sledování bezpečnostních hlášení. Pravidelná aktualizace, resp. alespoň brzká aplikace bezpečnostních záplat, dále izolace běžících služeb - buď pomocí oprávnění, nebo pomocí chrootu či virtualizace. Řízení přístupu k souborům a službám, použití firewallu. Silná hesla, omezený přístup k SSH (pouze z vnitřní sítě, VPN či z konkrétní IP adresy). Vhodné zacházení s uživateli, poskytování minima práv nutných k jejich činnosti. Pravidelné zálohování a testování záloh.

Důležité je mít pod kontrolou veškerý software, který na server instalujete. Riziko obecně představuje software stažený mimo distribuční repozitáře (které, alespoň v případě Debianu, mají všechny balíčky podepsané, takže není jednoduché je podvrhnout). Nedávno podobný problém postihl FTP server vsftpd, kam útočník propašoval zadní vrátka. Kdo si důsledně kontroloval GPG podpisy, popřípadě kontrolní součty, přišel na to. Rozhodně tedy software mimo distribuční repozitáře podrobte dostatečné kontrole, kontrolujte podpisy i kontrolní součty.

Napadení distribučních repozitářů je velmi málo pravděpodobné, i když ne úplně nemožné. Obvykle však něco podobného nelze přehlédnout, pokud alespoň trochu sledujete aktuality kolem Linuxu či vaší distribuce, jelikož se kolem toho nepochybně strhne patřičná bouře.

Vzdálené logování

Jelikož většinou logy sledujete pomocí nástrojů jako Logwatch nebo Logcheck, které zasílají zprávy jednou za delší dobu, není pro útočníka problém případné stopy v logu smazat hned po průniku (příslušný rootkit mu v tom může dokonce pomoci). Tomuto může zabránit technika zvaná vzdálené logování, tedy zasílání kopií všech zpráv na patřičně zabezpečený vzdálený server, a to okamžitě. V takovém případě, i když útočník smaže hlášky z napadeného serveru, hlášky uložené na vzdáleném, logovacím serveru, zůstanou k dispozici.

V případě syslogd (balíček sysklogd) nastavíte vzdálené logování následujícím způsobem. Na serveru (počítači, který bude přijímat hlášky ze vzdálených systémů) je potřeba povolit příjem zpráv v souboru /etc/default/syslogd, takto (změna se projeví po restartu logovacího démona):

SYSLOGD="-r"

Síťová komunikace probíhá na UDP portu 514, lze tedy doporučit vytvořit příslušná pravidla firewallu k omezení přístupu jen na ty počítače, ze kterých chcete přijímat logované hlášky.

Poté je třeba nastavit klienty. V případě těch je třeba upravit hlavní konfigurační soubor syslogu, tedy /etc/syslog.conf. Zde postačí místo cílového souboru pro uložení logovaných hlášek zapsat zavináč následovaný jménem nebo IP adresou serveru, takto:

*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          @server.example.org

Po restartu logovacích démonů na klientech by mělo vzdálené logování fungovat a logy na serveru by se měly začít plnit hláškami z klientů. Jelikož hostname bývá součástí hlášek, není problém od sebe odlišit jak jednotlivé klienty, tak hlášky samotného serveru.

Nástroje pro sledování změn v souborech

Existují nástroje, které sledují změny v kritických souborech, a umožňují tak případnou kompromitaci systému detekovat. Mezi zástupce patří např. Tripwire nebo Aide.

Detektory rootkitů

Detektory rootkitů jsou specializované nástroje, které využívají nejrůznější techniky pro zjištění přítomnosti rootkitů v systému. Umí zjistit přítomnost známých rootkitů, ale hledají kromě stop konkrétních rootkitů i obecné stopy, tudíž teoreticky dokáží odhalit i přítomnost některých neznámých rootkitů. Je vhodné je používat spolu s nástroji pro sledování změn v souborech (viz výše). Mezi zástupce patří chkrootkit a rkhunter.

Závěr

Rootkity představují jedno z možných rizik, nikoliv však jediné. I když se útočníkovi nepodaří získat roota, stále má možnost nainstalovat nástroje sloužící k pozdějšímu snadnému přístupu (pomocí uživatelské cron tabulky zajistí jejich spuštění po restartu serveru), stejně jako nástroje určené pro útoky na jiné servery. Často se k tomu využívá IRC bot, který se přihlásí do nějaké chatovací místnosti, kde pak útočník vhodným příkazem zajistí provedení příslušných akcí (DDoS útok atd.). Jediná „dobrá“ zpráva v tomto případě je, že bez práva roota jsou síťová spojení i tyto procesy viditelné minimálně všemi ostatními uživateli.

V příštím díle představím podrobněji detektory rootkitů a osvětlím obecný postup, co dělat v případě kompromitace systému.