Hlavní navigace

Bezpečnost souborového systému

Boleslav Bobčík

Pevné disky jsou v současnosti nejdůležitějším médiem pro trvalé ukládání dat a programů. Při zabezpečování systému je proto vhodné jim věnovat přiměřenou pozornost, protože narušení integrity nemusí být jen následek útoku, ale i defektního softwaru.

Řízení přístupu

Prvním krokem k bezpečnému systému je určení, kdo, kam a jak smí přistupovat. Triviální způsob spočívá v „privatizaci“ souborů a nastavení atributů – každé položce souborového systému určíme konkrétního vlastníka a skupinu, do které náleží. Pak přidělujeme práva metodou UGO (User-Group-Others). Běžné nastavení je například rw-r-----, které znamená, že vlastník má právo zapisovat a číst, skupina může jen číst a zbytek světa nemá k souboru přístup. O metodě UGO se dočteme v prakticky každé knize o UNIXu. Nemáme-li právě k dispozici žádnou knihu, poslouží nám i manuálová stránka programu chmod(1).

Metoda nastavení atributů UGO má nevýhody, jejichž příčinou je poměrně značné stáří tohoto schématu. Představme si situaci, kdy potřebujeme, aby do nějakého souboru měla oddělení A a B plný přístup, zatímco oddělení C, D a E mohla jen číst. Pro zbytek světa má být soubor nepřístupný. Zde UGO selhává.

Ztraceni však nejsme! Řešení spočívá v metodě ACL (Access Control Lists), kterou můžeme nazvat řízení přístupu pomocí tříd oprávněných osob. Hned zkraje je třeba poznamenat, že (nakolik je autorovi známo), není ACL zahrnuto v žádné standardní distribuci Linuxu. Podpůrný software je totiž stále ve vývoji, i když v posledních měsících už vykazuje dostatečnou robustnost.

Princip ACL, definovaný normou Posix, je jednoduchý. Místo tří tříd uživatelů jich může být libovolný počet; souboru snadno přiřadíme práva pro několik uživatelů, několik skupin a přirozeně zbytek světa. Tím získáme mnohem jemnější a preciznější kontrolu nad systémem. Výše uvedený příklad s pěti různými odděleními je pak snadnou záležitostí.

Zprovoznění ACL není právě nejjednodušší. V první řadě musíme upravit a znovu přeložit jádro operačního systému; ACL totiž mírně rozšiřuje vlastnosti souborového systému Ext2. Dále je potřeba aktualizovat program e2fsck, aby při případných opravách rozpoznal ACL bloky a nevnášel do souborového systému nekonzistence. Další úpravy provedeme na souborových utilitách (GNU fileutils) a samozřejmě si nainstalujeme podpůrný software.

Pozitiva plynoucí z používání ACL by měla být jasná. Musíme se však zamyslet i nad tím, jaké problémy vyvstanou. V první řadě se bude jednat o potíže s aplikacemi, které pracují s atributy souborů a ACL neznají. Takových je bohužel mnoho, z těch nejpoužívanějších zmiňme tar nebo celý systém NFS. Při zálohování je v současnosti nutné uložit rozšířené atributy zálohovaných dat do zvláštního souboru, což není pohodlné ani praktické. Méně významným problémem může být disková kvóta: bloky, které ACL zabírá, se do ní totiž započítávají.

Shrneme-li klady a zápory, můžeme konstatovat, že schéma UGO je pro mnoho účelů stále dostatečné. Pokud však máme na starosti systém, po němž je požadované precizní řízení přístupových práv, bude ACL jednou z nemnoha možností, které budeme mít. Navíc se dá předpokládat, že se podpora rozšířených atributů bude zvětšovat. Jakmile bude dostatečné množství aplikací upraveno pro využití možností ACL, toto schéma se nepochybně v krátké době stane nedílnou součástí standardních distribucí Linuxu.

Implementaci ACL pro Linux můžeme najít na Internetu na adrese acl.bestbits.at. Toto řešení je poměrně blízké tomu, které je součástí Solarisu firmy Sun.

Prověřování integrity souborů

Pokud se staráme o systém, chceme pochopitelně vědět, zda někdo nemanipuloval se soubory, se kterými manipulovat neměl. Například hacker obvykle smaže kompromitující záznamy v protokolech (/var/log/) a připraví si nějaká zadní vrátka (často úpravou /etc/inetd.conf). Nejprimitivnější způsob, jak integritu souborů kontrolovat, by spočíval ve vhodně skloubených programech find a md5sum. Principem činnosti je vybudování databáze signatur monitorovaných souborů a následné pravidelné kontroly.

K tomuto účelu ovšem existuje i specializovaný software. Asi nejznámější produkt je Tripware. Jeho historie je poměrně zajímavá: zpočátku se jednalo o Open Source projekt, pak jej firma Tripwire, Inc. prohlásila za proprietární a komerční software, aby jej po několika letech prohlásila opět za Open Source (oficiální zveřejnění by mělo proběhnout tento podzim na budoucí prezentační stránce).

Zamezení volného šíření Tripwire prospělo především vzniku alternativních produktů. Jedním z nich je AIDE, Advanced Intrusion Detection Environment, který si blíže představíme. Jeho schopnosti by totiž měly být ještě lepší, než u Tripwire.

Kontrolované soubory jsou vybírány pomocí regulárních výrazů, které jsou pro tento účel příhodnější než obyčejné shellové masky. Integrita vybraných souborů se ověřuje mnoha kritérii, která můžeme jednoduše konfigurovat. K základním testům patří kontrola majitele souboru, atributů, času poslední změny nebo velikosti. Nejdůležitější je však digitální signatura souboru, která nejlépe vypovídá o tom, zda byl soubor změněn. AIDE používá algoritmy md5, sha1, rmd160 a tiger; použitím knihovny mhash se tento seznam rozšíří o haval, gost a crc32.

Pro větší bezpečnost bychom měli vytvořit databázi signatur ihned po nainstalování či aktualizaci operačního systému, především však před povolením síťových služeb. Aby program AIDE měl bezpečnostní význam, je nezbytné pravidelně prověřovat obsah souborového systému, například zahrnutím kontroly do rozvrhu práce daemonu cron. Jedině tak včas zjistíme možné problémy.

Další pomůcky

Mnoho souborů na disku se s výjimkou upgradů nemění. Příkladem mohou být adresáře /bin, /usr/bin a podobné. Majitelem souborů v nich obsažených je obvykle superuživatel a běžní uživatelé systému je mohou jen číst, případně spouštět. To však není důvod, aby si administrátor oddechl, protože v historii se vyskytlo mnoho špatně naprogramovaných SUID programů, které mohly být zneužity k zápisu na disk pod identitou superuživatele (snad nejproslulejší je sendmail a jeho „schopnost“ uložit e-mail do souboru /etc/passwd).

Souborový systém Ext2 nám nabízí drobnou pomůcku, jak se chránit před zápisem do vybraných souborů – speciální souborové atributy. V balíku e2fsprogs najdeme dvě utility pro jejich manipulaci a zobrazování, chattr a lsattr.

Ze speciálních atributů jsou dva nejdůležitější: a (append-only, k obsahu souboru se smí jen přidávat nová data) a i (immutable, soubor nesmí být nijak měněn). Souborům a adresářům se přidělují podobně jako běžná práva, nastavovat je však smí jen superuživatel. Následující ukázka přibližuje zacházení s atributy:

# lsattr
-------- ./pokus.txt
# chattr +i pokus.txt
# lsattr
----i--- ./pokus.txt
# chattr =a pokus.txt
# lsattr
-----a-- ./pokus.txt

Nyní můžeme k souboru pokus.txt jen přidávat data, jak se snadno přesvědčíme:

# echo "Pokus o přidání" >> pokus.txt
# echo "Pokus o přepsání" > pokus.txt
bash: pokus.txt: Operace není povolena

Oba atributy zamezují změnu vlastníka a skupiny souboru, a též manipulaci s přístupovými prá­vy.

# chmod u+x pokus.txt
chmod: pokus.txt: Operace není povolena

Atribut immutable je vhodný pro binární soubory. Atribut append-only by mohl být užitečný pro logovací soubory, ovšem pak mohou nastat problémy při rotaci souborů.

Bylo by chybou se domnívat, že speciální atributy mohou samy o sobě zabránit hackerům v průniku do systému, případně omezit škody takového průniku. V okamžiku, kdy vetřelec získá administrátorská práva, může tyto atributy zcela prozaicky deaktivovat. Jejich hlavní využití spočívá v ochraně důležitých souborů před „nepřímými“ útoky, kdy hacker útočí z neprivilegovaného účtu pomocí některé špatně zabezpečené SUID aplikace.

Představili jsme si tři z mnoha možných způsobů, jak chránit obsah disku před bezpečnostním incidentem. Běžný uživatel, který se stará o svou pracovní stanici, je patrně nevyužije. Ale administrátor, který má na starosti systém s mnoha uživateli, by měl být s uvedenými způsoby důkladně seznámen, aby mohl rozpoznat, jaká kombinace metod je pro jeho systém ta nejvhodnější.

Našli jste v článku chybu?