Een student aan de Vrije Universiteit in Amsterdam heeft een virtual machine gebouwd die geheugen-exploits tegengaat. Buffer overflows en return oriented programming worden onschadelijk gemaakt, maar software draait wel langzamer.
Erik Bosman, die de tool ontwikkelde voor zijn masterscriptie, presenteerde de werking van de virtual machine op hackers-event eth0. De software, die door Bosman Minemu is gedoopt, is onder een opensource-Apache-licentie vrijgegeven.
De virtual machine is bedoeld voor taint checking, waarmee moet worden voorkomen dat gebruikers code kunnen injecteren in het geheugen. De voor Linux ontwikkelde tool doet dat door software in een virtuele machine te draaien en van elke byte in het geheugen de oorsprong bij te houden. "Is een bepaald deel van het geheugen bijvoorbeeld user-input, dan mag het nooit als code worden uitgevoerd", zegt Bosman.
Ontdekt Minemu dat wordt geprobeerd om niet-vertrouwde code uit te voeren, dan wordt de uitvoering van de software gestaakt. Buffer overflows en return oriented programming, twee manieren om via het geheugen malafide code uit te voeren, worden daarmee feitelijk onschadelijk gemaakt. De meta-informatie over de afkomst van de code wordt bewaard in de snelle sse-registers van Intel-cpu's, dat eigenlijk voor het verwerken van multimedia is bedoeld.
Veel malware maakt gebruik van geheugen-exploits om code uit te voeren. Bij een buffer overflow kan de maximale grootte van een buffer worden overschreden en kan daardoor eigen code worden uitgevoerd. In reactie daarop voerden besturingssystemen ondersteuning voor address space layout randomization toe, waardoor de locatie van buffers in het geheugen werd gerandomiseerd, en data execution prevention, waarbij uitvoerbaar geheugen en gewone variabelen worden gescheiden.
Om aslr en dep te omzeilen, wendden aanvallers zich tot return oriented programming. Daarbij worden de bestaande machine-instructies van een bepaald programma in een specifieke, door de aanvaller gekozen volgorde uitgevoerd, waardoor hij zijn eigen code kan samenstellen. "Bij middelgrote software is dat vaak mogelijk", vertelt Bosman. "Dit project is eigenlijk de reactie op return oriented programming."
Op dit moment werkt Minemu enkel op 32bit-x86-cpu's. "Ondersteuning voor 64bit is een stuk moeilijker om in te bouwen", zegt hij tegen Tweakers.net, "bijvoorbeeld omdat de geheugenregisters veel groter zijn." Hij heeft wel onlangs ondersteuning voor software met meerdere threads ingebouwd, waardoor veel programma's goed werken met de tool. Alleen software met jit-compilers die content van internet als code uitvoeren, zoals de javascript-engine van Firefox, leveren nog problemen op. Die engines willen van buitenaf aangevoerde code juist uitvoeren.
Binnen de virtual machine draait code significant langzamer. Over het algemeen kan het drie tot vier keer langer duren voordat code is uitgevoerd. Dat komt doordat de code niet rechtstreeks wordt uitgevoerd, maar eerst de taint analysis van Minemu passeert. Volgens Bosman werkt de tool echter sneller dan vergelijkbare software, zoals Argos en TEMU.
Dat komt doordat de software anders werkt: waar Argos en TEMU de uit te voeren code van complete besturingssystemen checken, doet Minemu dat met een specifiek proces. Minemu reserveert voor elke byte in het geheugen een byte voor de analyse. Daardoor is twee keer zoveel geheugen nodig, nog los van de ruimte die Minemu zelf inneemt.
De werking van de virtuele machine kan nog wel worden omzeild, geeft Bosman toe, door een aantal specifieke bewerkingen op het geheugen los te laten. Dat is echter moeilijk uit te voeren, claimt hij.
Een Windows-versie van de software lijkt niet waarschijnlijk: "Daarvoor zou je Windows op systeemniveau moeten aanpassen, dus Microsoft zou moeten meewerken om dat mogelijk te maken." Op Linux is root-toegang voldoende om een systeem geschikt te maken voor de software. Daarvoor moeten wat waarden worden aangepast, bijvoorbeeld om het reserveren van een grote hoeveelheid virtueel geheugen mogelijk te maken. Enige aanpassingen zouden de tool geschikt kunnen maken om andere vormen van code-injectie, bijvoorbeeld sql-injecties, eveneens onschadelijk te maken.
[Reactie gewijzigd door totaalgeenhard op zondag 15 januari 2012 11:27]
Master's scriptie, groot verschilHeeft iemand link naar proefschrift?
Ben ik niet met je eens. Ook in eerste instantie minder nuttige zaken kunnen uiteindelijk leuke bij-effecten hebben. Zeker in de techniek zijn bepaalde vindingen nuttig voor veel meer zaken dan vooraf gedacht. Sterker nog, ze kunnen juist extreem nuttig blijken voor andere zaken waar vooraf nooit aan gedacht werd.Algemeen is het wel opvallend dat universiteiten geen criteria stellen, het is gewoon zonde dat er voor veel verschillende opleidingen mensen kunnen afstuderen op niet zulke belangrijke zaken. Men moet eens de nut en noodzaak voor maatschappij voor ogen hebben en mensen alleen laten afstuderen op praktische oplossingen voor maatschappelijke problemen.
... sprak de gene van wie zijn eigen profiel een reactiescore van -8 (-0,1 gemiddeld) vermeldt.Anyway, heb nu al spijt dat ik gereageerd heb omdat het niveau hier dramatisch laag ligt.
Het is dan denk ik meer het idee van invoer 'zoals parameter' invoer niet vertrouwen voor uitvoer.Enige aanpassingen zouden de tool geschikt kunnen maken om andere vormen van code-injectie, bijvoorbeeld sql-injecties, eveneens onschadelijk te maken.
Met andere woorden: nagenoeg alle code die in productie draait...?Het probleem is vooral legacy code of code die vlug-vlug "tijdelijk" erbij geplakt is zonder erbij stil te staan dat die waarschijnlijk niet meer vervangen wordt
Jawel, dat is wel moeilijk. Code die verkeerde resultaten produceert is lastig genoeg te debuggen (door te kijken of de resultaten kloppen). Maar hoe ga je debuggen op "bevat geen injection vulnerabilities"? Daar moet je specialisten naar laten kijken en dat kost geld zonder dat het (op korte termijn!) iets oplevert, dus dat zal lang niet altijd goed (genoeg) gebeuren. Bovendien, zie ook de eerste quote...Als je vanaf het begin van je project rekening houdt met code injection attacks dan is het helemaal niet zo moeilijk.
Watte. Blijkbaar nog nooit van Unit tests gehoord? Dit zijn zaken die gewoon daar thuis horen. Er zijn "zelfs" systemen die na een update van de source gelijk maar het hele project gaan checken.helaas ontbreken zulke dingen nog steeds net zoals de optie om een applicatie te controleren of het dezelfde output blijft geven na een aanpassing van de broncode
Nee, maar waar haal je het idee vandaan dat ie dat probleem probeerde op te lossen? Als dit een commercieel product was dat in neon-koeienletters "100% beveiliging" garandeerde, dan zou je nog enigszins een punt hebben door het op zo'n feitelijk-ongerelateerd argument lek te willen schieten.En als op de host machine nu het geheugen dusdanig verwarmd wordt zodat het fouten gaat maken, is zijn methode dan nog steeds toereikend?
Waar zou jij de grens willen trekken? Als je er niet vanuit wilt gaan dat je geheugen correct werkt, wil je er dan wel op vertrouwen dat je CPU correct functioneert? Want daar kunnen ook fouten (van FDIV tot TLB) inzitten. En harde schijven (virtueel geheugen, locatie van executables voordat ze worden geladen) zijn ook niet perfect. Trouwens, hoe weet je zeker dat je password niet gekraakt gaat worden? Zelfs als je de meest vreemde tekens erin zet ze hem heel lang maakt, het blijft een string bits; het is theoretisch mogelijk dat een aanvaller de eerste keer het password (hoe lang ook) correct raadt!Je kunt immers wel zeggen dat je buffer overflows onschadelijk maakt, maar je kunt wel 'uit het geheugen springen' als het geheugen fouten gaat produceren. Dus softwarematig is het misschien veiliger, maar hardwarematig nog steeds één grote ramp.
[Reactie gewijzigd door SOCO_cola op zondag 15 januari 2012 11:18]
Ti's maar net hoe je het bekijkt, helaas is door het gehele sales apparaat het hoger management ingepraat dat virtualisatie niet ten koste van de performance gaat. Helaas werkt dit in 9 van de 10 gevallen niet. je stelling klopt dat 1 op 1 misschien de snelheden zowat gelijk liggen, maar het voordeel zou juist gehaald moeten worden in het efficient verdelen van de virtuele resources onder alle virtual machines.Inmiddels is CPU en I/O virtualisatie grotendeels in de hardware ingebakken waardoor virtualisatie bijna de snelheid van bare metal haalt.
Ik vermoed echter dat het gaat om het in 32-bit mode draaien van je CPU door een 32-bit OS te nemen. Omdat x86 processors backwards compatible zijn kan deze schakelen tussen 64-bit en 32-bit. Sterker nog, je kan ook terug naar een 16-bit mode. Dus ik verwacht dat dit net zo goed werkt op alle nieuwe AMD en Intel processoren.Op dit moment werkt Minemu enkel op 32bit-x86-cpu's. "Ondersteuning voor 64bit is een stuk moeilijker om in te bouwen", zegt hij tegen Tweakers.net, "bijvoorbeeld omdat de geheugenregisters veel groter zijn."
[Reactie gewijzigd door GENETX op zondag 15 januari 2012 11:29]
[Reactie gewijzigd door .oisyn op zondag 15 januari 2012 18:46]
Maar functioneert ook dmv de code op een virtual machine te draaien en zo al je geheugen accesses te indexeren. Ik zie het fundamentele verschil niet met dit.Valgrind is voor debugging en profilling
[Reactie gewijzigd door Zoijar op zondag 15 januari 2012 13:30]
Als je het niet doet dan hoeft een aanvaller niets te omzeilen. Zelfs als het niet waterdicht is, dan nog blijft het een extra barrière ("defence in depth" als je graag een hip naampje wilt).het is te omzeilen, al is dat moeilijk
Ehm, als het idee al bestaat, maar hij maakt er nu werkende code van, is het dan niet juist een proof-of-concept!?het is geen proof of concept, zoals eerder al aangegeven, het idee bestaat al
In tegenstelling tot alle andere master-scripties die allemaal wel in de praktijk gebruikt gaan worden?? Het is juist bedoelt als onderzoek; als iemand (academisch) heeft laten zien dat een idee ook echt werkt, dan kan je altijd nog een bedrijf zoeken (of zelf opzetten, of hopen dat de open source community het doet) die er mee verder gaat en het uitontwikkelt.Hiermee wil ik zeggen dat de doelgroep zo klein is dat het helaas nooit gebruikt gaat worden
Op dit item kan niet meer gereageerd worden.
Populair: Android Tablets Samsung Websites en communities Mobiele telefoons Google Sony Microsoft Games Politiek en recht
© 1998 - 2013 Tweakers.net B.V. Contact Over Tweakers Jouw privacy Algemene voorwaarden Cookies
Tweakers wordt uitgegeven door De Persgroep en wordt gehost door True