Bashdoor (de asemenea în engleză Shellshock [1] ) este o serie de vulnerabilități software descoperite în programul GNU Bash în septembrie 2014 și lansate public pe 24 septembrie [2] . Multe servicii de internet , inclusiv servere web , pot folosi Bash pentru a procesa anumite solicitări, cum ar fi atunci când execută scripturi CGI . Vulnerabilitatea permite unui atacator să execute comenzi arbitrare, obținând acces neautorizat la sistemele informatice [3] .
Vulnerabilitățile constau în faptul că Bash, spre deosebire de capacitățile declarate, execută comenzi atunci când primește unele valori non-standard ale variabilelor de mediu ( mediu ) [1] [4] . La câteva zile după publicarea vulnerabilității originale, au fost descoperite câteva bug-uri similare, care au împiedicat lansarea rapidă a unei versiuni patchizate.
Eroarea inițială a fost descoperită de Stéphane Chazelas [1] ( franceză Stéphane Chazelas ) pe 12 septembrie 2014 [1] , care a sugerat numirea acesteia „bashdoor” (consonantă cu backdoor ) [1] . Vulnerabilitatea a primit numărul CVE-2014-6271 în baza de date MITRE și a rămas nepublicată (a fost embargoată ) până la ora 14:00 UTC pe 24 septembrie, pentru ca autorii programului, creatorii de distribuții și alte organizații interesate să poată lua cele necesare. măsuri [5] .
O analiză a codului sursă Bash indică faptul că vulnerabilitatea a fost introdusă în cod în jurul versiunii 1.13 în 1992 sau mai devreme [6] și a rămas nedetectată publicului larg și nedeclarată începând cu [4] . Echipa de creație Bash are dificultăți în a determina ora exactă a erorii a fost introdusă din cauza jurnalului de modificări insuficient detaliat ( jurnalul de modificări ) [1] .
Pe 25 septembrie 2014, pe baza vulnerabilității, au fost deja create rețele bot pentru a efectua atacuri DoS și DDoS , precum și pentru a scana vulnerabilități [7] [8] . Se estimează că milioane de sisteme sunt vulnerabile. Bug-ul a primit ratingul maxim pe scara de severitate și este comparat ca valoare cu Heartbleed - un bug în OpenSSL (aprilie 2014) [9] [10] .
Vulnerabilitatea Shellshock (bashdoor) se referă la programul bash (dezvoltat de proiectul GNU ) utilizat în multe sisteme de operare și distribuții asemănătoare Unix ca interpret de linie de comandă și pentru executarea scripturilor shell. Deseori setat ca interpret de sistem implicit.
Pe Unix și pe alte sisteme de operare suportate de bash, fiecare program are o listă de perechi nume-valoare numite variabile de mediu . Când un program pornește altul, este trecută și lista inițială a variabilelor de mediu [11] . Pe lângă variabilele de mediu, bash menține și o listă internă de funcții, numite scripturi care pot fi apelate dintr-un script bash executabil [12] . Când porniți noi instanțe bash dintr-un bash existent, este posibil să treceți ( exportați ) valorile variabilelor de mediu existente și definițiile funcției către procesul generat [13] . Definițiile funcțiilor sunt exportate prin codificarea acestora ca noi variabile de mediu cu un format special, începând cu parantezele goale „()” urmate de definiția funcției ca șir. Noile instanțe de bash scanează toate variabilele de mediu la pornire, detectând formatul dat și transformându-l înapoi într-o definiție de funcție internă [14] . Această transformare se realizează prin crearea unui fragment de cod bash bazat pe valoarea variabilei de mediu și executându-l, adică „on-the-fly”. Versiunile afectate de bash nu verifică dacă executabilul conține doar o definiție a funcției [14] . Astfel, dacă un atacator are capacitatea de a furniza o variabilă de mediu arbitrară la pornirea bash, atunci devine posibilă executarea comenzilor arbitrare.
Pe 27 septembrie a fost publicat un patch de calitate, care adaugă un prefix special tuturor funcțiilor exportate și importate atunci când sunt convertite în variabile de mediu și invers [15] .
În aceeași zi în care au fost publicate informațiile despre vulnerabilitatea originală și patch-urile care o remediază, Tavis Ormandy a descoperit un nou bug asociat CVE-2014-7169 [3] . Remedieri actualizate au devenit disponibile pe 26 septembrie [3] [16] [17] [18] [19] [20] .
În timp ce lucra la remedierea bug-ului Shellshock original, cercetătorul Red Hat Florian Weimer a descoperit încă două erori: CVE-2014-7186 și CVE-2014-7187 [21] [22] .
Pe 26 septembrie 2014, doi dezvoltatori open-source, David A. Wheeler și Norihiro Tanaka, au observat că au existat probleme suplimentare care încă nu au fost rezolvate de patch-urile disponibile la acel moment. În e-mailul său către listele de corespondență „oss-sec” și „bash bug”, Wheeler a scris:
Acest patch continuă doar munca „kill the mole” ( whac-a-mole ) [23] pentru a remedia diverse erori de analiză începute cu primul patch. Desigur, analizatorul bash conține multe alte vulnerabilități.
Text original (engleză)[ arataascunde] Acest patch continuă doar treaba „whack-a-mole” de a remedia erorile de analiză care au început cu primul patch. Parser-ul lui Bash este sigur că va avea multe alte vulnerabilități — [24]Pe 27 septembrie 2014, Michal Zalewski a anunțat că a descoperit alte câteva erori în bash [25] [26] , dintre care una exploatează faptul că bash este adesea compilat fără a utiliza tehnica de protecție ASLR ( Address Space Layout Randomization ) [27]. ] . Zalewski a cerut și un plasture urgent de la Florian Weimer [25] [26] [27] .
Bashdoor original: un tip special de variabilă de mediu constă în definirea unei funcții exportate urmată de comenzi arbitrare. Versiunile vulnerabile ale lui Bash execută aceste comenzi arbitrare în timpul pornirii [28] . Exemplu de eroare:
env x = '() { :;}; echo Vulnerable' bash -c "echo Test print"Pe sistemele vulnerabile, acest test va tipări fraza „Vulnerabil” prin executarea comenzii din variabila de mediu x [29] .
Din 29 septembrie, detaliile vulnerabilității nu au fost dezvăluite public [25] [27] [30] .
Din 29 septembrie, detaliile vulnerabilității nu au fost dezvăluite public [25] [31] .
Descoperit de Tavis Ormandy în timp ce lucra la CVE-2014-6271 :
env X='() { (a)=>\' sh -c "echo date"; cat echo
Testul face ca „ecou” să devină numele fișierului pentru redirecționarea ieșirii, iar „data” să fie executată. Bug-ului a primit numărul CVE-2014-7169 [3] .
Un exemplu de eroare 7169 pe un sistem care a primit o remediere pentru eroarea CVE-2014-6271, dar nu pentru eroarea CVE-2014-7169 [32] $ X = '() { (a)=>\' bash -c "dată ecou" bash: X: linia 1 : eroare de sintaxă aproape de simbolul neașteptat ` = ' bash: X: linia 1: `' bash: eroare la funcția de import definiție pentru ` X ' [ root@ ec2-user ] # cat echo Vin 26 Sep 01:37:16 UTC 2014Remedierea atât CVE-2014-6271 cât și CVE-2014-7169 va întrerupe testul:
$ X = '() { (a)=>\' bash -c „data ecou” Data$ ecou pisică cat: echo: Nu există un astfel de fișier sau directorEroarea este cauzată de probleme similare din codul Bash [33] , dar este afectată de „<<EOF” repetat
Test bash -c 'adevărat <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo „Vulnerabil de CVE-2014-7186, redir_stack” Sistemul afectat va afișa textul „Vulnerable by CVE-2014-7186, redir_stack”.Bug-ul este cauzat de probleme similare în codul Bash [33] , totuși este afectat de multiple repetări ale lui „terminat”
Test ( pentru x în { 1 ..200 } ; face echo "pentru x $x în ; face :" ; terminat ; pentru x în { 1 ..200 } ; face eco done ; terminat ) | bash || ecou „Vulnerabil de CVE-2014-7187, word_lineno” Sistemul afectat va afișa textul „Vulnerable by CVE-2014-7187, word_lineno”.La o oră de la publicarea vulnerabilității Bash, au existat rapoarte despre piratarea sistemelor informatice cu ajutorul acesteia. Pe 25 septembrie, au fost confirmate diverse atacuri „în sălbăticie”, de la simple atacuri DoS până la desfășurarea de servere de comandă și control prin intermediul sistemului rău intenționat „BASHLITE” [34] [35] . Kaspersky Labs a raportat că unele dintre computerele infectate au lansat un atac DDoS împotriva a trei ținte [8] . Pe 26 septembrie, a fost descoperită o rețea botnet „wopbot”, formată din servere infectate prin bashdoor și folosită în DDoS împotriva CDN-urilor Akamai Technologies și pentru a scana rețelele Departamentului de Apărare al SUA [7] .
Există mai multe modalități potențiale pe care un atacator le poate folosi pentru a transmite variabile de mediu arbitrare către bash care rulează pe serverul atacat:
Serverele web care execută scripturi CGI ( Common Gateway Interface ) trec detaliile unei cereri de utilizator prin variabile de mediu, cum ar fi HTTP_USER_AGENT. Dacă cererea este procesată de programul Bash, sau de un alt program care apelează bash intern, atunci atacatorul poate înlocui șirul User-Agent transmis prin http cu un declanșator de atac Shellshock adăugând propriile comenzi [36] . De exemplu, instrucțiunea „ping” cu adresa atacatorului poate fi dată ca atare comandă. Din solicitările ping primite, atacatorul va ști dacă atacul a funcționat.
Deși CGI este o interfață moștenită cu alte riscuri de securitate [37] , este încă în uz. De exemplu, unul dintre scripturile standard cPanel este vulnerabil [38] , se estimează că cPanelul vulnerabil poate fi folosit pe 2-3% din site-uri [39] .
Serverul OpenSSH SSH vă permite să restricționați utilizatorul la un set fix de comenzi disponibile (opțiunea „ForceCommand”). O comandă fixă este executată chiar dacă utilizatorul a cerut să fie executată o altă comandă. Comanda solicitată în acest caz este stocată în variabila de mediu „SSH_ORIGINAL_COMMAND”. Dacă o comandă fixă este executată într-un shell Bash (dacă interpretul utilizatorului este setat la Bash), GNU Bash va detecta valorile SSH_ORIGINAL_COMMAND încorporate în mediu la pornire și, în cazul unei vulnerabilități Bashdoor, va executa comenzile încorporate acolo. Astfel, un atacator cu acces doar la un shell restricționat obține acces nerestricționat [3] .
Un client DHCP solicită de obicei o adresă IP de la un server DHCP. Cu toate acestea, serverul poate trimite mai multe opțiuni suplimentare, care pot fi scrise în variabilele de mediu și pot determina exploatarea Shellshock pe un computer sau laptop conectat la rețeaua locală [40] [41] .
Un program cu setul de biți setuid poate apela bash direct sau indirect folosind apelurile de sistem system(3) , popen și altele, fără a reseta variabilele de mediu. Un atac Shellshock în astfel de cazuri ar permite utilizatorului local să-și ridice propriile privilegii la proprietarul programului de tip setuid, adesea până la root (superutilizator).
Eroarea ar putea ajunge la sistemele care nu sunt conectate la Internet în timpul procesării offline cu bash [42] .