Techniky a postupy obrany

Na síti na nás číhá spousta nebezpečí. Existují tisíce aplikací, které mohou
být teoreticky i prakticky zneužity. Některá nebezpečí lze poměrně snadno
eliminovat například dodržováním elementárních bezpečnostních zásad, jako jsou
silná hesla nebo aktuální verze softwaru. Existují však i ohrožení, která se
eliminují poměrně těžko a jejich odhalení není vůbec snadné. O těchto
nebezpečích bude dnes řeč.

Většinou jde o útoky, které využívají samotného protokolu TCP/IP. Tento
protokol je starý přes 30 let a postupem doby se ukázalo, že ne vše je navrženo
a vymyšleno správně. Musíme však brát v potaz, v jakých podmínkách byl protokol
TCP/IP navržen a stvořen. Při jeho vývoji se ani zdaleka nepočítalo s tím, že
za několik desítek let bude počítačová síť celosvětová, se stamiliony
uživatelů. Ale nyní již k samotným nebezpečím. Je však také třeba zdůraznit, že
při rozumné míře obezřetnosti a dodržení některých pravidel lze eliminovat i
tato ohrožení.

Sledování síťového provozu

Pro sledování síťového provozu se vžilo anglické označení sniffing (česky
"čmuchání"). V podstatě jde o zachytávání a analýzu síťového provozu. My se
nyní podíváme na princip a podmínky, za kterých je tento druh útok možný.
Především je třeba zdůraznit, že se tento typ útoků týká v převážné většině
sítí LAN. Další podmínkou je, aby síť nepoužívala přepínané spojení (toto
pravidlo se dá obejít, ale k tomu až za chvíli). Nyní si ukážeme, jak v takové
síti LAN probíhá komunikace. Všechna data, bez ohledu na to, komu nebo od koho
jsou určena, procházejí přenosovým médiem (kabelem) v seskupení nazvaném rámec.
Každý rámec je určen konkrétní MAC adrese, což je adresa každé konkrétní síťové
karty, jež je u většiny karet neměnná a byla kartě přidělena výrobcem. Každá
karta na stejném segmentu sítě přijme každý rámec, který přenosovým médiem
prochází a zjistí, zda je určen pro ni. Pokud ano, předá tento rámec ke
zpracování vyšší vrstvě. Pokud ne, je rámec ignorován. Může nastat ještě jedna
situace a sice taková, kdy je rámec určen každé MAC adrese (broadcast). O tom,
jak se to dá zneužít, si povíme za chvíli.

Dejme tomu tedy, že se ze svého počítače, který je součástí nějaké LAN,
připojujete k místnímu poštovnímu serveru. Zadáte uživatelské jméno, heslo, bez
problémů si stáhnete poštu. V tu chvíli vás ani nenapadne, že by vaše heslo
nebo vaši poštu mohl číst kolega vedle u stolu nebo někdo na druhé straně
zeměkoule. Možné to však je. Zmíněný kolega to mohl provést naprosto lehce.
Existují totiž programy, které umožňují čtení rámců i v případě, že jsou určeny
pro jinou MAC adresu. Takové programy se nazývají sniffery. Stačí takový
program nainstalovat a spustit, zbytek již program provede sám. Pro zdatného
programátora by nebylo napsání podobného programu vůbec těžké. Program přepne
síťovou kartu do takzvaného "promiskuitního" modu a sleduje a analyzuje veškerý
provoz v daném segmentu sítě. Existují jednoduché sniffery, jako je například
unixový Tcpdump, až po velmi sofistikované, jako je třeba Hunt. Sniffery však
neslouží jen útočníkům k hádání hesel nebo sledování provozu, často je
používají i správci sítě, a identifikují a diagnostikují tak chyby nebo potíže
v síťovém provozu. Dobrými nástroji k takové činnosti jsou například Ethreal
nebo Snort. My se však zaměříme na sniffery, které bývají používány útočníky a
povíme si, jak se proti nim bránit. Zřejmě nepoužívanější a nejpropracovanějším
snifferem je Hunt. Jde o velmi sofistikovaný nástroj, který umí ještě spoustu
dalších věcí, než je sledování provozu. Nyní se ale zaměříme na jeho možnosti,
pokud je použit jako sniffer. Tento program lze nastavit tak, aby na lokální
síti sledoval provoz, analyzoval jednotlivé rámce a vyhledával v nich řetězce
jako USER nebo PASS. Tímto druhem útoku jsou zranitelné protokoly, které
nešifrují svou komunikaci. Mezi takové protokoly patří například SMTP, POP,
FTP, Telnet a další. Obrana proti Huntu se tedy nabízí sama šifrování. Pokud
provoz šifrujeme, budou útočníkovi veškerá data k ničemu, neboť je nebude moci
přečíst. Nejvhodnější alternativou jsou zřejmě SSH a SSL. Proto je vhodné
nahradit stávající služby, které používají textová hesla. Někdy je to celkem
obtížné, a ne každý protokol má šifrovanou alternativu. Většina uživatelů se
navíc nebude chtít učit "něco nového". To je ale problém vedení podniku. Pro
nás je důležitý závěr, že pokud nechceme, aby někdo mohl sledovat náš provoz,
musíme šifrovat. Jistým řešením by bylo i použití přepínaných sítí, ale náklady
na změnu by jistě nebyly malé. Navíc lze provoz sledovat v jistých případech i
na přepínaných sítích, takže toto řešení není stoprocentní.

Musíme ale také vědět, kdo se pokouší provoz sledovat. Pokud je to někdo z naší
lokální sítě, obrana je celkem obtížná. Existují však programy, jež dokáží
nalézt v síti karty, které jsou v promiskuitním modu.

Sniffer však na některém počítači vaší LAN může nainstalovat i nějaký vetřelec
z venku. Pokud se mu podaří nabourat se do vaší sítě, pravděpodobně tak i
učiní, neboť není snazší cesty jak získat velké množství různých uživatelských
jmen a hesel. Nejlepší obranou zde je zabezpečit vaši síť tak, aby se do ní
nikdo nedostal a nemohl tak instalovat sniffer.

DNS

DNS (Domain Name Service) je jedna z nejdůležitějších služeb, které můžeme v
prostředí sítí nalézt. Tato služba se stará o převod doménových jmen na IP
adresy a opačně. Tato služba denně usnadňuje život milionům uživatelů (některým
i nevědomky :). Každý objekt (server, router), který je součástí nějaké sítě
založené na IP (intranet, internet), má jedinečnou identifikaci. Touto
identifikací je jeho IP adresa. Jde o číslo ve tvaru xxx.xxx.xxx.xxx. Například
tedy 192.168.1.1. Toto číslo je jedinečné a nemohou ho v jednu chvíli sdílet
dva objekty připojené do sítě. Tento jednoznačný identifikátor má však i svou
jmennou alternativu, například http://www.firma.cz. A právě o převod mezi
těmito dvěma identifikátory se stará DNS. Jistě je pohodlnější pamatovat si
adresy jako http://www.pcworld.cz nebo http://www.google.com než jakousi
"směsici" čísel. Výklad fungování DNS ale není v rámci našeho článku, proto se
podíváme, jak se dá DNS zneužít.

Falšování DNS

Falšování DNS (DNS spoofing) je poměrně nebezpečné. K jeho provedení je však
třeba splnit několik podmínek. Předně je třeba, aby útočník mohl sledovat váš
síťový provoz (viz výše). Pokud má přístup do vaší LAN, může na svém (nebo
ovládnutém) stroji spustit program, který odchytává všechny DNS dotazy a snaží
se na ně odpovídat podle útočníkova záměru. Cílem je tedy podvrhnout DNS
odpověď, a přesměrovat tak hosta na jiný systém. Útočník má například někde na
síti server, který je přesnou kopií nějakého, dejme tomu webového e-mailového
serveru. Na první pohled nerozeznatelný od originálu. Jeho cílem je přesměrovat
všechny uživatele vaší sítě právě na tento server. Pokud tedy nějaký uživatel
zadá ve svém prohlížeči adresu http://www.webmail.něco, jenž má ve skutečnosti
adresu 192.168.1.1 (tuto adresu mít ve skutečnosti nemůže, neboť jde o adresu z
bloku privátních adres určených k použití na sítích nepřipojených přímo do
internetu, nicméně jako ilustrace stačí), pokusí se útočníkův program
podvrhnout odpověď DNS serveru a odpoví klientovi tak, že server
http://www.webmail.něco má adresu 192.168.1.100. Pokud tato odpověď dorazí k
uživatelově systému dříve něž odpověď skutečného DNS serveru, má útočník
vyhráno. Jak se tedy proti tomuto druhu útoku bránit? Prvním a univerzálním
pravidlem je opět nepouštět útočníka do sítě. Pokud nebude mít přístup do sítě,
nezmůže nic. Chová-li se takto některý z legitimních uživatelů sítě, je řešením
vyhledávač snifferů. Existuje i další možnost a tou je použití DNS serveru,
který podepisuje své odpovědi.

Další zneužití DNS

Existuje ještě jeden druh útoku, jímž lze zneužít DNS server. Tento druh útoku
je však poměrně zastaralý a je účinný jen proti starším verzím DNS serveru BIND
(unixový DNS server). Nicméně někde se se staršími verzemi tohoto programu
stále ještě setkáváme, takže jen v krátkosti. Tento druh útoku se nazývá Cache
poisoning (otrava cache) a v principu jde o podvržení nějakých legitimních
odpovědí DNS. K tomuto triku nemusí mít útočník přístup do vaší sítě. Řešení je
velmi prosté používejte aktuální software.

Směrování a přeposílání

Směrování je vlastnost IP protokolu, která dovoluje určit, kudy se budou pakety
na své cestě sítí ubírat. Podmínkou však je, aby systémy, jež útočník uvede ve
své cestě, umožňovaly směrování. Pomocí směrování lze velmi snadno falšovat
pakety a získávat tak neautorizované informace. Řešením je vypnutí směrování
(Windows je standardně neumožňují, většina výchozích instalací Linuxu také ne).
Pokud směrování potřebujete, nastavte dobře ACL na všech vašich směrovačích.

Směrování naopak umožňuje útočníkovi přístup do vnitřní sítě, která může být
připojena pomocí jednoho systému a z okolního internetu nemusí být vůbec
viditelná. Podmínkou k tomuto útoku jsou špatně nastavená přeposílací pravidla,
proto vždy pečlivě tato pravidla zkontrolujte a otestujte.

Unášení relací

Unášení relací patří mezi pokročilejší metody útoku. Od útočníka vyžaduje
jistou dávku znalostí síťové komunikace. O to je tento druh útoku
nebezpečnější. Podmínkou je opět, aby útočník mohl sledovat síťový provoz.
Ideálním nástrojem k unášení relací je již několikrát zmiňovaný Hunt. Nyní se
podíváme, jaké dává útočníkovi možnosti, pokud se pokusí o únos relace.

Útočník spustí na svém stroji program Hunt a začne sledovat komunikaci mezi
dvěma systémy. Usoudí-li, že nastala vhodná chvíle k převzetí kontroly nad
spojením, pokusí se ji převzít. Pokud se mu to podaří, má nad spojením plnou
moc a cílový systém nezjistí, že komunikuje s někým jiným. Útočníkovi je tedy
dovoleno dělat vše, co mohl dělat původní vlastník spojení. Obrana spočívá opět
v použití šifrování a dobrém zabezpečení sítě.

Prostředník (Man in the middle)

Tyto útoky patří mezi méně sofistikované a lze se proti nim velmi lehko bránit.
Spoléhají totiž na uživatelskou netečnost a nedůslednost. Tyto druhy útoků lze
aplikovat i na šifrované protokoly jako SSH nebo SSL. Nejde však o chybu těchto
protokolů, jen o zneužití důvěry uživatelů.

SSH

Jak již vyplývá z názvu tohoto útoku, je principem udělat prostředníka ve
spojení. Útočník potřebuje zachytit úvodní spojení od klienta, poté se připojit
ke skutečném cílovému serveru a předstírat, že je koncový systém. Klient
nepozná, že komunikuje prostřednictvím třetího systému. Až na jednu, dost
podstatnou maličkost. Každý SSH server má svůj vlastní identifikační klíč. A
jelikož útočník tento klíč ve většině případů nemá, potřebuje tuto ochranu
nějak obejít. Nejčastěji učiní to, že si vytvoří klíč vlastní. To má ale za
následek, že pokud se klient k systému útočníka připojí, zobrazí se mu varování
o změně klíče. Tento útok tedy spoléhá na uživatelovu netečnost. Pokud uživatel
slepě odsouhlasí (nebo odkliká :)) všechna varování, nic už útočníkovi nebrání
ve sledování provozu. Pokud se vám tedy někdy objeví podobná hláška, zbystřete
a kontaktujte správce serveru. Společnými silami problém jistě odhalíte.

SSL

Útok s pomocí prostředníka lze aplikovat i na protokol SSL. Princip je naprosto
stejný. Tento druh útoku je však ze subjektivního hlediska ještě více
nebezpečný, neboť protokol SSL se používá v prostředí webu, kde se pohybuje i
velké množství nezkušených uživatelů, jež jsou z některých obrázkových
operačních systémů zvyklí slepě odkliknout každé okno, které se objeví. Proto
je důležité kontrolovat certifikáty SSL, zdali jsou podepsány oficiální
certifikační autoritou. Pozor by si měli uživatelé dávat zejména na
samopodepsané certifikáty.

Hesla

I když je vaše síť dokonale zabezpečena, uživatelé dodržují bezpečnostní zásady
a vše pečlivě kontrolujete, sledujete a analyzujete, stále ještě existuje
způsob, jak vaši síť napadnout. Většina serverů nabízí nějaké služby. Bez nich
by internet nebyl tím, čím je dnes. Přístup k těmto službám může být nabízen
přes síť a rozdílné skupině uživatelů. Některé služby můžeme zpřístupnit všem,
jiné jen někomu. Bez ohledu na to, komu službu nabízíme, vždy na ni může být
proveden útok přes síť. Útočník jistě zkusí spoustu jiných metod a triků, ale
pokud se ukáže, že je síť zabezpečena opravdu dobře a většina tradičních útoků
nepomůže, může se rozhodnout zaútočit na vaše hesla. Tento útok je poměrně
časově náročný a výsledky nejsou vůbec jisté, nicméně někdy je to poslední
metoda, jak se dostat dovnitř. Zaútočit na hesla lze na téměř všechny
protokoly, jež poskytují nějakou formu autentizace. Může jít například o SMTP,
POP, FTP, SSH a další. K tomuto útoku existují také desítky nástrojů. My se
nyní podíváme na různé metody hádání hesel a povíme si, jak se proti nim bránit.

Slovníkový útok

Slovníkový útok je nejpoužívanější metoda při hádání hesel. Základem úspěchu je
rychlý procesor, optimalizovaný program a rozsáhlý wordlist. Pomocí vhodného
programu lze útočit téměř na všechna hesla. Při hádání hesel však nemusí jít
jen o útoky přes síť. Hesla mohou být hádána i lokálně. To záleží na
požadavcích a možnostech. Principem je tedy vzít nějaké slovo, upravit ho do
vhodného tvaru (v závislosti na algoritmu) a porovnat jej s originálním heslem.
U síťových služeb je cílem toto heslo odeslat po síti (v jaké formě, záleží na
protokolu). Při slovníkovém útoku se jako potencionální hesla vybírají slova,
která jsou uložena v souboru. Nezkoušejí se tedy různé kombinace znaků. Některé
slovníky jsou opravdu rozsáhlé. Proto je dobré zvolit si heslo, které v takovém
slovníku obsaženo nebude. Nyní si povíme jak.

Tvorba hesla

Zkuste si zvolit nějaké libovolné heslo a někam si je napište. Provedeme test,
zdali jste heslo zvolili správně. Nyní budeme potřebovat slovník. Doporučuji
stáhnout si slovníky z adresy http://www.phreak.org/html/wordlists.shtml. Jde o
velmi rozsáhlou sbírku slovníků z nejrůznějších jazyků. Můžete si stáhnout
slovníky podle témat nebo jazyků. Doporučuji stáhnout všechny. Nyní je načase
zjistit, zda je vámi zvolené heslo součástí některého z nich. V UNIXu můžete
použít například grep mojeheslo slovnik. V prostředí Windows mě žádný podobný
příkaz nenapadá, takže budete muset použít svůj oblíbený textový editor (ovšem
za cenu jistého zpomalení). Pokud dostanete pozitivní výsledek, je vaše heslo
špatné. Pokud je ve slovníku nenaleznete, pravděpodobně jste zvolili dobře. Zde
je několik rad, jak vytvořit dobré heslo.

Heslo by mělo obsahovat:

- malé znaky anglické abecedy a-z
- velké znaky anglické abecedy A-Z
- číslice 0-9
- interpunkční znaky *, #, @, ] atd.
- minimálně 6 znaků


Heslo by nemělo obsahovat:

- jakékoliv slovo
- jakékoliv jméno
- kombinaci jména (slov) a číslic, například honza52
- údaje o vaší osobě přezdívka, jméno manželky atd.
- čísla vztahující se k někomu nebo něčemu
- datum narození kohokoliv, telefonní čísla, adresy atd.

Nyní si předvedeme postup, jak vytvořit dobré heslo. Vyberete si nějaký
oblíbený citát, výrok z filmu, jakoukoliv větu. My si vezmeme jako příklad
Senecův citát Nikdo se nerodí moudrým. Máme teď dostatek prostoru k tvorbě
hesla a k hraní si s čísly. Existují tisíce variant a záleží jen na vaší
tvořivosti a nápaditosti. Vezmeme například z každého slova jedno písmeno.
Dostaneme tedy nsnm. Pokračujeme dále. Nyní místo mezer mezi slovy doplníme
číslice. A nebudeme začínat jedničkou, ale například pětkou. Výsledek bude
n5s6n7m. To už je celkem slušné heslo. Kombinací by šlo vymyslet několik tisíc.
Místo číslic byste mohli doplňovat speciální znaky, z každého slova vybrat ne
první, ale druhé, třetí písmeno atd. atd. Důležité je, abyste byli schopni z
fráze heslo rekonstruovat bez pomoci tužky a papíru. Fráze slouží k tomu,
abyste si heslo snadno zapamatovali a nebyli nuceni si jej nikam poznamenávat.
Jistě, mohli byste si například z hlavy vymyslet heslo 6s&5@df, ale takové se
velmi špatně pamatuje. Navíc musíte brát zřetel na jedno ze základních
pravidel, které říká, že byste neměli jedno heslo použít dvakrát. Pokud tedy
máte zřízeno několik e-mailových adres, měli byste u každé z nich použít jiné
heslo. Mohlo by se stát, že by bylo vaše heslo prozrazeno (například pomocí
snifferu), a útočníkovi byste tak poskytli přístup do mnoha jiných systémů.