A Bashdoor (más néven Shellshock [ 1] ) a GNU Bash programban 2014 szeptemberében felfedezett és szeptember 24-én nyilvánosan közzétett szoftversérülékenységek sorozata [2] . Számos internetes szolgáltatás , beleértve a webszervereket is, használhatja a Bash-t bizonyos kérések feldolgozására, például CGI - szkriptek futtatásakor. A biztonsági rés lehetővé teszi a támadók számára, hogy tetszőleges parancsokat hajtsanak végre, így illetéktelenül hozzáférjenek számítógépes rendszerekhez [3] .
A sebezhetőség abban rejlik, hogy a Bash a deklarált képességekkel ellentétben parancsokat hajt végre, amikor a környezeti változók nem szabványos értékét kapja ( környezet ) [1] [4] . Néhány nappal az eredeti sérülékenység közzététele után több hasonló hibát fedeztek fel, amelyek megakadályozták a javított verzió gyors megjelenését.
Az eredeti hibát Stéphane Chazelas [1] ( francia Stéphane Chazelas ) fedezte fel 2014. szeptember 12-én [1] , aki azt javasolta, hogy nevezzék "bashdoor"-nak (mássalhangzó a hátsó ajtóval ) [1] . A sérülékenység a CVE-2014-6271 számot kapta a MITER adatbázisban , és szeptember 24-én 14:00 UTC-ig publikálatlan maradt ( embargó alá került ), hogy a program készítői, a disztribúciók készítői és más érdekelt szervezetek átvehessék a szükséges intézkedések [5] .
A Bash forráskód elemzése azt mutatja, hogy a biztonsági rést az 1.13-as verzió környékén vezették be a kódba 1992-ben vagy korábban [6] , és a nagyközönség nem észlelte, és azóta sem jelentették be [4] . A Bash szerzői csapatának nehézséget okoz a hiba pontos bevezetésének időpontjának meghatározása a nem kellően részletes változásnapló ( changelog ) [1] miatt .
2014. szeptember 25-én a sérülékenység alapján már botneteket hoztak létre DoS és DDoS támadások végrehajtására , valamint a sebezhetőségek átvizsgálására [7] [8] . Becslések szerint több millió rendszer sebezhető. A hiba a súlyossági skálán a maximális értékelést kapta, és értékét összehasonlítják a Heartbleeddel – ez az OpenSSL hibája (2014. április) [9] [10] .
A Shellshock sebezhetősége (bashdoor) a bash programra vonatkozik (amelyet a GNU projekt fejlesztett ki ), amelyet számos Unix -szerű operációs rendszerben és disztribúcióban használnak parancssori értelmezőként és shell szkriptek végrehajtására. Gyakran alapértelmezett rendszerértelmezésként beállítva.
Unix-szerű és más bash-támogatott operációs rendszereken minden program rendelkezik név-érték párok listájával, amelyeket környezeti változóknak nevezünk . Amikor egy program elindít egy másikat, a környezeti változók kezdeti listája is átadásra kerül [11] . A bash a környezeti változókon kívül egy belső függvénylistát is karbantart, elnevezett szkripteket, amelyek egy futtatható bash szkriptből hívhatók [12] . Új bash-példányok indításakor egy meglévő bash-ből lehetőség van a meglévő környezeti változók és függvénydefiníciók értékeinek átadására ( exportálására ) a létrehozott folyamatnak [13] . A függvénydefiníciók exportálása speciális formátumú új környezeti változókként történik, üres zárójelekkel kezdődő "()" karakterlánccal, majd a függvénydefinícióval. A bash új példányai indításkor minden környezeti változót átvizsgálnak, felismerik az adott formátumot és visszakonvertálják belső függvénydefinícióvá [14] . Ez az átalakítás úgy történik, hogy a környezeti változó értéke alapján létrehozunk egy bash kódrészletet, és végrehajtjuk azt, azaz „on-the-fly”-ként. A bash érintett verziói nem ellenőrzik, hogy a végrehajtható fájl csak függvénydefiníciót tartalmaz-e [14] . Így, ha egy támadó képes tetszőleges környezeti változót adni a bash indításához, akkor lehetségessé válik tetszőleges parancsok végrehajtása.
Szeptember 27-én megjelent egy minőségi javítás, amely egy speciális előtagot ad minden exportált és importált függvényhez, amikor azokat környezeti változókká konvertálják, és fordítva [15] .
Ugyanazon a napon, amikor az eredeti sérülékenységről és az azt javító javításokról szóló információk megjelentek, Tavis Ormandy egy új, kapcsolódó hibát fedezett fel, a CVE-2014-7169 [3] . A frissített javítások szeptember 26-án váltak elérhetővé [3] [16] [17] [18] [19] [20] .
Miközben az eredeti Shellshock hiba kijavításán dolgozott, Florian Weimer, a Red Hat kutatója további két hibát fedezett fel: CVE-2014-7186 és CVE-2014-7187 [21] [22] .
2014. szeptember 26-án két nyílt forráskódú fejlesztő, David A. Wheeler és Norihiro Tanaka észrevette, hogy vannak további problémák, amelyeket az akkoriban elérhető javítások még mindig nem javítottak ki. Wheeler az "oss-sec" és a "bash bug" levelezőlistáknak küldött e-mailjében ezt írta:
Ez a javítás csak folytatja az "öld meg a vakondot" ( whac-a-mole ) [23] a különféle elemzési hibák kijavítására irányuló, az első javítással megkezdett munkát. A bash elemző természetesen sok sok-sok más sebezhetőséget is tartalmaz.
Eredeti szöveg (angol)[ showelrejt] Ez a javítás csak folytatja az első javítással megkezdett értelmezési hibák kijavításának „hack-a-mole” munkáját. A Bash elemzője bizonyosan sok sok más sebezhetőséget tartalmaz — [24]2014. szeptember 27-én Michal Zalewski bejelentette, hogy számos egyéb hibát fedezett fel a bash-ban [25] [26] , amelyek közül az egyik azt a tényt használja ki, hogy a bash-t gyakran az ASLR ( Address Space Layout Randomization ) védelmi technika használata nélkül fordítják [27] ] . Zalewski sürgős foltot kért Florian Weimertől [25] [26] [27] .
Az eredeti bashdoor: Egy speciális környezeti változó egy exportált függvény definíciójából, majd tetszőleges parancsokból áll. A Bash sebezhető verziói ezeket az önkényes parancsokat hajtják végre indításkor [28] . Példa hibára:
env x = '() { :;}; echo Vulnerable' bash -c "echo Tesztnyomtatás"Sebezhető rendszereken ez a teszt a "Sebezhető" kifejezést írja ki az x környezeti változóból származó parancs végrehajtásával [29] .
Szeptember 29-ig a sebezhetőség részleteit nem hozták nyilvánosságra [25] [27] [30] .
Szeptember 29-ig a sebezhetőség részleteit nem hozták nyilvánosságra [25] [31] .
Tavis Ormandy fedezte fel, miközben a CVE-2014-6271-en dolgozott :
env X='() { (a)=>\' sh -c "echo date"; cat echo
A teszt hatására az "echo" lesz a kimenet átirányításának fájlneve, és a "dátum" lesz végrehajtva. A hiba a CVE-2014-7169 [3] számot kapta .
Példa a 7169-es hibára egy olyan rendszeren, amely megkapta a CVE-2014-6271 hiba javítását, de a CVE-2014-7169 hibát nem [32] $ X = '() { (a)=>\' bash -c "echo date" bash: X: 1. sor : szintaktikai hiba a váratlan token közelében ` = ' bash: X: 1. sor: `' bash: hiba az importálás során ` X ' definíciója [ root@ ec2-user ] # cat echo Fri Sep 26 01:37:16 UTC 2014A CVE-2014-6271 és a CVE -2014-7169 javítása megszakítja a tesztet:
$ X = '() { (a)=>\' bash -c "echo date" dátum $ macska visszhang cat: echo: Nincs ilyen fájl vagy könyvtárA hibát a [33] Bash kód hasonló problémái okozzák, de az ismétlődő "<<EOF" befolyásolja.
Teszt bash -c 'igaz <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "Vulnerable by CVE-2014-7186, redir_stack" Az érintett rendszer a „Vulnerable by CVE-2014-7186, redir_stack” szöveget jeleníti meg.A hibát a Bash kód [33] hasonló problémái okozzák , azonban a „kész” szó többszöri ismétlése is hatással van rá.
Teszt ( 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" Az érintett rendszer a „Vulnerable by CVE-2014-7187, word_lineno” szöveget jeleníti meg.A Bash sebezhetőségének közzététele után egy órán belül számítógépes rendszerek feltöréséről érkeztek jelentések. Szeptember 25-én számos „in the wild” támadást erősítettek meg, az egyszerű DoS támadásoktól kezdve a parancsnoki és vezérlőszerverek telepítéséig a rosszindulatú „BASHLITE” rendszeren keresztül [34] [35] . A Kaspersky Labs jelentése szerint a fertőzött számítógépek egy része három célpont ellen indított DDoS-támadást [8] . Szeptember 26-án egy „wopbot” botnetet fedeztek fel, amely bashdoor-on keresztül fertőzött szerverekből áll, és amelyet az Akamai Technologies CDN-ek elleni DDoS-ben és az Egyesült Államok Védelmi Minisztériumának hálózatainak átvizsgálására használnak [7] .
Számos lehetséges módja van, amellyel a támadó tetszőleges környezeti változókat adhat át a megtámadott szerveren futó bash-nek:
A Common Gateway Interface (CGI) szkripteket végrehajtó webszerverek a felhasználói kérések részleteit olyan környezeti változókon keresztül továbbítják, mint a HTTP_USER_AGENT. Ha a kérést a Bash program vagy egy másik program dolgozza fel, amely belsőleg hívja meg a bash-t, akkor a támadó saját parancsainak hozzáadásával lecserélheti a http-n keresztül továbbított User-Agent karakterláncot egy Shellshock támadásindítóra [36] . Például a támadó címét tartalmazó "ping" utasítás megadható ilyen parancsként. A bejövő ping kérések alapján a támadó tudni fogja, hogy a támadás működött-e.
Bár a CGI egy örökölt interfész más biztonsági kockázatokkal [37] , még mindig használatban van. Például az egyik szabványos cPanel szkript sebezhető [38] , a becslések szerint a sebezhető cPanel a webhelyek 2-3%-án használható [39] .
Az OpenSSH SSH-kiszolgáló lehetővé teszi a felhasználó korlátozását az elérhető parancsok rögzített készletére ("ForceCommand" opció). A rögzített parancs akkor is végrehajtásra kerül, ha a felhasználó egy másik parancs végrehajtását kérte. A kért parancs ebben az esetben az "SSH_ORIGINAL_COMMAND" környezeti változóban van tárolva. Ha egy Bash parancsértelmezőben rögzített parancsot hajtanak végre (ha a felhasználó értelmezője Bash-ra van állítva), a GNU Bash felismeri a környezetbe ágyazott SSH_ORIGINAL_COMMAND értékeket indításkor, és Bashdoor sebezhetőség esetén végrehajtja a az ott beágyazott parancsokat. Így az a támadó, aki csak egy korlátozott shellhez fér hozzá, korlátlan hozzáférést kap [3] .
A DHCP -kliensek általában IP-címet kérnek egy DHCP-kiszolgálótól. A szerver azonban több további opciót is küldhet, amelyek környezeti változókba írhatók, és a Shellshock kihasználását okozhatják a helyi hálózathoz csatlakoztatott számítógépen vagy laptopon [40] [41] .
A setuid bitkészlettel rendelkező programok közvetlenül vagy közvetetten hívhatják meg a bash-t a system(3) , popen és egyebek segítségével, a környezeti változók alaphelyzetbe állítása nélkül. A Shellshock támadás ilyen esetekben lehetővé tenné a helyi felhasználó számára, hogy saját jogosultságait a setuid-szerű program tulajdonosára emelje, gyakran egészen a root (szuperfelhasználó)ig.
A hiba potenciálisan olyan rendszereket is elérhet, amelyek nem csatlakoznak az internethez a bash [42] offline feldolgozása során .