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 použitém
souborovém systému. Zatímco systémy 9x 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 (9x). 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ů 9x. 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 9x 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 9x (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ů 9x). Ř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.