Atacuri distribuite în Internet

Mihai Budiu -- mihaib+@cs.cmu.edu
http://www.cs.cmu.edu/~mihaib/

iunie 2001

Subiect:
o evaluare a numărului de atacuri distribuite de sabotaj al serviciilor în Internet
Cunoștințe necesare:
cunoștințe elementare despre funcționarea Internetului
Cuvinte cheie:
atac distribuit (DDoS: distributed denial of service), rutare, pachet, împrăștiere (back-scatter)


Cuprins




Internetul: capcane la fiecare pas

Într-un articol anterior din PC Report arătam că Internetul a fost construit ca rețea militară, pentru a rezista chiar și unor atacuri nucleare. Deși nu a fost testat în condiții atît de dramatice, putem însă afirma că arhitectura sa se ridică la înălțimea așteptărilor.

Proiectanții însă nu au conceput rețeaua pentru a rezista unui alt tip de atac: din interior. Acum, cînd rețeaua s-a întins la dimensiuni neimaginate, această lipsă se dovedește foarte gravă.

Dimensiunea uriașă a rețelei, numărul enorm de calculatoare cuplate, existența a zeci de bug-uri în implementărilor programelor care se execută pe aceste calculatoare, și intențiile dușmănoase a cîtorva inși formează un cocteil exploziv. Situația se înrăutățește pe zi ce trece, și cracker-ii sunt într-o cursă continua cu proiectanții rețelei și cu administratorii de sistem, care încearcă să remedieze defecțiunile acesteia. Din păcate, aceasta este un război la al cărui început abia asistăm, și care nu are un sfîrșit previzibil în viitorul apropiat.

În acest articol voi discuta doar despre un anume tip de atac electronic, în care victima primește o cantitate enormă de pachete care îi consumă toate resursele, împiedicînd-o să funcționeze normal. Deși acest gen de atac nu extrage nici un fel informații de la victimă, el poate fi foarte costisitor; acest gen de atac a fost observat pentru prima oară cu aproximativ un an și jumătate în urmă și a ajuns pe prima pagină a multor ziare datorită numelor importante ale victimelor: Yahoo, CNN, ebay, etc.

În textul de față vom vedea cum, la ora actuală, orice ins mînat de intenții rele poate pune în genunchi practic orice site din Internet, oricît de sofisticat, împiedicîndu-l să funcționeze. Vom vedea de asemenea că acest lucru se întîmplă foarte frecvent, și că în fiecare zi se desfășoară sute de astfel de atacuri. În fine, vom vedea că, în mod extrem de surprinzător, România se clasează pe locul întîi în lume într-un trist clasament, al țărilor după numărul de victime ale unor astfel de atacuri.

Funcționarea Internetului

Pentru a putea înțelege cum funcționează un atac distribuit de genul menționat, și mai ales pentru a înțelege cum a putut fi măsurat numărul de atacuri din întreaga rețea fără participarea voită a vreunui atacator sau victime, va trebui sa facem o scurtă incursiune în tehnologiile care fac Internetul sa funcționeze. Vom recapitula pe scurt, și ușor simplificat, funcționarea rutării în Internet; am tratat acest subiect pe larg în numere anterioare din PC Report.

Calculatoarele din Internet pot fi clasificate în două mari categorii: noduri terminale și rutere. Nodurile terminale sunt majoritare, și sunt punctele care oferă sau accesează informația. Ruterele sunt calculatoare specializate, al căror scop este doar să transporte informația între punctele terminale.

Toate calculatoarele cuplate la Internet au cel puțin o adresă Internet, numită adresă IP; adresele sunt unice, și identifică în mod ne-ambiguu calculatoarele. (Un calculator care este cuplat simultan la mai multe rețele va avea mai multe adrese; adresele sunt unice, în sensul că fiecare adresă se întîlnește într-un singur loc în Internet.) O adresă IP este un simplu număr întreg pe 32 de biți, care în mod tradițional este scris indicînd valorile celor patru octeți separate cu punct; de exemplu: 194.102.154.13.

Cînd un calculator vrea să comunice cu un altul, trebuie întîi să îi afle adresa IP. Pentru că utilizatorii în general numesc calculatoarele folosind niște șiruri de caractere, de exemplu www.netreport.ro, un serviciu special din Internet, numit serviciul de nume, traduce fiecare astfel de șir de caractere într-o adresă IP.

După ce un calculator a aflat adresa destinației cu care vrea să comunice, sparge datele pe care le are de transmis în pachete pe care le trimite în mod individual. Fiecare pachet conține datele de transmis, adresele IP ale sursei și destinației, și adesea și alte informații utile, de exemplu cîte pachete au fost deja trimise și dacă sursa vrea ca recepția să fie confirmată. Acest pachet este dat unui ruter.

Ruterele fac doar două lucruri în viață: (1) discută între ele pentru a afla în care parte se află fiecare calculator cuplat la Internet (adică învață topologia Internetului) (2) cînd primesc pachete pentru o anumită adresă, folosesc informația despre topologie pentru a trimite pachetul spre destinație. Dacă totul funcționează bine, un pachet de date sare din ruter în ruter, la fiecare pas fiind mai aproape de destinație, pînă cînd este livrat.

Destinatarul descifrează pachetul, și dacă sursa se așteaptă la un răspuns (de exemplu o confirmare), răspunde folosind aceeași metodă, construind un nou pachet de date. Pentru a afla care este sursa de unde i-a venit pachetul, destinatarul se uită la adresa IP a sursei, aflată în interiorul pachetului primit.

Atacuri distribuite de sabotare a serviciilor (DDoS)

Dacă ați citit descrierea de mai sus cu atenție, poate ați observat o primă slăbiciune a Internetului: am zis că pachetul cu date este compus de sursă. Sursa pune înauntru toate informațiile necesare pentru a trimite pachetul în cealaltă parte, inclusiv propria ei adresă. Asta implică însă ca avem încredere în sursă, ca nu va trimite pachete malformate, și ca nu va minți în ceea ce privește propria ei adresă.

Într-adevăr, ruterele nu verifică dacă sursa unui pachet pe care îl primesc este corectă, și în general nici nu pot face așa ceva, pentru că ruterele pot primi pe aceeași sîrmă pachete de la zeci de milioane de adrese diferite. Unul din ingredientele care face atacurile distribuite atît de ucigașe este chiar aceasta: sursele pot mițni în ceea ce privește propria lor identitate, punînd valori arbitrare în pachet. Această tehnică se numește în jargon ``spoofing'' (în română asta s-ar traduce aproximativ prin escrocherie).

De ce este importantă tehnica de ``spoofing''? Pentru că împiedică filtrarea pachetelor bazate pe sursă!

La ora actuală toate companiile care au o prezență importantă pe Internet (și sunt din ce în ce mai multe astfel de companii) încearcă să se protejeze de atacurile informatice folosind ``pereți de foc'' (firewalls). Un firewall este un fel de ruter special, care analizează traficul care trece spre companie, și care elimină pachetele care arată suspect. Dacă un atacator naiv încearcă să inunde compania cu pachete, firewall-ul observă predominanța pachetelor care vin de la o anumită adresă, și le elimină în mod defensiv pe toate. În felul acesta, compania este protejată. Dacă atacatorul folosește însă spoofing, firewall-ul este neputincios, pentru că nu poate diferenția pachetele de atac de cele legitime care ar veni de la același surse.

Atacatorii sunt însă și mai malefici: pentru că, în general, companiile au servere foarte puternice, ele nu pot fi inundate dacă atacul pornește de la un calculator obișnuit: acesta nu poate genera suficient trafic, și adesea nu are destulă capacitate de rețea pentru a sufoca victima cu trafic1. Atacatorii au dezvoltat scule care funcționează în două etape:

  1. Atacatorii infiltrează viruși sau viermi în zeci, sute sau chiar mii de calculatoare. Tehnologiile pentru acest gen de atac sunt cunoscute de foarte multă vreme, chiar dinainte de existența Internetului.

  2. Calculatoarele infectate execută apoi un program de atac, care așteaptă comenzi de la distanță. Cînd primesc o astfel de comandă, toate aceste calculatoare pornesc simultan un atac concertat asupra victimei.

Aceste atacuri se numesc DDoS, de la Distributed Denial of Service. ``Distributed'' vine din faptul că atacul se face simultan de la multe calculatoare, iar ``DoS'' vine din faptul că atacul consumă resursele computaționale ale victimei, și nu fură sau distruge informație.

O evaluare a numărului de atacuri folosind ``împrăștierea'' (back-scatter)

În luna iulie 2001 va avea loc al Zecelea simpozion pentru securitate USENIX; acolo va fi prezentat un articol deosebit de interesant, care încearcă să estimeze numărul de atacuri DDoS din Internet. Cei trei autori sunt cercetători la universitatea din California din San Diego. Despre ultimul dintre autori, Stefan Savage, am mai scris chiar în PC Report, în contextul analizei unor slăbiciuni ale protocolului de transmisiune fiabilă a datelor în Internet, TCP.

Articolul despre DDoS se bazează pe o idee foarte simplă și foarte elegantă: dacă pachetele de atac folosesc (spoof) adrese sursă absolut la întîmplare (uniform distribuite între 0 și 232-1), atunci cînd sursa va încerca să răspundă la un astfel de pachet, va trimite răspunsul unui calculator din Internet la întîmplare. Acest fenomen este numit de autori ``împrăștiere'' (back-scatter); o ilustrație a sa este în figura 1 .

Figura 1: Împrăștierea pachetelor de răspuns la un atac. (1) Atacatorul inserează o adresă sursă arbitrară X în pachetul folosit pentru atac (2) Victima primește pachetul otrăvit (3) Victima răspunde calculatorului cu adresa X (4) Calculatorul de la adresa X primește un pachet de răspuns din senin
Imprastierea pachetelor

Această observație oferă cheia monitorizării atacurilor: dacă atacurile sunt suficient de multe ele vor putea fi observate de la orice calculator din Internet. Dacă aveți un calculator conectat la Internet, în medie la fiecare 232 = aproximativ 4 miliarde de pachete de atac, acesta va primi un pachet-răspuns.

Asumpția că adresele sunt generate la întîmplare este foarte importantă pentru a putea face o estimare statistică corectă; autorii au investigat toate pachetele software disponibile public pentru atacuri distribuite, și în toate aceste programe adresa sursă este într-adevăr generată folosind numere aleatoare cu distribuție uniformă (articolul citat discută pe larg și alte scenarii posibile, și trage concluzia că, dacă asumpția de uniformitate nu e adevărată, rezultatele obținute vor subestima numărul de atacuri, și nu îl vor supraestima).

Autorii studiului au obținut acces la un ruter care servește o rețea foarte mare (o rețea de clasă A, cum este numită), care conține 224 adrese, adică 1/256 din numărul total de adrese din Internet (ruterul este singura conexiune a acestei rețele la Internet). Lîngă acest ruter a fost instalat un PC, programat să noteze informații despre toate pachetele care circulă dinspre și spre această rețea.

PC-ul a colectat date timp de trei săptămîni, în trei experimente de cîte o săptămînă, la scurt timp unul după altul. Datele colectate au fost apoi analizate separat (off-line), eliminînd traficul legitim, și păstrînd numai pachetele împrăștiate (pachete de tip răspuns care vin fără o cerere inițiată din interiorul rețelei).

Datorită asumpției de distribuție uniformă, aceste pachete vor reprezenta în medie 1/256 din întregul trafic din Internet care reprezintă atacuri DDoS. Numărînd aceste pachete putem obține estimarea amploarei fenomenului la scara mondială!

Numere îngrijorătoare

Rezultatele sunt foarte îngrijorătoare: în cele trei săptămîni au fost observate 200 de milioane de pachete de acest gen. Acest trafic trebuie înmulțit cu 256 pentru a obține traficul din întregul Internet: 51 de miliarde de pachete! Considerînd că acest trafic este focalizat pe un număr relativ mic de victime, dimensiunile sunt înfricoșătoare.

(Să observăm că, din moment ce orice calculator din Internet primește pachete împrăștiate, și că în medie fiecare calculator va primi unul din fiecare 4 miliarde de pachete, chiar și calculatorul dumneavoastră observă în medie 1 pachet împrăștiat la fiecare două zile. Deci chiar și dumneavoastră ați putea efectua măsurători, ceva mai puțin precise, despre magnitudinea fenomenului, fără a avea la dispoziție resursele din articolul descris!)

Dar pachetele captate conțin multe alte informații. De exemplu, conțin adresele victimelor, care răspund la pachetele-atac. Din tipul de pachet se poate infera tipul de atac. Folosind distribuția pachetelor în timp, autorii au încercat să atribuie pachetele unor atacuri distincte și să măsoare frecvența, durata și intensitatea atacurilor.

Autorii deduc ca au asistat la 12800 de atacuri în această perioadă, asupra a 5000 de victime distincte. Cele mai lente atacuri aveau cîte 50 de pachete/secundă (observate la victimă), iar cele mai puternice peste 15000 de pachete/secundă. Cel mai intens avea peste două treimi de milion de pachete/secundă!

Studiind soluțiile disponibile comercial pentru a contracara atacurile de acest gen, autorii afirmă ca un atac de 500 de pachete pe secundă poate pune în genunchi un server mic, și că un firewall sofisticat poate tolera pînă la 14000 pachete/secundă. Ca atare, multe din atacurile observate sunt ucigătoare pentru companii mici, și unele dintre ele pot fi fatale și pentru instalații deosebit de scumpe și sofisticate.

Durata atacurilor este în medie scurtă: 50% din atacuri durează mai puțin de 10 minute, dar 2% din atacuri durează ore, c'iteva zeci de atacuri fiind neîntrerupte timp de mai multe zile consecutive.

Cele mai multe victime (65%) au suferit un singur atac, 18% suferind două atacuri. Dar unele victime au suferit multiple atacuri, uneori mai multe atacuri diferite simultan!

Cele mai multe atacuri vizează sistemul de operare și capacitatea lui de a procesa pachete2. Unele atacuri sunt însă direcționate spre aplicațiile care se execută pe calculatorul atacat, cum ar fi servere de web sau servere de chat. Un număr relativ mic de atacuri lovește în puncte foarte importante pentru infrastructura Internetului: servere de nume și rutere. Deși aceste atacuri sunt puține, impactul lor poate fi enorm, pentru că pot afecta toată porțiunea de rețea care depinde de serverul sau ruterul afectat. Cam 1-3% dintre atacuri sunt de acest tip.

România: locul I în lume pe țări la atacuri distribuite

În pachetele împrăștiate se găsește o mulțime de informație foarte interesantă. În mod ironic, lipsește tocmai informația cea mai utilă, și anume identitatea reală a atacatorului! La ora actuală nu există nici o metodă prin care aceasta poate fi aflată, cel puțin pentru atacurile care folosesc spoofing. Felul în care poate fi depistată sursa reală a acestor atacuri este un subiect fierbinte de cercetare, dar este destul de departe de a fi rezolvat în mod practic.

Pe lîngă toate aceste statistici, autorii au încercat să traducă adresele IP ale victimelor în adrese simbolice (nume) și au clasificat atacurile după domeniul și țara de destinație ale victimelor.

Figura 2: Procente din atacurile DDoS grupate după sufixul domeniului victimei. Semnul întrebării indică calculatoare pentru care nu a putut fi determinat numele pornind de la adresa IP.
\begin{figure}\centerline{\epsfxsize=10cm\epsffile{atacuri.eps}}\end{figure}

Rezultatele sunt iarăși deosebit de interesante. Figura 2 arată distribuția atacurilor după sufixul domeniului atacat, pentru fiecare din cele trei săptămîni. După cum se vede, atacurile sunt relativ neschimbate de la o săptămînă la alta. Cam 30% din atacuri nu au putut fi clasificate (nu este întotdeauna posibil să se translateze o adresă IP într-un nume); e posibil ca în acest grup să fie calculatoare din domeniul militar cu sufixul .mil, care nu apare în această figură.

Domeniile .net și .com sunt oarecum de așteptat (cu cîte 15% fiecare), dar autorii își exprimă surpriza pentru poziția a patra, prima care aparține unei țări: sufixul este .ro. Autorii nu își explică cum de o țară, care în materie de infrastructură Internet este departe de a fi fruntașă, conține un număr atît de mare de victime. După noi urmează, la mare distanță, în ordine Brazilia, domeniile ne-comerciale .org și .edu, și abia apoi China, Germania și Marea Britanie.

Încercarea de a mapa adresele pe domenii administrative arată că pe locul 1 în lume ca număr de atacuri este domeniul Starnets, care este un ISP (Internet Service Provider) din România, care a fost victima a 5% din toate atacurile din Internet din perioada monitorizată.

Autorii articolului încearcă să depisteze și genul de victimă; din faptul că multe din nodurile atacate sunt foarte mici, sau chiar calculatoare conectate prin modem sau cablu, ei presupun că unele atacuri sunt de fapt vendette între hackeri.

Îmi permit să ghicesc că, în ceea ce privește victimele din România, atacatorii sunt co-naționali (nu vad motivația pentru care atacatori din exterior ar bombarda ținte românești cu atîta statornicie). Asta înseamnă că suntem în top și ca intensitate a activității distructive pe Internet. Dacă raportăm la populație, sau la numărul de calculatoare conectate, conjencturez că suntem clar pe poziția întîi în lume.

Concluzii (în loc de soluții)

Voi încheia acest text cu un citat dintr-o publicație recentă despre securitatea rețelelor; citatul aparține domnului Bruce Schneier, un expert în domeniul securității informatice:

În război informația este putere. Cu cît îți înțelegi mai bine inamicul, cu atît vei fi mai capabil să-l înfrîngi. În războiul împotriva hacker-ilor dușmănoși, a celor care ``sparg'' rețele, și a altor ``pălării negre'' din ciber-spațiu, cei de partea binelui au surprinzător de puține informații. Cei mai mulți profesioniști din securitate, chiar și cei care proiectează scule de securitate, ignoră uneltele, tacticile și motivațiile inamicilor. Și această stare de fapt este favorabilă inamicilor.

Un studiu precum cel prezentat în acest text nu oferă soluții, dar chiar cuantificînd dimensiunea și natura problemei avem o bază de pornire de la care putem proiecta eventuale metode de apărare.

La ora actuală nu există soluții eficace împotriva atacurilor DDoS. O soluție parțială, care ar reduce mult gravitatea acestor atacuri, constă în filtrarea traficului la intrarea în rețea (ingress filtering). De exemplu, un ruter plasat între o rețea cu adrese de forma 128.x.x.x și Internet, nu ar trebui sa accepte pachete care vin din această rețea dar care au adrese de altă formă. Acest gen de filtrare se poate face doar la marginile rețelei; un ruter din centru are mult mai puțin control asupra direcției din care pot veni pachete. Filtrarea ar reduce enorm eficacitatea metodei ``spoofing'', pentru că marea majoritate e pachetelor ar fi distruse de rutere înainte de a intra în Internet.

Deși filtrarea la intrare este relativ simplu de implementat, problema constă în marele număr de rutere deja existente care nu folosesc această metodă, și în numărul enorm de ISP-uri (Internet Service Providers) care ignoră gravitatea acestor atacuri și nu își reconfigurează ruterele în mod corespunzător.

La ora actuală nu există însă nici o soluție practică pentru a determina cine a pornit atacul, și nici măcar pentru a determina exact calculatoarele care efectuează atacul (care de obicei nu aparțin atacatorului ci au fost infectate).

Metode extra-tehnologice pot face parte din soluție: dacă atacurile informatice sunt recunoscute ca activități ilegale, și cei care le efectuează sunt aspru pedepsiți (atunci cînd sunt descoperiți), se poate eventual reduce motivația atacatorilor.

Dintr-un punct de vedere științific însă, fenomenul Internetului este absolut fascinant, iar evoluția sa este plină de surprize. Și suntem abia la început!

Alte surse de informație



Note

... trafic1
În general, munca efectuată pentru a recepționa un pachet este mult mai mare decît munca depusă pentru a-l trimite, deci atacatorii au un avantaj din pornire.
... pachete2
Adică sunt trimise spre un port ales la întîmplare