Meltdown oraz Spectre, czyli wiele hałasu o nic (istotnego)?

Meltdown oraz Spectre, czyli wiele hałasu o nic (istotnego)?

Parę dni temu media technologiczne zatrzęsły się w posadach. Project Zero, powołana przez Google grupa zajmująca się ogólnie pojętym bezpieczeństwem, wyjawiła, że niemalże wszystkie współczesne procesory podatne są na wykradzenie informacji. Specjaliści scharakteryzowali dwa rodzaje ataków, które otrzymały nazwy, odpowiednio, Meltdown oraz Spectre. Jak się okazuje, obie luki wynikają, mniej lub bardziej, z ogólnych założeń konstrukcyjnych aktualnych mikroarchitektur, a tym samym występują niezwykle powszechnie. Właściwie to dotykają każdej współczesnej centralnej jednostki obliczeniowej, która jest czymkolwiek więcej ponad prosty mikrokontroler. Ale czy my, szarzy zjadacze chleba, rzeczywiście mamy powody do obaw? Cóż, niekoniecznie, jednak żeby to zrozumieć należy wgryźć się w charakterystykę obydwu exploitów.

Na początek - Meltdown. Jest to nazwa przyjęta dla zagrożenia CVE-2017-5754, rogue data cache load, pod którym skrywa się możliwość przełamania izolacji pomiędzy aplikacjami trybu użytkownika a jądrem systemu operacyjnego, co, mówiąc wprost, pozwala uzyskać bezpośredni dostęp do danych zapisanych w pamięci podręcznej procesora. Jak wiadomo, współczesne procesory cechują się zaawansowanymi mechanizmami przewidywania, powiązanymi ze zdolnością do wykonywania rozkazów poza kolejnością i po skoku warunkowym (wykonywanie spekulatywne). Upraszczając, jednostka obliczeniowa "zgaduje", który rozkaz ma wykonać w następnej kolejności, pobierając przy tym, co oczywiste, adekwatne dane. Kiedy tylko predykcja okazuje się błędna, procesor przechodzi do właściwego kodu i wykonuje go, ale wspomniane wcześniej dane, mimo wszystko, pozostają w buforach. Atak metodą Meltdown umożliwia ich odczytanie.

Ostatnim "dużym" procesorem Intela odpornym na Meltdown jest Pentium MMX

Na to zagrożenie podatne są wszystkie procesory Intela zdolne do wykonywania poza kolejnością, a więc Pentium Pro i nowsze, pomijając wybrane modele z rodziny Atom (Silverthorne, Lincroft i niektóre Diamondville; brak możliwości wykonywania poza kolejnością). Ponadto, problem mają posiadacze urządzeń mobilnych z rdzeniami Cortex A-75, A-72 lub A-15, z czego w przypadku tych dwóch ostatnich mówi się o osłabionej wersji ataku. Układy AMD, z powodu różnic w budowie, nie są przez Meltdown dotknięte w ogóle. Tak czy inaczej, luka jest dość łatwa do załatania. Wystarczy bowiem odizolować pamięć kernela, przenosząc ją w wydzieloną przestrzeń pamięci wirtualnej. Specjaliści ds. Linuksa, nawiasem mówiąc, opisali ten zabieg jako Kernel page-table isolation (KPTI). Niestety załatanie Meltdown wiąże się z widocznym spadkiem wydajności, choć zależnym od zastosowania. Przykładowo, Skylake w testach odczytu, przy bazodanowym silniku PostgreSQL, traci od 7 do 17%, a jest to jednostka wspierająca PCID (process-context identifiers), czyli w teorii najmniej podatna na straty.

Posiadacze chipów AMD mogą spać spokojniej, ale na Spectre podatny jest nawet Ryzen

Przechodząc do Spectre, sprawa się znacząco komplikuje. Pod tą nazwą występują w istocie dwa zagrożenia: CVE-2017-575, bounds check bypass, a także CVE-2017-5715, branch target injection. Spectre również wynika z wykonywania spekulatywnego, ale nie dotyczy konkretnych implementacji tego mechanizmu, a całej jego koncepcji. Okazuje się, że odpowiednio manipulując kodem wykonywanym w trybie użytkownika można odczytać dane z innych procesów, przez co na atak podatny jest każdy procesor wykonujący poza kolejnością - AMD, Intel, ARM, itd., niezależnie od stosowanego systemu. Załatanie Spectre nie jest możliwe. Google wprawdzie twierdzi, że zagrożenie można wyeliminować poprzez zablokowanie timerów niezbędnych do ataku, co też uczyniono w przeglądarce Chrome 63 czy systemie Android, ale, zdaniem specjalistów, jest to tylko utrudnienie życia napastnikowi. Ostatecznym rozwiązaniem byłoby dopiero zablokowanie wykonywania spekulatywnego, jednak miałoby to opłakane skutki, z perspektywy wydajności.

No dobrze, ale co to wszystko oznacza dla przeciętnego Kowalskiego? I niniejszym dochodzimy do meritum. Zarówno Meltdown, jak i Spectre są zagrożeniami lokalnymi (wykonanie szkodliwego kodu musi nastąpić na atakowanym urządzeniu; zdalnie może odbyć się dopiero po uprzednim przejęciu kontroli nad tymże), wymagającymi bezpośredniego dostępu napastnika do atakowanej maszyny. Co więcej, obie luki umożliwiają "najwyżej" uzyskanie danych, a nie chociażby wykonanie szkodliwego kodu. Oczywiście tym samym nasze hasła bądź inne poufne informacje nie są bezpieczne, ale to ledwie kolejne furtki do ich uzyskania, na dodatek dość trudne, szczególnie w przypadku Spectre, do wykorzystania. Obawiać ataków z wykorzystaniem którejś z ww. metod muszą się przede wszystkim właściciele chmur czy dostawcy usług hostingowych. Niemniej firmy takie jak Amazon czy Microsoft już podjęły działania zapobiegawcze, a te odbywają się niejako poza naszymi oczami. Dla szablonowego użytkownika komputera, wbrew pozorom, największym problemem może być potencjalny spadek wydajności procesora, wskutek łatki KPTI. Po pierwsze, dotyczy to jednak wyłącznie układów Intela, a po drugie - nie w każdym scenariuszu użytkowym. Wstępne testy wykazują, że akurat gry nie notują jakiś spektakularnych spadków, ale na pewno pozwolimy sobie ten temat zbadać dogłębniej.

A co z naszymi poufnymi danymi? Cóż, jakkolwiek absurdalnie to nie zabrzmi, wierzcie mi lub nie, ale wykorzystywane powszechnie chińskie smartfony mają znacznie więcej prostszych "furtek" do uzyskania danych, niż exploit Spectre. I nie, nie bagatelizuję zagrożenia, ale staram się spojrzeć na sprawę trzeźwym wzrokiem.

Piotr Urbaniak
Piotr Urbaniak Redaktor, programista

Student informatyki, niekoronowany król ITHardware.pl ;)

Zgłoś autorowi błąd na stronie

Komentarze do: Meltdown oraz Spectre, czyli wiele hałasu o nic (istotnego)?