ANALIZA: na czym technicznie polega luka w procesorach?

Intel, ARM, AMD, Oracle, IBM - wadę w architekturze układów obliczeniowych odnaleziono w podzespołach produkowanych przez największe firmy. "Zaskakujące jest to, że prawie w tym samym czasie odkryły ją niezależnie aż cztery zespoły ...jak gdyby świat badaczy otrzymał wskazówkę, gdzie warto szukać" - zauważa w rozmowie z nami Leszek Tasiemski z F-Secure.

Na początku stycznia pierwszy raz pisaliśmy w CHIP-ie o podatności części procesorów na ataki, nazwane Meltdown i Spectre. Jak każda informacja, także i ta zaczęła żyć własnym życiem i obrosła mitami, a mało było w publikacjach wyjaśnień, o co tak naprawdę technicznie chodzi, czyli na czym polegał błąd inżynierów, którzy konstruowali układy z luką. Wyjaśniamy w tym artykule, jakie jest źródło problemu. Odpowiadamy też, czy rzeczywiście użytkownicy mają się czego bać.

Producenci procesorów sprawę luk komentują na ogół zachowawczo, nie wchodząc w szczegóły. Zwykle informują tylko o aktualizacjach lub skutkach wady. Szersze wyjaśnienia przedstawiło wyłącznie AMD, choć również bez sprzętowych detali. W odpowiedzi na nasze pytanie producent zaznaczył, że problem Meltdown i Spectre jest na tyle skomplikowany, że aby nie wprowadzać zamieszania, AMD ograniczy się do oficjalnych wyjaśnień, które są tutaj. Jednak to opis, który już wcześniej publikowaliśmy w portalu. O techniczne aspekty luki w architekturze procesorów pytamy zatem ekspertów.

Na czym polega Meltdown i czy Spectre jest tym samym?

Często używane sformułowanie: „podatność wynikająca z budowy procesora” może brzmieć nieco dziwnie, ale w przypadku obydwu zagrożeń mówimy o podobnym źródle, które jest właśnie wewnątrz CPU. Mechanizmem odpowiedzialnym za lukę jest proces, który pozwala zwiększyć wydajność komputera – to tzw. przewidywanie działań (branch prediction). By zrozumieć, w jaki sposób powstała luka bezpieczeństwa, najpierw należy wyjaśnić funkcjonowanie branch prediction. Procesory nie wykonują wszystkich instrukcji po kolei. Starają się „przewidzieć” działania, które zwykle następują po sobie. To bardzo istotna cecha, poprawiająca ich skuteczność. Pozbawione jej były np. procesory Intel Atom generacji pierwszej. M. in. dlatego były tak powolne.  Można powiedzieć, że przewidywanie działań dodaje procesorom trochę wydajności. Jak to przebiega konkretnie, wyjaśnia programista CHIP-a, Wojciech Ruszczewski:

– Wyobraźmy sobie, że mamy dwie jednostki arytmetyczne i fragment kodu taki jak: „jeśli x jest równy zeru, to dodaj a do b, a jeśli nie, to odejmij”. Jeżeli w momencie przetwarzania tego fragmentu nie znamy jeszcze x (może procesor musi sprowadzić go z pamięci), opłaca się zrobić oba działania jednocześnie, a potem jeden z wyników zwyczajnie zignorować. To bardzo istotne dla efektywnego wykorzystania układów, do tego stopnia, że we współczesnych architekturach są specjalne jednostki, zajmujące się zgadywaniem, która gałąź kodu zostanie wykonana, jeszcze zanim dostępne są dane, które o tym decydują – tłumaczy Ruszczewski.

Gdzie jest więc zagrożenie? Nie jest ono tak oczywiste na pierwszy rzut oka. Ryzyko polega nie tyle na samym przewidywaniu, ile na programowej manipulacji działaniem mechanizmu. Bo skoro wykonuje on także działania inne niż to właściwe, wystarczy odpowiednio manipulować instrukcjami, by uzyskać pożądany efekt. Wojciech Ruszczewski precyzuje zjawisko w następujący sposób:

Spekulatywnym wykonaniem można manipulować i prowadzi to między innymi do nowych możliwości przeprowadzania ataków wykorzystujących charakterystykę czasową pamięci. Odczyty, które nie powinny mieć miejsca jednak są wykonywane i pozostawiają ślady powiązane z danymi, czyli na przykład kluczami używanymi do szyfrowania. – stwierdza programista.

Błędy były zaszyte w CPU od wielu lat, ale wykryte zostały dopiero niedawno, co ważne, nie przez hakerów (graf. Google)

Tajemnica Meltdown i Spectre?

Krzysztof Bogacki: Na czym polega luka, umożliwiająca ataki Spectre i Meltdown? To kwestia budowy wewnętrznej CPU? Którego elementu konkretnie?
Leszek Tasiemski z F-Secure

Leszek Tasiemski, F-Secure, szef Rapid Detection Center, ekspert ds. bezpieczeństwa: Obydwie luki dotyczą separacji części pamięci operacyjnej zarezerwowanej dla procesów jądra (kernel space) i procesów użytkownika (user space). Tradycyjnie uznaje się, że te rejony pamięci operacyjnej są bardzo dobrze oddzielone i zapewniane sprzętowo. Procesor przełącza się w tryb jądra, żeby móc dostać się do zarezerwowanej części pamięci. Odbywa się to za pomocą tzw. kręgów dostępu. Krąg 0 (Ring 0) to krąg jądra, krąg 3 (Ring 3) to procesy użytkownika, a kręgi 1 i 2 nie są w praktyce używane. Meltdown i Spectre dotyczą właśnie podatności w tej separacji. Pamięci jądra nadal nie da się bezpośrednio przeczytać z procesu użytkownika, ale sposób działania logiki procesora odpowiedzialnej za spekulacyjne wykonywanie kodu pozwala na pośredni jej odczyt. Logika spekulacyjnego wykonania kodu to optymalizacja stosowana w procesorach od prawie 20 lat. W uproszczeniu – procesor stara się odgadnąć, które instrukcje programu będą wykonywane za chwilę i jeśli ma do dyspozycji wolne jednostki obliczeniowe, to, zgadując, wykonuje pewne obliczenia na zapas. Jeśli odgadnie, oszczędza czas wykonania programu, jeśli się pomyli, wyniki tych obliczeń nie są wykorzystywane. Właśnie w tym ostatnim scenariuszu tkwi luka. Kiedy procesor nie trafi z przewidywaniami, zawartość jego rejestrów może zdradzić dane z pamięci zastrzeżonej dla procesów jądra. Mimo tego że Spectre i Meltdown dotyczą tych samych zagadnień, stanowią dwie osobne podatności (każda występuje w kilku wariantach), więc traktowanie ich łącznie jest pewnym uproszczeniem. System załatany przeciwko Meltdown nadal będzie zagrożony atakiem Spectre. Warto o tym pamiętać.

W jakich okolicznościach można uznać komputer za zagrożony Spectre lub Meltdown?

Sprzętowo jest to w zasadzie każdy współczesny procesor typu x86 i x86_64, a także niektóre, te bardziej zaawansowane procesory ARM, np. w naszych telefonach. W tej chwili główne systemy operacyjne są łatane, pojawiają się też poprawione wersje BIOS-u oraz hipernadzorcy (hypervisors) maszyn wirtualnych. Nie ma jeszcze jednak na rynku nowych procesorów z poprawioną logiką.

Tu małe doprecyzowanie z naszej strony. O ile Meltdown i Spectre stanowią zagrożenie w przypadku maszyn bazujących na CPU Intela, to użytkownicy AMD choć nie mogą w stu procentach być spokojni, to jednak pierwsza z podatności nie zagraża ich CPU. Wśród wyszczególnionych przez zespół Google’a Project Zero trzech wariantów ataku tylko dwa dotyczą jednostek AMD. Są to Bounds Check Bypass oraz Branch Target Injection, obydwa są odmianami Spectre. Drugi z nich, nazwany też GPZ Variant 2, jest przy tym w procesorach AMD czysto teoretyczny, gdyż nie udało się go jak do tej pory wywołać. Wady mają także procesory ARM, chociaż nie wszystkie, głównie nowsze, bazujące na rdzeniach Cortex-A, Cortex-M oraz Cortex-R. Są to jednak niemal wszystkie aktualnie produkowane CPU, korzystające z architektury brytyjskiej firmy – zarówno te w telefonach i tabletach jak i wykorzystywane w przeróżnych urządzeniach wbudowanych, np. w samochodowych nawigacjach GPS oraz sprzęt działający w ramach internetu rzeczy. Poniżej tabela z danymi, które CPU ARM są podatne na którą wersję zagrożenia.

Procesor ARMVariant 1 (Spectre)Variant 2 (Spectre)Variant 3 (Meltdown)Variant 3a (Meltdown)
Cortex-R7TakTakNieNie
Cortex-R8TakTakNieNie
Cortex-A8TakTakNieNie
Cortex-A9TakTakNieNie
Cortex-A15TakTakNieTak
Cortex-A17TakTakNieNie
Cortex-A57TakTakNieTak
Cortex-A72TakTakNieTak
Cortex-A73TakTakNieNie
Cortex-A75TakTakTakNie

Procesory ARM są więc zagrożone, ale nie każdym rodzajem ataku. Sprawa jest tu jednak bardziej zawiła niż w przypadku AMD, bo w zależności od wersji rdzenia może być on odporny lub nie na konkretny rodzaj ataku. Niedawno firmy Oracle i IBM przyznały, że ich podzespoły również mają podobne luki. Procesory tych producentów, czyli IBM Power i Oracle SPARCv9, są narażone na Spectre. Na Meltdown, podobnie jak w przypadku AMD, nie.

Krzysztof Bogacki: Jak to możliwe, że problem pozostawał niewykryty tak długo?

Leszek Tasiemski: To niezwykle skomplikowane rejony informatyki. Bardzo niewielu ludzi potrafi dokładnie zrozumieć, co dzieje się na tak niskim poziomie i szukać tam luk bezpieczeństwa. Z punktu widzenia specjalisty-researchera dużo łatwiej jest odkryć kolejną lukę w przeglądarce niż eksplorować zawiłości optymalizacji procesorów. Dlatego nie dziwi mnie fakt, że luka pozostawała w ukryciu przez 20 lat. Zaskakujące jest jednak to, że prawie w tym samym czasie odkryły ją niezależnie aż 4 zespoły badawcze …jak gdyby świat badaczy otrzymał wskazówkę, gdzie warto szukać.

Dlaczego łatka naprawiająca problem powoduje spadek wydajności procesorów?

Łatanie tego typu wad to wyboista droga. Potrzebna jest współpraca producentów procesorów z producentami bazującego na nich sprzętu i dostawców oprogramowania. Jedna z firm musiała wycofać swoją łatkę, ponieważ obniżała stabilność systemu (losowe restarty). Podobnie, producenci sprzętu wycofali w pewnym momencie aktualizacje BIOS-u ze względu na niestabilność systemów po ich zastosowaniu. W uproszczeniu, skoro procesor nie zapewnia izolacji na poziomie sprzętowym, trzeba tę izolację zapewnić programowo, co jest mniej wydajne. Oznacza to rezygnację z części optymalizacji wbudowanych w procesory. Pierwsze łatki były tworzone w panice. Stąd częste problemy ze stabilnością i spadek wydajności. Nie jest to jednak w żadnym wypadku argument, żeby nie łatać systemów. Po pierwszej fali możemy spodziewać się bardziej dopracowanych łatek, z potencjalnie mniejszym wpływem na wydajność. Co do samego spadku wydajności, przeciętny użytkownik, a nawet gracz, nie powinien jej dostrzegać. Różnicę widzimy raczej na obciążonych serwerach, zwłaszcza tych, które dokonują mnóstwa wywołań systemowych (tzw. syscalls), co powoduje zmianę kontekstu procesora na tryb jądra i z powrotem. Rzeczywisty spadek wydajności zależy od typu obciążenia. Przykładowo, na bardzo mocno obciążonych serwerach wykonujących czyste obliczenia, np. symulacje, spowolnienie może nie być w ogóle odczuwalne, jednak w przypadku baz danych czy systemów kolejkowych odczujemy różnicę.

Mniej zagrożone, ale nie w pełni bezpieczne – AMD Ryzen są częściowo podatne na Spectre, natomiast wolne od Meltdown (fot. Techdigg)

Wnioski

Trzeba przyznać, że to dość drastyczna wpadka producentów, tylko czy na pewno możemy nazwać zjawisko wpadką? Błąd był w procesorach od bardzo dawna, a podatne na Spectre i Meltdown układy powstają od około dwóch dekad. Fakt że dotąd nikt nie wykorzystał tej luki do skutecznych ataków (albo o tym nie wiemy), mając przecież tak wiele czasu, jest być może najlepszym potwierdzeniem z jak złożonym problemem mamy do czynienia.

Nie znaczy to jednak, że sprawę należy bagatelizować. Łatki bezpieczeństwa wprawdzie pojawiają się, ale producenci, zarówno sprzętu jak i oprogramowania, systematycznie dokonują w nich przeróbek. Wynika to głównie z niedoskonałości aktualizacji oraz problemów, które patche potrafią sprawić. Na temat łatek poprawiających bezpieczeństwo w komputerach narażonych na ataki, czyli właściwie wszystkich, wypowiedział się niedawno twórca systemu Linux, Linus Torvalds. Fiński programista słynie z tego, że nie przebiera w słowach i w tej sprawie też jest bardzo krytyczny. Jego zdaniem koniecznością jest wymiana wszystkich wadliwych CPU.

A co ze spadkami wydajności? Tutaj niestety nie ma dobrej informacji. Łatki ograniczają szybkość, z jaką procesor w niektórych przypadkach przewiduje następujące zadania, a tym samym zmniejszają jego wydajność. Tyle że to dotyczy głównie profesjonalnych, zaawansowanych zastosowań.

Możemy zatem liczyć na pomoc producentów? Wątpliwe, by za radą Torvaldsa producenci chcieli bezpłatnie wymienić nam procesory. Bardziej prawdopodobne jest, że zamiast dokonać bezpłatnych wymian zaoferują nam nowe, już bezpieczne CPU, a klienci będą musieli je kupić. I chociaż jest możliwe, że giganci rynku zapłacą wysokie odszkodowania w USA, to raczej nie należy oczekiwać podobnego obrotu spraw w Polsce. Z drugiej strony wpływ łatek na wydajność jest dość ograniczony, a dla wielu użytkowników pozostanie niezauważalny. Głównymi poszkodowanymi będą serwerownie, centra danych i firmy specjalizujące się w tworzeniu chmur obliczeniowych. W ich przypadku patche, rozwiązujące problem Meltdown i Spectre, mogą oznaczać spadek wydajności, co może prowadzić do znacznych strat finansowych. Zwykły użytkownik może raczej być spokojny, szczególnie jeśli w swoim komputerze ma CPU zagrożone tylko niektórymi wariantami opisywanych ataków. | CHIP