Kasper, skaner spekulacyjnych problemów z wykonaniem kodu w jądrze Linuksa, jest już dostępny

Zespół badaczy z Wolnego Uniwersytetu w Amsterdamie opublikował zestaw narzędzi Kasper przeznaczony do identyfikowania fragmentów kodu w jądrze Linuksa, które można wykorzystać 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 aby przeprowadzić ataki takie jak Spectre v1, które pozwalają na określenie zawartości pamięci, wymagana jest obecność w kodzie uprzywilejowanym określonej sekwencji poleceń (gadżetów), co prowadzi do spekulatywnego wykonania instrukcji . W celach optymalizacyjnych procesor zaczyna wykonywać takie gadżety w trybie spekulacyjnym, po czym stwierdza, że ​​przewidywanie rozgałęzień nie było uzasadnione i przywraca operacje do pierwotnego stanu, jednak dane przetworzone podczas wykonywania spekulacyjnego trafiają do pamięci podręcznej i buforów mikroarchitektonicznych oraz jest dostępny do odzyskania od nich przy użyciu różnych metod określania danych resztkowych za pośrednictwem kanałów stron trzecich.

Dostępne wcześniej narzędzia do skanowania gadżetów pod kątem luki Spectre, bazujące na wyszukiwaniu typowych wzorców, wykazywały bardzo wysoki poziom fałszywych alarmów, pomijając jednocześnie wiele prawdziwych gadżetów (eksperymenty wykazały, że 99% gadżetów zidentyfikowanych przez te narzędzia nie nadawało się do ataków , a 33% działających gadżetów, które mogły doprowadzić do ataku, nie zostało zauważonych).

Aby poprawić jakość identyfikacji problematycznych gadżetów, Kasper modeluje podatności, które atakujący może wykorzystać na każdym etapie przeprowadzania ataków klasy Spectre - modelowane są problemy umożliwiające kontrolę danych (na przykład podstawienie danych atakującego do struktur mikroarchitekturowych, aby wpłynąć na późniejsze wykonanie spekulacyjne za pomocą Ataki klasy LVI), uzyskują dostęp do poufnych informacji (na przykład podczas przekraczania granic buforów lub wykorzystania pamięci po jej zwolnieniu) i wyciekają poufne informacje (na przykład analizując stan pamięci podręcznej procesora lub stosując metodę MDS).

Kasper, skaner spekulacyjnych problemów z wykonaniem kodu w jądrze Linuksa, jest już dostępny

Podczas testowania jądro jest łączone z bibliotekami wykonawczymi Kasper i sprawdza działanie na poziomie LLVM. Proces sprawdzania emuluje spekulatywne wykonanie kodu, zaimplementowane przy użyciu mechanizmu przywracania punktu kontrolnego, który w szczególności wykonuje niepoprawnie przewidzianą gałąź kodu, a następnie przywraca pierwotny stan sprzed rozpoczęcia gałęzi. Kasper próbuje także symulować różne luki w oprogramowaniu i sprzęcie, analizuje wpływ efektów architektonicznych i mikroarchitektonicznych oraz przeprowadza testy rozmyte możliwych działań atakującego. Do analizy przepływów wykonania wykorzystywany jest port DataFlowSanitizer dla jądra Linuksa, a do testów fuzzingowych wykorzystywana jest zmodyfikowana wersja pakietu syzkaller.

Kasper, skaner spekulacyjnych problemów z wykonaniem kodu w jądrze Linuksa, jest już dostępny

Skanowanie jądra Linuksa przy użyciu Kaspera zidentyfikowało 1379 nieznanych wcześniej gadżetów, które potencjalnie prowadzą do wycieku danych podczas spekulacyjnego wykonywania instrukcji. Należy zauważyć, że być może tylko niektóre z nich mogą stwarzać realne problemy, jednak aby wykazać, że istnieje realne niebezpieczeństwo, a nie tylko teoretyczne, dla jednego z problematycznych fragmentów kodu opracowano działający prototyp exploita, prowadzący do informacji wyciek z pamięci jądra.

Źródło: opennet.ru

Dodaj komentarz