artykuły

Architektura Intel Skylake, część 2. – rdzenie x86

41
2 września 2015, 08:39 Mateusz Brzostek

Techniki związane z bezpieczeństwem

W Skylake dodano dwie istotne techniki sprzętowe, które mają zwiększyć bezpieczeństwo danych i wykonywanych programów. Oczywiście, wciąż bezpieczny jest tylko wyłączony komputer, ale oba te rozwiązania są pewnym krokiem naprzód w łatwości programowania lub bezpieczeństwie kodu.

Memory Protection Extensions – Intel MPX

MPX to technika mająca zapobiegać atakom (lub błędom) przepełnienia buforaWięcej informacji: Przepełnienie bufora na Wikipedii.. Przepełnienie bufora polega na niepożądanym dostępie do obszaru pamięci, w którym program nie powinien operować. Czasem może to powodować zwykłe błędy, ale niekiedy pozwala wykonać złośliwy kod ze zwiększonymi uprawnieniami.

Działanie MPX polega na sprawdzaniu, czy adresy wskaźników do pamięci mieszczą się w określonych z góry granicach. Granice te są wyznaczane programowo podczas kompilacji przez kompilator, na podstawie algorytmów zdefiniowanych w bibliotece podstawowych procedur języka (w tej chwili MPX jest dostępna tylko w C i C++). Podczas działania programu każdy nowy wskaźnik jest sprawdzany w tablicy granic, przechowywanej przez procesor w kilku specjalnych rejestrach. Jeśli jakiś kod spróbuje uzyskać dostęp do pamięci poza dozwolonym obszarem, procesor wygeneruje błąd dostępu do pamięci.

Wykorzystanie MPX wymaga co najmniej skompilowania narzędzia od nowa. Oprócz zwiększenia bezpieczeństwa MPX może teoretycznie ułatwić programowanie, bo programista ma mniej do debugowania – część rzeczy sprawdzą za niego kompilator i sam procesor. Ale kod skompilowany z MPX jest kompatybilny wstecz z procesorami bez obsługi MPX, a dla nich i tak trzeba programować i debugować starannie.

Oczywiście, testowanie każdego wskaźnika wiąże się z pewną utratą wydajności. Intel nie podaje, jak dużą, ale sugeruje użycie MPX tylko w ważnych dla bezpieczeństwa częściach kodu albo wbudowanie i domyślne wyłączenie MPX. Wtedy można włączyć MPX w przypadku odkrycia luki bezpieczeństwa, dopóki luka nie zostanie załatana aktualizacją oprogramowania.

Technika MPX jest obsługiwana w Windows 10 i Linuksie (kernel 3.19 lub nowszy). Przygotowanie kodu chronionego przez MPX jest możliwe w GCC (wersja 5.0 i nowsze), będzie też możliwe w Microsoft Visual Studio w nieokreślonej przyszłości.

Software Guard Extensions – SGX

SGX jest drugą, bardziej rewolucyjną, techniką związaną z bezpieczeństwem w Skylake. Polega na możliwości utworzenia i sprzętowego ochronienia „odwrotnego sandboksa” – pewnego rodzaju enklawy w pamięci, w której narzędzie może przechowywać swój kod i dane. Do enklawy w pamięci nie ma dostępu żaden inny program, system operacyjny, ani nawet nadzorca maszyn wirtualnych.

Jeśli chodzi o stronę sprzętową, działanie SGX polega na instrukcjach umożliwiających stworzenie enklawy w pamięci, zapełnienie jej zaszyfrowanymi danymi i zamknięcie.

Teoretycznie SGX pozwala utworzyć chroniony obszar i bezpiecznie wykonać kod nawet pod kontrolą niezabezpieczonego systemu operacyjnego. Nawet jeśli złośliwe oprogramowanie ma kontrolę nad systemem operacyjnym, nie może wpłynąć na zawartość enklawy i wykonywanie zamkniętego w niej kodu.

To funkcja przydatna przede wszystkim w środowiskach obliczeń w chmurze, gdzie na jednym komputerze nieraz jest uruchomionych wiele maszyn wirtualnych i wiele narzędzi należących do różnych stron. Enklawy pozwalają ochronić program przed złośliwymi użytkownikami chmury, lub nawet operatorem serwerów. Poza środowiskami serwerowymi SGX można użyć do ochrony haseł i sekretnych danych w przeglądarce internetowej, a nawet do zablokowania dostępu do kodu gry komputerowej, co uniemożliwiłoby działanie większości znanych mechanizmów wykorzystywanych w cheaterskich programach.

Oczywiście, SGX nie jest bez wad. Zasadniczym problemem z każdą taką techniką jest wprowadzanie i wyprowadzanie danych z enklawy do niezabezpieczonych stref. Na przykład, nawet jeśli narzędzie przechowujące hasła jest chronione enklawą i odporne na ataki, malware ciągle może skanować wpisywane z klawiatury dane albo odczytać sekretne dane z wyjścia obrazu. Można się przed tym uchronić przez umieszczenie sterownika klawiatur i sterownika wideo w enklawie – ale skąd będziemy wiedzieć, czy nie wprowadziliśmy do chronionej enklawy złośliwego sterownika? Im więcej elementów wewnątrz chronionej strefy, tym mniejsza z niej korzyść. To samo dotyczy pakietów danych, które gra transmituje przez sieć do serwera: nawet jeśli program jest chroniony, to wychodzące z niego pakiety danych dalej nie są. Znamy przykłady takich ataków: niektóre ze słynnych botów do Diablo II czy World of Warcraft nie miały nawet klienta gry, a wyłącznie fabrykator fałszywych pakietów dla serwera.

Drugim problemem jest możliwość wykorzystania SGX przez twórców złośliwego oprogramowania. Cheat, keylogger albo inny malware sam może być chroniony wewnątrz enklawy, tak by oprogramowanie antywirusowe lub antycheaterskie nie mogło go przeskanować. Eksperci od bezpieczeństwa nie mogliby przeanalizować zaszyfrowanego malware'u, bo do enklawy nikt oprócz samego malware'u nie miałby dostępu.

A gdyby jednak ktoś miał dostęp, na przykład sam Intel (klucze do szyfrowania i deszyfrowania enklaw są generowane przez procesor, którego twórcy mogą wiedzieć to i owo o użytych algorytmach), „autoryzowane” przez Intela narzędzia antywirusowe (McAfee) albo agencje rządowe? To trzeci problem z SGX: zaufanie do każdej techniki opiera się na zaufaniu jej dostawcom.

Jak to się ma do TrustZone?

Być może pamiętacie o technice ARM TrustZone, zaimplementowanej w większości nowoczesnych procesorów w architekturze ARM oraz w najnowszych APU AMD (Beema, Mullins, Carrizo). Oba te rozwiązania są podobne w założeniach. Zasadnicza różnica jest taka, że TrustZone tworzy dwie strefy: chronioną i niechronioną. Strefa chroniona jest niedostępna z niechronionej, ale jest wspólna dla części systemu operacyjnego i wszystkich programów, które chciałyby z niej skorzystać. Intel SGX pozwala utworzyć nie jedną, ale wiele stref chronionych, osobną dla każdego programu. TrustZone udostępnia za to mechanizm bezpiecznego wprowadzania danych (np. PIN-u). Obie techniki są przeznaczone do wykorzystania w nieco innych środowiskach, choć niskoenergetyczne procesory Skylake, które znajdą się w tabletach, oraz serwerowe procesory z TrustZone zaczynają zacierać tę granicę.

3