Seminář Linux - letní semestr 96/97, MFF UK

Petr Mitošinka

Bezpečnost Linuxu

Literatura

Upozornění pro čtenáře:
Tento text si neklade za cíl být úplný a po všech stránkách aktuální, neboť v tomto tématu více než v jakémkoliv jiném platí, že teď je už pozdě. Berte ho jako námět k zamyšlení a jako malinkou sbírku snad nejdůležitějších typů jak se lépe postarat o co nejmenší zranitelnost svého Linuxu.

Aktivní ochrana

Vnitřní nebezpečí

Zabezpečení počítače před tím aby lokalní uživatelé, vlastníci legálního účtu, nezískali rootovské práva.
Většina "hackerů" tvrdí, že pokud se na nějaký stroj dostanou jako obyčejný uživatel, je získání rootovských práv, a tedy neomezený přístup k celému systém, už hračkou. Vemme si z toho tedy ponaučení a snažme se jim to poněkud stížít.

Hesla

Jedním ze základních naviků, který by každý uživatel Linuxu měl mít, je tvorba poměrně složitých hesel. Délka by měla být alespoň 7 znaků a obsahovat alespoň 2 mimo abecední znaky jako čísla či speciální znaky (+,?.@#$%^&*). Ve standardních distribucích se rozeznávají hesla do délky 8 znaků, ale lze nainstalovat software, který umí toto omezení prakticky zrušit. Z osobních zkušeností doporučuji zkusit svůj passwd či shadow soubor prolomit pomocí programu crack (toho času ve verzi 5.0), který používá kromě metody hrubé síly i poměrně propracovanou slovníkovou metodu. Člověk se dost často diví, co všechno je schopen rozluštit. Na otázku jak si pak má člověk takto složitá hesla pamatovat, existuje několik odpovědí. Jednou z nich je například podle rozložení písmen na klávesnici, anebo lépe pomoci prvních písmen slov nějaké říkanky či básničky.
Jako samozřejmost by se už dalo skoro brát přesun hesel z passwd souboru do shadow, ve kterém nemá kromě roota nikdo právo číst zakódovaná hesla. Toto je už ve všech nových distribucích Linuxu splněno.

SUID root programy

Je vhodné jednou za čas projít celý hard disk počítače a nechat si vypsat všechny SUID root programy. To jsou takové programy, které pokud spustí normalní uživatel, umožní mu po dobu běhu programu získat rootovská práva. Pokud je v takovémto programu chyba, je možné s jeho pomocí třeba spustit rootovský shell. Je záhodno u těch programů, které bezpodmíněčně nemusí zůstat SUID root, zrušit S bit. Jedná se například o programy ping, traceroute, lpr, hodně programů pro X-windows. Při prvním průchodu by se mělo SUID programy srovnat s Linux Security FAQ či s příspěvky do Linux-alert konference, kde naleznete většinu upozornění na staré a již dobře známe chyby.

Programy běžící pod uživatelem root

Tyto programy jsou podobným nebezpečím jako programy, které jsou SUID root. Většina daemonů beží pod uživatelem root - jako příklad mohu uvést sendmail, telnetd, httpd, ftpd. Pokud se v těchto programech nalezne závažná skulinka, jako se tomu již stalo mnohokrát, umožní to pronikajícímu získat rootovský přístup na daný stroj. Proto je vhodné i za cenu poměrně velkých nákladů, u všech těchto programů pravidelně updatovat verze, abychom riziko omezili na minimum.
U většiny těchto chyb se využíva tzv. "buffer overflow", kdy se program nepodíva zda má při zápisu do paměti dostatek místa a něco zapíše do oblasti kam by normálně nemohl. To se může využít například ke spuštění rootovského bashe.

Vnější nebezpečí

Zabezpečení počítače před tím aby ostatní uživatelé Internetu nemohli ohrozit domácí stroj.
Toto by mělo být primárním cílem všech sysopů a administrátorů. Pokud se Vám podaří vybudovat ochranou téměř neprůstupnou zeď okolo Vašeho systému, o to větší šance je, že potencionální průzkumníky to odradí od dalšího snažení a raději vezmou za vděk snažším cílem.

Inetd, tcpd

V /etc/inetd.conf je přehled programů, které se spouští pomocí inetd daemonu. Je vhodné z tohoto přehledu vyeliminovat všechny služby o kterých víte že se bez nich obejdete - většinou to bývají všechny programy jako in.fingerd, in.nnptd, ntalk, in.rshd, in.rlogind, ...
Dále pak vypustit všechny nepotřebné démony z /etc/rc.d/* jako například remot procedure call - NFS, rpc.mountd, ...
Pomocí tcpd a jeho konfiguračních souborů /etc/hosts.* omezit množinu počítačů, které u vás mohou danou službu používat. Přesný formát naleznete na manuálové stránce man 5 host_access. Jako příklad zde uvádím formát souboru /etc/hosts.deny:

in.ftpd: ALL EXCEPT LOCAL, .mff.cuni.cz, .feld.cvut.cz
in.telnetd: ALL EXCEPT ss1000.ms.mff.cuni.cz
který má za následek to, že služba ftp je přístupná pouze pro lokální uživatele a stroje z domén mff.cuni.cz a feld.cvut.cz a telnet pouze pro stroj ss1000. Jako další malý krůček je možno měnit porty na kterých se hlásí jednotlivé služby - v /etc/services - kde můžete třeba telnet posunout na úplně jiný port než standardní 23.

Služby - ftp, telnet, ...

Je třeba pozvolna přecházet na zabezpečené služby, například kryptovanou komunikaci na principu veřejných klíčů. Jako příklad by mohl sloužit secure shell (ssh), který umožňuje ještě větší konfort než telnet a přitom nehrozí prozrazení hesla ani dat, které přes ssh putují, neboť celá session je kódovaná. Obdobně lze použít secure copy (scp) místo ftp.
Pokud nemůžeme či nechceme použít ssh nabízí se nám jako alternativa OTP (one time password), který sice nekryptuje celou komunikaci, ale pouze heslo při loginu.
U sendmailu, programu pro příjem elektronické pošty, je vhodné omezit množinu programů, které se mohou při příjmu spustit. To zabezpečíme pomocí smrsh (sendmail restricted shell). V /etc/sendmail.cf musíme uvést:

Mprog,          P=/usr/local/bin/smrsh, F=lsDFMoeu, S=10/30, R=20/40, D=$z:/,
                T=X-Unix,
                A=sh -c $u
a vytvoříme adresář /var/adm/sm.bin do kterého dáme symbolické linky na programy jimž dovolíme spuštění.
U httpd (např. Apache) je hlavně nutno dávat pozor na programy, které jsou v /cgi-bin/ adresáři a mohou se na dálku spouštět. Je známa například chyba ve skriptu phf, která umožňuje získat soubor /etc/passwd.

Sniffry - čmuchalové/slídilové

Sniffry jsou velmi nebezpečné programy, které jsou většinou zahrnuty do některého z daemonů (dost často syslogd), aby mohli nenápadně běžet na hacknutém stroji. Čmuchal sedí na ethernetové kartě, kterou si otevře v promiskuitním režimu a může tudíž poslouchat všechen traffic, který ethernetem projde (ze všech počítačů, které jsou na stejném segmentu ethernetu). Většinou se odchytáva několik prvních packetů každé ftp či telnet session, ve kterých se skrývají nezakódovaná hesla spolu s uživatelskými jmény. Ale tímto způsobem lze získat i mnoho jiných důležitých dat. V poslední době se této možnosti brání ISP hromadným nasazováním switchů do počítačových sítí, což umožňuje aby na jednom segmentu byl pouze jeden počítač - tj. není co odposlouchávat. Ovšem ne každý ISP má dostatek financí, aby mohl kompletně změnit strukturu své sítě...

Pasivní ochrana

LSOF

LSOF je velmi šikovný program, který vám pomůže v mnoha situacích. Dokáže zjistit, které soubory, zařízení či síťová spojení jsou v danou chvíli aktivní a které programy je používají. Stojí za to jednou za čas prozkoumat zda aktivní procesy nemají otevřený podezřelý TCP port, či zda neukládají něco do divného souboru. Tento program je volně k dispozici na ftp://vic.cc.purdue.edu/pub/tools/unix/lsof.

Logy

Správný sysop by měl alespoň jednou týdně projít všechny logy a podívat se po podezřelých pokusech o konexe z vnejšku. Většinu údajů najdete ve /var/adm/messages či /var/adm/syslog anebo /var/adm/debug, /var/adm/xferlog. Pokud se vám například bude zdát, že v syslogu máte poněkud málo informací, prozkoumejte radějí zda syslogd je shodný s instalovanou verzí. Je to totiž velmi často převlečený sniffer. Občas taky stojí za to podívat se do domovských adresářů uživatelů a projít si třeba soubory ~/.bash_history - dost často je to velmi poučné čtení :-).

Nejenom konference o bezpečnosti

Na Internetu jsou dvě hlavní konference o bezpečnosti na Linuxu - obě dvě vedené pod křídly RedHatu: Linux-alert a Linux-security. Přihlásit se do těchto konferencí můžete například na této stránce. Linux-alert je moderovaná konference a je do ní postováno pouze velmi málo e-mailů (cca 1-2 měsíčně, takže se nemusíte bát, že budete zahlceni), ale za to se jedná o důležitá zdělení. Linux-security je otevřenější konferencí s živějším obsahem.
Několik organizací jako AUSCERT (Australian Computer Emergency Response Team), CERT (Computer Emergency Response Team), CIAC (Computer Incident Advisory Capability) vydává při objevení nebezpečných chyb svá doporučení, která se dají rozdělit do dvou částí - rychlé řešení, které se může použít okamžitě a dlouhodobé řešení (například patch, který je kdyspozici až později).
No přejděme od oficiálních a uznávaných zdrojů informací k poněkud méně váženým. Například na stránkach MaMedie naleznete několik fór jako "CzERT" či "Hacking aneb proč žádat roota o konto", kde se občas mihnou zajímavosti. Anebo se můžete podívat k našim bývalým kolegům na Slovensko na hack.box.sk, kde naleznete velké množství velmi poučných utilit, jako sniffry, upravené logy, čističe, hledače hesel, redirektory, atd. Další takovou stránku naleznete na www.security.sk.

Otázky a připomínky

Pokud byste měli nějaké připomínky k tomuto tématu, případně chtěli něco doplnit, či Vám něco nebylo jasné, neváhejte se na mě obrátit.
Váš Petr Mitošinka

Zdroje na Internetu:

  1. Linux Documentation Project
  2. SendMail
  3. Linux Security FAQ
  4. Linux Security
  5. Linux Mailing Lists
  6. Australian Computer Emergency Response Team
  7. Computer Emergency Response Team
  8. Computer Incident Advisory Capability