Známe je všichni. Přicházejí do našich mailboxů, zanechávají stopy v logfilech našich serverů, přetěžují poštovní servery, odstavují celé firemní sítě z provozu na desítky hodin. Někdy sráží na kolena samotné providery a webhostingové firmy.
Viry, červi, trojani
Obvykle bývají nesprávně označované jako viry. Jedná se však o zcela odlišného člena rodiny intruzivních programů. Podívejme se tedy na vypečenou rodinku blíže:
Viry - paraziti. Stejně jako jejich biologičtí kolegové nemohou existovat samostatně. Parazitují na existujících programových souborech, vkládají se do jejich kódu a stávají se jejich součástí. Nejčastěji se připojí na konec souboru a přesměrují na sebe startovní vektor z hlavičky souboru, takže virový kód se spouští spolu s napadeným programem. Jiné typy infikují boot sector počítače - speciální program umístěný na úplném začátku disku, mimo vlastní souborový systém. Princip je však stejný, a mnohé exempláře kombinují metody infekce. Obvykle se šíří v rámci napadeného počítače nebo v rámci síťových disků na které se z tohoto počítače dá zapisovat; mezi počítači se šíří obvykle disketami nebo spustitelnými soubory poslanými mailem; jsou popsány i případy viru jedoucího stopem na červu. Jedná se o velmi rozmanitou skupinu, starou více než 20 let; prvním exemplářem byl Apple Virus, jehož verze 2 byla napsána roku 1982 pro tehdy běžné počítače Apple McIntosh (předchozí verze 1 neopustila laboratorní podmínky, verze 3 byla napsána po úniku verze 2 "do volné přírody" a řešila problémy verze 2 s přílišným hladem po paměti). Roku 1987 se pak objevil virus LEHIGH, jehož hlavním maskováním byla jeho novost - jeden z prvních, neobvyklý, nikdo něco takového nečekal, další rok následoval Jerusalem-B, Brain - první virus pro MS-DOS, a pak již nové exempláře jen pršely. Jedním z úspěšných nových virů je Win32.CIH, známý též jako Černobyl. Viry jsou velmi rozsáhlá a velmi životaschopná rodina, bohužel mimo rozsah tohoto článku.
Makroviry - novější obdoba virů. Místo programů infikují datové soubory, jejichž formát podporuje makra - programový kód vložený do souboru; existují však i červí varianty. Pravidlem je využití funkce Autorun, která se spouští vždy při otevření dokumentu. Obvyklé zranitelné programy jsou Microsoft Word a Microsoft Excel. Novější verze těchto již varují uživatele pokud jsou v dokumentu přítomna potenciálně nebezpečná makra. Trochu to pomáhá.
Hoax viry - jejich zařazení mezi programy je sporné, neboť se nejedná o programy, ale obvykle o varování. Příkladem jsou varování před různými neexistujícími viry. Mechanismem šíření je přesvědčení uživatelů k rozeslání emailu všem, koho znají; obvyklou formou je pak děsivě vyhlížející zpráva o viru proti kterému neexistuje obrana, s uvedeným zdrojem, který má mezi "obyčejným lidem" nezasloužený respekt - typicky Microsoft, IBM, AOL, nebo jiná organizace podobného typu a velikosti. Typicky bez jakýchkoliv technických podrobností a bez odkazů na webové stránky s podrobnějšími informacemi. Variantami jsou verze založené na soucitu (za každý forwardovaný mail někdo s kým budete pravděpodobně mít soucit dostane $0.0X) nebo hrabivosti (za každý forward dostanete $X).
Trojané - též známí jako trojští koně. Postrádají vlastní šíření, obvykle simulují funkci nějakého dobře známého programu, nebo se tváří neškodně; často jako animace nebo jiný program, který zvědaví uživatelé pravděpodobně spustí. (Myslíte-li si, že lidé jsou opatrní, navrhuji experiment. Napište malý neškodný program, který bude animovat tančící prasata, a po svém spuštění vám pošle email že byl spuštěn, a pošlete jej uživatelům které si chcete vyzkoušet, s popisem, že se jedná například o animaci tančících prasat. Naprostá většina příjemců program spustí, mnozí jej ještě sami pošlou dál. Chcete-li být poněkud drsnější, počkejte na širší zavedení elektronických podpisů, a použijte takovýto program pro ukořistění kopie podpisového klíče. Nebo jakéhokoliv jiného souboru či certifikátu jehož umístění na cílovém počítači je známé. Není-li známé, může program i prohledat disk - trvá-li animace dostatečně dlouho k zabavení uživatele po nutnou dobu, nebo odštěpí-li se z programu část, jež se usadí v paměti a provádí svou práci na pozadí. Přesměruje-li na sebe trojan i zpracování stisků kláves, může pohodlně odchytávat hesla nebo i kompletní obsah komunikace.) Nemusíte ani psát svůj vlastní "krycí" program - stačí použijete-li již existující program a k němu připojíte tělo trojana metodou známou tvůrcům virů. Dnes existují i programy jež většinu práce oddřou za vás - například "Joiner".
Trojané jsou občas destruktivní; jedním z nich byl program prohlašující o sobě, že umí zapojit grafický mód na TTL monitorech (technicky nemožné), přičemž jeho akcí bylo vypsat "Gotcha, arf arf!" ("Dostal jsem tě, haf haf!") a smazat disk. Tento se obvykle šířil pomocí pirátských BBS; software zdarma občas nese riziko. Jiným obvyklým typem bývá login trojan - program vypadající jako login prompt počítače, čekající na uživatelské jméno a heslo - které po zadání uložil do souboru. V současnosti se v přírodě setkáme např. s programy Back Orifice, Netbus, nebo SubSeven, zprostředkující neviděný dálkový přístup k napadenému počítači a umožňující jeho dálkový monitoring a "správu". FBI má jejich obdobu kterou nazývá Magic Lantern, používanou při řešení případů, kdy podezřelí používají šifrovanou komunikaci, kterou není možné odposlechnout běžnými prostředky.
Logické bomby, miny - obdoba trojanů; zde je však destruktivní chování spíše pravidlem než výjimkou. Obvykle jsou vkládány do systému jeho tvůrci nebo správci, často jako pomsta za ukončení pracovního poměru. Z tohoto důvodu jsou v IT průmyslu výpovědi správcům systému obvykle udělovány náhle a bez předchozího varování. Nezoufejte však - logická bomba může tikat již během doby zaměstnání pachatele, každý měsíc kontrolovat výplaty, a pokud na seznamu výplat není již třetí měsíc její autor, spustit. V lepším případě likviduje data, v horším případě je jen pomalu modifikuje - poškozená data pak postupně nahrazují původní, a pokud jste nic nezpozorovali včas a nechali si přepsat pásky se zálohami poškozenými daty, máte problém.
Červi - konečně objekt našeho zájmu. Svou autonomií se podobají trojským koňům, svou tendencí se šířit patří k virům. Na rozdíl od trojanů (kteří se otevřeně tváří jako nové objekty a pouze dělají nějakou činnost navíc) se obvykle snaží vyhnout se pozornosti, alespoň dokud není pozdě - což může být i několik set milisekund postačujících k jeho rozeslání se dalším obětem. Mohou napadat klientské počítače (obvykle použitím emailu, jako např. I Love You, Klez, nebo Sircam) nebo servery (Lion, Code Red 1 a 2, Nimda, nebo nejnovější Linux.Slapper).
Imunologie
Základním pravidlem pro úspěšné šíření infekcí je dostatečně hustá subpopulace jedinců citlivých na infekci v populaci. Infikovaný jedinec musí přijít do styku s pokud možno co největším množstvím ostatních ještě neinfikovaných ale infikovatelných jedinců. Při splnění této podmínky může dojít k epidemickému šíření. Princip je podobný lavinové štěpné reakci.
Očkování proti chorobám nezajišťuje vždy úplnou imunitu. Je-li však imunní dostatečné procento populace, občasný výskyt onemocnění nehrozí přerůst v epidemii (redukce pravděpodobnosti setkání infikovaného jedince s citlivým neinfikovaným). Další metodou je zabránění přenosu infekce na neinfikované jedince; dle situace rouška, dezinfekce, kondom, či jiné vhodné prostředky - v případě počítačů nejčastěji odstraňování podezřelých souborů z e-mailů nebo ostatní metody specifické pro daný typ červa; obvykle odstranění nebo přejmenování souborů, které červ potřebuje ke své činnosti, nebo vytvoření souboru se stejným jménem a umístěním jako soubor, který červ vytváří, ale s přístupovými právy, které červ nemá - což i když už se červ dostane dovnitř stroje a spustí se, způsobí jeho selhání. Je to sice přístup podobný zalepování praskliny v trupu letadla izolační páskou - bezpečnostní díru to neodstraní, ale o něco málo to zlepší situaci, alespoň na těch několik desítek minut, které potřebujete na nastudování problematiky, stažení souborů, a odstranění otvoru - pokud si nemůžete dovolit na tu dobu odstavit servery nebo alespoň příslušné děravé služby. Pokud však něco takového musíte udělat, nejspíše jste něco přehlédli již dříve, neboť červi typicky využívají již nějakou dobu publikované bezpečnostní díry.
Anatomie červa
Stejně jako u většiny intruzivních programů, červi mají dvě základní části: nosič, zodpovědný za průnik červa do systému a další šíření, a náklad, zprostředkující eventuelní další funkce. Nosič často obsahuje části zodpovědné za ukrytí červa před detekcí.
Pro úspěšnost červa je nejdůležitější nosič. Algoritmy šíření zajišťují kontakt s pokud možno co nejvyšším množstvím zranitelných cílů v obvykle pokud možno co nejkratším čase - čím starší červ je a čím známější je, tím pravděpodobnější je, že cílové systémy budou chráněny, a tím se snižuje červova statistická úspěšnost. Příliš pomalí červi nestačí za svůj život zkontaktovat příliš mnoho potenciálních obětí, příliš rychlí červi naopak přetěžují Síť - čímž sami sebe zpomalují, ztrácejí efektivitu a zbytečně na sebe přitahují pozornost.
Důležitým faktorem je i červův náklad; destruktivní červi jsou proti červům "benigním" v nevýhodě, zejména pokud mají tendenci zničit svého hostitele dříve, než se stačí dostatečně rozšířit. (Opět paralela s biologickými patogeny - porovnejte rozsahy afrických problémů s AIDS a s hemorrhagickými horečkami jako Ebola; AIDS zabíjí hostitele po dostatečně dlouhé době k nakažení potenciálně stovek dalších hostitelů a distribuci po široké geografické oblasti, zatímco Ebola vzhledem ke své krátké inkubační době a rychlému průběhu většinou stačí zabít hostitele dříve, než tento opustí lokalitu, kde se nakazil.)
Váš červ je v poště
Nejjednodušší přístup k šíření mají červy emailové - pošlou se cíli poštou. Průnik do systému je jednoduchý - uživatel si je sám dobrovolně vyzvedne z poštovní schránky. Ke svému spuštění pak červ použije buď naivitu uživatele, nebo díru v poštovním programu; jedněmi z nejpoužívanějších - a nejděravějšími vůbec - jsou Microsoft Outlook a Microsoft Outlook Express. Zapamatujte si jejich výrobce; ještě se s ním setkáme.
Využití naivity uživatele je jednoduché, zejména díky zdánlivé uživatelské příjemnosti Windows. Ve standardní instalaci je vypnuto zobrazování souborových přípon u typů, které jsou systému známé, a spustitelné soubory mohou mít vlastní ikonu. To je sice pěkné a efektní a dokonalé a všechno a světový mír, ale vede to k situacím, kdy soubor LookAtMe.txt.exe se svojí ikonou nastavenou na standardní ikonu pro textové soubory je zobrazen jako LookAtMe.txt s odpovídající ikonou. Typická oběť, nevědomá si rozdílů, na soubor clickne, a místo prohlédnutí jej spustí. Následuje rozeslání se červa dalším obětem. Názvy souborů jsou obvykle voleny za účelem použití psychologických mechanismů k maximalizaci pravděpodobnosti jejich otevření (a spuštění). I pokud jsou přípony zobrazeny, běžní uživatelé si všechny nebezpečné varianty nikdy nezapamatují - .exe, .com, .pif, .scr, .lnk, .vbs, a doslova desítky dalších. Maskování přípony a falešné ikony jsou často využívány i trojskými koni; pozor, kdo vám co posílá přes ICQ. Samozřejmě, maskování přípon se dá vypnout, ale obyčejný uživatel obvykle ani neví, že to jde.
Některé červy ovšem nepotřebují ani spustit ručně. Díky bezmezné genialitě vývojářů Microsoftu využívají Outlooky ten samý subsystém pro zobrazení HTML kódu, který používá i Internet Explorer. Jeho bezpečnost v principu prakticky neexistuje a různá omezení byla postupně přilepována, jak se objevovaly otvory, které již ani marketingová mašinérie nemohla zahrát do autu. Někdo také dostal ten výborný nápad, že emaily by mohly být dekorovány různými fonty a barevnými texty a obrázky a zvuky a multimédii v plném rozsahu. Co je k tomu lepší než HTML? Renderovací subsystém z Internet Exploreru byl již nějakou dobu těsně integrován do operačního systému (další chyba), za účelem praktického znemožnění nebo alespoň ztížení jeho oddělení z Windows - samozřejmě z důvodů posílení pozice v antitrustovém řízení. Proč jej tedy nevyužít. I stalo se tak, a jak již to u této firmy bývá, nikdo se nestaral o následky. Scripty a vložené objekty v HTML jsou spouštěny takřka bez kontroly. A jak už to ve Windows bývá, MIME typ souboru uvedený v hlavičce emailu je ignorován a místo toho je k identifikaci použita jeho přípona. Je tedy možné propašovat soubor worm.scr s tvrzením že se jedná o typ audio/wav. Typy souborů pro otevření v subobjektech HTML stránky, v našem případě emailu, se samozřejmě nekontrolují také - jen se zavolá funkce Windows, která je má zobrazit. Tato funkce je "inteligentní", automaticky rozpozná typ souboru a vybere potřebnou akci - tedy v případě zmíněného souboru pašovaného jako audio/midi nikoliv korektní vyvolání Media Playeru nebo jiného MIDI přehrávače a jeho nakrmení souborem worm.scr (což by vedlo k odmítnutí souboru, nebo v nejhorším případě ke kakofonii pazvuků), ale rozpoznání souboru jako spustitelného a jeho vykonání se všemi důsledky.
Kterak ovšem přimět zobrazovací systém k otevření a zpracování souboru? Zde se nabízí HTML tag IFRAME. Relativně užitečný pro zobrazení jiné HTML stránky nebo objektu v rámci mateřské stránky, v emailové komunikaci ovšem používaný výhradně k zobrazení reklam a podobných zwěrstew wšelikých, a ke spouštění červů. Uzavřenost zdrojového kódu Windows nám samozřejmě neumožňuje selektivní odmítnutí jeho zpracování, jsme tedy vydáni na nemilost. Červu pak nic nebrání nést svůj program jako objekt vložený do stránky, spolu s vlastní HTML podobou mailu obsahující IFRAME o nulové velikosti, do kterého je červový program vložen. Pak již stačí jen otevřít email v předběžném zobrazení (Preview), a - Houstone, máme problém.
Technicky vzato, tento otvor je již zalepen, ovšem vzhledem k notorické velikosti a četnosti těchto záplat je jejich rozšířenost v přírodě spíše výjimkou než pravidlem - komu by se chtělo stahovat každý týden několik megabytů, navíc s rizikem že zmíněná záplata vyřadí z činnosti něco jiného. Většina počítačů tedy zůstává neočkovaná a zranitelná. I kdyby však nebyly - nezoufejte. Je zde nová, lepší, vynikající, inovativní technologie - ActiveX, bezpečnostními techniky často láskyplně přezdívaná "Sito". I ActiveX komponenty standardně dodávané s Windows mají četné díry, obvykle typu buffer-overflow (viz níže); a jelikož bývají digitálně podepsané samotným Microsoftem a tudíž považované za důvěryhodnou (heh) součást systému, bývají typicky povoleny v naprosté většině úrovní zabezpečení. Jediné co jakž takž pomáhá je proxyserver který poškozuje HTML tagy "IFRAME", "SCRIPT", "OBJECT", a "EMBED", a přejmenovává všechny podezřelé přípony souborů přilepením ".worm" nebo ".danger", které jsou pro Windows neznámé a tudíž se je nebudou snažit za každou cenu spustit - několik desítek řádek poměrně jednoduchého kódu. Je otázkou proč tak triviální řešení nenabídla jistá multimiliardová firma již na začátku - na přílišnou jednoduchost spouštění neznámého kódu a nebezpečnost aktivního scriptování v emailech byl Microsoft upozorněn již během časné fáze přípravy Windows 95, mnoha zdroji včetně bezpečnostních specialistů Lockheedu. Ovšem s arogancí jisté korporaci vlastní nikdo varováním nevěnoval pozornost a zranitelnosti byly prezentovány jako výhody ("Podívejte jak je jednoduché vytvořit tu a tu aplikaci!"). Nakonec miliardové škody zaplatí spotřebitelé, práci si oddřou jejich administrátoři, a Microsoft jako bonus shrábne licenční poplatky za "novější" verzi, s některými otvory odstraněnými a jinými přidanými - licenční ujednání je přeci zbavuje jakékoliv zodpovědnosti.
Díky převládající technologii používané k jejich šíření se poštovní červi nazývají souhrnným termínem OTD (Outlook-Transmitted Disease, Outlookem-přenášená choroba).
Po svém spuštění červ získá seznam ostatních cílů. Přímým postupem je vyplenění Adresáře, získání všech emailových adres které zde uživatel má nastřádané. Nepřímým a o to zákeřnějším postupem, který záskal na popularitě poté co přístup k Adresáři začal být lépe hlídán, je prohlédnutí mailboxů a dočasných souborů s čerstvě navštívenými webovými stránkami, a "sklizení" adres odtamtud. Pak následuje vlastní šíření. Červ se pošle na zmíněný seznam adres, obvykle pod jménem aktuální oběti (takže i když vám podezřelý soubor poslal někdo koho znáte, nemusí to znamenat že je neškodný). Vzhledem k běžným velikostem červů (často i 100 kB) a délce seznamu (desítky až stovky adres) pak dochází k silnému zatížení poštovních serverů. V okamžiku objevení se nového virulentního červa není výjimkou ani několikasetnásobný nárůst přeneseného objemu e-mailů.
Dobrým trikem používaným k maskování červa je falšování adresy odesílatele. Jak? Červ je svým vlastním SMTP serverem, o komunikaci s poštovním serverem se stará sám, pak má plnou kontrolu nad hlavičkami emailu kde je uveden odesílatel a všechny ostatní informace - které pak může zfalšovat k obrazu svému. Mnohé antivirové systémy automaticky odpovídají odesílateli v případě že je v emailu od něj zjištěno něco závadného. Je-li však odesílatel zfalšovaný - obvykle nahrazený nějakou adresou ze seznamu cílů, dostane varování někdo jiný, kdo pak často zpanikaří že je zavirovaný když není. (Nebo taky je.) Nejznámější červ který používá tento trik je Klez.
Jiným zajímavým typem přenosu červa je signatura emailu. Outlook je možno nakonfigurovat pro vkládání externího textového souboru s podpisem. Je možné aby tento soubor obsahoval HTML kód, kompletně včetně javascriptu a volání ActiveX komponent. Je pak též možné tímto kódem prorazit jednou z četných bezpečnotních děr Outlooku nebo MSIE, získat přístup k Windows Registry a souborovému systému - a získat tím absolutní kontrolu nad obětí. Poté uložit příslušný kousek kódu do souboru, přidat klíč do Registru který nastavuje že tento soubor se bude vkládat do emailu jako podpis, a pak se již červ stává součástí každého emailu který je z napadeného stroje odeslán. Dobrým příkladem je KakWorm.
Scannuji, scannuješ, scannuje...
Poštovní červ to má jednoduché; pošle se poštou. Ovšem jak dostat červa do cíle když je cílem server? Co ho takhle nechat prolézt bezpečnostní dírou?
Jak? Využijeme nějakou službu na cíli běžící, která má nám známou zranitelnost. Obvykle buffer overflow, ale může se jednat i o takovou pitomost jako například defaultní heslo nebo backdoor. Pokud se nám podaří dostat červa dovnitř a spustit, je vyhráno.
Co je to buffer overflow: jedna z nejdůležitějších a nejčastějších slabin procesů. Běžící proces vytváří v paměti počítače různé struktury. Jednou z nich je tzv. zásobník (stack) - něco jako štos papírů. Když program volá subrutinu, uloží na zásobník adresu instrukce kterou právě vykonává, a na subrutinu skočí; při návratu pak vybere návratovou adresu ze zásobníku a skočí na ni a pokračuje dále. Zásobník se též využívá pro rozmanité lokální proměnné, včetně řetězcových. Řetězcová proměnná je pole znaků - bajtů. V některých jazycích - nejnotoričtějším provinilcem je C - je zločinně jednoduché udělat chybu a nekontrolovat délku dat která se do dotyčné proměnné zapíše. Pokud tato proměnná má pevnou délku a zapíšeme do ní více dat než se tam vejde, píšeme za její konec - přes cokoliv co je za ní, tedy přetečeme jí. V našem případě ostatní data na zásobníku - ostatní lokální proměnné, návratové adresy, lokální proměnné funkcí které volaly funkce které volaly zranitelnou funkci. Program pak obvykle zkolabuje - v případě Windows velmi častým Obecným porušením ochrany, pokud jsme měli smůlu pak i obávaným Modrým Oknem Smrti. Unixy obvykle vysypou jádro procesu - core dump. Pokud však víme co děláme, a máme proces jehož rozložení paměti známe, můžeme do dotyčné proměnné poslat příliš dlouhý řetězec dat, který má na svém konci strategicky rozložené bajty nesoucí informaci, kterou chceme zapsat do zásobníku. Tím můžeme nastavovat hodnoty některých interních proměnných programu, nebo i přesměrovat návratovou adresu, pokud víme kam a máme tam nějaký vhodný kód - při návratu ze subrutiny nám pak program skočí tam a ne zpět odkud byla funkce volána. Toto je velmi nebezpečné - útočník může získat přístup přímo k příkazové řádce systému, s přístupovými právy procesu který takto "prostřelil". Pokud se podaří z procesu spustit příkazový procesor (u unixů obvykle /bin/sh, u Windows obvykle c:windowscommand.com or c:winntsystem32cmd.exe) a proces má standardní vstup a výstup přesměrované na otevřené síťové spojení, gratuluji - jste uvnitř. Pokud máme alespoň trochu zkušeností, není využívání těchto zranitelností složité. I pokud zkušenosti nemáme, je jen otázkou času kdy nám na to někdo napíše utilitu - pak ovšem opouštíme řady hackerů a stáváme se script kiddies, kteří si neumí ani vyrobit vlastní nástroje. Samozřejmě, nebezpečnost buffer overflow se dá redukovat - pokud máme kompilátor, který generuje kód ověřující integritu zásobníku před návratem ze subrutiny. To je však nepatrně pomalejší a kompilátory na to nejsou standardně vybavené. Pokud na to autor nemyslel a vy máte jen spustitelné soubory a nikoliv zdrojový kód, máte smůlu; pokud zdrojáky máte, můžete si je překompilovat sami se zapnutými ochranami - některé programy pak sice odmítají fungovat, ale většinou to jde; nejznámějším produktem takto fungujícím je StackGuard. Jistá úroveň bezpečnosti se dá získat i modifikacemi jádra systému, k tomu však opět potřebujete jeho zdrojový kód. Pokud jste odkázáni na dobrou (ehm) vůli korporací, které vám jej ze zásady nedají a ještě mají tu drzost blábolit něco o průmyslových tajemstvích a intelektuálním vlastniství a právnících, máte hádejte co. Uhodli - smůlu.
Špatná zpráva. Děravé je téměř všechno. I pokud se zalepí otvory stylu buffer overflow, stále ještě existují otvory další - např. heap overflow nebo format string overflow. Jejich využití je však již obvykle podstatně obtížnější a četnost jejich výskytu nižší. Buffer overflows jsou však téměř ve všem. Příkladem je například jinak docela bezpečný Apache server, který ve verzích nižších než 1.3.26 měl otvor tohoto typu. Ano, po chvíli se skutečně objevil červ, nebyl však nijak moc úspěšný - unixoví administrátoři jsou obvykle zodpovědnější než ti z druhé strany barikády operačních systémů (což může souviset s jednodušší zabezpečitelností unixů, kde je frekvence objevování se děr k zalepení poněkud výrazně nižší). Druhým, nejnovějším, příkladem je otvor v OpenSSL, knihovně zabezpečující šifrování transakcí přes HTTPS - paradoxně služba mající za úkol zabezpečení se sama stala nebezpečím, a červ Linux.Slapper, který jej využívá.
Někdy se dá přesvědčit i samotný server aby nám spustil náš vlastní kód, o který jej požádáme. Spouštíme-li skripty na webserveru, žádáme server o spuštění procesu, který nakrmíme parametry - obvykle z nějakého formuláře, který jsme vyplnili. Z bezpečnostních důvodů smí server spouštět skripty pouze ve vybraných adresářích. My se však v některých případech můžeme dostat ven. Microsoft pro nás svého času připravil lahůdku v podobě podpory Unicode a odfláknuté kontroly požadavků. Chceme-li se v adresářové struktuře dostat o úroveň výš, použíjeme řetězec ".." jako jméno adresáře, oddělené lomítkem. Lomítko i tečku ovšem můžeme zapsat různými způsoby - "/../" - skok o úroveň nahoru - se dá zapsat jako "%c1%1c../", "%c0%2f../", "%252f../", "%255c../", a mnoha a mnoha (a mnoha) dalšími. Kontrolujeme-li řetězec na přítomnost "/../" před dekódováním těchto zápisů, tyto konstrukce nezachytíme. Pak můžeme zavolat /scripts/..%255c../winnt/system32/cmd.exe?prikaz+ktery+chceme+vykonat a máme kontrolu. (Díky Code Red a Nimdě má již většina NT (No-Thanks, Děkuji-nechci?) serverů tuto díru zalepenou. Zachovejte klid a čtěte Bugtraq - objeví se další. Pro úplnost, Windows 2000 nejsou nic jiného než tak dlouho slibované a o tolik let opožděné Windows NT5, jen poněkud - ehm - přejmenované.)
Jelikož různé instalace jsou si navzájem podobné až téměř identické, bezpečnostní otvory bývají identické též. Máme-li v síti (nebo Síti) dost žrádla pro červy - strojů se stejnou zranitelností, je jen otázkou času kdy se alespoň jeden červíček objeví. Epidemie většího či menšího rozsahu poté následuje.
V okamžiku kdy nám server umožní vykonávat na něm naše příkazy, máme vyhráno. Zbývá jen říci aby do sebe nacucl červa a spustil jej. Fáze infekce skončila, nastává fáze šíření.
Hostitel je nakažen, nyní je jeho úkolem najít a nakazit co nejvíce ostatních hostitelů. Jinak než metodou pokus-omyl to jde těžko. Máme však standardizaci - webservery jsou umístěny typicky na portu 80, emailové servery na portu 25, ostatní služby mají také svoje TCP nebo UDP porty - FTP na 21, SSH na 22, Telnet na 23, DNS na 53, Microsoft SQL na 1433, a tisíce dalších. Servery jsou rozmístěné po Síti všude možně - zkoušíte-li IP adresy náhodně, máte vždy určitou šanci že na nějaký narazíte. Některé segmenty však mají větší pravděpodobnost výskytu - typicky ty které patří providerům a kolokačním společnostem (těm které pronajímají skříň s vysokorychlostní internetovou přípojkou, do které si zákazník zapojí svůj vlastní počítač). Zde je obvykle server vedle serveru. Jiné mají pravděpodobnost velmi nízkou - ty které připadají providerům dialupovým, málo lidí provozuje server na modemu na dynamické adrese - nebo nulovou - ty neobsazené. Nebo naopak - síťové disky otevřené z Windows celému světu jsou běžnější u modemových providerů - Přítomnost serveru na segmentu tedy značí vyšší pravděpodobnost výskytu dalších serverů v jeho blízkosti; podobně jako je to s houbami. Přidanou hodnotou budiž fakt že lokální sítě mají obvykle podstatně vyšší rychlost v rámci sítě než vůči zbytku světa - příkladem budiž 100Mb síť připojená k Internetu přes 128k linku. Optimální kombinací je tedy zkoušení náhodné v rámci celosvětovém, kombinované se zkoušením soustavným v rámci lokálním. Náhodný přístup navíc není dlouhodobě příliš efektivní. Dochází k opakovanému zkoušení těch samých adres, které jsou buď již nakažené, nebo nenakazitelné. Nepočítáme-li vypínání a zapínání počítačů, jeden pokus na IP adresu je tak akorát. Pokud deset stejných červů zkouší jeden cíl, devět z nich dělá zbytečnou práci. Ve volné přírodě se zatím vyskytly nepříliš sofistikované algoritmy, povětšinou čistě náhodné nebo s pravděpodobností stupňovanou dle vzdálenosti v adresovém prostoru; v laboratorních podmínkách se však dosáhlo děsivé efektivity.
Odpoví-li nám při očichávání sítě server, přesněji služba o kterou se zajímáme, musíme ještě zjistit zda se jedná o zranitelnou verzi. Méně obvyklé je prověření odpovědi a přečtení typu a verze serverového programu, obvyklejší je zkouška naslepo; červ se připojí k cíli, a zadá požadavek který - pokud je cíl zranitelný - mu otevře cestu dovnitř. Někteří červi zkouší několik možných zranitelností (Nimda), někteří jiní dokonce i několik služeb (Morris Worm), většina se spokojí s jednou (Code Red, Code Red 2, Linux.Slapper, Lion) - často to stačí. Prorazíme-li dovnitř a získáme kontrolu nad serverem, cyklus se opakuje.
Nesmíme zapomenout na náklad který červ nese. Nemusí to být nic; pak máme jen šířící se program. Nebo červíček může otvírat přímý přístup do napadeného počítače (Code Red 2, Linux.Slapper). Může sloužit pro zprostředkování útoku na jiné počítače, buď jako "zombie" spící a čekající na příkazy zvenku, nebo jako disciplinovaný voják s rozkazem zaútočit v určitém čase na určité místo; vzhledem k potenciálně velkému množství červů je jejich použití pro DDoS (Distributed Denial of Service, spočívající v přetížení cíle a jeho zahlcení požadavky nebo dopravou a efektivnímu vyřazení z provozu) velmi lákavé. Mezi další možnosti patří škodolibé a účinné mazání souborů, instalace zadních vrátek do počítače za účelem jeho dalšího využití někým v terénu, tzv. rootkitu (v poslední době dost časté), nebo únik informací - vyhledávání souborů a jejich odesílání pryč.
Webserveroví červi mohou zjišťovat své potenciální sousedy i podstatně efektivněji než náhodně - jelikož mají přístupová práva webserveru, mohou prohlédnout stránky na něm uložené, vykuchat z nich adresy ostatních serverů na které míří odkazy, a vyzkoušet tyto adresy jako přednostní cíle.
Vedlejším efektem scannujících červů je velká zátěž Sítě. Několik agresivně scannujících serverů na jednom malém segmentu Sítě dokáže její připojení k Internetu slušně vytížit. Totéž platí o serverech spravujících mnoho IP adres, které představují podstatně větší terč; kolik adres mají na starost, tolikrát větší zátěž dostanou. Mnohdy pak již samotné vyřizování červích pokusů o napadení stojí server tolik úsilí - může se jednat často i o desetitisíce požadavků za hodinu - že jej dostane na kolena a vyřadí z provozu. Mnoho providerů se s těmito problémy setkalo když se Code Red probudil a začal řádit. Ten můj taky.
Flash worms, Warhol worms
Červi se obvykle šíří z jednoho zdroje. Čistě náhodné algoritmy hádání adres které jsou používané nyní dávají výsledky silně suboptimální; váženě náhodné zvýhodňující lokálnější šíření jsou jen o něco lepší. Střelba naslepo je velmi velmi neefektivní; různí červi stejného rodu se pokoušejí nakazit stejné cíle opakovaně. Časy nárůstu populací červů se pohybují typicky ve dnech, v nejlepším případě v desítkách hodin. Což, jak si jistě dovedete představit, není nic moc.
Při nulové znalosti pozic zranitelných strojů a vzájemně plně nezávislých a ekvivalentních červech je náhodný přístup víceméně nejlepší a určitě nejjednodušší. Jako obvykle však není nic ztraceno. Alternativ k náhodnému scannování Sítě je mnoho, s různými výhodami a nevýhodami. Desítky hodin se tak mohou smrsknout na 15 minut, nebo i pod jedinou minutu.
Většina pokusů o nalezení a infikování dalšího hostitele končí nezdarem. Nejčastěji cíl na dané adrese neexistuje, neprovozuje službu kterou hledáme (např. webserver), nebo služba není zranitelného typu a verze. Nebo je hostitel již infikovaný. Ve všech těchto případech je pokus neúspěšný a představuje plýtvání úsilím. My však můžeme červíčky vybavit potřebnou dávkou předběžných znalostí terénu, a z osamělých bojovníků vybudovat plně vycvičenou armádu.
K proměně samotářských amatérů na elitní komando potřebujeme rozdělit úkoly a zvýšit přesnost palby, alespoň ve fázi kdy je populace červů stále ještě nízká; pokud je co rána to zásah, co pokus to infekce, neplýtváme municí ani časem. Potřebujeme taktickou přípravu - získat seznam co největšího množství zranitelných cílů.
Seznam samotný nemusí být získán červem; můžeme jej mít připravený předem. K tomuto účelu se musíme podívat na dostatečné množství serverů. Máme mnoho možností. Můžeme zkoušet naslepo, postupně všechny IP adresy. Dá to práci a trvá to. Můžeme scannovat Síť z jedné jediné základny; máme-li dostatečně rychlou linku, může to být i praktické - máme-li neomezený rozpočet a OC12 linku, můžeme celou Síť prohlédnout během asi dvou hodin. Jsme-li švorc, můžeme scannovat distribuovaně: z desítek, stovek, nebo i tisíců míst najednou; každé místo by mělo mít co nejrychlejší připojení k Síti a pro optimální efektivitu by měly by být rozesety přibližně stejnoměrně po IP rozsazích. Jako základny pro distribuovaný scanning můžeme využít již existující populaci červů, které poskytují vzdálený přístup, nebo alespoň označují špatně hlídaný stroj se známou bezpečnostní dírou kam se můžeme nasquatovat. Můžeme též podstatně omezit množství potenciálních cílů; nakoupíme databázi poštovních adres, z těch odvodíme seznam domén, z těch odhadneme názvy korespondujících serverů které převedeme na IP adresy (ie, kdokoliv@zivel.cz -> zivel.cz -> www.zivel.cz -> 212.47.7.245) a máme vysoce kvalitní seznam webserverů, z nichž pak můžeme vybrat ty zranitelné aniž se zdržujeme zkoušením neexistujících a newebserverových adres. Můžeme se maskovat jako search engine (seznam.cz, google.com,...) a pocházet a indexovat Síť a vytvářet si databázi nejen webových stránek, ale i který počítač běží na jakém operačním systému a verzi serveru; toto je dobrá strategie neboť nám umožňuje získat velké množství informací s minimálním buzením podezření, zejména pokud některé z výsledků poskytujeme veřejně - kdoví jaké nepublikované vedlejší účely plní některé prohledávače. Sledujeme-li delší dobu, můžeme zaznamenávat změny verzí programů jednotlivých serverů a korelovat je proti objevům jejich bezpečnostních děr; tím získáme další cenné informace, tentokrát o bdělosti jednotlivých administrátorů. Sedíme-li na uzlu přes který jde větší množství dopravy, nemusíme dokonce ani dělat nic aktivního - jen posloucháme komunikaci a z hlaviček odezev požadavků odchytáváme identifikace serverů, a postupem času se nám plní a aktualizuje databáze. (Opět nic složitého, pro zájemce klíčová slova tcpdump, libpcap.)