Bezpečnost a bezpečné programování 12. Útoky typu Denial-of-Service
Ing. Tomáš Zahradnický, EUR ING, Ph.D.
České vysoké učení technické v Praze Fakulta informačních technologií Katedra počítačových systémů
Příprava studijních programů Informatika pro novou fakultu ČVUT je spolufinancována Evropským sociálním fondem a rozpočtem Hlavního města Prahy v rámci Operačního programu Praha — adaptabilita (OPPA) projektem CZ.2.17/3.1.00/31952 – „Příprava a zavedení nových studijních programů Informatika na ČVUT v Prazeÿ. Praha & EU: Investujeme do vaší budoucnosti T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
1 / 15
Útoky typu Denial-of-Service I Útok typu Denial-of-Service (DoS) Za DoS útok považujeme takový útok z jednoho zdroje na počítač, aplikaci, sdílený prostředek, službu, atd. s účelem učinit cíl útoku částečně nebo zcela nedostupným. Lidé často tyto útoky podceňují. Jde o typ útoku, proti kterému se velmi špatně brání — dokážete si představit, kde všude lze vaši aplikaci napadnout tímto útokem? Typicky jde o: útoky na stabilitu aplikace anebo i operačního systému; zahlcení CPU; zaplnění paměti; vyhladovění nejrůznějších prostředků; zahltit provozem celou šíři pásma síťové infrastruktury; T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
2 / 15
Útoky typu Denial-of-Service II Útoky na stabilitu aplikace anebo i operačního systému
Útoky, které způsobí pád aplikace → špatná kvalita aplikačního kódu.
Příklad — Ping of Death Maximální délka IP datagramu je 64 KB. Datagramy lze dělit do fragmentů a o jejich rozdělování a skládání se stará IP stack. Útok spočívá v tom, že útočník vytvoří tzv. raw IP socket, ze kterého pošle oběti fragmentovaný ICMP Echo datagram (ping), u nějž součet délky fragmentů přesahuje 64 KB, což u některých OS vedlo k přetečení bufferu a k pádu.
Příklad — NetBIOS OOB Data Port 139 využívají Windows pro NetBIOS Session protocol, který se používá pro sdílení souborů a tiskáren. Útočník pošle na port 139 packet s příznakem out-of-band (OOB), který vyžaduje přednostní doručení dat. Protože většina aplikací s tímto paketem nepočítá, dojde obvykle k pádu. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
3 / 15
Útoky typu Denial-of-Service III Zahlcení CPU
Příklad — Čtení dat z registrů/konfiguračního souboru Aplikace často čte data z registrů, nebo z konfiguračního souboru. Aplikace je pečlivě psána s ohledem na buffer overflow, a proto si její vývojář nejdříve zjistí množství dat k načtení. Pak alokuje buffer o dané velikosti do nějž načte data.
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
4 / 15
Útoky typu Denial-of-Service III Zahlcení CPU
Příklad — Čtení dat z registrů/konfiguračního souboru Aplikace často čte data z registrů, nebo z konfiguračního souboru. Aplikace je pečlivě psána s ohledem na buffer overflow, a proto si její vývojář nejdříve zjistí množství dat k načtení. Pak alokuje buffer o dané velikosti do nějž načte data. Jak se bude aplikace chovat, když útočník změní konfigurační soubor (nebo registrový klíč) tak, že nebo mít najednou 100 MB?
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
4 / 15
Útoky typu Denial-of-Service III Zahlcení CPU
Příklad — Čtení dat z registrů/konfiguračního souboru Aplikace často čte data z registrů, nebo z konfiguračního souboru. Aplikace je pečlivě psána s ohledem na buffer overflow, a proto si její vývojář nejdříve zjistí množství dat k načtení. Pak alokuje buffer o dané velikosti do nějž načte data. Jak se bude aplikace chovat, když útočník změní konfigurační soubor (nebo registrový klíč) tak, že nebo mít najednou 100 MB?
Příklad — Zacyklení adresářové struktury Naše aplikace podporuje zásuvné moduly a při startu je hledá v adresáři Plugins a všech jeho podadresářích.
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
4 / 15
Útoky typu Denial-of-Service III Zahlcení CPU
Příklad — Čtení dat z registrů/konfiguračního souboru Aplikace často čte data z registrů, nebo z konfiguračního souboru. Aplikace je pečlivě psána s ohledem na buffer overflow, a proto si její vývojář nejdříve zjistí množství dat k načtení. Pak alokuje buffer o dané velikosti do nějž načte data. Jak se bude aplikace chovat, když útočník změní konfigurační soubor (nebo registrový klíč) tak, že nebo mít najednou 100 MB?
Příklad — Zacyklení adresářové struktury Naše aplikace podporuje zásuvné moduly a při startu je hledá v adresáři Plugins a všech jeho podadresářích. Co se stane, když útočník vytvoří link (symlink, hardlink, junction point), pomocí kterého udělá v adresářové struktuře cyklus? Zacyklí se (DoS), spadne na přetečení zásobníku (Stack overflow), anebo pozná, že daný soubor je linka a bude ho ignorovat? T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
4 / 15
Útoky typu Denial-of-Service IV Zahlcení paměti
Příklad Naprostá většina OS používá virtuální paměť, aby mohl každý proces mít svůj vlastní adresní prostor a kvůli ochraně paměti. Úlohou správce paměti je pak mapovat stránky (virtuální) paměti do rámců ve fyzické — hlavní paměti (HP) a řídit jejich načítání/odkládání z/na disk. Když dojde volná kapacita HP, je třeba některé rámce HP uvolnit odložením stránek na disk (page-out) a uvolněné rámce naplnit z disku načtenými stránkami (page-in). Útočník způsobí to, že bude alokovat nové a nové bloky paměti a neustále do nich zapisovat. Tím způsobí to, že OS bude (neu)stále provádět page-in a page-outy, čímž naprosto degraduje rychlost OS.
Příklad — rozšíření Pokud by ještě útočník zaplnil místo na disku, bude celá situace ještě horší. Je váš program připraven na výjimku z new int[1]? T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
5 / 15
Útoky typu Denial-of-Service V Útok na prostředky I
Příklad Máme aplikaci, která komunikuje s ostatními aplikacemi. Pro tyto účely vytváři pojmenovanou rouru. Útočník se připojí k pojmenované rouře, čímž ji pro ostatní zablokuje. Připojení neuzavře a ponechá ho schválně otevřené a bude čekat, jestli spojení po nějaké době vyprší. Počítáte s takovou možností?
Příklad Ke kreslení do oknen na Windows lze použít Windows GDI. Tzv. GDI objekty (pero, štětec, řez písma, device context, . . .) jsou spravovány OS. Pokud je jich nedostatek, jsou požadavky na vytvoření nových objektů neúspěšné a dochází k DoS, protože program nemůže kreslit. Zkuste ve Windows XP spustit 300 instancí Solitaire :-). T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
6 / 15
Útoky typu Denial-of-Service VI Útok na prostředky II Jak dlouho čeká váš server na data? tomas$ time openssl s_client -connect www.gmail.com:443 -quiet depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA verify error:num=20:unable to get local issuer certificate verify return:0 read:errno=0 real 4m0.947s
Jak vidíme, trvá 4 min než nás server odpojí. Po tuto dobu má server alokovány prostředky pro spojení Toto byl jeden požadavek.
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
7 / 15
Útoky typu Denial-of-Service VI Útok na prostředky II Jak dlouho čeká váš server na data? tomas$ time openssl s_client -connect www.gmail.com:443 -quiet depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA verify error:num=20:unable to get local issuer certificate verify return:0 read:errno=0 real 4m0.947s
Jak vidíme, trvá 4 min než nás server odpojí. Po tuto dobu má server alokovány prostředky pro spojení Toto byl jeden požadavek. SYN flooding Předchozí útok vyžaduje provedení celého navázání spojení TLS. Tento útok zaplaví server pakety SYN (první paket navázání TCP spojení), na který má následovat odpovědní paket ACK (server → klient) a nakonec ACK (klient → server). IP datagram se SYN paketem má však obvykle podvrženou IP adresu (IP spoofing), takže ACK od serveru nejde k nám zpět a server čeká na finální potvrzení, dokud nevyprší timeout. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
7 / 15
Útoky typu Denial-of-Service VI Útok na prostředky II Jak dlouho čeká váš server na data? tomas$ time openssl s_client -connect www.gmail.com:443 -quiet depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA verify error:num=20:unable to get local issuer certificate verify return:0 read:errno=0 real 4m0.947s
Jak vidíme, trvá 4 min než nás server odpojí. Po tuto dobu má server alokovány prostředky pro spojení Toto byl jeden požadavek. Co kdyby jich bylo 1 000? SYN flooding Předchozí útok vyžaduje provedení celého navázání spojení TLS. Tento útok zaplaví server pakety SYN (první paket navázání TCP spojení), na který má následovat odpovědní paket ACK (server → klient) a nakonec ACK (klient → server). IP datagram se SYN paketem má však obvykle podvrženou IP adresu (IP spoofing), takže ACK od serveru nejde k nám zpět a server čeká na finální potvrzení, dokud nevyprší timeout. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
7 / 15
Útoky typu Denial-of-Service VI Útok na prostředky II Jak dlouho čeká váš server na data? tomas$ time openssl s_client -connect www.gmail.com:443 -quiet depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA verify error:num=20:unable to get local issuer certificate verify return:0 read:errno=0 real 4m0.947s
Jak vidíme, trvá 4 min než nás server odpojí. Po tuto dobu má server alokovány prostředky pro spojení Toto byl jeden požadavek. Co kdyby jich bylo 1 000 000 !? SYN flooding Předchozí útok vyžaduje provedení celého navázání spojení TLS. Tento útok zaplaví server pakety SYN (první paket navázání TCP spojení), na který má následovat odpovědní paket ACK (server → klient) a nakonec ACK (klient → server). IP datagram se SYN paketem má však obvykle podvrženou IP adresu (IP spoofing), takže ACK od serveru nejde k nám zpět a server čeká na finální potvrzení, dokud nevyprší timeout. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
7 / 15
Útoky typu Denial-of-Service VI Útok na prostředky II Jak dlouho čeká váš server na data? tomas$ time openssl s_client -connect www.gmail.com:443 -quiet depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA verify error:num=20:unable to get local issuer certificate verify return:0 read:errno=0 real 4m0.947s
Jak vidíme, trvá 4 min než nás server odpojí. Po tuto dobu má server alokovány prostředky pro spojení Toto byl jeden požadavek. Co kdyby jich bylo 1 000 000
000 !!!
SYN flooding Předchozí útok vyžaduje provedení celého navázání spojení TLS. Tento útok zaplaví server pakety SYN (první paket navázání TCP spojení), na který má následovat odpovědní paket ACK (server → klient) a nakonec ACK (klient → server). IP datagram se SYN paketem má však obvykle podvrženou IP adresu (IP spoofing), takže ACK od serveru nejde k nám zpět a server čeká na finální potvrzení, dokud nevyprší timeout. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
7 / 15
Útoky typu Denial-of-Service VI Útok na prostředky II Jak dlouho čeká váš server na data? tomas$ time openssl s_client -connect www.gmail.com:443 -quiet depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA verify error:num=20:unable to get local issuer certificate verify return:0 read:errno=0 real 4m0.947s
Jak vidíme, trvá 4 min než nás server odpojí. Po tuto dobu má server alokovány prostředky pro spojení Toto byl jeden požadavek. Co kdyby jich bylo 1 000 000 současně → DDoS
000 !!!
SYN flooding Předchozí útok vyžaduje provedení celého navázání spojení TLS. Tento útok zaplaví server pakety SYN (první paket navázání TCP spojení), na který má následovat odpovědní paket ACK (server → klient) a nakonec ACK (klient → server). IP datagram se SYN paketem má však obvykle podvrženou IP adresu (IP spoofing), takže ACK od serveru nejde k nám zpět a server čeká na finální potvrzení, dokud nevyprší timeout. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
7 / 15
Distribuované Denial-of-Service (DDoS) útoky I Distribuovaný Denial-of-Service (DDoS) DDoS útok je útok typu DoS, při kterém mnoho počítačů útočí současně na jeden cíl.
...
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
...
MI-BPR, 2011, Předn. 12
8 / 15
Distribuované Denial-of-Service (DDoS) útoky II Příklady DDos útoků Česká pošta, s.p./2010 Útok typu DDoS, který prakticky znemožnil přístup komerčních zákazníků k zásilkovým službám na několik dní. WikiLeaks/Revange/2010 byl napaden také DDoS. Server byl zahlcen obrovským množstvím požadavků tak, že doba odpovědi na požadavek začala růst nade všechny meze a webový server WikiLeaks se tak stal zcela nedostupným. V reakci na to byly servery některých amerických společností jako např. Mastercard a Amazon, které na nátlak americké vlády vypověděly WikiLeaks smlouvu, také napadeny, a to zastánci serveru WikiLeaks. Kybernetický útok na Estonsko/2007 Z nesčetného množství IP adres mířily požadavky na nejdůležitější servery Estonské republiky, zahrnující vládní servery, servery státní správy, servery záchranné služby, mobilních telefonních operátorů a dalších institucí. Množství těchto požadavků způsobilo zahlcení těchto serverů, jejich vyřazení z provozu a faktický kolaps státní počítačové sítě. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
9 / 15
Kdo a jak útočí? Při stahování pornografických materiálů, stahování nelegálního software, filmů, kliku na nevyžádaný link, linky a přílohy ve SPAMu, anebo i přímým útokem ze sítě Internet se často do počítače dostane trojský kůň. Trojský kůň v počítači zřídí zadní vrátka (nainstaluje root kit) a poskytne počítač útočníkovi k dispozizi. Z počítače se stává tzv. počítačová zombie/bot. Boty jsou často sdružovány do sítí, které označujeme jako BotNety. Boty/BotNety mohou být používány a/nebo pronajímány útočníkem pro různé účely, např.: DDoS Prolamování šifer hrubou silou Rozesílání SPAMu ...
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
10 / 15
Obrana proti (D)DoS útokům
Proti DoS útokům se lze těžko bránit. Filtrování síťového provozu na úrovni routeru. Povolte průchod jen nějakému typu provozu. Vypněte všechny nepotřebné síťové služby — zmenšete plochu pro útok.
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
11 / 15
Obrana proti útokům na síťový provoz I IP Spoofing
Součástí IP hlavičky datagramů je IP adresa odesílatele a IP adresa cíle. Adresa odesílatele je však v případě IP Spoofingu podvržena a obvykle nepochází z podsítě, ze které je doopravdy IP datagram odesílán. Řešení: Zavést filtrování komunikace. Aktivní síťové prvky nabízí možnosti filtrování komunikace. Filtry lze nastavit tak, že všechny IP datagramy, které nepocházejí z podsítě odesílatele, což IP datagramy s podvrženou adresou nebývají, nebudou routovány a budou zahozeny. Problém: Filtrování lze snadno udělat na úrovni poskytovatelů internetu, kteří zajistí že IP datagramy s podvrženými IP adresami budou odfiltrovány. Pokud máme komunikaci na síti Intranet, bývá filtrování obtížné. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
12 / 15
Obrana proti útokům na síťový provoz II Intrusion Detection [and Prevention] Systems (ID[P]S)
IDS je systém, který monitoruje síťový provoz a loguje a hlásí zjištěné podezřelé aktivity správci systému. je často součástí některého aktivního síťového prvku může být i jako aplikace verzi IDS, která se navíc pokouší některé útoky zastavit, nazýváme IPS.
Jsou dva základní přístupky rozhodování u IDS: signaturový — síťový prvek porovnává vzorky útoků (signatury) s aktuálním síťovým provozem. statistický — síťový prvek vyhodnocuje statistické anomálie v síťovém provozu.
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
13 / 15
Obrana proti útokům na prostředky Na aplikační úrovni
Používá-li náš software nějaké sdílené prostředky, které mohou být cílem DoS útoku, je vhodné zamyslet se nad použitím: Kvót — uživatelé našeho programu mohou použít dohromady maximálně N prostředků daného druhu. Zavedení kvót je poměrně jednoduché, ale je třeba mít na paměti, že je nutné dát správci aplikace možnosti nastavení kvót. Kvóty nastavené přímo ve zdrojovém kódu jsou problematické. Kvóty lze zavést jak na úrovni aplikaci, tak na úrovni jednotlivých uživatelů. Historie — uživatele a jejich spojení můžeme nepřijmout pro vyčerpání kvóty, anebo můžeme i danou session/uživatele odpojit. Pro odpojovací účely je vhodné si zřídit tabulku obsahující historii činnosti uživatelů a stavů (byl-li například klient již autentizován, z jaké sítě se připojuje, je-li session aktivní, atd.). Na základě záznamů v tabulce pak můžeme efektivně vybrat kandidáta na odpojení. T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
14 / 15
Bibliografie
Howard M., LeBlanc D.: Writing Secure Code, 2nd edition, Microsoft Press, 2003. Graves K.: CEH: Certified Ethical Hacker Study Guide, Sybex, 2010.
T. Zahradnický (ČVUT FIT)
Útoky typu Denial-of-Service
MI-BPR, 2011, Předn. 12
15 / 15