r   e   k   l   a   m   a
reklama

Bierzemy pod lupę błąd w procesorach Intela, AMD i ARM

Strona główna Aktualności

O autorze

Hodowca maszyn wirtualnych i psów, poza tym stary linuksiarz, bonvivant i śmieszek. W 2012 roku napisał na DP o algorytmie haszowania Keccak i wciąż pamięta, jak on działa.

Nie czekając, aż konkurencja wypuści aktualizacje, na łamach bloga Google Project Zero badacze szczegółowo udokumentowali nagłośniony wczoraj, bardzo poważny błąd w procesorach.

Przypomnijmy, że chodzi o błąd w architekturze niemal wszystkich procesorów, który może pozwolić aplikacjom działającym z uprawnieniami użytkownika do odczytania z pamięci należącej do jądra systemu danych, do których nie powinny mieć one dostępu – haseł, kluczy, zawartości plików zbuforowanych z dysku i innych sekretów, normalnie niewidocznych dla aplikacji. Teraz gdy Google ujawniło już szczegóły ataków, możemy podsumować stan rzeczy.

Jak się okazuje, mamy właściwie do czynienia z trzema różnymi podatnościami. Pierwsze dwa otrzymały zbiorczą nazwę Spectre Attack, trzeci znany jest od teraz pod nazwą Meltdown. Co mogą one zrobić Waszym komputerom – i jaki sprzęt faktycznie jest na atak podatny?

Meltdown, czyli gruby problem

Zacznijmy od największego z zagrożeń, CVE-2017-5754, rogue data cache load („złośliwe ładowanie danych z bufora”), które otrzymało nazwę Meltdown („krach”). To właśnie ono było rozważane we wczorajszych spekulacjach, za jego sprawą normalne aplikacje mogą odczytać niedostępną dla nich pamięć kernela. To właśnie ono zostało też opisane w artykule Andersa Fogha z lipca zeszłego roku, do którego linkowaliśmy. Teraz możemy zaprosić zainteresowanych do lektury artykułu Meltdown zespołu badaczy z całego świata, w którym przedstawiono go w detalach.

W dużym uproszczeniu sztuczka polega na wykorzystaniu mechanizmu predykcji procesora, który próbuje zgadnąć, jaka instrukcja będzie wykonana jako następna i pobiera dla niej dane. Jeśli procesor zgadnie źle, to musi cofnąć tak uruchomiony kod i uruchomić to, co faktycznie znajdowało się w programie. Jednak najwyraźniej cofnięcie nie jest doskonałe – w buforach pozostają fragmenty danych. Napastnik próbuje więc w normalnym procesie użytkownika zestawić takie instrukcje, które sprawią, że procesor będzie zgadując pobierał dane z obszaru chronionej pamięci, nie przeprowadzając tu żadnej kontroli uprawnień dostępu.

Gdy więc normalnie próba odczytania bajtu pamięci z pamięci kernela przez zwykły proces powinna zwrócić wyjątek, bezpiecznie obsłużony przez system, to następne po niej instrukcje zostały już wykonane bez takiej kontroli, pozostawiając w buforze zawartość pobranego bajtu. Teraz sprytne operacje na buforach pozwalają odkryć, gdzie bajt został zachowany i go odczytać. W ten sposób można bajt po bajcie odczytać całą zawartość pamięci kernela.

Komu zagraża Meltdown?

Na ten atak podatne są wszystkie procesory Intel x86 wyprodukowane od 1995 roku, stosujące technikę out-of-order execution (wykonywania poza kolejnością) – za wyjątkiem starych, 32-bitowych procesorów Atom, które jej nie stosowały. Na pewno podatne są jednak wszystkie 64-bitowe procesory Core. Intel do tej pory nie przedstawił żadnych zaleceń, Google zademonstrowało tymczasem, jak na procesorze Haswell Xeon odczytać dane z pamięci kernela.

Podatne są też procesory ARM, stosowane powszechnie w smartfonach, ale przecież nie tylko, korzysta z nich mnóstwo urządzeń wbudowanych i końcówek Internetu Rzeczy. Atak Meltdown można przeprowadzić na czipach ARM z najnowszymi rdzeniami Cortex-A75, ale uwaga: starsze rdzenie, Cortex-A15, Cortex-A57 i Cortex-A72 są podatne na odmianę Meltdownu, w której procesy użytkownika mogą uzyskać dostęp nie do pamięci kernela, ale do chronionych rejestrów systemów. ARM opublikowało już biuletyn bezpieczeństwa, w której dokładnie opisano, co może się stać i jak sobie z tym radzić.

Procesory AMD nie są podatne na ten atak. AMD opublikowało w tej sprawie oficjalne wyjaśnienia. Potwierdził to sam Linus Torvalds, wprowadzając do linuksowego kernela łatkę – zostaje ona wyłączona, jeśli rozpozna procesor czerwonych (X86_VENDOR_AMD).

Na co pozwala wykorzystanie Meltdown?

Jak się zabezpieczyć przed Meltdown?

Jako że jest to luka sprzętowa, atak można wykonać na wszystkich systemach operacyjnych działających na podatnych procesorach. Zabezpiecza się przed nim, przenosząc pamięć kernela w oddzielną przestrzeń pamięci wirtualnej. Technika ta nosi nazwę Kernel Page Table Isolation (KPTI) – i niestety wiąże się ze sporym (sięgającym nawet 30%) spowolnieniem pracy systemu. Im więcej oprogramowanie próbuje uzyskać dostępu do zasobów sprzętowych i systemowych, tym większe będzie spowolnienie. Najgorzej mają wszyscy ci, którzy obsługują duże bazy danych.

W systemach Windows 10 taka izolacja zostaje wprowadzona przez paczkę KB4056892 – załatany zostaje też podsystem Windowsa dla Linuksa. Sam Linux dostał aktualizacje do kernela 4.15, trwają prace nad backportowaniem jej do wspieranych kerneli, wasze dystrybucje dostarczą je tak szybko jak to możliwe. macOS został zabezpieczony już w grudniu w wydaniu systemu oznaczonym numerem 10.13.2.

Uważajcie na wszelkiego rodzaju chmury i hostingi. Amazon właśnie zakończył w pospiechu aktualizację chmury EC2, ale Microsoft dopiero wprowadza poprawki do Azure. Jak będzie z różnymi pomniejszymi firmami – to się dopiero okaże.

Spectre, czyli drugi problem

Drugi z opisanych ataków na procesory obejmuje dwie podatności: CVE-2017-575, bounds check bypass, oraz CVE-2017-5715, branch target injection. Podobnie jak atak Meltdown, wynikają one z błędów w architekturze procesora. Spectre jest trudnym do przeprowadzenia atakiem, zarazem wydaje się też bardzo trudny do załatania – tak naprawdę to trzeba byłoby tutaj przekompilowywać wszystkie aplikacje. Samo izolowanie pamięci kernela nic tu nie da.

Spectre pozwala bowiem napastnikowi, który uruchomił swój proces z uprawnieniami zwykłego użytkownika na wydobycie informacji z innych procesów działających w systemie, ale też wydobycie informacji z własnego procesu. Ma to sens choćby w wypadku przeglądarek, gdzie kod w JavaScripcie może nagle zacząć odczytywać ciasteczka logowania z pamięci. Szczegóły zostały przedstawione w artykule pt. Spectre Attacks: Exploiting Speculative Execution.

Komu zagraża Spectre?

Na atak na pewno podatne są procesory Intela. Badacze odkryli, że na procesorach Haswell Xeon są w stanie odczytać zawartość pamięci innych procesów. Co ciekawe, za pomocą tych ataków udało się też odczytać z poziomu maszyny wirtualnej-gościa zawartość pamięci linuksowego kernela na hoście w obszarze 4 GB. Atak był jednak dość skomplikowany (wymagał trwającej od 10 do 30 minut inicjalizacji) i powolny (1500 bajtów na sekundę).

Procesory AMD też są podatne na atak Spectre i odczytanie pamięci z innych procesów. Na pewno działa on na rdzeniach w architekturach wywodzących się z Bulldozera, w czipach AMD FX-8320 oraz AMD PRO A8-9600. Dodatkowo jeśli czip AMD PRO działa w niestandardowej konfiguracji z włączoną optymalizacją JIT, zwykły użytkownik może odczytać pamięć kernela. A co z czipami Ryzen? Niestety mamy złą wiadomość – badacze twierdzą, że Spectre działa też na Ryzenach.

Tak samo fatalnie wygląda sytuacja z procesorami ARM: podatne są rdzenie Cortex-A8, Cortex-A9, Cortex-A15, Cortex-A17, Cortex-A57, Cortex-A72, Cortex-A73 i Cortex-A75, a także specjalistyczne rdzenie z serii R.

Jak się zabezpieczyć przed Spectre?

Tu sprawa robi się dość skomplikowana. Google twierdzi, że smartfony z Androidem i najnowszym zestawem łatek są w praktyce odporne na próby exploitowania Spectre, poprzez zablokowanie dostępu do precyzyjnych timerów, potrzebnych do przeprowadzenia takiego ataku. Podobne zabezpieczenia zostaną wprowadzone do przeglądarki Chrome od wersji 63 oraz chromebooków.

Badacze stawiają jednak pod znakiem zapytania skuteczność takich działań, pisząc, że choć można wprowadzić z poziomu kompilatora instrukcje blokujące spekulatywne wykonywanie kodu, to znacząco to obniży wydajność. Trzeba to też zrobić ze wszystkimi aplikacjami – a co, jeśli są stare i niewspierane? Wątpliwa jest także praktyczna wartość uaktualnień mikrokodu wydanych dla procesorów, w najlepszym razie można to uznać za tymczasową łatkę.

Być może najlepszym zabezpieczeniem jest… śmietnik. Amerykański CERT wydał oficjalny komunikat, w którym przedstawia swoje rozwiązanie: należy wymienić podatny na atak procesor. Ale które są niepodatne? W ostatnim czasie predykcyjne wykonywanie kodu bardzo się rozpleniło, w Ryzenach AMD chwaliło się wręcz jakąś sztuczną inteligencją do przewidywania kolejnych instrukcji. Czy takie rozwiązania w ogóle są bezpieczne?

Niewykluczone, że w najbliższych latach sporo utracimy po prostu z wydajności procesorów. Branża półprzewodnikowa całe lata ścigała się jedynie na wydajność i energooszczędność. Jak widać, popełniono przy tym błędy, które nas wszystkich mogą drogo kosztować.

Podsumowanie


Meltdown
(Rogue Data Cache Load)
Spectre I
(Bounds Check Bypass)
Spectre II
(Branch Target Injection)
Reakcja
Intel podatne modele od 1995 roku poza 32-bitowymi Atomami podatne podatne komunikat prasowy
AMD odporne podatne znikome prawdopodobieństwo ataku objaśnienie stanu zagrożeń
ARM Cortex A-75 podatny, A-15, A-72 podatne na osłabioną wersję podatne Cortex-A8 do A-75 podatne Cortex-A8 do A-75 biuletyn bezpieczeństwa

© dobreprogramy
reklama
r   e   k   l   a   m   a

Komentarze

reklama
Polecamy w WP TechnologieWP TechnologieSzef Wykopu o cenzurze w Internecie: Czujemy się zmuszeni do ucieczki z Unii