„Kód, který takto pracuje, nedostatečným způsobem kontroluje zdrojovou a cílovou adresu monitoru, čímž může dojít k přepsání části paměti uživatelem. To lze využít k vložení kódu do monitoru, který umožní převzít ovládání nad strojem.“ Pojem „monitor“ je v daném případě (přece jen jde o téměř čtyřicet let starý text) vnímat ve smyslu „kernel“.
Tak zní text CSTP. Lze jej označit svým způsobem za vizionářský, protože dlouhé roky se buffer overflow považoval především za programátorskou chybu než za příležitost k útoku.
Její zneužití totiž není úplně triviální (dnes už to díky různým „studijním kódům“ zveřejňovaným na internetu neplatí, ale dříve vyžadovalo skutečně hluboké znalosti architektury softwaru a programování. Však také skutečné a masové zneužívání buffer overflow přišlo až téměř třicet let po výše uvedené studii!
To ale neznamená, že bychom po tuto dobu žili ve světě bez buffer overflow. K několika zaznamenáníhodným případům zneužití došlo, ovšem byly to výjimky potvrzující pravidlo – v žádném případě o masové nasazení.
Příběh začíná…
První skutečné zneužití chyby buffer overflow nastalo v roce 1988, a to ve slavném škodlivém kódu Worm (Červ) Roberta T. Morrise z Cornell University, který dal ostatně pojmenování celé kategorii malwaru.
Program Worm měl pouhopouhých 99 řádků kódu, přičemž využíval několika nedostatků tehdejšího internetu. A také nedokonalosti Unixu, kdy funkce finger umožňovala vyvolat stav buffer overflow. Worm tak přebíral kontrolu nad napadeným systémem a při absenci jakýchkoli bezpečnostních prvků se začal masově šířit.
Výsledkem bylo napadení zhruba šesti tisíc počítačů. Podle dnešních měřítek je to samozřejmě směšně málo, ale musíme si uvědomit, že tehdy šlo o plných osm procent strojů připojených do sítě. Z hlediska procentuálního zavirování všech připojených počítačů Worm nezískal už nikdy konkurenta.
Jako perličku uvádíme, že buffer overflow byl kolem roku 1983 využíván v běžných komerčních programech pro C64, kde umožňoval převzít kontrolu nad systémem. Zde ovšem neměl škodlivou funkci, v daném případě šlo o záměr autorů – a de facto velmi násilné provedení bohulibého záměru.
Podle některých informací podobnou techniku používal už koncem sedmdesátých let také Apple II (to se ale dnes už nedají hodnověrně ověřit). Jak vidno, postup dnes jednoznačně považovaný za nekorektní svého času přispěl k rozvoji ICT.
Následně se ovšem na buffer overflow téměř zapomnělo. Až v roce 1995 jej musel „znovuobjevit“ Thomas Lopatic, který o problému informoval s velkou slávou v bezpečnostním bulletinu Bugtraq. Dokonce i mnohé osvícené hlavy uznale pokyvovaly, že jde o zásadní varování – a jen několik pamětníků připomnělo, že koncept je teoreticky starý 23 let a prakticky nejméně sedm let. I to svědčí o tom, jak málo pozornosti bylo fenoménu buffer overflow svého času věnováno.
Rozmach ataků
Podruhé ale už myšlenka nezapadla. Svědčí o tom třeba velmi podrobný článek Eliase Levyho (aka Aleph One) publikovaný v časopise Phrack pod názvem „Smashing the Stack for Fun and Profit“ (Rozbíjení zásobníku pro zábavu i zisk).
Problém nepojal jako varování, ale krok za krokem rozebral praktické aspekty zneužití buffer overflow. Zatímco dosud mohli tyto útoky provádět jen lidé s vysokou úrovní znalostí problematiky, nyní si mohl buffer overflow vyzkoušet opravdu každý. To mělo za následek obrovský rozmach útoků v následujících letech.
Za připomenutí také rozhodně stojí událost z roku 2001, kterou známe pod jedním slovem – CodeRed. Celosvětově jím bylo napadeno pomocí buffer overflow (na problém přitom již několik týdnů existovala záplata) za méně než čtrnáct hodin 359 tisíc počítačů. Způsobené škody byly přesto vyčísleny v řádu 2,6 miliardy dolarů.
Další globální útok zneužívající buffer overflow pak přišel v roce 2003 a měl podobu internetového červa Slammer, který se mimochodem stal nejrychleji se šířícím kódem v historii počítačů. Během pouhých deseti minut dokázal napadnout devadesát procent všech napadnutelných počítačů – těch bylo asi 75 tisíc.
V průběhu první minuty šíření přitom dokázal zdvojnásobit počet napadených počítačů během každé 8,5 sekundy (pro srovnání: populace CodeRedu se zdvojnásobila každý 37 minut).
V roce 2003 potkal problém buffer overflow také herní konzoli Xbox. Technika umožnila instalovat nelicencovaný software (nemuselo jít jen o aplikace pirátské, ale také vlastní výroby) bez nutnosti provádět hardwarové modifikace (modchips), které jinak něco podobného též umožňovaly. Později podobný problém postihl i Playstation 2 (PS2 Independence Exploit) a nejnověji Wii.
Zvláště výrobci operačních systémů vnímají buffer overflow jako zásadní problém a snaží se k němu v poslední době postavit čelem. Už Windows XP měla možnost zapnout mód DEP (Data Execution Prevention), kdy bylo systému podáno při neoprávněné instrukci přerušení.
Visty pak používají další trik: moduly v paměti jsou náhodně rozmístěny, takže útočník nemůže odkazovat na instrukce „push & ret“.
Buffer overflow je dnes vnímán jednoznačně jako programátorská chyba. Teoreticky by tak neměl být problém jej zkrotit, ovšem tlak na rychlé publikování softwaru stejně jako čím dál větší množství méně zkušených programátorů vedou k tomu, že statistiky týkající se tohoto problému soustavně rostou...