Reklama

Code Red napadol celý internet. Za 14 hodín zasiahol 359 000 strojov

Zdroj | TECHBOX/ChatGPT
Števo Porubský
Zdroj | TECHBOX/ChatGPT
Zdroj | TECHBOX/ChatGPT

Prene pred 25 rokmi sa internetom začal šíriť škodlivý kód, ktorý nepotreboval presvedčiť používateľa, aby otvoril prílohu, spustil program alebo klikol na podozrivý odkaz.

Code Red si obete vyhľadával sám, automaticky napádal nezabezpečené webové servery a z každého úspešne infikovaného počítača vytvoril ďalší zdroj útokov.

Úplne prvá verzia červa sa objavila 12. júla 2001. O deň neskôr, v piatok 13. júla, dostali výskumníci spoločnosti eEye Digital Security Marc Maiffret a Ryan Permeh záznamy od dvoch správcov sietí, ktorí zaznamenali nezvyčajne veľa útokov na servery Microsoft IIS. Po analýze zistili, že internetom sa šíri automatizovaný červ využívajúci nedávno odhalenú bezpečnostnú chybu. O šesť dní neskôr sa objavila upravená verzia, ktorá za menej než 14 hodín zasiahla vyše 359-tisíc IP adries. 

Obsah pokračuje pod reklamou

Code Red nebol prvým počítačovým červom. Už Morrisov červ v roku 1988 ukázal, že samostatne sa šíriaci program dokáže ochromiť veľkú časť vtedajšieho internetu. Code Red však prišiel do sveta, v ktorom už firmy, úrady aj domácnosti používali internet v oveľa väčšom rozsahu. Súčasne ukázal, ako rýchlo môže automatický útok zneužiť jednu rozšírenú chybu, keď správcovia ignorujú dostupnú opravu.

Červ nebol vírus a používateľa vôbec nepotreboval

Pojmy vírus a červ (worm) sa často zamieňajú, hoci označujú odlišný spôsob šírenia. Vírus sa zvyčajne pripája k inému programu alebo súboru a na svoje spustenie potrebuje určitú činnosť používateľa. Červ funguje ako samostatný program. Vyhľadáva ďalšie počítače, skúša ich napadnúť a po úspešnom prieniku pokračuje z nového zariadenia.

Code Red preto nepotreboval e-mailovú prílohu ani stiahnutý súbor. Stačilo, aby správca pripojil zraniteľný webový server k internetu a sprístupnil na ňom TCP port 80. Infikované stroje generovali IP adresy, pripájali sa k nim cez HTTP a posielali pripravenú požiadavku. Ak cieľ používal zraniteľnú konfiguráciu Microsoft IIS, požiadavka spustila kód červa priamo v pamäti servera. 

Tento spôsob šírenia mal nepríjemnú vlastnosť. Každá nová obeť okamžite začala hľadať ďalšie obete. Rast preto neprebiehal lineárne. Jeden server napadol ďalšie, tie napadli ďalšie a množstvo útokov prudko rástlo, až kým červ nenarazil na nedostatok nezabezpečených systémov alebo na sieťové filtre.

Chyba sa ukrývala v súčasti Microsoft IIS

Code Red napádal webové servery Microsoft Internet Information Services 4.0 a 5.0, ktoré fungovali najmä na systémoch Windows NT 4.0 a Windows 2000. Konkrétne využíval chybu v knižnici idq.dll, ktorá patrila k službe Index Server, respektíve Indexing Service vo Windows 2000.

Knižnica idq.dll spracúvala administratívne súbory s príponou .ida a vyhľadávacie požiadavky uložené v súboroch .idq. IIS používal takzvané mapovania skriptov, ktoré určovali, ktorá knižnica má spracovať požiadavku na konkrétny typ súboru. Keď server dostal požiadavku smerujúcu na súbor .ida, poslal ju práve do idq.dll. 

Problém spočíval v nekontrolovanom zásobníku pri spracovaní URL adresy. Knižnica pred uložením vstupných údajov dostatočne neoverila ich dĺžku. Útočník preto mohol poslať mimoriadne dlhú, špeciálne pripravenú požiadavku, ktorá prepísala ďalšie časti pamäte. Tomuto typu chyby hovoríme pretečenie zásobníka alebo buffer overflow.

Samotné pretečenie mohlo webovú službu zhodiť. Starostlivo zostavený vstup však prepísal aj údaje, ktoré procesor používal pri rozhodovaní, kam má program pokračovať. Útočník tak nasmeroval vykonávanie programu na strojové inštrukcie vložené priamo do HTTP požiadavky. Server namiesto bežného spracovania webového dopytu spustil červa.

Útok mal vysoké oprávnenia. Knižnica idq.dll fungovala v kontexte Local System, teda s prakticky úplnou kontrolou nad operačným systémom. Rovnaká chyba mohla útočníkovi umožniť meniť obsah webu, spúšťať systémové príkazy, prekonfigurovať server, vytvoriť administrátorské účty alebo nainštalovať ďalší softvér. Code Red využil len časť týchto možností, samotná zraniteľnosť však ponúkala oveľa širší priestor na útok. 

Obsah pokračuje pod reklamou

Dôležitý detail predstavovalo správanie Indexing Service. Správca nemusel túto službu aktívne používať. Útok fungoval, pokiaľ IIS obsahoval príslušné mapovanie pre súbory .ida alebo .idq. Zraniteľná súčasť teda mohla ohrozovať server aj vtedy, keď ju jeho prevádzkovateľ považoval za neaktívnu alebo nepotrebnú. Microsoft odporúčal odstrániť mapovania, ak správca nemohol okamžite nainštalovať opravu, no upozornil, že systém ich mohol po zmene komponentov znova vytvoriť. Spoľahlivé riešenie preto predstavovala bezpečnostná aktualizácia. 

https://www.youtube.com/watch?v=jt9GzPwtm5Q

Oprava existovala ešte pred vypuknutím útoku

Spoločnosť eEye Digital Security oznámila chybu Microsoftu a ten 18. júna 2001 zverejnil bezpečnostný bulletin MS01-033. Výrobca klasifikoval problém ako kritický a vyzval správcov webových serverov, aby aktualizáciu nainštalovali okamžite. Do začiatku prudkého šírenia Code Red tak mali prevádzkovatelia serverov približne mesiac na zabezpečenie systémov. 

Incident preto nevznikol preto, že by obrancovia nemali žiadne riešenie. Veľké množstvo serverov jednoducho zostalo bez oprav. Niektorí správcovia o chybe nevedeli, iní aktualizáciu odkladali pre obavy z výpadkov alebo problémov s kompatibilitou. Ďalší netušili, že na serveri vôbec majú aktívne rizikové mapovanie.

Code Red tým pripomenul nepríjemnú vlastnosť bezpečnostných aktualizácií. Zverejnenie opravy neznižuje riziko automaticky. Súčasne prezrádza, kde sa chyba nachádza, takže útočníci môžu porovnať opravený a pôvodný softvér, pochopiť slabinu a pripraviť funkčný útok. Čas medzi vydaním aktualizácie a jej nasadením preto vytvára obdobie, počas ktorého zostáva systém nechránený napriek tomu, že riešenie už existuje.

Dlhá séria písmen N

Infikovaný server skúšal nájsť ďalšie zariadenia s otvoreným portom 80 a posielal im HTTP požiadavku smerujúcu na cestu /default.ida. Za otáznikom nasledovali stovky znakov N a následne URL kódované strojové inštrukcie. Dlhý vstup zaplnil vyhradený priestor v pamäti a vložený kód prevzal riadenie procesu.

Záznamy z firewallov a systémov na detekciu útokov preto obsahovali charakteristické požiadavky začínajúce textom podobným reťazcu /default.ida?NNNNNN…. Serverové logy však nemuseli zachytiť všetko. IIS zapisoval požiadavku až po jej spracovaní a úspešný útok mohol zmeniť priebeh programu skôr, než sa záznam uložil. Výskumníkom preto pomohli samostatné systémy na monitorovanie sieťovej prevádzky. 

Po preniknutí Code Red nevytvoril klasický spustiteľný súbor na disku. Zostal v operačnej pamäti napadnutého procesu. Antivírus alebo správca preto nemusel nájsť žiadny nový súbor, ktorý by mohol jednoducho odstrániť. Reštart počítača vyčistil pamäť a červa zneškodnil, ale neopravil zraniteľnosť. Po opätovnom pripojení k internetu mohol server dostať rovnakú požiadavku a nakaziť sa znova. Počas vrcholu epidémie sa niektoré stroje opätovne infikovali dokonca v čase, keď sa ich správcovia pokúšali aktualizovať. 

Červ obsahoval aj jednoduchý vypínač. Každé vlákno kontrolovalo, či na disku existuje súbor c:\notworm. Keď ho našlo, prestalo šíriť infekciu. Vytvorenie tohto súboru mohlo červa dočasne uspať, ale neopravilo chybu v IIS a nezabránilo inému útočníkovi použiť rovnakú zraniteľnosť. Išlo teda skôr o núdzovú brzdu vloženú autorom kódu než o riadny bezpečnostný mechanizmus. 

Sto vlákien menilo server na automatický útočný stroj

Obsah pokračuje pod reklamou

Po spustení vytvorila pôvodná verzia Code Red sto pracovných vlákien. Prvých 99 hľadalo ďalšie servery a pokúšalo sa ich infikovať. Sté vlákno kontrolovalo jazyk operačného systému. Ak našlo americkú angličtinu, dočasne zmenilo odpovede webového servera. Na iných jazykových verziách sa aj sté vlákno pripojilo k šíreniu. 

Červ nemenil súbory webovej stránky na disku. Po dvojhodinovej prestávke upravil v pamäti správanie funkcie TcpSockSend v knižnici w3svc.dll, ktorú IIS používal na odosielanie odpovedí klientom. Počas nasledujúcich desiatich hodín tak návštevníci namiesto bežného obsahu dostávali stránku s textom „HELLO! Welcome to http://www.worm.com! Hacked By Chinese!“. Po desiatich hodinách červ pôvodné správanie obnovil. 

Nápis nevznikol prepísaním domovskej stránky a po reštarte zmizol spolu s červom. To komplikovalo vyšetrovanie. Správca mohol po niekoľkých hodinách vidieť normálnu stránku a nadobudnúť dojem, že incident skončil, hoci server naďalej skenoval internet.

Text „Hacked By Chinese!“ neposkytoval dôkaz o pôvode autora. Výskumníci nenašli spoľahlivé údaje, ktoré by autorstvo potvrdili alebo vyvrátili. Pripisovať útok konkrétnej krajine len podľa nápisu v škodlivom kóde by bolo asi také presné, ako určovať výrobcu auta podľa nálepky na nárazníku. 

Podľa čoho vznikol názov?

Marc Maiffret a Ryan Permeh pomenovali červa Code Red počas nočnej analýzy jeho strojového kódu. Pili pritom limonádu Mountain Dew Code Red, ktorá im pomáhala zostať hore. K názvu sa hodil aj politicky pôsobiaci text na napadnutých webových stránkach. Nešlo teda o pomenovanie, ktoré by použil autor červa. Vytvorili ho ľudia, ktorí skúmali jeho správanie. 

Výskumníci z eEye zverejnili detailný rozbor 18. júla. Popísali mechanizmus šírenia, stovku vlákien, dočasnú zmenu webových odpovedí, kontrolu súboru c:\notworm aj pripravovaný útok na web Bieleho domu. Deň nato sa však objavila verzia, ktorá odstránila najväčšiu chybu pôvodného červa.

Pôvodný Code Red, neskôr označovaný ako Code-RedI v1, generoval cieľové IP adresy pomocou generátora pseudonáhodných čísel. Autor však použil rovnaké počiatočné nastavenie, takzvaný seed, na každom infikovanom počítači. Jednotlivé stroje preto vytvárali rovnaké zoznamy cieľov v rovnakom poradí.

Namiesto efektívneho rozdelenia internetu tak tisíce infikovaných serverov opakovane útočili na tie isté adresy. Mnohé z nich už červa obsahovali, používali iný softvér alebo vôbec nereagovali. Pôvodná verzia síce vytvárala veľa prevádzky a zaťažovala siete, no sama si výrazne obmedzila rýchlosť šírenia. 

Situácia sa zmenila 19. júla približne o 10.00 UTC. Výskumníci zaznamenali variant Code-RedI v2, ktorý sa od pôvodného červa líšil takmer výhradne spôsobom nastavenia generátora adries. Každý infikovaný server dostal odlišný seed a začal skúšať inú skupinu IP adries. Zdanlivo malá úprava odstránila veľké množstvo duplicitných útokov.

Každý infikovaný stroj odosielal približne 11 pokusov za sekundu. Za menej než 14 hodín výskumníci zaznamenali viac než 359-tisíc napadnutých IP adries. V čase najrýchlejšieho rastu pribúdalo vyše 2 000 nových hostiteľov za minútu. Červ pritom neobsahoval osobitne pokročilý algoritmus ani centralizované riadenie. Stačila rozšírená chyba, automatické vyhľadávanie cieľov a veľké množstvo nezaplátaných serverov. 

CAIDA sledovala šírenie červa pomocou nevyužívaných častí adresného priestoru. Keď infikované stroje náhodne skúšali IP adresy, časť ich požiadaviek smerovala aj do monitorovaných sietí, ktoré za normálnych okolností nemali dostávať takúto prevádzku. Výskumníci tak dokázali odhadnúť počet zdrojov infekcie a rýchlosť rastu bez prístupu ku každému napadnutému serveru.

Počas 24 hodín od polnoci UTC 19. júla zaznamenali viac než 359-tisíc jedinečných IP adries, z ktorých prichádzali pokusy o šírenie Code Red. Toto číslo predstavuje počet adries, nie presný počet fyzických zariadení. Dynamické prideľovanie adries cez DHCP mohlo jeden počítač v rôznych časoch započítať viackrát. Preklad sieťových adries NAT mohol naopak skryť viacero napadnutých počítačov za jedinú verejnú IP adresu. Niektoré infikované vnútorné systémy sa navyše nemuseli vo vonkajšom meraní prejaviť vôbec. 

Najčastejšie citovaných 359 000 preto treba chápať ako najlepší dostupný obraz rozsahu epidémie, nie ako dokonale presné sčítanie každého počítača.

Najviac obetí v USA, silno zasiahol aj Áziu

Obsah pokračuje pod reklamou

Z adresného priestoru zaznamenaného 19. júla pripadalo približne 43,9 % infikovaných adries na Spojené štáty. Južná Kórea tvorila 10,6 %, Čína 5,1 % a Taiwan 4,2 %. Nasledovali Kanada, Spojené kráľovstvo, Nemecko, Austrália, Japonsko a Holandsko.

Takmer polovica adries nemala použiteľný reverzný DNS záznam. Medzi identifikovanými doménmi sa výrazne objavovali poskytovatelia domáceho a malého firemného pripojenia, napríklad Home.com, Road Runner, dial-up siete či AOL. Incident tak nezasiahol len veľké korporácie a vládne dátové centrá. Mnoho menších prevádzkovateľov používalo Windows 2000 s IIS na bežnom širokopásmovom pripojení a bezpečnostné aktualizácie spravovalo oveľa menej dôsledne. 

CAIDA našla aj 136 infikovaných adries v doméne .mil a 213 v .gov. Tieto počty predstavovali malú časť celkového množstva, no ukázali, že červ prenikol aj do sietí spojených s vládnymi a vojenskými organizáciami. 

Zdroj | CAIDA

Hlavným cieľom mal byť web Bieleho domu

Code Red menil správanie podľa dňa v mesiaci. Od prvého do devätnásteho dňa vyhľadával ďalšie obete. Od dvadsiateho do dvadsiateho ôsmeho dňa mal prestať šíriť infekciu a spustiť distribuovaný útok typu denial of service proti serveru Bieleho domu. Po dvadsiatom ôsmom dni mal zostať neaktívny a na začiatku ďalšieho mesiaca cyklus zopakovať. 

Červ nepoužíval iba názov domény www.whitehouse.gov. Obsahoval priamo IP adresu 198.137.240.91. Infikované stroje sa k nej pripájali na port 80, posielali približne 100 kB údajov, následne čakali a útok opakovali. Pri stovkách tisícov aktívnych serverov mohol takýto koordinovaný nápor cieľ zahltiť. 

Správcovia webu Bieleho domu však zmenili jeho IP adresu. Keďže Code Red používal natvrdo zapísané číslo a nevyhľadával aktuálnu adresu cez DNS, pokračoval v útoku na pôvodný cieľ. Hlavná časť útoku preto zlyhala. Červ síce vytváral sieťovú záťaž, no nedokázal vyradiť aktuálny web Bieleho domu. 

Tento detail ukazuje, že Code Red nebol precízne skonštruovaný nástroj. Autor spojil nebezpečný spôsob automatického šírenia s pomerne primitívnym výberom cieľa. Keby červ pravidelne zisťoval aktuálnu IP adresu alebo používal viacero cieľov, obrana by bola podstatne komplikovanejšia.

Epidémia sa vrátila!

Po skončení júlového cyklu Code Red nezmizol. Mnohé servery stále zostali bez opravy a worm na začiatku nového mesiaca znova prešiel do fázy šírenia. 1. augusta 2001 zaznamenala CAIDA približne 275-tisíc jedinečných IP adries, ktoré počas jedného dňa šírili variant Code-RedI v2.

Nižší počet oproti 19. júlu naznačoval, že časť správcov už systémy aktualizovala alebo odpojila. Reakcia však prebiehala pomaly. Medzi 24. a 31. júlom rástol podiel opravených strojov v sledovanej vzorke priemerne iba o 1,5 percentuálneho bodu denne. Až opätovné vypuknutie 1. augusta zvýšilo podiel opravených systémov približne z 32 na 64 %. Časť internetu teda potrebovala druhý úder, aby začala brať prvý vážne. 

Microsoft, FBI, CERT/CC, SANS, poskytovatelia pripojenia a ďalšie organizácie spustili rozsiahlu informačnú kampaň. Microsoft 30. júla uvádzal viac než dva milióny stiahnutí opravy, pričom jeden balík mohol správca použiť na viacerých serveroch. Úrady sa obávali, že obnovené šírenie spotrebuje toľko kapacity, že spomalí internet aj používateľom, ktorých počítače samotný červ nenapadol. 

Obsah pokračuje pod reklamou

Code Red spojil viacero nedostatkov, ktoré sa v bezpečnosti opakujú dodnes. Výrobcovia dodávali softvér s aktívnymi súčasťami, ktoré mnohí zákazníci nepotrebovali. Servery fungovali s vysokými systémovými oprávneniami. Správcovia odkladali dostupnú aktualizáciu. Verejne dostupné služby automaticky prijímali požiadavky z celého internetu a siete nemali vždy pripravené filtre, ktoré by neobvyklé správanie včas zastavili.

Pred 25 rokmi stačila jediná chyba v rozšírenom webovom serveri, niekoľko stoviek bajtov strojového kódu a veľké množstvo odkladaných aktualizácií. Výsledkom nebol kolaps celého internetu, ako sa v najhorších prognózach očakávalo. Code Red však názorne ukázal, že rýchlosť automatizovaného útoku môže prekonať schopnosť ľudí reagovať.

Ďalšia story
Zatvoriť

Newsletter

Ďakujeme za váš záujem! Odteraz vám už neunikne žiadna novinka.
Ľutujeme, ale váš formulár sa nepodarilo odoslať.