Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Intel/AMD/ARM – wszystko podatne (Meltdown & Spectre) – wykradanie pamięci z OS
FAQ: 1. Czy jestem podatny? Najprawdopodobniej tak.
To tłumaczenie pierwszego często zadawanego pytania dotyczącego podatności Meltdown & Spectre.
Możliwe jest wykradanie pamięci z systemu operacyjnego oraz z innych aplikacji. Jest częściowy patch softwareowy na poziomie OS (adresujący czytanie pamięci z OS).
Problem dotyka zarówno procesorów Intela / AMD jak i ARM (świat mobilny!) – choć potencjalne możliwości atakującego różnią się w zależności od platformy.
W szczególności 100% potwierdzenie podatności Meltdown mamy dla Intela i ARM. AMD oznajmia, że jest podatny tylko na tzw. wariant 1 Spectre (najmniej z wszystkich groźny) oraz częściowo wariant 2 Spectre (również mniej groźny niż Meltdown).
Do sprawy przygotowali się panowie z Google, zgodnie z założeniami – „pokaż exploit to ci uwierzę”. Zatem na start pokazano PoC-e (podatność Spectre) na procesory: Intel Haswell Xeon CPU, the AMD FX CPU, AMD PRO CPU, ARM Cortex A57.
Przykładowo:
(…) normal user privileges under a modern Linux kernel with a distro-standard config, can perform arbitrary reads in a 4GiB range in kernel virtual memory on the Intel Haswell Xeon CPU (…) kernel virtual memory can be read at a rate of around 2000 bytes per second.
Odczytywanie pamięci jądra z prędkością 2000 bajtów na sekundę może nie jest super optymalne, ale zobaczcie że można wyciągnąć sporo (powyższy PoC – okno 4 GB pamięci).
W boju (przechodzimy teraz do Meltdown – czyli problem potwierdzony na Intelu i części ARM-ów) wygląda to mniej więcej tak jak na zrzucie poniżej (w tyle pamięć jądra – w dużym uproszczeniu pamięć OS) + w osobnym oknie odpalony exploit wykradający konkretny adres pamięci. Można też całość zobaczyć na poglądowym filmie.
Inny ciekawy PoC to wykradanie haseł z password managera w innej instancji Firefoksa (zarówno FF jak i Ubuntu w zaktualizowanych wersjach):
I hasła w plaintext:
Kolejny PoC został zaprezentowany dla wirtualizacji (wracamy na moment do Spectre) – wykradanie pamięci z pamięci głównej maszyny (host), posiadając dostęp tylko do guesta – nie brzmi dobrze (operatorzy cloudowi obgryzają w tym momencie paznokcie).
Prędkość odczytu to około 1500 bajtów na sekundę. Tutaj jednak Google przyznaje, że do testów użyło nieco już przestarzałej dystrybucji Debiana (operatorzy cloudowi przestają obgryzać paznokcie, szczególnie że tutaj można znaleźć informacje, że pełna wirtualizacja nie powinna być zagrożona – problematyczna jest parawirtualizacja zapewniania np. przez XEN czy Dockera).
W oryginalnej publikacji (Meltdown) wykonano testy na cloudach DigitalOcean i Amazona, gdzie raczej będą „świeże” dystrybucje Linuksa:
For the cloud setup, we tested Meltdown in virtual machines running on Intel Xeon CPUs hosted in the Amazon Elastic Compute Cloud as well as on DigitalOcean. Note that for ethical reasons we did not use Meltdown on addresses referring to physical memory of other tenants.
W cytowanej pracy jest mowa o całkiem niezłej prędkości wycieku danych dla testów właśnie w cloudzie (do 503KB/s)
Meltdown & Spectre
Czym w zasadzie różnią się te dwie podatności? W skrócie prowadzą do tego samego – odczyt pamięci, do której nie powinienem mieć dostępu. Meltdown umożliwia czytanie pamięci z OS, Spectre umożliwia odczyt pamięci pomiędzy aplikacjami.
Gadu gadu, ale jaka jest w zasadzie istota podatności Meltdown? Taka:
Meltdown is some form of race condition between the fetch of a memory address and the corresponding permission check for this address.
Owy race condition, z kolei bazuje na dużej optymalizacji w procesorach zwanej out-of-order execution. Zacytujmy większy fragment:
The root cause of the simplicity and strength of Meltdown are side effects caused by out-of-order execution. Out-of-order execution is an important performance feature of today’s processors in order to overcome latencies of busy execution units, e.g., a memory fetch unit needs to wait for data arrival from memory. Instead of stalling the execution, modern processors run operations out-of-order i.e., they look ahead and schedule subsequent operations to idle execution units of the processor.
Polecamy zresztą zapoznanie się z oryginalną publikacją – szczególnie pierwsze dwa rozdziały napisane są bardzo przystępnie.
Patche
Patche nie są jeszcze wszędzie dostępne (albo są wydawane w pośpiechu rodząc potencjalnie inne problemy). O samym Spectre zresztą możemy poczytać:
As it is not easy to fix, it will haunt us for quite some time.
–ms
Mnie zastanawia czy atak można wykonać zdanie np. przez jakiś port. czy najpierw trzeba uzyskać dostęp do maszyny aby coś zrobić.? Jak to jest?
Trzeba odpalić w jakiś sposób exploita na docelowym kompie. Po prostu go ściągnąć i odpalić ;) Albo wykorzystać bug np. w przeglądarce.
A co z JS?
jednym z wektorów ataku może być złośliwy kod JavaScript umieszczony na stronie internetowej, który uzyska dostęp do danych z innych kart (domen) otwartych w przeglądarce. Można to efektywnie wykorzystać do kradzieży ciastek.
atak można wykonać nawet za pomocą javascriptu ;)
Nie ma to jak podnieść kogoś na duchu ?
Nosisz czarny kapelusz czy mi się zdawało? ;-)
Ja bym chetnie zobaczyl zmiany w wydajnosci procesorow AMD po patchu
Łatka w kernelu Linuxa wykrywa, czy procesor jest od AMD i gdy wykryje, że jest od AMD to łatka nie zostaje zastosowana. Bardzo eleganckie rozwiązanie.
Jak jest z Windowsem to nie wiem – wglądu do maszyny z AMD i Windowsem / kodu łatki nie mam :-)
Ktora latke na kernel masz na mysli? Jakis link?
Jaka latke na kernel masz na mysli? Jakis link?
Łatka łatająca Meltdown to użycie KPTI – (CONFIG_PAGE_TABLE_ISOLATION=y). To załatwia sprawę i zostało wdrożone najszybciej na wszystkich wspieranych kernelach (od wersji 4.14.11-5 w górę oraz we wspieranych LTS-ach). Ciężko mi teraz znaleźć link do tego, jak dokładnie wygląda wyłączanie PTI na procesorach AMD.
Łatki odpowiedzialne za Spectre wariantu drugiego – tu opcje są dwie. Albo wsparcie IBRS ze strony kernela + aktualizacja mikrokodu do styczniowej wersji (wydanej na Linuxy 8 stycznia 2018) albo kernel skompilowany z opcją retpoline (CONFIG_RETPOLINE=y) za pomocą wersji kompilatora obsługującego retpoline (https://github.com/hjl-tools/gcc/commit/23b517d4a67c02d3ef80b6109218f2aadad7bd7 ). Pierwsza opcja jest „w drodze” a druga opcja z flagą retpoline powoduje lekki spadek wydajności w stylu 1 do 2 procent.
Łatka na 1 wersję Spectre (najtrudniejszą do wyexploitowania – może za to stanowić większe zagrożenie w kombinacji ze specyficzną konfiguracją kernela + innymi lukami bezpieczeństwa) – o oficjalnych patchach na tą podatność jeszcze nie słyszałem.
A, znalazłem jeszcze jeden link jak to „główni winowajcy” łatają w projekcie Clear Linux – https://github.com/clearlinux-pkgs/linux
Jakieś patche na pierwszą wersję Spectre się pojawiają.
Na Phenom II 955 spadło mi w Passmarku o około 11% dla CPU i około 8% dla operacji dyskowych. Win7 Prof. 64bit SP1.
A czy architektura RISC / PowerPC też jest podatna?
To w trakcie jeszcze rozczajki, ale zobacz tu:
https://access.redhat.com/security/vulnerabilities/speculativeexecution
Additional exploits for other architectures are also known to exist. These include IBM System Z, POWER8 (Big Endian and Little Endian), and POWER9 (Little Endian).
„Rozczajki”? Poważny serwis nie powinien tak grypsować …
czasem lubimy być niepoważni, od zbytniej powagi to można zawału dostać :-)
Racja, jestem „nowy” w te klocki i trochę „luzu” nam nie zaszkodzi. Pozdrawiania dla MS – Pańskie szkolenie zrobiło na mnie duże i pozytywne wrażenie oraz wielki szacunek dla ogromu Pańskiej wiedzy.
Albo i kija nie powiem gdzie można mieć, a po co? :)
Zatem AS400 który jest tak na prawdę sercem większości systemów bankowych – również jest zagrożony? Liczymy do czasu wyjścia rozwiązania na skuteczność hermetyzacji środowiska, bo inaczej będą jaja… oj będą.
Pytanie zatem brzmi jak go załatać, oraz jak do tematu podejdzie firma matka , czyt. IBM.
Pozdrawiam!
Powiedział człowiek, który jest tak grzeczny, że nie nazwał swoje imię. :)
Słusznie. Nie mówi się „rozczajka” tylko „rozkmina”.
Czaic, wyczaic, rozczaic. Jezyk polski pozwala na nowe konstrukcje jezykowe, ktore od razu sa zrozumiale dla sluchaczy/czytaczy. Przyklad? Np.: przyczajony, zaczajony maja inna konotacje. Wiec badz przyczajony i przyczaj jak najwiecej. Rozczjajac o co w tym chodzi i jak sie to ma..
https://gist.github.com/miniupnp/9b701e87f14ad3e0a455cfb54ba99fed
Powyższe wzięte z tego wątku o PPC:
http://tenfourfox.blogspot.de/2018/01/more-about-spectre-and-powerpc-or-why.html
Ów
Podatna jest też nVidia – wszystkie procesory: http://nvidia.custhelp.com/app/answers/detail/a_id/4611/~/security-bulletin%3A-nvidia-gpu-display-driver-security-updates-for-speculative
Najlepiej jechać na piracie i mieć w d###pie łatki i legalne systemy.
Jak temat wygląda z ar71xx(i pochodnych) w routerach na lede?
Chcieliście szybkości to ją macie (-; A jak ma się sprawa AMD i ARM jeżeli chodzi o szybkość odczytu za pomocą spectree v1 i spectree v2 – czy są już exploity?
Spadam na drzewo spekulować (-;