Hoofdcategorieën

De HyperThreading-'bug' uitgelegd

Door Wouter Tinus, zaterdag 14 mei 2005 15:24, views: 92.465

Storm in een glas water

Tot nu toe hebben we gezien dat het mogelijk is voor twee threads om op een zeer vernuftige manier met elkaar te communiceren door op een van te voren afgesproken manier samen te werken. Is het dan ook mogelijk om gegevens uit een andere thread te krijgen zónder dat deze daaraan meewerkt? Het antwoord daarop is nee. Er zit geen bug in de hardware, dus als het operating systeem aangeeft dat iets niet gelezen mag worden, dan kan dat ook niet gelezen worden. Waarom dan toch de ophef? Omdat iemand met zeer specifieke kennis over de implementatie van een encryptie-algoritme én informatie over het moment waarop dit wordt uitgevoerd een idee kan krijgen van wat er achter gesloten deuren gebeurt. Dit gaat op een manier die veel lijkt op de geheime kanalen. In dit geval is er echter geen 'verzender' die expliciet gegevens aan het versturen is, maar wordt er simpelweg geluisterd naar de ruis veroorzaakt door het encryptieproces. Zometeen zullen we zien hoe het uitvoeren van 1024-bit RSA-encryptie met OpenSSL eruit ziet voor een cache-spion.

In het onderstaande plaatje zijn op de x-as alle cachelijnen die in de gaten worden gehouden uiteengezet. De y-as is het verloop van de tijd gemeten in klokcycles, waaraan te zien is dat het plaatje slechts gegevens verzameld over een zeer korte periode representeert (500.000 cycles worden er door een 2,8GHz-processor binnen 0,2 milliseconde doorheen gejaagd). De kleur van de blokjes geeft aan hoe kort of lang het steeds duurde voor iedere cachelijn beschikbaar was. Hieruit is met een redelijk grote mate van nauwkeurigheid af te leiden of ze wel of niet uit het cache werden gegooid door het encryptieproces. De schaal loopt van een wit blok (120 cycles) tot een zwart blok (170+ cycles). Omcirkeld zijn de patronen die interessant zijn voor iemand die wil proberen om de key te achterhalen.

Cachespion
De reden waarom de omcirkelde lijntjes informatie bevatten over de gebruikte sleutel is de manier waarop het RSA-algoritme door de makers van OpenSSL is geïmplementeerd. Omdat deze vorm van encryptie rekenkundig behoorlijk zwaar is wordt de berekening zo ver mogelijk geoptimaliseerd, onder andere door de wiskundige handeling x := a^d mod p om te schrijven naar een hele serie kwadrateringen en een vermenigvuldiging. Een andere optimalisatie is dat de getallen waarmee vermenigvuldigd moet worden van te voren worden uitgerekend en in een tabel worden gezet, zodat ze herbruikt kunnen worden in plaats van keer op keer opnieuw uitgerekend moeten worden. Hierdoor kan de afluisterthread makkelijk herkennen wanneer vermeningvuldigd wordt, want zodra er een waarde uit die tabel gehaald wordt moet er iets van hem uit het cache verwijderd worden om er plaats voor te maken. Uit iedere vermeningvuldiging (en het aantal kwadrateringen dat eraan vooraf ging) kan een bit van de sleutel worden afgeleid. Op deze manier kunnen er in goede omstandigheden zo'n 200 bits van beide 512-bit exponenten worden blootgelegd. De rest gaat verloren in de ruis die wordt veroorzaakt door andere threads.

Op dat moment is er nog steeds niet genoeg informatie beschikbaar om de complete sleutel te achterhalen, maar door goed te kijken naar de volgorde waarin de verschillende multipliers gebruikt worden kunnen meer gegevens afgeleid worden. Hier komt een hoop onzekerheid bij kijken (onder andere omdat het niet zeker is dat dezelfde waarde steeds op dezelfde plek in het cache komt te staan), maar geschat wordt dat voor de helft van de vermenigvuldigingen het aantal mogelijke multipliers teruggebracht kan worden tot twee. Statistisch gezien zou dat genoeg data moeten zijn om van beide delen nog eens 110 extra bits te bepalen, waarna in totaal dus ongeveer 310 van de 512 bits van beide exponenten beschikbaar zijn. Dit is voor crypto-analisten wèl genoeg informatie om de sleutel in relatief korte tijd te kunnen breken.

* Oplossingen

HyperThreading Er worden door de ontdekker van het (potentiële) probleem een aantal verschillende oplossingen aangedragen om computers tegen dit soort aanvallen te kunnen verdedigen. De processor zou bijvoorbeeld aangepast kunnen worden om te voorkomen dat threads elkaars gegevens continu uit het cache kunnen wippen. In latere steppings van de Pentium 4 is dat overigens al zo, dus wat dat betreft hoeft men zich sowieso al geen zorgen meer te maken. Verder zou de hardware het zo vaak en nauwkeurig opmeten van alle latencies kunnen tegenhouden, maar dit kan natuurlijk compatibiliteitsproblemen opleveren en is dus geen realistische optie. Volgens de auteur kan daarom beter een oplossing gezocht worden aan de kant van de software. Een vrij complexe maar effectieve oplossing zou zijn dat de scheduler geen twee threads met verschillende rechten tegelijk laat draaien op dezelfde processor. Simpeler is echter een soort "secure mode" in het leven roepen voor threads, waarin iedere keer standaard het hele cache geflushed wordt, zodat er geen enkel herkenbaar patroon wordt achtergelaten.

* Conclusie: Storm in een glas water

Hoewel de 'exploit' van HyperThreading zeker interessant en slim genoemd kan worden, is het concept van dit soort zogenaamde timing-aanvallen bij lange na niet nieuw te noemen. Andere onderzoekers hadden soortgelijken technieken om informatie over geheime sleutels te achterhalen al eerder gedemonstreerd op systemen met twee fysieke processors, en onder bepaalde gecontroleerde condities schijnt het zelfs met een enkele single-threaded processor mogelijk te zijn. HyperThreading kan het misschien dan wel makkelijker maken om het te doen, maar het blijft een zeer ingewikkelde methode waar een diepgaand begrip van de hardware, het gebruikte algoritme en de implementatie daarvan nodig is. Verder is timing cruciaal en zijn bijna onrealistisch gunstige omstandigheden nodig om een 'schoon signaal' af te kunnen tappen. Al met al hoeft het gemiddelde bedrijf zich weinig zorgen te maken over de veiligheid van zijn servers met HyperThreading. Voor de echte securityfreaks is het echter wel leuk hersenvoer .

T'rug naar huus


Inhoudsopgave


Reacties

«  1  2  »

Is dit misschien de geheime manier waarop de Amerikanen al onze computerzaken afluisteren, hun backdoor voor onze encryptie? ;)

Is dit misschien de geheime manier waarop de Amerikanen al onze computerzaken afluisteren, hun backdoor voor onze encryptie?
Met een AMD ben je veiliger, geen hyperthreading :+

en onder bepaalde gecontroleerde condities schijnt het zelfs met een enkele single-threaded processor mogelijk te zijn
Ook met een AMD kun je dus potentieel een 'probleem' hebben.

dit is zeker geen backdoor. Een van de twee hoofd kenmerken van een backdoor is dat het makkelijk is.

als je het andere kenmerk niet kent...

de beschreven manier is niet simpel met een progje als een trojan uit te voeren. er moet wat meer intelligentie, feeling en heel veel geluk bij komen kijken. Op het moment dat er maar van 1 thread encryptie gebruikt wordt werkt dit. is het een druk apparaat met veeel threads tegelijkertijd is dit haast onmogelijk.

dit is dus geen backdoor.

Omdat er toch een bepaald soort allogoritme nodig is kan het os (/virusscanner :?) niet instaat zijn om deze te herkennen ?

Er is bij mijn inzicht een best wel een groot programma nodig om er misbruik van de maken, niets iets wat toevallig aan een mail vast zit.

Ik denk dan ook dat de kans klein is dat een hacker dit ooit zal gebruiken .
Het is te ingewikkeld en te lastig, tegen de tijd dat er een programma voor is , is de software al aangepast.

in de bron staat een code van maar een paar ASM regeltjes

Dat is dan ook alleen maar het loopje om de latencies te meten.

Ik denk dan ook dat de kans klein is dat een hacker dit ooit zal gebruiken .
Het is te ingewikkeld en te lastig, tegen de tijd dat er een programma voor is , is de software al aangepast.
haal je nu niet twee compleet verschillende groepen door elkaar? Een scriptkiddie zal inderdaad niet aan dit soort meuk beginnen, snapt ie toch niet. Maar een echte cracker/hacker zal wel degelijk deze truuk gebruiken als hij daartoe mogelijkheid ziet. Derhalve zal deze techniek ook getest worden bij security audits in de toekomst.

Ik vermoed dat het ook niet de gemiddelde hacker is die hier misbruik van gaat maken. Als je bedrijf waardevolle informatie bevat hoeft er dus maar een hoge bieder voor de informatie te zijn, een superslimme nerd die dit programma door de server uit laat voeren, hoopt dat de keys niet veranderen, naar huis gaat, verder analyseerd, ondertussen het programma data uit het cache-geheugen te laten stelen em dit ook mee nemen ter analysatie, later alles wat hij heeft decodeert... en daar heeft hij de wachtwoorden van de gebruikers of andere kostbare informatie...

Mja, als je een programma kan uitvoeren op een server waarop dus uiterst belangrijke geheime info staat, vind ik dat ook knap; dat mag al helemaal niet kunnen. Als je aan de locale kan het programma uitvoert, kun je net zo goed meteen die keys stelen. Dus tsja.

@bericht: (Sorry, op verkeerde plek gepost, reactie op het bericht hierna)
Om de heisa omtrent deze bug uit te leggen, moet je het volgende snappen:
Het gaat hier om cryptografen.
-Onder cryptografen is het niet erg als men door een brute-force attack de sleutel kan achterhalen, via X stappen.
-ALLE manieren die ervoor zorgen dat je de sleutel in minder dan X stappen kan achterhalen, worden in de cryptografie als een LEK van het schema gezien.
Dus ook al zou je maar 1 bitje van het paswoord te weten komen, dan nog zou je de sleutel 2x zo snel kunnen achterhalen dan bij brute-force, en is het algoritme in de cryptografie dus 'lek'.

Waarom zo'n heisa over deze 'bug'???? Het zal nooi tgebruikt worden om code's te kraken aangezien je er een crypto-analist bij moet hebben, en die hebben de meeste hackers niet in de kast liggen. Verder is het probleem dus al opgelost bij de nieuwste pentium 4. Lekker boeiend dus allemaal....

Zover ik alle berichten op andere sites/freebsd mailinglist heb gelezen is het zeer zeker wel boeiend. Alle bsd's die hyperthreading support hebben (freebsd/netbsd) hebben dit dan nu ook standaard uitstaan.

zie de mails op http://docs.freebsd.org/mail/current/freebsd-security.html

Ik zit op basis van de FreeBSD Security Advisory nogal te twijfelen of ik HTT op mijn Dual Xeon-servers moet uitzetten of niet.
Dat FreeBSD het standaard aanraadt is niet voor niets... maar als ik het bovenstaande moet geloven weegt het performanceverlies niet op tegen dat hele kleine potentiele risico.
Hoe gaan andere FreeBSD'ers hier mee om?

In principe moet je als volgt redeneren: heb je shell dozen waar je klanten toegang toe hebben (ISP's hebben dat soort bakken) of webservers waar klanten scripts op kunnen draaien: dan is het nuttig om HT uit te zetten. (is maar een sysctl)

heb je dozen die performance nodig hebben, maar waarop buiten techneuten om niemand op kan, dan kun je 't redelijk veilig aan laten staan.

al eerder gedemonstreerd op systemen met twee fysieke processors

Zet maar aan dus, je bent toch al de lul met twee procs :Y)

mischien kunnen ze er nog iets leuks mee zoals "de" bug die alle procesoren hebben zodat we boven de 640 kb geheugen konden en kunnen komen je weet nooit :7

Misschien snap ik het niet helemaal hoor, maar als je al zo ver bent dat je kan kijken wat er op een processor gebeurt, HEB je al toegang tot de machine en in veel gevallen is dat al meer dan genoeg om leuke dingen te kunnen doen.

Stel: Er wordt op die computer iets met gruwelijke encryptie gedaan om geld over te maken. Ga je dan moeilijk lopen doen om de RSA kraken, of zet je een regeltje in het .txt bestand er bij met je rekeningnummer in Zwitserland?

Je mist het fundamentele punt. Op een normale server zijn processen van gebruikers strict gescheiden: je kunt als gebruiker processen van andere gebruikers niet inzien of wijzigen, dus als jij een lokaal account hebt dan kun je daarmee nog geen bestanden wijzigen. Sterker nog: het besturingssysteem garandeert je dat processen en bestanden die alleen van de ene gebruiker zijn niet door andere gebruikers gelezen kunnen worden.

De ophef ontstaat juist doordat het met de genoemde methode mogelijk is om de restricties die het besturingssysteem oplegt ten dele te omzeilen. Het gaat hierbij dus ook niet om een Windows XP bak waar iedereen als Administrator op inlogt, zodat je als je eenmaal ingelogt bent in willekeurige bestanden bankrekeningnummers kan zetten. ;)

hmmm.... RSA kraken... zien ze niet...

Dus als ik het goed begrijp is dit een mogelijke optie tot exploitering van een algoritme dat op een specifieke manier geimplementeerd en uitgevoerd wordt, werkt op een zeer beperkt aantal processoren mits een bepaalde feature aan staat, de processen tegelijk draaien en je zeker weet dat die ander die encryptie doet met die key en diezelfde compile heeft van openssl en RSA gebruikt?

Ik zie niet waarom dit ook maar 1 keer toepasbaar zou zijn.

Hyperthreading processoren komen vrij veel voor en het is meestal makkelijk te achterhalen welke versie van OpenSSL er geïnstalleerd is, want dat is geen geheime informatie. Voor hackers die lokale toegang hebben op een server is het dus al gauw een optie.

Idd, dascandy...
«  1  2  »

Op dit item kan niet meer gereageerd worden.

VNU Media logo Hosted by True

© 1998 - 2009 Tweakers.net - Alle rechten voorbehouden - Uw Privacy - Algemene Voorwaarden

Uitgever van: