Grupa badaczy z Vrije Universiteit Amsterdam opublikowała zestaw narzędzi Kasper przeznaczony do wykrywania jądra Linux Fragmenty kodu, które mogą zostać wykorzystane do wykorzystania luk klasy Spectre spowodowanych spekulatywnym wykonaniem kodu na procesorze. Kod źródłowy zestawu narzędzi jest rozpowszechniany na licencji Apache 2.0.
Przypomnijmy, że ataki takie jak Spectre v1, które pozwalają na ustalenie zawartości pamięci, wymagają obecności pewnej sekwencji poleceń (gadżetów) w kodzie uprzywilejowanym, co prowadzi do spekulatywnego wykonania instrukcji. W celach optymalizacyjnych procesor zaczyna wykonywać takie gadżety w trybie spekulatywnym, następnie ustala, że przewidywanie rozgałęzienia nie było uzasadnione i wycofuje operacje do stanu pierwotnego, ale dane przetworzone podczas spekulatywnego wykonania osiadają w buforach pamięci podręcznej i mikroarchitektury i są dostępne do ekstrakcji z nich za pomocą różnych metod określania danych resztkowych za pośrednictwem kanałów bocznych.
Wcześniej dostępne narzędzia do skanowania gadżetów w poszukiwaniu podatności Spectre, oparte na wyszukiwaniu typowych wzorców, wykazywały bardzo wysoki poziom fałszywych alarmów, jednocześnie pomijając wiele prawdziwych gadżetów (eksperymenty wykazały, że 99% gadżetów wykrytych przez takie narzędzia nie mogło zostać wykorzystanych do ataków, a 33% działających gadżetów, które mogłyby doprowadzić do ataku, nie zostało zauważonych).
Aby poprawić jakość identyfikacji problematycznych gadżetów, Kasper modeluje luki w zabezpieczeniach, które atakujący może wykorzystać na każdym etapie ataku klasy Spectre — modelowane są problemy umożliwiające kontrolę danych (na przykład podstawianie danych atakującego w strukturach mikroarchitektonicznych w celu wpłynięcia na późniejsze wykonanie spekulacyjne przy użyciu ataków klasy LVI), uzyskiwanie dostępu do poufnych informacji (na przykład podczas przechodzenia poza granice bufora lub używania pamięci po jej zwolnieniu) oraz organizowanie wycieku poufnych informacji (na przykład poprzez analizę stanu pamięci podręcznej procesora lub wykorzystanie metody MDS).

Podczas testów jądro komunikuje się z bibliotekami środowiska uruchomieniowego Kasper i mechanizmami kontroli opartymi na LLVM. Kontrola emuluje spekulacyjne wykonywanie kodu za pomocą mechanizmu przywracania punktu kontrolnego, który celowo uruchamia błędnie przewidzianą gałąź kodu, a następnie przywraca stan pierwotny sprzed wystąpienia gałęzi. Kasper próbuje również symulować różne luki w zabezpieczeniach oprogramowania i sprzętu, analizuje wpływ efektów architektonicznych i mikroarchitektonicznych oraz przeprowadza testy rozmycia (fuzzing) potencjalnych działań atakujących. Port jądra DataFlowSanitizer służy do analizy przepływu wykonywania. Linuxoraz do testowania rozmycia zmodyfikowaną wersję pakietu syzkaller.

Podczas skanowania jądra Linux Za pomocą Kaspera zidentyfikowano 1379 wcześniej nieznanych gadżetów, które potencjalnie mogą prowadzić do wycieków danych podczas wykonywania spekulatywnych instrukcji. Należy zauważyć, że tylko część z nich może stwarzać realne problemy, ale aby zademonstrować realne, a nie tylko teoretyczne, zagrożenie, opracowano działający prototyp exploita dla jednego z problematycznych fragmentów kodu, powodujący wyciek informacji z pamięci jądra.
Źródło: opennet.ru
