Bashdoor (myös englanniksi Shellshock [1] ) on sarja ohjelmiston haavoittuvuuksia , jotka löydettiin GNU Bash -ohjelmasta syyskuussa 2014 ja julkaistiin julkisesti 24. syyskuuta [2] . Monet Internet-palvelut , mukaan lukien verkkopalvelimet , voivat käyttää Bashia tiettyjen pyyntöjen käsittelyyn, kuten CGI - komentosarjoja suoritettaessa. Haavoittuvuuden ansiosta hyökkääjä voi suorittaa mielivaltaisia komentoja päästäkseen luvattomasti tietokonejärjestelmiin [3] .
Haavoittuvuudet johtuvat siitä, että Bash, vastoin ilmoitettuja ominaisuuksia, suorittaa komentoja vastaanottaessaan joitain ympäristömuuttujien epästandardiarvoja ( ympäristö ) [1] [4] . Muutama päivä alkuperäisen haavoittuvuuden julkaisemisen jälkeen löydettiin useita samanlaisia bugeja, jotka estivät korjatun version nopean julkaisemisen.
Alkuperäisen virheen havaitsi Stéphane Chazelas [1] ( ranskalainen Stéphane Chazelas ) 12. syyskuuta 2014 [1] , joka ehdotti kutsumaan sitä nimellä "bashdoor" (konsonantti takaoven kanssa ) [1] . Haavoittuvuus sai numeron CVE-2014-6271 MITER- tietokantaan ja pysyi julkaisemattomana ( suljettiin kauppasaartoon ) 24. syyskuuta klo 14:00 UTC asti, jotta ohjelman tekijät, jakelujen tekijät ja muut kiinnostuneet organisaatiot voisivat ottaa tarvittavat toimenpiteet [5] .
Bash-lähdekoodin analyysi osoittaa, että haavoittuvuus otettiin käyttöön koodissa version 1.13 tienoilla vuonna 1992 tai sitä aikaisemmin [6] , ja se on jäänyt suurelle yleisölle havaitsematta ja ilmoittamatta [4] jälkeen . Bashin luontitiimin on vaikea määrittää tarkkaa ajankohtaa, jolloin bugi otettiin käyttöön, koska muutosloki ei ole tarpeeksi yksityiskohtainen ( changelog ) [1] .
25.9.2014 haavoittuvuuden perusteella luotiin jo bottiverkkoja DoS- ja DDoS -hyökkäysten suorittamiseen sekä haavoittuvuuksien tarkistamiseen [7] [8] . Arvioiden mukaan miljoonat järjestelmät ovat haavoittuvia. Virhe sai vakavuusasteikon maksimiarvosanan, ja sitä verrataan arvoltaan Heartbleediin - OpenSSL -virheeseen (huhtikuu 2014) [9] [10] .
Shellshock-haavoittuvuus (bashdoor) viittaa bash -ohjelmaan ( GNU-projektin kehittämä ), jota käytetään monissa Unix -tyyppisissä käyttöjärjestelmissä ja jakeluissa komentorivitulkinna ja komentotulkkikomentosarjojen suorittamiseen. Asetetaan usein oletusjärjestelmän tulkiksi.
Unix-tyyppisissä ja muissa bash-tuetuissa käyttöjärjestelmissä jokaisessa ohjelmassa on luettelo nimi-arvo- pareista , joita kutsutaan ympäristömuuttujiksi . Kun ohjelma käynnistää toisen, myös alustava ympäristömuuttujien luettelo välitetään [11] . Ympäristömuuttujien lisäksi bash ylläpitää myös sisäistä listaa funktioista, nimetyt skriptit, joita voidaan kutsua suoritettavasta bash-skriptistä [12] . Kun uusia bash-esiintymiä käynnistetään olemassa olevasta bashista, on mahdollista siirtää ( vienti ) olemassa olevien ympäristömuuttujien ja funktiomääritelmien arvot synnytetylle prosessille [13] . Funktiomääritykset viedään koodaamalla ne uusiksi erityismuotoisiksi ympäristömuuttujiksi, jotka alkavat tyhjillä hakasulkeilla "()" ja sen jälkeen funktion määritelmä merkkijonona. Uudet bash-esiintymät skannaavat kaikki ympäristömuuttujat käynnistyksen yhteydessä, tunnistavat tietyn muodon ja muuntavat sen takaisin sisäiseksi funktiomäärittelyksi [14] . Tämä muunnos tehdään luomalla ympäristömuuttujan arvon perusteella bash-koodifragmentti ja suorittamalla se, eli "lennossa". Vaikuttavat bash-versiot eivät tarkista, että suoritettava tiedosto sisältää vain funktion määritelmän [14] . Siten, jos hyökkääjä pystyy syöttämään mielivaltaisen ympäristömuuttujan bash-käynnistykseen, on mahdollista suorittaa mielivaltaisia komentoja.
Syyskuun 27. päivänä julkaistiin laatukorjaus, joka lisää erityiset etuliitteet kaikkiin vietyihin ja tuotuihin funktioihin, kun ne muunnetaan ympäristömuuttujiksi ja päinvastoin [15] .
Samana päivänä, kun tiedot alkuperäisestä haavoittuvuudesta ja sen korjaavista korjauksista julkaistiin, Tavis Ormandy löysi uuden asiaan liittyvän virheen CVE-2014-7169 [3] . Päivitetyt korjaukset tulivat saataville 26. syyskuuta [3] [16] [17] [18] [19] [20] .
Korjattaessa alkuperäistä Shellshock-virhettä Red Hat -tutkija Florian Weimer löysi kaksi muuta bugia: CVE-2014-7186 ja CVE-2014-7187 [21] [22] .
Syyskuun 26. päivänä 2014 kaksi avoimen lähdekoodin kehittäjää, David A. Wheeler ja Norihiro Tanaka huomasivat, että tuolloin saatavilla olevat korjaustiedostot eivät vieläkään korjanneet muita ongelmia. Wheeler kirjoitti sähköpostissaan "oss-sec"- ja "bash bug" -postituslistoille:
Tämä korjaustiedosto vain jatkaa "tappaa myyrä" ( whac-a-mole ) [23] työtä erilaisten jäsennysvirheiden korjaamiseksi, joka aloitettiin ensimmäisestä korjaustiedostosta. Bash-jäsennin sisältää tietysti monia monia monia muita haavoittuvuuksia.
Alkuperäinen teksti (englanniksi)[ näytäpiilottaa] Tämä korjaustiedosto vain jatkaa ensimmäisestä korjaustiedostosta alkanutta jäsennysvirheiden korjaamista. Bashin jäsentimessä on varmasti monia monia muita haavoittuvuuksia — [24]27. syyskuuta 2014 Michal Zalewski ilmoitti löytäneensä useita muita bugeja bashista [25] [26] , joista yksi hyödyntää sitä tosiasiaa, että bash käännetään usein käyttämättä ASLR-suojaustekniikkaa ( Address Space Layout Randomization ) [27] . ] . Zalewski vaati myös kiireellistä korjausta Florian Weimeriltä [25] [26] [27] .
Alkuperäinen bashdoor: Erityinen ympäristömuuttuja koostuu viedyn funktion määritelmästä, jota seuraa mielivaltaiset komennot. Bashin haavoittuvat versiot suorittavat nämä mielivaltaiset komennot käynnistyksen aikana [28] . Esimerkki virheestä:
env x = '() { :;}; echo Vulnerable' bash -c "echo Test print"Haavoittuvissa järjestelmissä tämä testi tulostaa lauseen "Haavoittuva" suorittamalla komennon ympäristömuuttujasta x [29] .
Syyskuun 29. päivään mennessä haavoittuvuuden yksityiskohtia ei julkistettu [25] [27] [30] .
Syyskuun 29. päivään mennessä haavoittuvuuden yksityiskohtia ei julkistettu [25] [31] .
Löysi Tavis Ormandy työskennellessään CVE-2014-6271 :n parissa :
env X='() { (a)=>\' sh -c "echo date"; cat echo
Testi saa aikaan "echo":n tiedostonimeksi tulosteen uudelleenohjaukselle ja "date":n suorittamisen. Virhe sai numeron CVE-2014-7169 [3] .
Esimerkki virheestä 7169 järjestelmässä, joka sai korjauksen virheeseen CVE-2014-6271, mutta ei virheeseen CVE-2014-7169 [32] $ X = '() { (a)=>\' bash -c "kaikupäivämäärä" bash: X: rivi 1 : syntaksivirhe lähellä odottamatonta merkkiä ` = ' bash: X: rivi 1: `' bash : virhe tuonnissa määritelmä sanalle ` X ' [ root@ ec2-user ] # cat echo pe Sep 26 01:37:16 UTC 2014Sekä CVE-2014-6271 :n että CVE-2014-7169 :n korjaaminen rikkoo testin:
$ X = '() { (a)=>\' bash -c "kaikupäivämäärä" Päivämäärä $ kissan kaiku cat: echo: Ei tällaista tiedostoa tai hakemistoaVirhe johtuu samanlaisista ongelmista Bash-koodissa [33] , mutta siihen vaikuttaa toistuva "<<EOF"
Testata bash -c 'tosi <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "Vulnerable by CVE-2014-7186, redir_stack" Haavoittuva järjestelmä näyttää tekstin "Vulnerable by CVE-2014-7186, redir_stack".Virhe johtuu samanlaisista ongelmista Bash-koodissa [33] , mutta siihen vaikuttavat useat "tehty"
Testata ( for x in { 1 ..200 } ; do echo "for x $x in ; do :" ; done ; for x in { 1 ..200 } ; do echo done ; done ) | bash || echo "Vulnerable by CVE-2014-7187, word_lineno" Haavoittuva järjestelmä näyttää tekstin "Vulnerable by CVE-2014-7187, word_lineno".Tunnin sisällä Bash-haavoittuvuuden julkistamisesta ilmoitettiin tietokonejärjestelmien hakkerointia sen avulla. Syyskuun 25. päivänä vahvistettiin useita "villiin" hyökkäyksiä, jotka vaihtelivat yksinkertaisista DoS -hyökkäyksistä komento- ja ohjauspalvelimien käyttöönottoon haitallisen "BASHLITE"-järjestelmän kautta [34] [35] . Kaspersky Labs raportoi, että jotkut tartunnan saaneista tietokoneista aloittivat DDoS-hyökkäyksen kolmea kohdetta vastaan [8] . Syyskuun 26. päivänä löydettiin "wopbot"-bottiverkko, joka koostuu bashdoor-tartunnan saaneista palvelimista ja jota käytettiin DDoS:ssa Akamai Technologies CDN:iä vastaan ja Yhdysvaltain puolustusministeriön verkkojen skannaukseen [7] .
On olemassa useita mahdollisia tapoja, joilla hyökkääjä voi siirtää mielivaltaisia ympäristömuuttujia bashille, joka toimii hyökkäyksen kohteena olevassa palvelimessa:
Web-palvelimet, jotka suorittavat Common Gateway Interface (CGI) -komentosarjoja, välittävät käyttäjäpyynnön tiedot ympäristömuuttujien, kuten HTTP_USER_AGENT, kautta. Jos pyynnön käsittelee Bash-ohjelma tai jokin muu ohjelma, joka kutsuu bashia sisäisesti, hyökkääjä voi korvata http:n kautta lähetetyn User-Agent- merkkijonon Shellshock-hyökkäyslaukaisulla lisäämällä omat komentonsa [36] . Esimerkiksi käsky "ping" hyökkääjän osoitteella voidaan antaa sellaisena komennona. Saapuvien ping-pyyntöjen perusteella hyökkääjä tietää, onko hyökkäys toiminut.
Vaikka CGI on vanha rajapinta muihin tietoturvariskeihin [37] , se on edelleen käytössä. Esimerkiksi yksi tavallisista cPanel - skripteistä on haavoittuvainen [38] , haavoittuvaa cPanelia voidaan käyttää arviolta 2-3 prosentilla verkkosivustoista [39] .
OpenSSH SSH -palvelimen avulla voit rajoittaa käyttäjän kiinteään joukkoon käytettävissä olevia komentoja ("ForceCommand" -vaihtoehto). Kiinteä komento suoritetaan, vaikka käyttäjä olisi pyytänyt toisen komennon suorittamista. Pyydetty komento on tässä tapauksessa tallennettu ympäristömuuttujaan "SSH_ORIGINAL_COMMAND". Jos kiinteä komento suoritetaan Bash-kuoressa (jos käyttäjän tulkki on asetettu Bash-tilaan), GNU Bash havaitsee ympäristöön upotetut SSH_ORIGINAL_COMMAND-arvot käynnistyksen yhteydessä ja suorittaa Bashdoor-haavoittuvuuden sattuessa sinne upotetut komennot. Näin ollen hyökkääjä, jolla on pääsy vain rajoitettuun komentotulkkiin, saa rajoittamattoman pääsyn [3] .
DHCP -asiakas pyytää yleensä IP-osoitetta DHCP-palvelimelta. Palvelin voi kuitenkin lähettää useita lisäasetuksia, jotka voivat olla kirjoitettuja ympäristömuuttujiin ja aiheuttaa Shellshockin hyödyntämisen paikallisverkkoon kytketyssä tietokoneessa tai kannettavassa tietokoneessa [40] [41] .
Ohjelma, jossa on setuid - bitti asetettu , voi kutsua bashia suoraan tai epäsuorasti käyttämällä järjestelmäkutsuja system(3) , popen ja muita, ympäristömuuttujia nollaamatta. Shellshock-hyökkäys tällaisissa tapauksissa antaisi paikalliselle käyttäjälle mahdollisuuden nostaa omia oikeuksiaan setuid-tyyppisen ohjelman omistajalle, usein pääkäyttäjään (superkäyttäjään) asti.
Virhe saattaa päästä järjestelmiin, jotka eivät ole yhteydessä Internetiin offline-käsittelyn aikana bashilla [42] .