Młotkowanie kości czyli od problemu sprzętowego pamięci DRAM do roota

dodał 9 marca 2015 o 20:42 w kategorii Błędy  z tagami:
Młotkowanie kości czyli od problemu sprzętowego pamięci DRAM do roota

Czasem zdarzają się błędy inne niż wszystkie. Na początku wszyscy kiwają głowami i mówią „no ciekawy błąd, ale wykorzystać to się go nijak nie da”. A potem przychodzi ktoś, kto nie wie, że się nie da i pisze działającego eksploita.

To, że odczytując fragmenty pamięci da się magicznie zmienić zawartość innych jej obszarów, jesteśmy w stanie jeszcze jakoś od biedy zrozumieć. Ale to, że komuś udało się to wykorzystać, by w powtarzalny i solidny sposób uzyskać ucieczkę ze środowiska wirtualnego lub podniesienie uprawnień w systemie linuksowym – to już nam się ledwo w głowie mieści.

My tu czytamy, a tam się zmienia

Wszystko zaczęło się w połowie zeszłego roku od ciekawej pracy opisującej zadziwiający proces zmiany zawartości bitów układów pamięci DRAM bez ich „dotykania”. Badaczom udało się spowodować zmianę z 0 na 1 (lub odwrotną) przez powtarzane wielokrotnie odczytywanie przylegających fizycznie komórek pamięci. Zjawisko to spowodowane jest ogromną gęstością upakowania komórek pamięci która powoduje, że operacje na jednych komórkach mogą – poprzez ładunki elektryczne – wpływać na stan innych komórek. Nie będziemy udawać, ze rozumiemy, jak dokładnie przebiega ten proces – szczegóły znajdziecie w pracy naukowej temu poświęconej.

Początkowo badacze zajmujący się kwestiami bezpieczeństwa nie byli przekonani, czy da się ten błąd wykorzystać do ataków prowadzonych w świecie rzeczywistym. Na szczęście jednak po świecie chodzą ludzie, dla których nie ma rzeczy niemożliwych, są tylko takie, których jeszcze nie spróbowali. Panowie Mark Seaborn i Thomas Dullien zajęli się tematem i owocem ich prac jest publikacja na blogu Google Project Zero opisująca, jak można odkryte błędy wykorzystać do niecnych celów.

Losowe zmiany bitów i podnoszenie uprawnień

Badacze musieli poradzić sobie z wieloma wyzwaniami. Ich praca wymagała bardzo dobrego zrozumienia zasad alokacji pamięci oraz jej fizycznych struktur w układzie scalonym. Dzięki kilku dobrym pomysłom i wielu eksperymentom udało im się wypracować metodę takiego prowadzenia zmasowanego odczytu poszczególnych bloków pamięci, by do losowych zmian bitów zachodziło w ściśle określonych obszarach, które leżały w centrum ich zainteresowania. Ponownie nie będziemy udawać, że rozumiemy ten proces – wiemy jednak, że się im udało.

W swoich eksperymentach badacze udowodnili dwa możliwe scenariusze ataku. Pierwszy z nich polega na ucieczce z maszyny wirtualnej dzięki uzyskaniu możliwości modyfikacji zawartości pamięci cudzych procesów, zaś drugi to podniesienie uprawnień w systemie dzięki możliwości kontrolowania zapisu w dowolnym obszarze pamięci. Opublikowane zostały dwa eksploity – jeden ucieka z piaskownicy Native Client, zaś drugi podnosi uprawnienia w systemie linuksowym.

Dziękujemy za pamięć

Dziękujemy za pamięć

Czy mój komputer jest podatny

To bardzo dobre pytanie. Badacze testowali 29 różnych laptopów – nie daje to podstaw do wnioskowania na temat całej populacji, ale daje przybliżony obraz skali zjawiska. W 14 przypadkach zaobserwowano zmianę stanu bitów, w 15 laptop był odporny. Badacze nie wymienili konkretnych marek sprzętu ani producentów układów pamięci, jednak analizując ich symbole można dojść do wniosku, ze nie ma żadnego „bezpiecznego producenta”. Spośród 5 różnych dostawców układów pamięci jeden okazał się być w przeprowadzonych testach odporny na atak.

Co ważne, wszystkie testy przeprowadzono na sprzęcie, którego kości pamięci nie posiadały wbudowanej korekty błędów ECC. Nie oznacza to, że pamięci serwerowe z korektą błędów są odporne na atak – według badaczy w ich przypadku atak choć trudniejszy do przeprowadzenia, to dalej jest możliwy.

Czy mój komputer jest podatny – by odpowiedzieć na to pytanie wystarczy uruchomić odpowiednie narzędzie testujące. Na szczęście istnieją już mechanizmy, których zadaniem jest wyeliminowanie tego błędu. Nowe układy pamięci mają korygować takie pomyłki, prawdopodobnie mechanizm ten wdrożył już jeden z producentów układów obecnie sprzedawanych na rynku. Dodatkowo niektóre możliwości przeprowadzenia ataku można wyeliminować przez aktualizację BIOSu.

Podsumowanie

Trzeba przyznać, że opisywany powyżej błąd i jego metoda wykorzystania to jedne z najciekawszych odkryć ostatnich, bogatych w zdarzenia miesięcy. Jak sięgamy pamięcią, podobny błąd poprzedni raz został zidentyfikowany w roku 2003, gdzie ucieczkę z wirtualnej maszyny mógł zapewnić jeden błędnie odczytany bit zmieniony np. przez promieniowanie kosmiczne. Błędy na styku sprzętu i oprogramowania to rzadko badana dziedzina – tym większe wyrazy podziwu należą się autorom odkryć opisywanych powyżej.

Dalsza lektura: