Articol bazat pe: RedHat Security Blog.
Bash, sau Bourne again shell, este un shell UNIX, ce este probabil unul din cele mai instalate utilitare pe orice sistem Linux. Din 1980 de când a fost creat, bash a evoluat dintr-un interpretor simplu de comenzi într-un utilitar complex.
În Linux, variabilele […]
Bash, sau Bourne again shell, este un shell UNIX, ce este probabil unul din cele mai instalate utilitare pe orice sistem Linux. Din 1980 de când a fost creat, bash a evoluat dintr-un interpretor simplu de comenzi într-un utilitar complex.
În Linux, variabilele de mediu reprezintă o modalitate prin care funcționarea utilitarelor din sistemul de operare poate fi influențată. În mod uzual aceste variabile au un nume și o valoare asociată acestuia și sunt folosite de mai multe aplicații și utilitare, inclusiv de către shell-uri. Este de asemenea uzual pentru mai multe programe să folosească în fundal un shell, pentru a oferi funcționalități precum parsarea script-urilor CGI sau suport limitat pentru executarea anumitor comenzi (ex: git).
Vulnerabilitatea CVE-2014-6271 este derivată din faptul că se pot crea variabile de mediu ce conțin anumite valori, înainte de a lansa în execuție shell-ul. Aceste variabile pot conține cod ce va fi executat de îndată ce shell-ul este pornit. Nu este necesar ca variabilele de mediu să aibă o denumire specială, în schimb este necesar ca valoarea acestora să fie într-o anumită formă pentru a permite executarea codului. Din această cauză, vulnerabilitatea poate fi exploatată în mai multe contexte, de exemplu:
- parametrul ForceCommand este folosit în configurarea serviciului ssh pentru a pune la dispoziție anumitor utilizatori execuția de comenzi specifice, limitate. Vulnerabilitatea poate fi folosită pentru a ocoli restricțiile impuse și pentru a putea executa orice comenzi pe un sistem. În anumite cazuri, serverele ce oferă servicii folosind Git sau Subversion pot folosi astfel de shell-uri. Serviciile oferite prin SSH (OpenSSH, SSH, etc) nu sunt afectate întrucât utilizatorii ce se conectează de la distanță au oricum posibilitatea de a rula orice comenzi;
- serverele web Apache ce au activate modulele mod_cgi sau mod_cgid sunt afectate dacă pe acestea există script-uri CGI ce folosesc bash pentru execuție sau pentru a oferi alte funcționalități (execută comenzi externe în background, folosind bash). Astfel de funcționalități sunt folosite implicit de system/popen în C, os.system/os.popen în Python, system/exec în PHP (atunci când este rulat în mod CGI) și open/system în Perl dacă este folosit un shell (acest lucru depinde de comanda ce trebuie executată);
- clienții de DHCP (la nivelul sistemului de operare) folosesc script-uri shell pentru a configura diverși parametri ai sistemului de operare. Un atacator ce are acces la un server de DHCP, se poate folosi de acesta pentru a trimite odată cu parametrii necesari și variabile de mediu construite astfel încât îi permit acestuia să execute comenzi arbitrare cu drepturi administrative (derivate din drepturile programului client de DHCP) pe sistemul client;
- alte servicii și programe cu acces privilegiat (programe și aplicații ce au setat flag-ul SUID) pot folosi diverse script-uri shell pentru oferirea de funcționalități;
- orice altă aplicație ce folosește un shell sau rulează script-uri shell folosind bash.
Nu sunt vulnerabile:
- script-urile PHP ce sunt executate folosind mod_php nu sunt afectate chiar dacă execută bash în background;
- script-urile shell ce nu exportă variabilele de sistem nu sunt vulnerabile chiar dacă lucrează cu variabile ce conțin cod malițios.
Detalii tehnice ale vulnerabilității
Precum limbajele de programare “reale”, Bash are funcții. Deși acestea sunt limitate ca funcționalități, este posibil ca aceste funcții să fie folosite în variabilele de mediu. Vulnerabilitatea este declanșată atunci când se adaugă comenzi la sfârșitul definirii acestor funcții (în interiorul unei variabile de mediu). De exemplu:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" vulnerable this is a test
În momentul de față majoritatea distribuțiilor de Linux au inclus în actualizările de securitate un patch ce adresează acestă vulnerabilitate și se asigură că nu este permisă includerea de comenzi la sfârșitul definirii unei funcții bash. Prin urmare, dacă rulați comanda de mai sus pe un sistem ce are toate actualizările, mesajul primit de la bash ar trebui să fie similar cu:
$ env x='() { :;}; echo vulnerable’ bash -c “echo this is a test”
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x’
this is a test
Aplicarea patch-ului pe sistemele afectate de acestă vulnerabilitate nu afectează în nici un fel aplicațiile și utilitarele ce folosesc script-uri shell. Desigur, acele script-uri ce sunt scrise ca în exemplu vor fi afectate de aplicarea patch-ului însă definirea funcțiilor ca în exemplu este oricum considerată o practică greșită în programarea aplicațiilor.
Alte articole și date relevante:
Despre
Bug-ul denumit “The Heartbleed Bug” este o vulnerabilitate critică a librăriei de funcții criptografice OpenSSL. Această vulnerabilitate permite accesul la informații ce sunt protejate în mod normal de utilizarea criptării SSL/TLS. Criptarea folosind SSL/TLS pune la dispoziție mecanisme de securizare a datelor ce sunt transmise prin Internet de către aplicații pentru web, […]
Despre
Bug-ul denumit “The Heartbleed Bug” este o vulnerabilitate critică a librăriei de funcții criptografice OpenSSL. Această vulnerabilitate permite accesul la informații ce sunt protejate în mod normal de utilizarea criptării SSL/TLS. Criptarea folosind SSL/TLS pune la dispoziție mecanisme de securizare a datelor ce sunt transmise prin Internet de către aplicații pentru web, email, mesagerie instant și rețele virtuale private (VPN).
Bug-ul Heartbleed permite oricărei persoane ce are acces la fluxul de date criptate să citească o porțiune a memoriei sistemelor ce folosesc OpenSSL pentru criptare. Acest lucru duce la compromiterea cheilor secrete folosite în criptarea unui flux de date, chei ce pot fi folosite pentru decriptarea în timp real, pe resurse hardware comune, a întregului flux, bug-ul permițând astfel unui atacator accesul la datele transmise prin intermediul Internetului, date ce pot fi: nume de utilizator și parole, email-uri, conversații, etc.
Exact, ce date pot fi extrase ?
Din testele efectuate de terți au fost trase următoarele concluzii:
- serverele ce pun la dispoziție servicii criptate pot fi atacate fără ca atacatorul să lase nici o urmă;
- fără a fi necesare date suplimentare de acces, este posibilă extragerea de pe servere a cheilor private corespunzătoare certificatelor digitale utilizate pentru criptarea comunicării;
- după extragerea cheilor private, toate datele transmise printr-o conexiune ce folosește certificatul digital corespunzător cheii extrase pot fi citite.
Cum ne putem proteja ?
Cât timp folosiți o versiune vulnerabilă de OpenSSL nu există nici o modalitate de protecție. Pentru ca datele să fie în siguranță trebuie să actualizați versiune de OpenSSL folosită în cadrul sistemului de operare. Sunt disponibile deja noi versiuni de OpenSSL ce au rezolvat această problemă. Ele sunt disponibile prin canalele oficiale de distribuție a actualizărilor sistemelor de operare sau direct de la OpenSSL.
Ce versiuni de OpenSSL sunt afectate ?
Versiunile de OpenSSL:
- OpenSSL 1.0.1 la 1.0.1f (inclusiv) sunt vulnerabile
- OpenSSL 1.0.1g nu este vulnerabil
- OpenSSL 1.0.0 nu este vulnerabil
- OpenSSL 0.9.8 nu este vulnerabil
Bug-ul a fost introdus în OpenSSL în Decembrie 2011 și este prezent începând cu versiunea 1.0.1 a OpenSSL din 14 Martie 2012. OpenSSL 1.0.1g lansat pe 7 Aprilie 2014 rezolvă acest bug.
Acest articol este o traducere parțială a sursei disponibile la http://heartbleed.com/.
Înainte de sfârșitul anului 2013, Symantec a observat o creștere semnificativă a numărului de atacuri reflexive ce folosesc protocolul NTP. NTP (Network Time Protocol), este un protocol mai puțin cunoscut ce folosește portul 123 (UDP) și este folosit pentru a sincroniza timpul pe echipamentele conectate la o rețea de comunicații de date. NTP, […]
Înainte de sfârșitul anului 2013, Symantec a observat o creștere semnificativă a numărului de atacuri reflexive ce folosesc protocolul NTP. NTP (Network Time Protocol), este un protocol mai puțin cunoscut ce folosește portul 123 (UDP) și este folosit pentru a sincroniza timpul pe echipamentele conectate la o rețea de comunicații de date. NTP, este unul din serviciile de tipul “configurează și uită”.
Cum funcționează atacurile reflexive ce folosesc NTP ?
La fel ca și atacurile DNS reflexive cu amplificare, atacatorul trimite un pachet cât mai mic (ce are ca adresă IP sursă adresa IP a victimei), ce generează un răspuns cât mai mare (ca și număr de octeți). În cazul de față, atacatorul se folosește de comanda NTP “monlist”. Această comandă este specifică versiunilor mai vechi de NTP și poate fi trimisă de la distanță fără a fi necesare operații de autentificare sau autorizare la nivel de utilizator sau adresă IP. Comanda “monlist” trimite către adresa IP de la care a fost inițiată comanda o listă cu ultimele 600 de echipamente care s-au conectat la serverul de NTP, fiind astfel o sursă excelentă pentru a genera atacuri reflexive cu grad foarte mare de amplificare (sunt necesari doar câțiva octeți pentru a genera un trafic de 1000 de ori mai mare). Cele mai uzuale utilitare folosite pentru scanare claselor de adrese IP precum NMAP, au module speciale pentru NTP ce includ suport pentru acestă comandă, folosind-o pentru a aduna mai multe informații.
Cum ne putem elimina riscul ca serverul NTP să fie folosit în astfel de atacuri ?
Cea mai simplă cale este să facem upgrade la NTP versiunea 4.2.7, în care suportul pentru comanda “monlist” este scos definitiv. Atunci când upgrade-ul nu este o opțiune, se poate porni serviciul de NTP cu opțiunea noquery activată în fișierul de configurare. Această opțiune nu va permite accesul la pachetele de tip mod 6 și mod 7 ale NTP (ce includ și comanda monlist).
O rezolvare mult mai elegantă și mai sigură în același timp presupune configurarea corectă și completă a serviciului NTP. Un exemplu de bune practici în acest sens poate fi găsit pe site-ul Team Cymru.
Cum putem verifica dacă serverul nostru de NTP are comanda monlist activată ?
Cea mai simplă cale de a verifica dacă un server are comanda monlist activată este folosind utilitarul ntpdc , mai precis:
[root@server ~]# ntpdc -c monlist «adresă IP server NTP»
Dacă rezultatul arată ca în lista de mai jos atunci serverul dvs de NTP are suport pentru comanda monlist și poate fi folosit în atacuri NTP reflexive cu amplificare.
remote address port local address count m ver code avgint lstint
===============================================================================
localhost.localdomain 53949 127.0.0.1 1 7 2 0 0 0
tock.usshc.com 123 xxx.xxx.xxx.xxx 1 4 4 5d0 0 53
198.52.198.248 123 xxx.xxx.xxx.xxx 1 4 4 5d0 0 54
rook.slash31.com 123 xxx.xxx.xxx.xxx 1 4 4 5d0 0 55
eightyeight.xmission.c 123 xxx.xxx.xxx.xxx 1 4 4 5d0 0 56
Referințe:
- Articol inițial – Symantec – http://www.symantec.com/connect/blogs/hackers-spend-christmas-break-launching-large-scale-ntp-reflection-attacks
- Ghid de bună practică a configurării serviciului NTP – Team Cymru – http://www.team-cymru.org/ReadingRoom/Templates/secure-ntp-template.html
O noua vulnerabilitate ce afectează toate versiunile de Java inclusiv 1.5.0_22-b03, 1.6.0_35-b10 și 1.7.0_07-b10 a fost descoperita recent, vulnerabilitate ce permite aplicațiilor web Java (applet-uri) să evite măsurile de protecție existente și să ruleze fără restricții. Până când Oracle va pune la dispoziție un patch pentru a rezolva această vulnerabilitate vă recomandăm să deactivați […]
O noua vulnerabilitate ce afectează toate versiunile de Java inclusiv 1.5.0_22-b03, 1.6.0_35-b10 și 1.7.0_07-b10 a fost descoperita recent, vulnerabilitate ce permite aplicațiilor web Java (applet-uri) să evite măsurile de protecție existente și să ruleze fără restricții. Până când Oracle va pune la dispoziție un patch pentru a rezolva această vulnerabilitate vă recomandăm să deactivați rularea applet-urilor Java în browser. Mai multe detalii puteți găsi aici.