08/01/2019

Luki w procesorach w 2019 roku

Technologie

Podczas 35 edycji konferencji Chaos Communications Congress, niemal rok po pierwszym ujawnieniu luk Meltdown i Spectre w procesorach, grupa badaczy z Graz University of Technology (Austria) omówiła obecny stan rzeczy. Okazuje się, że w zeszłym roku takich luk było znacznie więcej.

Istota luk Meltdown i Spectre w skrócie

Najpierw przypomnimy sobie, czym są luki Meltdown i Spectre i czym się różnią.

Obecność luki Meltdown wynika z faktu, że współczesne procesory mogą wykonywać instrukcje poza kolejnością. To bardzo przydatna funkcja, która przyspiesza przetwarzanie kodu, lecz w niektórych przypadkach procesor przetwarza kod podatny na błąd — kod, który w ogóle nie powinien zostać wykonany. Chodzi o sytuacje, w których kod jest wykonywany w pierwszej kolejności przez procesor, a nagle okazuje się, że działania nie można ukończyć. Takie sytuacje zdarzają się, gdy instrukcje są wykonywane poza kolejnością.

Oczywiście efekty takich działań nie zostaną przekazane dalej ani nie zostaną nigdzie użyte, a jednak pozostawiają ślady na poziomie mikroarchitektury — w pamięci podręcznej procesora — skąd niestety można uzyskać do nich dostęp. Inaczej mówiąc, pamięć podręczna może zostać użyta do uzyskania dostępu do danych, których nie można zdobyć w inny sposób: na przykład do haseł. Działa to tak: program żąda dostępu do danych w pamięci. System odmawia udzielenie dostępu z powodu braku autoryzacji. Jednak z uwagi na to, że możliwe jest wykonywanie działań poza kolejnością, hasło nadal będzie przechowywane w pamięci podręcznej, więc można je poznać. Mówiąc w skrócie, luka Meltdown może dać o sobie znać podczas prób wykonywania niedozwolonego działania.

Luka Spectre jest podobna do luki Meltdown: również jest związana z przyspieszaniem mocy obliczeniowej procesora, jednak pojawia się w kontekście nowej funkcji przewidywania rozgałęzień. Zasadniczo procesor może z pewną dozą dokładności przewidzieć działanie: ponieważ działanie B zwykle następuje po działaniu A, może on wykonać działanie B, zanim znane będą wyniki działania A. Jeśli prognoza okaże się trafiona, a działanie B nastąpi, nie ma problemu. Jednak jeśli wyniki działania A wskażą, że procesor powinien wykonać działanie С zamiast działania B, procesor porzuci działanie B i przejdzie do wykonywania działania C.

Proces przewidywania rozgałęzienia można wytrenować, gdyż w większości przypadków wzory kolejności działań są zapamiętywane, co odczuwalnie poprawia wydajność procesora (jeśli działanie B nastąpi po działaniu A kilka razy, procesor logicznie będzie zakładać, że w takiej sytuacji musi robić B po A). Zdarza się jednak, że przewidywania te nie zawsze się sprawdzają (czasami zamiast działania B pojawia się działanie C, mimo że opcja przewidywania rozgałęzień pamięta, że zwykle po A następuje B).

Jeśli przez dłuższy czas będziesz trenować system w zakresie konkretnego rozgałęzienia, a następnie zmienisz jakiś parametr, procesor najpierw pójdzie znanym sobie torem, a następnie anuluje działanie po tym, jak dowie się, że powinna zostać wykonana inna akcja. Sytuacja będzie podobna do tej, która pojawia się w związku z luką Meltdown: efekt takiego działania może pozostać, na przykład w pamięci podręcznej, skąd będzie można go wydobyć.

W obu przypadkach konsekwencje są takie same: luka Spectre także umożliwia uzyskanie nieautoryzowanego dostępu do danych. Taki dostęp może się pojawić tylko w sytuacjach, gdy przewidywanie rozgałęzienia zadziała niepoprawnie, chociaż według teorii prawdopodobieństwa właśnie taki powinna być kolejność działań.

Rok później: ponad dwadzieścia nowych odmian luk Spectre i Meltdown

Natchnieni odkryciem pierwszych luk Meltdown i Spectre badacze zaczęli dokładnie analizować tę sprawę i wkrótce odkryli podobne, choć nieznacznie różniące się problemy. Jak się okazało, producenci procesorów stosują również inną optymalizację, która powoduje powstanie luk podobnych do Meltdown i Spectre. Według grupy Graz University na początku roku 2018 istniało aż 14 luk podobnych do Meltdown i 13 podobnych do Spectre — w sumie 27 luk w procesorach, z czego tylko dwie należały do wspomnianych rodzin.

Najnowsza klasyfikacja odmian luk Meltdown i Spectre

Co więcej, wcześniej firma AMD twierdziła, że produkowane przez nią procesory nie były narażone na luki klasy Meltdown. Jednak badacze odkryli odmianę luki Meltdown (zwaną Meltdown-BR), która idealnie działała na procesorach tej marki. Zatem obecnie na luki Meltdown i Spectre (albo przynajmniej na część ich odmian) podatne są procesory wszystkich trzech największych producentów — AMD, ARM i Intel.

Na szczęście znaczna część wszystkich wersji nie działa na procesorach wspomnianych producentów — a przynajmniej testerom nie udało się ich uruchomić.

Starając się wyeliminować ten problem, w styczniu 2018 r. firmy zaczęły udostępniać łaty do mikrokodów procesorów, systemów operacyjnych i poszczególnych programów. Niestety Spectre i Meltdown są lukami sprzętowymi, czyli istnieją w urządzeniach, przez co nie można ich wyeliminować przy użyciu łat oprogramowania.

Jedna z łat została więc zaimplementowana w jądrze systemu Linux — ale niestety na tyle spowalniała jego działanie, że po jakimś czasie została usunięta z kodu.

Luka Spectre stwarza większy problem: ponieważ dotyczy różnych komponentów architektury, dla każdego z nich należy zaprojektować oddzielną łatę. Z kolei każda z łat wiąże się z dezaktywacją określonych funkcji lub wykonaniem pewnych działań dodatkowych, co jeszcze bardziej zmniejszy wydajność.

Ogólnie łaty obniżają wydajność, więc w wielu przypadkach załatany system działa wolniej niż taki, w którym podatne komponenty procesora zostały wyłączone.

Radykalne rozwiązanie — usunięcie podatnej części procesora poprzez nawiercenie we wskazanym miejscu (żart). Źródło: https://twitter.com/kreon_nrw/status/949063178645901312

Przyszłość luk Spectre i Meltdown

W październiku 2018 r. firma Intel poinformowała, że jej nowe procesory (czyli generacja, która ma się pojawić w 2019 r.) będą chronione przed lukami Spectre i Meltdown na poziomie sprzętowym. Jednak dotyczy to dwóch „podstawowych” wersji luk, a jak już wspomnieliśmy wyżej, jest ich znacznie więcej. Firma AMD także ma w planach załatanie jednej z odmian luki Spectre w swojej nowej generacji procesorów z architekturą Zen 2, które mają pojawić się w 2019 r. Ponadto trzeci producent, firma ARM, także obiecuje udostępnienie aktualizacji sprzętowych, twierdząc, że „wszystkie kolejne procesory będą odporne na ataki w stylu Spectre”.

To oczywiście wspaniała wiadomość dla tych, którzy mają zamiar kupić nowe urządzenia. A ci, którzy już kupili komputer, smartfon czy inne urządzenie z procesorem marki Intel, AMD lub ARM, będą musieli zainstalować łaty do niemal wszystkiego. Niestety znacząco zmniejszy to wydajność sprzętu, zatem prawdopodobnie niejedna osoba zrezygnuje z tego kroku.

Producenci procesorów zbyt długo ignorowali luki na poziomie sprzętowym, optymalizując swoje procesory wyłącznie pod kątem ich wydajności. Jednak wszystkie te optymalizacje mają swoją cenę: pewne rzeczy zostały naprawione, a tymczasem pojawiły się problemy z innymi. Z racji tego, że wspomniane luki znajdują się dosyć głęboko, wyeliminowanie ich będzie nie lada wyzwaniem. Z drugiej strony trzeba przyznać, że wykorzystanie tych podatności nie jest łatwym zadaniem, więc nie ma co siać paniki — a przynajmniej dopóki sytuacja nie dotknie kolejnej generacji procesorów.