Soluții - PC Magazine Romania, Septembrie 2004
INTERNET PRO
Groapa cu noroi: Tarpitting cu LaBrea
Alexandru Ioan Lazăr
Săptămânile trecute, prin București a plouat. Destul de rău. Și, cum se-ntâmplă de obicei, ploaia vine în momente nepotrivite. Adică exact când se consolida fundația casei din fața blocului meu. Mormane de pământ care s-au transformat în noroi din cauza ploii. Și mi-am adus aminte de o tehnică pe care vroiam s-o detaliez mai demult, dar de fiecare dată a intervenit ceva. Dar gata, nimic nu ne mai poate opri, azi vorbim despre tarpitting!
Dacă te întrebi ce nume mai e și ăsta (chiar așa, de unde noroi în calculatorul meu? cum, pe Internet?), adu-ți aminte ce s-a întâmplat când ai rămas cu mașina ta în noroi. Eventual Dacia 1310 (RIP). Nu-i așa că ți-a luat mult să ieși? Ei bine, cam la asta se referă termenul de tarpitting. Încetinirea unor operații.
Dorele, ne mai ții mult, mă?
Nu voi vorbi prea mult despre aplicarea tarpitting-ului în cazul serverelor de e-mail. Deși poate fi uneori utilă, de cele mai multe ori este o complicație în plus, care deși poate stopa pe cei ce trimit junk mail de pe server, va mânca prea multe resurse. În schimb, haide să ne concentrăm un pic asupra tarpitting-ului aplicat porturilor TCP/IP.
Iulie 2001 a avut un eveniment de maximă importanță. Nu mă refer la ultimul 4 iulie dinainte de 9/11, ci la lansarea temutului Code Red. Pentru cei nefamiliarizați, Code Red a fost un vierme (worm) teribil de distructiv. Motivul? Spre deosebire de alți viermi, Code Red scana portul 80 (http) al unor IP-uri random, căutându-le pe cele care rulau serverul Microsoft ISS. Atunci când găsea unul, încerca imediat exploatarea vulnerabilității. IDA buffer overflow (detalii aici: http://www.cert org/advisories/CA-2001-13.html), și pornea 100 de thread-uri pe respectiva mașină. Evident, rezultatul a fost catastrofal, dar nu atât din vina Microsoft (care descoperise problema și publicase chiar un patch, cu aproape o lună înainte de lansarea virusului) cât, desigur, a administratorilor, care nu instalaseră acel patch.
Acest tip de scanare al Code Red se numește Sweeping. Pur și simplu lansează întâi cereri de conectare (SYN, ping, SYN/ACK…) pentru a afla care gazde sunt disponibile și începe scanarea lor.
Cel care a avut ideea salvatoare în cazul acestui worm a fost Tom Liston. El a observat că putea să-și dea seama când este scanat, și să răspundă imediat lui Code Red. Așa că a găsit o metodă de apărare, implementată într-un program ce s-a numit, ulterior, LaBrea.
Cum funcționează LaBrea? Am vorbit mai demult despre protocolul ARP, cel care "traduce" IP-urile în adrese MAC hardware. Atunci când cererea unui calculator ajunge într-un LAN, router-ul va lansa un semnal ARP în toată subrețeaua, pentru a căuta mașina căruia cererea îi este destinată. Odată adresa MAC identificată, totul este în ordine, iar "discuția" între mașini poate începe.
Dacă router-ul nu găsește din prima acea mașină va mai trimite semnalul ARP de câteva ori, iar dacă tot nu o găsește va renunța, trimițând mașinii care a lansat cererea semnalul "destination unreacheable". Iar scanner-ul (da, să presupunem că e vorba de un scanner) va ajunge la concluzia că acea mașină nu există și va trece mai departe cu IP-urile pe care le are de scanat.
Aici intră în acțiune LaBrea. Acesta va asculta mesajele router-ului. Atunci când "aude" mai multe mesaje ARP, nu va lăsa router-ul să trimită mesajul "destination unreachable", ci își va asuma adresa MAC a calculatorului căutat. Din acest moment, atacatorul nu mai are scăpare. În funcție de metoda de detectare a țintelor folosite, LaBrea își va schimba comportamentul. Astfel, dacă pachetul trimis este unul SYN/ACK, LaBrea răspunde cu RST. Așa că scanner-ul va fi "convins" că nu există IP-uri neutilizate în rețea. Dacă pachetul trimis este ICMP ping, LaBrea va răspunde. În fine, dacă pachetul este de tip SYN, există două posibilități. Cea mai recentă variantă LaBrea va răspunde SYN/ACK, dar va seta dimensiunea ferestrei TCP (TCP Window) la 10 bytes (se poate specifica o altă valoare). Imediat ce primește primul pachet de la atacator, va seta această dimensiune la o valoare nouă: 0 bytes, adică WAIT. Așa că mașina atacatorului nu va avea altă posibilitate decât să tot trimită pachete de probă, așteptând schimbarea acestei valori - în timp ce LaBrae continuă să răspundă cu o fereastră TCP de 0 bytes, forțând un nou pachet de probă. Prima versiune LaBrea răspundea cu SYN/ACK și ignora totul după aceea… astfel încât chiar și un atac DoS rudimentar putea să aibă de furcă: în mașina inexistentă să rămână cu porturile așteptând "ceva", tocmai mașina de pe care era lansat atacul era cea care rămânea în aer. Dorele, ia mai fă mă…
Rotești, și dai cu ascuțitul…
Cât de eficientă este tehnica aceasta? Pot spune că a stopat nebunia Code Red, împreună cu patch-ul lansat de Microsoft. Mai pot spune că am auzit mărturii extrem de plăcute despre ea. În schimb, nu mă pot abține să nu dau câteva sfaturi referitoare la folosirea ei. Când rulezi LaBrea, activează switch-ul -s (switch-safe environment). De ce? Dacă rețeaua ta folosește switch-uri, este posibil ca LaBrea să "audă" cererile ARP, dar nu și răspunsul, și să intre în conflict cu un IP care de fapt există. Acest switch rezolvă problema. De asemenea, o opțiune de care m-am "îndrăgostit" imediat a fost aceea de a nu răspunde cererilor venite pe porturi excluse. Adică, anumite porturi se vor comporta ca și cum ar fi protejate de un firewall, și vor refuza pur și simplu pachetele. Opțiunea aceasta chiar a reușit să amețească de tot scanner-ul Nmap (pe care
l-am folosit), și a generat și intrari în fișierele-jurnal de pe mașina scanată. O listă cu toate comenzile veți găsi aici: http://labrea.sourceforge.net/README Unde veți avea și plăcerea de a întâlni numele unui român.
Deși ocupă neașteptat de puține resurse pentru ceea ce face, totuși nu e cazul să-l supraestimezi. Asigură-te că mașina folosită este cât de cât capabilă (mie mi-a mers bine pe un P233, 64 MB RAM) și că are și ceva spațiu pentru fișierele-jurnal.
Implementarea
LaBrea 2.0 poate fi descărcat gratuit aici: http://labrea.sourceforge.net/labrea-info.html.
Este disponibil pentru mai multe platforme, dar a fost testat (cu succes) pe
FreeBSD, Linux, Solaris si Windows 98/2000. Ca avertisment, dat fiind faptul
că încă folosește WinPcap 2.3, LaBrea nu funcționează pe Windows XP, dar autorul
pare a se gândi serios la un upgrade. A…și îți recomand să citești tot
FAQ-ul, și să parcurgi și situl, pentru că deși nu are un aspect fenomenal,
este de un umor superb. (Like to live dangerously? You want to be right up there
with the latest and greatest? Then you just will not be happy until you have
your very own CVS copy of the LaBrea sources…)
Ca să confirm: am testat și eu LaBrea, folosind FreeBSD și Linux, funcționarea a fost absolut impecabilă. Am întâmpinat o singură dată probleme (un refuz categoric de a se compila…), cu un sistem Red Hat 8 mai vechi, dar s-au rezolvat cu un update la bibliotecile folosite.
LaBrea se instalează pe router ca root (Administrator), și rulează apoi în background. Generează și fișiere-jurnal, pentru aceia care sunt atacați atât de rău încât vor să aibă o Discuție cu vreun ISP. Tarpitting-ul este o tehnică excelentă, pe care ți-o recomand cu toată căldura. Este o adiție foarte puternică pentru securitatea rețelei tale.
Acestea fiind zise, închei, așteptând ca de obicei mesajele tale la [email protected].
Și până data viitoare când ne vedem… mult noroc.
|