Een groep onderzoekers van de Vrije Universiteit Amsterdam heeft de Kasper-toolkit gepubliceerd, die is ontworpen om in de Linux-kernel codefragmenten te identificeren die kunnen worden gebruikt om kwetsbaarheden van het Spectre-type te exploiteren, veroorzaakt door de speculatieve uitvoering van code door de processor. De bronteksten van de toolkit worden verspreid onder de Apache 2.0-licentie.
Ter herinnering: voor het uitvoeren van aanvallen zoals Spectre v1, die het mogelijk maken om de inhoud van het geheugen te bepalen, is het vereist dat er in de geprivilegieerde code een bepaalde volgorde van instructies (gadgets) aanwezig is die leidt tot speculatieve uitvoering van instructies. Om te optimaliseren begint de processor dergelijke gadgets in de speculatieve modus uit te voeren, waarna deze bepaalt dat de voorspelling van de tak niet juist was en de bewerkingen terugdraait naar de oorspronkelijke staat. Echter, de gegevens die tijdens de speculatieve uitvoering zijn verwerkt, blijven in de cache en microarchitectonische buffers zitten en zijn toegankelijk voor extractie via verschillende methoden voor het bepalen van restgegevens vanuit zijkanalen.
Eerder beschikbare tools voor het scannen van gadgets op kwetsbaarheden van Spectre, gebaseerd op het zoeken naar typische patronen, vertoonden een zeer hoog niveau van vals-positieven, terwijl ze veel echte gadgets misten (experimenten toonden aan dat 99% van de gadgets die door dergelijke tools werden geĆÆdentificeerd, niet konden worden gebruikt voor aanvallen, en 33% van de werkende gadgets die tot een aanval konden leiden, niet werden opgemerkt).
Om de kwaliteit van de identificatie van problematische gadgets te verbeteren, modelleert Kasper de kwetsbaarheden die een aanvaller in elke stap van de Spectre-aanvallen zou kunnen gebruiken - problemen die het mogelijk maken om gegevens te controleren (bijvoorbeeld het invoegen van aanvallersgegevens in microarchitectonische structuren om invloed uit te oefenen op de daaropvolgende speculatieve uitvoering via aanvallen van het LVI-type), toegang tot vertrouwelijke informatie te verkrijgen (bijvoorbeeld bij het overschrijden van een buffer of het gebruiken van geheugen nadat het is vrijgegeven) en het faciliteren van het uitlekken van vertrouwelijke informatie (bijvoorbeeld door de status van de processor cache te analyseren of de MDS-methode te gebruiken).

Tijdens het testen koppelt de kernel aan de runtime-bibliotheken van Kasper en de controles die op het LLVM-niveau werken. Tijdens de controle wordt de emulatie van speculatieve uitvoering van code uitgevoerd, gerealiseerd met behulp van een checkpoint-restore mechanisme, dat speciaal de verkeerd voorspelde codepad uitvoert en vervolgens terugkeert naar de oorspronkelijke staat vóór de vertakking. Kasper probeert ook verschillende software- en hardwarekwetsbaarheden te modelleren, analyseert de impact van architectonische en micro-architectonische effecten en voert fuzzing-tests uit van mogelijke aanvallersacties. Voor de analyse van uitvoeringsstromen wordt de DataFlowSanitizer-port voor de Linux-kernel gebruikt, en voor fuzzing-testing een gemodificeerde versie van het syzkaller-pakket.

Tijdens het scannen van de Linux-kernel met behulp van Kasper zijn 1379 eerder onbekende gadgets ontdekt, die potentieel kunnen leiden tot datalekken tijdens speculatieve uitvoering van instructies. Het wordt opgemerkt dat slechts een deel van deze gadgets echte problemen kan vormen, maar om te demonstreren dat er een reƫel gevaar is en geen alleen theoretisch, werd voor een van de probleemcodefragmenten een werkend prototype-exploit ontwikkeld, dat leidt tot datalek uit de kernelgeheugen.
Bron: opennet.ru
