Ochraňte si svůj operační systém - Díl druhý Windows NT a 2000

1. 6. 2002

Sdílet

Charakteristika systému Mezi operačními systémy Windows 9x a systémy NT/2000 je několik podstatných rozdílů. Pojďme si některé z nich vyjmenovat. První, dost podstatný rozdíl je v...

Charakteristika systému


Mezi operačními systémy Windows 9× a systémy NT/2000 je několik podstatných

rozdílů.



Pojďme si některé z nich vyjmenovat. První, dost podstatný rozdíl je v použitém

souborovém systému. Zatímco systémy 9× využívají souborový systém FAT, který je

znám svou nestabilitou a nespolehlivostí, Windows NT/2000 používají souborový

systém NTFS. U tohoto systému byl kladen důraz na spolehlivost, stabilitu,

multitasking (běh více úloh), bezpečnost a mnoho dalších věcí (nebudeme zde

probírat, do jaké míry se to podařilo). Důležité je, že tyto systémy jsou

mnohem spolehlivější než jejich předchůdci (9×). Tyto systémy byly rovněž od

začátku vyvíjeny jako víceuživatelské, s dobrou podporou síťových funkcí.

Znamená to tedy, že mají zabudované ochranné prvky a nemůže je plně ovládat

každý, kdo sedí u klávesnice, jako u systémů 9×. K tomuto tématu se za chvíli

vrátíme. Nyní se podíváme na to, jakým způsobem se tyto systémy chovají v síti

a jak reagují na různé, potencionálně nebezpečné situace.





Chování v síti



Windows NT/2000 obsahují podporu mnoha síťových služeb a protokolů. Nepochybně

nejpoužívanější jsou protokoly IP a SMB/CIFS. Na protokolu IP je založen celý

internet a protokol SMB/CIFS je protokolem společnosti Microsoft, pomocí

kterého spolu systémy Windows komunikují. Pokud se někdo pokusí napadnout váš

systém, povede pravděpodobně útok právě pomocí těchto dvou protokolů. Nejdříve

však bude muset zjistit, jaký operační systém používáte. Bohužel jsou systémy

Windows NT/ /2000 velice sdílné, co se týče poskytování informací o svých

službách a jejich verzích. Nyní se podíváme na to, jak může taková prohlídka a

identifikace systému vypadat. Nutno ještě podotknout, že pokud se někdo pokusí

zaútočit na systémy Windows NT/2000, použije k tomu pravděpodobně stejný

operační systém. Napadat Windows s unixového počítače je možné, nicméně ne tak

efektivní jako ze systému, na kterém běží Windows. Pro unixové systémy je

situace analogická. O UNIXu se ale budeme bavit až v příštím dílu našeho

seriálu.





Identifikace systému a služeb



Dejme tomu, že si někdo vyhlédl váš systém a pokusí se na něj zaútočit. Systém

lze identifikovat celkem snadno, například podle toho, jaké porty má otevřené a

jaké služby nabízí. Systémy 9× standardně naslouchají na portu 139. Systémy

Windows NT/2000 navíc na portech 135, 136, 137, 138. Nemusí to však být vždy

pravda. Záleží na tom, k jakému účelu jsou systémy používány. Například systém

Windows 2000, který je používán jako pracovní stanice, nebude naslouchat na

stejných portech jako tentýž systém, který je používán jako PDC, web a mail

server. Od nynějška budeme předpokládat, že se jedná a serverový systém, neboť

pracovní stanice nejsou z hlediska útočníků tak atraktivní a platí pro ně téměř

stejné doporučení jako pro systémy 9× (viz minulý díl).





Nástroje pro identifikaci



Nástrojů (různého původu a autorů) je mnoho, ale proč chodit zbytečně daleko,

když nám podobné nástroje nabízí i sám Microsoft! Nejde o nic jiného než o

známý a bohužel i dost drahý Resource Kit. Nicméně pokud je někdo ochoten

investovat desetitisíce do serverového operačního systému, bude zřejmě ochoten

ještě několik málo tisíc přihodit a Resource Kit si zakoupit. Pomocí nástrojů

obsažených v RK lze vaši síť prozkoumat a nalézt spoustu nevhodných nastavení

nebo známých chyb. Tyto nástroje se prodávají i s dokumentací, takže se jimi

nebudeme zabývat podrobně.





Achillova pata prázdná relace



Jak již bylo řečeno, naslouchají systémy Windows NT/2000 standardně na portu

139 (445 u Windows 2000). Naneštěstí je možné se k tomuto portu připojit i

neautorizovaně. To ještě nemusí nic znamenat, bohužel však může neautorizovaný

uživatel připojený k portu 139 získat nepřeberné množství informací o systému a

nejen o něm, ale i o počítačích, které patří do domény, o sdílených

prostředcích a mnoho dalších, pro útočníka zajímavých informací. Pokud si

nejste jisti, zdali váš systém naslouchá na tomto portu, můžete provést

následující test. V prostředí příkazového řádku zadejte následující příkaz: net

use\\192.168. 1.1\IPC$ "" /u:"", přičemž za zpětné lomítko zadejte vlastní IP

adresu. Pokud se vám připojení podaří, máte problém. Obrana je celkem snadná.

Nejsnazší je uvedené porty definovat na firewallu. Pokud chcete použít jiný

způsob, zkuste následující postup (u systému NT je vyžadován Service Pack 3 a

vyšší). Spusťte regedt32 a v položce HKEY_LOCAL_MACHINE\Systém

\CurrentControlSetControlLSA přidejte novou položku typu REG_DWORD s názvem

RestrictAnonymous a změňte její hodnotu na 1 (na 2 u W2000). Tato ochrana však

není stoprocentní, proto doporučujeme tuto techniku kombinovat s ochranou přes

firewall. Pokud se útočníkovi nepodaří získat informace přes prázdnou relaci,

bude muset zkusit jiný způsob. A jelikož jich mnoho nemá, pokud nemá na serveru

účet, nezbude mu než si nějaký účet opatřit.





Získání účtu



Uživatelské účty představují bez ohledu na operační systém jednu z největších

slabin systému a nejčastější místo, kde se útočníci pokoušejí zaútočit. Jelikož

jsou účty vytvářeny, používány a spravovány lidmi, a lidé jsou bytosti omylné,

není se co divit. Jak tedy může útočník na uživatelský účet zaútočit? Celkem

jednoduše. Nepotřebuje k tomu žádné speciální znalosti ani schopnosti.



Jednoduše se k systému připojí, a pokusí se o přihlášení do něj. Říkáte si: a

co heslo? Správně. Jako první ho zarazí hláška k zadání hesla. Bohužel je

prolomení hesla některého uživatele systému nebo administrátora poměrně snadné,

zejména v případě, že uživatelé používají slabá hesla, ne-li prázdná. Několik

hesel k systémovým službám bývá pohříchu často prázdných a zdá se, že tento

trend přetrvává. Proto vždy doporučujeme po instalaci systému změnit hesla

systémových účtů. Ale vraťme se ke vzdálenému hádání hesel. Pokud útočník

disponuje dostatečně velkým wordlistem (slovníkem) a zná jména uživatelských

účtů, je celkem pravděpodobné, že se mu podaří nějaký účet prolomit. Systémy

Windows NT/2000 naštěstí obsahují několik mechanismů, jak takovémuto hádání

hesel na dálku zabránit. První z nich je implementován v Account Policy

(Zásadách uživatelských účtů, chcete-li). Je zde možno definovat, po kolika

neúspěšných pokusech o přihlášení bude uživatelský účet zablokován, a na jak

dlouho. Ale pozor! Nastavíte-li například zablokování po 5 neúspěšných

pokusech, může se váš systém stát obětí DoS (Denial of Service odepření služby)

útoku. Útočník, který se bude pokoušet probourat do vašeho systému, může během

velice krátké doby zablokovat všechny uživatelské účty na vašem počítači.

Zkuste pak legitimním uživatelům vysvětlit, že jsou uvedená opatření pro jejich

dobro. Dalším způsobem, pomocí kterého může útočník získat uživatelský účet, je

použití snifferu (čmuchala). Jedná se o program, jenž je nainstalován na

určitém počítači, který je součástí sítě (LAN) a odposlouchává a analyzuje

všechny pakety, jež sítí putují. Zřejmě nejlepší sniffer pro odposlouchávání

SMB relací je SMB Packet Capture, který je součástí l0phtcracku, což je

utilita, jež by na vašem systému neměla chybět. Najdete ji na adrese www.

l0pht.com. Snifferů však existuje více a kvalita je často srovnatelná. Pokud

chcete zkusit nějaký jiný, prohlédněte si archivy na

www.packetstormsecurity.org . Hesla se po síti přenášejí v zakódované podobě, a

proto jejich odposlech nestačí. A právě zde přichází ke slovu výše zmíněný

l0phtcrack. Tento program byl vyvinut pro prolamování hesel NT. Systémy Windows

2000/NT ukládají svá hesla do SAM (Security Account Manager, obdoba unixového /

etc/shadow). Získání tohoto souboru není snadné, neboť je stejně jako v UNIXu

chráněn několika opatřeními. Jedním z řešení je restartovat systém, zavést jiný

operační systém, připojit souborový systém a soubor zkopírovat na disketu,

případně jiné záznamové médium. O prolomení hesla se poté můžete v klidu

pokusit na vlastním systému. Tato metoda je však platná jen v případě, že má

útočník k systému fyzický přístup. Hesla k účtům lze získat i jinými způsoby

(některé z nich jsme si vyjmenovali v minulých dílech seriálů o bezpečnosti),

například podvedením uživatele, krádeží záznamníku atd. Další způsoby získání

hesla jsou nad rámec tohoto dílu.





Zvyšování privilegií



Dejme tomu, že se nějakému útočníkovi podařilo získat uživatelský účet na vašem

serveru. Zřejmě nezůstane jen u něj a pokusí se povýšit sám sebe na úroveň

administrátora systému. Naštěstí mnoho možností nemá (pokud je systém dobře

nakonfigurován, což ale ve většině případů není). Zřejmě nejjednodušší je

využít nějaké známé chyby systému. Tyto chyby se objevují téměř pravidelně a je

třeba je včas opravovat. Další možností je využití chybné konfigurace systému.

Systémy mají často prázdná hesla, špatně nastavená přístupová práva nebo staré

verze programů. Proti tomuto zneužití není lehké se bránit. Nejlepší obranou je

samozřejmě administrátor, který svému systému rozumí a dobře se o něj stará.

Bohužel snadnost ovládání těchto systémů dovoluje dělat administrátora téměř

každému, kdo má alespoň mírně nadprůměrné znalosti operačního systému Windows.

Často jsou takovíto lidé zaměstnáváni na důležitých postech, a odtud plyne i

velké množství bezpečnostních incidentů. Další možností zvýšení privilegií je

oklamání právě takového administrátora. Takovémuto člověku není složité

podstrčit nějaký skript nebo program, který on bezhlavě spustí. Divili byste

se, kolikrát se tento postup podařil. Proto nikdy na serverovém systému

nespouštějte žádné programy, pokud jste přihlášeni jako administrátor, a

zejména ne programy, o jejichž původu máte pochyby. Zvýšení privilegií ale není

jediným cílem útočníka. Pokud se útočníkovi podaří systém ovládnout, zřejmě si

bude chtít zachovat přístup i nadále. Cest je několik.





Rootkit



Instalace rootkitu (původ tohoto slova hledejte v unixovém světě) je

nejlogičtější věcí, kterou může útočník udělat. Jedna se o program, který

dovoluje útočníkovy ovládat systém způsobem, který je těžko zjistitelný i pro

samotného správce systému (pokud útočník nedělá hlouposti, kterými na sebe

upozorní). Rootkit, který můžete sehnat na adrese www.rootkit.com, dokáže

například ukrývat klíče v registru, přesměrovávat programy, skrývat procesy

atd. Naštěstí většinu útočníků nebaví server jen dobýt. Většina z nich dá o své

přítomnosti vědět, například změní obsah webové stránky, smaže několik souborů

nebo naopak na server nějaké soubory umístí. Tyto aktivity by měli být celkem

snadno odhaleny (zvláště v případě změny webové stránky :). Ale rootkit není

jedinou možností úplné kompromitace systému a udržení si přístupu k systému.

Navíc není rootkitů pro Windows NT/2000 zas tolik. Existuje ještě několik

možností. Uveďme si je ve zkratce.





Backdoor



Toto je nejčastější způsob, jak si udržet přístup do systému. Většina backdoorů

je notoricky známá. Patří sem například Netbus, BackOriffice, SubSeven a další.

Většinu těchto programů identifikuje kvalitní antivirový program.





Modifikace SAM



Přidat nějakého uživatele do administrátorské skupiny je také oblíbenou

činností (stejně jako UNIX a magické UID 0). Proto tyto skupiny pravidelně

kontrolujte a snažte se odhalit všechny účty, které nemají v těchto skupinách

co dělat.





Zotavení systému



Pokud zjistíte, že byl váš systém napaden, budete jej muset vrátit do původního

stavu. Povíme si, jak takové zotavení vypadá. Nejjistější způsob je kompletní

přeinstalace celého systému, zvláště pro začínající správce, kteří svým

systémům ještě příliš nerozumí a mohli by nějaký backdoor přehlédnout. Ale i

při nové instalaci je třeba dávat na několik věcí pozor. Především je třeba mít

vytvořeny kvalitní zálohy. Uživatele byste jistě nepotěšili, kdybyste jim

kompletně smazali všechna jejich data. Dejte pozor na to, abyste nikdy

nezálohovali binární programové soubory. Tyto soubory mohou být (a velice často

bývají) infikované, a jejich následné obnovení ze záloh by vás dostalo do

naprosto stejné situace. Další důležitou věcí je stažení a uložení všech záplat

vydaných výrobcem. Tyto záplaty nainstalujte ihned po instalaci systému.

Nepřítomnost některé záplaty by mohla umožnit útočníkovi předchozí přístup k

systému. Další věcí, která by měla následovat, je změna všech hesel. Nikdy

nemůžete vědět, kolik hesel se útočníkovi podařilo získat. Možná, že jeden z

uživatelských účtů mohl být vstupní branou do systému.





Hodnocení



Možná máte z několika předchozích řádků pocit, že systémy Windows jsou celkem

bezpečné, a že je není možné ohrozit. Částečně je to pravda. Podíváme se na to,

proč. Pokud je systém dobře nakonfigurován, a je o něj dobře postaráno, stává

se celkem bezpečnou věcí. Tyto systémy však mají i své nevýhody. Jednou z nich

je to, že pokud se objeví nějaká bezpečnostní slabina systému (ne aplikace),

postihuje všechny systémy na celé Zemi, neboť jsou všechny stejné (ne jako ve

světě UNIXu, kde platí zásada: co systém, to jiné jádro a jiné služby :). To

dává docela dobré šance různým červům, virům a jiným podobným programům. Další

nevýhoda se týká bezpečnostních záplat. Vydávání záplat je zcela závislé na

výrobci programu. Stalo se již několikrát, že se výrobce, ač o chybě věděl,

neobtěžoval s vydáváním záplaty (www.guninski.com). Navíc pokud nemáte k

dispozici zdrojové kódy, těžko si nějakou záplatu napíšete sami. S uzavřeností

zdrojových kódů je spojeno ještě několik věcí. Operační systémy můžeme také

dělit podle toho, zdali jsou otevřené nebo uzavřené. Každá skupina má svoje

výhody i nevýhody. Například u otevřených systémů je výhodou, že zdrojový kód

prošel letitým auditem několika tisíc programátorů a byl testován v

nejrůznějších podmínkách a situacích. To z otevřených systémů udělalo bezpečné

a stabilní systémy, které jsou schopny odolat i podmínkám, jež mají k normálním

hodně daleko. Navíc pokud se objeví nějaký problém, nejste odkázáni na jednoho

výrobce. Na druhou stranu mají tyto systémy i svoji nevýhodu. Tím, že je k

dispozici zdrojový kód, je případnému útočníkovi umožněno využít nějaké chyby k

ovládnutí celého systému. Asi nejlepším příkladem pro tento druh chyb je

přetečení paměti. Tento způsob útoku využívá nekvalitně napsané programy

(vstupy). Tím, že je útočníkovi dán k dispozici zdrojový kód, ví útočník přesně

jak program pracuje, kterou část paměti používá a umožňuje mu převzít nad

programem kontrolu a donutit ho vykonat vlastní příkazy. K tomuto tématu se

vrátíme v příštím díle našeho seriálu.



Na druhé straně jsou tu systémy, jejichž zdrojový kód přístupný není. Nevýhodou

takových systémů je, že prošly auditem jen několika vývojářů, a nemusí v nich

být nalezeny a opraveny některé nedostatky (což se často projevuje na stabilitě

a spolehlivosti těchto systémů). Rovněž nemáte možnost opravit nějakou chybu či

přizpůsobit kód programu svým potřebám. Výhodou těchto systémů ale je, že jsou

celkem odolné proti útokům přetečení paměti. Ale ne zas tak úplně. Útočník je

schopen využít chyby v programu, ale ne způsobem, jako u systémů otevřených.

Tím, že nezná kód a neví jak pracuje, velice těžko přinutí systém k vykonání

vlastního příkazu. Velice častým jevem je pád takového programu. Proto jsou

také systémy Windows nepoměrně náchylnější k útokům typu DoS. My se teď na

některé z nich podíváme. Nástroje pro provádění takových útoků nebudeme uvádět

záměrně, protože mohou, zejména v rukou škodolibého (a ne příliš

inteligentního) útočníka způsobit velké škody.





Flood (Záplava)



Zaplavování systému velkým množstvím požadavků je asi nejčastějším typem DoS

útoku. Záplavy jsou nejčastěji vedeny po síti a zde je příklad několika z nich.

ICMP flood



Tento typ záplavy může způsobit téměř každý uživatel Linuxu. Jednou z mála

podmínek je, aby byly tyto záplavy vedeny proti systému, který je připojen k

síti stejnou nebo menší přenosovou rychlostí. Standardní unixová utilita ping

obsahuje volbu -f (flood). V praxi to znamená, že je vyslána žádost protokolu

ICMP Echo Request. Při normálním použití tohoto příkazu systém, který požadavek

vyslal, čeká na odpověď. Volba -f způsobí odesílání paketů nejvyšší možnou

rychlostí, aniž by bylo čekáno na odpověď. Navíc tu máme další skvělý parametr

a tím je -s (size), který nám dovoluje nastavit velikost paketu. Systémy s

Windows jsou na tento druh útoku obzvláště háklivé. Ve většině případů dojde k

„zamrznutí“ systému, případně i k jeho pádu (zejména u systémů 9×). Řešením je

blokace ICMP paketů na firewallu nebo směrovači. Pokud zakážete protokol ICMP

úplně, znepřístupníte si některé služby (ping, traceroute), ale budete odolní

proti takovýmto druhům záplav.





UDP flood



Princip tohoto útoku je obdobný, akorát namísto protokolu ICMP využívá

protokolu UDP. Jelikož je protokol UDP dosti primitivní a zastaralý (což není

nutně špatná vlastnost), lze celkem snadno falšovat IP adresu odesilatele. U

DoS útoků to útočník ocení dvojnásob, neboť tyto druhy útoku jsou celkem snadno

vysledovatelné. Obrana proti těmto útokům spočívá rovněž ve správném nastavení

firewallu a služeb.





Smurf



Tento druh útoku je ve své podstatě primitivní, nicméně je celkem elegantní.

Při tomto útoku zasílá útočník ICMP Echo Request (ping) ze zfalšované IP adresy

na několik (desítek/stovek) strojů. Všechny tyto stroje pak odpoví na udanou

adresu a vyřadí tak z provozu stroj, jehož adresa byla použita útočníkem.

Útočník tak pouze využije potenciálu sítě. Řešení opět spočívá ve správném

nastavení směrovače a firewallu.





SYN flood



Tento druh útoku je jedním z nejnebezpečnějších. Jestliže znáte protokol TCP,

určitě víte, že při navázání spojení je klientem odeslán serveru paket SYN,

odpovědí je pak paket SYN/ACK a klient opět potvrzuje přijetí paketem ACK. SYN

flood využívá toho, že server rezervuje po přijetí SYN paketu určitou část

svých systémových prostředků pro předpokládané spojení. Pokud útočník podstrčí

serveru falešnou IP adresu, server se odpovědi nikdy nedočká a neustále udržuje

spojení otevřené a část svých prostředků rezervovaných.





Distribuované DoS



Tyto útoky jsou smrtící a lze se proti nim bránit jen velice těžko. Naštěstí

však od útočníka vyžadují, aby měl velké množství systémů pod kontrolou. A

pokud má někdo pod kontrolou několik desítek, stovek či tisíc systémů,

pravděpodobně bude velmi schopný a zkušený a na nějaké DoS útoky nebude mít

myšlenky, ledaže by tím sledoval nějaký důležitější cíl. Jak jsme již řekli,

vyžaduje tento druh útoku kontrolu mnoha systémů. Jde pak o jednoduché DoS

útoky, vedené však z mnoha systémů proti jednomu. Představte si, že by někdo

spustil příkaz ping -f -s 65000 vas.server.cz. Věc jistě nepříjemná. Ale

vezměte si, co by nastalo, kdyby byl tento příkaz spuštěn na tisícovce strojů

najednou? Pomocí tohoto útoku lze shodit i velké segmenty internetu, například

sítě nějakého ISP.





Nukery



Nukery jsou nejzákeřnější zbraní v rukou začínajících útočníků. Místo aby se

učili a studovali náročné a elegantní techniky, stahují z internetu bezhlavě

kdejaké utilitky, využívající momentálně známou chybu ve Windows NT/2000, s

pomocí nichž pak shazují jeden systém za druhým. K jejich používání není třeba

žádných znalostí. Naštěstí jsou takovíto útočníci často dost hloupí a

zanechávají za sebou spoustu stop, takže ze záznamů byste měli poměrně snadno

zjistit, kdo za útokem stojí.





Další druhy útoků



Útočit lze nejen po síti. Dají se podnikat útoky i proti procesorovému času

nebo diskovému prostoru, naštěstí však nejsou takovéto útoky příliš rozšířené

ani nebezpečné a lze se s nimi celkem snadno vypořádat.





Shrnutí



Používáte-li tedy jako server systém Windows NT/2000, zapamatujte si několik

věcí. Za prvé poznejte svůj systém. Čtěte veškerou dostupnou literaturu,

magazíny, webové stránky a další zdroje. Systém sledujte neustále. Měli byste

mít přehled o všech souborech a konfiguračních položkách. Sledujte záznamy

(logy). Z nich se často dozvíte co se se systémem děje a poznáte, když je něco

v nepořádku. Nesledování záznamů je velmi rozšířená, a útočníky pochopitelně

vítaná činnost. Systém pravidelně aktualizujte. Sledujte bezpečnostní

konference, přihlaste se k odběru bezpečnostních novin. Aplikujte včas všechny

opravy zveřejněné výrobcem. Stanovte si jasná pravidla a jich se držte. Pořiďte

si kvalitní firewall a pečlivě jej nakonfigurujte.



Tentokrát jsme udělali malou odbočku a podívali jsme se i na věci, které se

systémy Windows NT/2000 přímo nesouvisejí. Není to ale na škodu, neboť je

důležité poznat spoustu věcí, abychom porozuměli svému systému a věděli, co se

kolem něj děje nebo může dít.



V příštím dílu se podíváme na bezpečnost unixových systémů, zejména na systém

Linux. Ne nadarmo se říká, že Linux se stal hřištěm digitálního undergroundu.

Příště se dozvíte proč.





Všechny vaše rady, náměty na další články nebo seriál, názory a prosby opět rád

uvítám na adrese igm@centrum.cz.