Wycieków danych c.d.: podsłuchaj koprocesor Intela, poznasz klucze szyfrowania

Strona główna Aktualności

O autorze

W tym roku przyzwyczailiśmy się już do myślenia o procesorach w kategoriach bezpieczeństwa. Od stycznia słyszymy przecież regularnie o odkryciach kolejnych podatności na ataki, wynikających z wykorzystania rozwiązań architektonicznych obliczonych na uzyskanie jak najwyższej wydajności. Kolejna ujawniona w tym tygodniu podatność w procesorach Intela to już więc niemal dzień jak co dzień. Niemniej jednak warto ją przybliżyć. Lazy FP state restore co prawda pozwala na to samo co klasyczne Spectre, tj. odczytanie danych należących do innych procesów przez złośliwe oprogramowanie, ale jednak nie ma nic wspólnego z buforami procesora. Tym razem zawiniła jednostka zmiennoprzecinkowa (FPU).

Jak informuje Intel w swoim biuletynie bezpieczeństwa, podatność dotyczy wszystkich procesorów z rodziny Core (oraz jak twierdzą niezależne źródła, także Xeonów). Oznaczona jako CVE-2018-3665, odkryta została przez niemieckich badaczy – Juliana Stecklina z Amazon Germany, Thomasa Preschera z Cyberus Technology GmbH i Zdenka Sojkę z SYSGO AG, oraz szefa bezpieczeństwa FreeBSD Colina Percivala. Pozwala ona na wydobycie wrażliwych danych, takich jak np. klucze kryptograficzne szyfru AES.

Problem wziął się stąd, że systemy operacyjne zapisują i odczytują rejestry FPU oraz towarzyszące im informacje tylko wtedy, kiedy oprogramowanie korzysta z jednostki zmiennoprzecinkowej. W stosowanym dotąd schemacie obsługi FPU, podczas przełączania zadań, pierwsza instrukcja zmiennoprzecinkowa wykonana przez proces generuje wyjątek DNA (device not available). Uchwyt tego wyjątku zapisuje aktualny kontekst FPU do obszaru zapisu starego procesu i ładuje nowy kontekst FPU dla obecnego procesu. Innymi słowy ładowanie stanu FPU jest opóźnione do momentu, gdy instrukcja zostaje wywołana przez aktualne zadanie.

Ma to oczywiście swój sens – skoro większość procesów nie korzysta z FPU, to nie ma sensu podczas przełączania zadań zapisywać i odtwarzać kontekstu jego rejestrów. Oszczędza to cykli procesorów.

Niestety jednak jak się okazuje, stosując metody analogiczne do ataku Meltdown wersja 3A (rogue system register read), nieuprzywilejowana aplikacja może odczytać fragmenty informacji z tych rejestrów jednostki zmiennoprzecinkowej, do których dostęp powinien mieć tylko kernel.

Jak sobie z tym poradzić? Rozwiązaniem jest wymuszenie stosowania metody noszącej nazwę eager FPU state restore, w której operacje odczytu i zapisu rejestrów nie są opóźniane. Nie trzeba martwić się o spadek wydajności, przynajmniej we współczesnych 64-bitowych procesorach Intela. Instrukcja XSAVEOPT pozwala na efektywne sprzętowe przełączanie procesów FPU, bez konieczności polegania na wyjątkach DNA. Wymuszenie jej wykorzystania zamyka wyciek informacji.

O tym odkryciu Intel miał oficjalnie poinformować 27 czerwca, ale deweloperzy OpenBSD i DragonflyBSD złamali embargo, wydając w tym tygodniu łatki eliminujące zagrożenie. Co za tym idzie, swoje biuletyny bezpieczeństwa wydali także twórcy popularniejszych systemów. Warto jednak podkreślić, że biuletyny te nie dotyczą najnowocześniejszych systemów. Linux od kernela 4.8 korzysta już domyślnie z eager FPU state restore, podobnie też jak Windows 10 i Windows Server 2016. Tak samo wygląda sytuacja dla systemów BSD – do załatania są tylko starsze systemy. Na szczęście nigdzie nie jest konieczna aktualizacja mikrokodu.

Można więc powiedzieć, że tym razem jest to bardziej ciekawostka niż realne zagrożenie. Nie tylko najnowocześniejsze systemy operacyjne są odporne, ale nawet te starsze trudno wyexploitować: malware musi już na nich działać i zbierać informacje bit po bicie. Niemniej jednak odkrycie to po raz kolejny pokazuje, jak niespodziewane dla bezpieczeństwa mogą być konsekwencje pewnych rozwiązań optymalizacyjnych. A przecież to przede wszystkim dzięki daleko posuniętym optymalizacjom współczesny sprzęt jest mimo wszystko coraz szybszy: era nakręcania gigaherców skończyła się dobrą dekadę temu.

© dobreprogramy