Meltdown
Om via de veiligheidslekken data uit te lezen, start de aanvaller twee processen/threads in user-mode. De cpu-cache dienst als stiekem communicatiekanaal tussen het zendende (1) en ontvangende (2) proces.
Dit dient dan weer als een verdekt kanaal voor een aanvaller om de gewenste inhoud te reconstrueren via time based side-channel-aanvallen zoals flush & reload of evict & reload.
Spectre variant 1: Bounds Check Bypass
De eerste versie van Spectre misbruikt een conditionele programmavertakking om data uit te lezen, bijvoorbeeld in de vorm van een if-constructie binnen de aangevallen programmacode. Via het trainen van de branch predictor krijgt de aanvaller de cpu zover een bepaalde programmatak niet goed te voorspellen, zodat de daaropvolgende commando's speculatief verwerkt worden. De aanvaller gebruikt de verstreken tijd om binnen een programma ingestelde bounds van een array te kraken en zo te misbruiken voor onbevoegde geheugentoegang.
Aangezien de op die manier uitgelezen geheugeninhoud slechts tijdelijk in interne registers belandt en van daaruit later wordt gewist, kan een aanvaller niet direct data uitlezen. Net als bij Meltdown gebruikt de aanvaller hem binnen het aangevallen programma om een geheugenadres te berekenen dat in de cache terechtkomt. Van daaruit kan hij hem na speculative execution via een cache-timing-aanval reconstrueren.
De security-experts van Google Project Zero haalden met een Intel Xeon-cpu een uitleessnelheid van ongeveer 2000 bytes per seconde. Dat is niet bepaald vlot, maar toch snel genoeg om te komen bij vertrouwelijke informatie zoals wachtwoorden in je geheugen.
Deze Spectre-variant werkt ook op websites, dus in je browser. De whitepaper over Spectre bevat naast een voorbeeld-implementatie in C ook eentje in JavaScript. Die maakt het uitlezen mogelijk van (vertrouwelijke) gebruikersdata uit de adresruimte van de browser waarin hij draait. Ontwikkelaars van besturingssystemen en software gaan tegen Spectre 1 in de aanval met softwarepatches en nieuw gecompileerde binaries waarvan de programmacode tegen de aanval is dichtgetimmerd.
Spectre variant 2: Branch Target Injection
De tweede variant van Spectre gebruikt een bijzondere vorm van programmavertakkingen, namelijk indirect branches. Dit zijn branches naar doeladressen, die pas bij het draaien van een proces bekend zijn. De (indirect-)branch-predictor van de processor slaat de voor het proces te verwachten doeladressen op in de branchtarget-buffer (BTB). Van daaruit roept de cpu ze aan in het kader van speculative execution.
Met behulp van een programma 'traint' de aanvaller de BTB op zo'n manier dat hij de program flow omleidt richting de door hem gewenste adressen: zogenaamde gadgets. Die verwijzen naar stukken code uit het geheugenbereik van het aangevallen proces. De aanvaller misbruikt dit om indirect de data uit te lezen. De speculative executed code zorgt voor wijzigingen in de cache van de cpu, waaruit de aanvaller via timing-aanvallen geheugeninhoud kan reconstrueren.
Volgens Googles onderzoeksteam Project Zero, dat zijn proof-of-concept-code op Intel Haswell-cpu's ontwikkelde, heb je voor het misbruiken van Spectre 2 een zeer specifieke kennis van de bewuste branch prediction-hardware nodig. Tot nu toe is alleen Intel Haswell zeer precies geanalyseerd, maar in principe werkt de procedure ook bij andere cpu's met out-of-order architectuur.
Het is de onderzoekers gelukt om vanuit een KVM-gast met rootrechten bij een oude Debian-distributie op een Intel Haswell-systeem het geheugen van de host uit te lezen met een snelheid van ongeveer 1500 bytes per seconde.
Beschermende maatregelen tegen Spectre 2 bevatten niet zoals bij Spectre 1 aangepaste code van programma's, maar microcode-updates voor de branch prediction in combinatie met updates voor de besturingssystemen.
Een tweede tegenmaatregel, de Return Trampoline (Retpoline) kernel-patch voor Linux-kernels, gebruikt returns om de speculative execution van de aanvalscode te voorkomen. Dit werkt alleen in combinatie met Intel-cpu's vanaf de Broadwell-generatie. Zowel AMD als Intel werken naar eigen zeggen aan updates voor de microcode, om Retpoline te optimaliseren.
Toekomstige OoOE-bedreigingen
Het lijkt erop dat de huidige hard- en softwarepatches het acute gevaar voor Meltdown en Spectre afgewend hebben. Onderzoekers wijzen in hun openbaar gemaakte informatie erop dat beide aanvallen slechts een begin zijn voor verdere out-of-order-aanvalsscenario's.
Gezien de vele mogelijke interne toestandsveranderingen in een cpu, als gevolg van speculative execution, ligt er voor de onderzoekers nog genoeg werk in het verschiet. Het gaat nu om het boven water krijgen van mogelijke zwakke punten, het doorlopen van aanvalsscenario's en het ontwikkelen van effectieve beschermende maatregelen. (avs)