Jak ograniczyć luki w zabezpieczeniach Spectre i Meltdown w systemach Linux?

34

Badacze bezpieczeństwa opublikowali w Project Zero nową lukę o nazwie Spectre and Meltdown, pozwalającą programowi na kradzież informacji z pamięci innych programów. Wpływa na architektury Intel, AMD i ARM.

Wadę tę można wykorzystać zdalnie, odwiedzając stronę JavaScript. Szczegóły techniczne można znaleźć na stronie redhat , zespole bezpieczeństwa Ubuntu .

Wyciek informacji poprzez spekulacyjne ataki kanałowe po stronie wykonania (CVE-2017-5715, CVE-2017-5753, CVE-2017-5754 alias Spectre and Meltdown)

Odkryto, że nowa klasa ataków z kanału bocznego wpływa na większość procesorów, w tym procesory Intel, AMD i ARM. Atak pozwala złośliwym procesom przestrzeni użytkownika na odczyt pamięci jądra i złośliwego kodu u gości na odczyt pamięci hiperwizora. Aby rozwiązać ten problem, konieczne będą aktualizacje jądra Ubuntu i mikrokodu procesora. Te aktualizacje zostaną ogłoszone w przyszłych Informacjach o bezpieczeństwie Ubuntu, gdy będą dostępne.

Przykładowa implementacja w JavaScript

Jako dowód słuszności koncepcji napisano kod JavaScript, który po uruchomieniu w przeglądarce Google Chrome pozwala JavaScript na odczyt prywatnej pamięci z procesu, w którym działa.

Wydaje się, że na mój system ma wpływ luka widma. Skompilowałem i wykonałem ten proof-of-concept ( spectre.c).

Informacje o systemie:

$ uname -a
4.13.0-0.bpo.1-amd64 #1 SMP Debian 4.13.13-1~bpo9+1 (2017-11-22) x86_64 GNU/Linux

$ cat /proc/cpuinfo
model name  : Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz

$gcc --version
gcc (Debian 6.3.0-18) 6.3.0 20170516

Jak ograniczyć luki w zabezpieczeniach Spectre i Meldown w systemach Linux?

Dalsza lektura: Używanie Meltdown do kradzieży haseł w czasie rzeczywistym .

Aktualizacja

Używanie Spectre & Meltdown Checkerpo przejściu do 4.9.0-5wersji jądra po odpowiedzi @Carlos Pasqualini, ponieważ dostępna jest aktualizacja zabezpieczeń, aby zminimalizować cve-2017-5754 na Debian Stretch:

CVE-2017-5753 [bounds check bypass] aka 'Spectre Variant 1'
* Checking count of LFENCE opcodes in kernel:  NO  (only 31 opcodes found, should be >= 70)
> STATUS:  VULNERABLE  (heuristic to be improved when official patches become available)

CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'
* Mitigation 1
*   Hardware (CPU microcode) support for mitigation:  NO 
*   Kernel support for IBRS:  NO 
*   IBRS enabled for Kernel space:  NO 
*   IBRS enabled for User space:  NO 
* Mitigation 2
*   Kernel compiled with retpoline option:  NO 
*   Kernel compiled with a retpoline-aware compiler:  NO 
> STATUS:  VULNERABLE  (IBRS hardware + kernel support OR kernel with retpoline are needed to mitigate the vulnerability)

CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Kernel supports Page Table Isolation (PTI):  YES 
* PTI enabled and active:  YES 
> STATUS:  NOT VULNERABLE  (PTI mitigates the vulnerability)

Zaktualizuj 25 stycznia 2018 r

spectre-meltdown-checkerSkrypt jest oficjalnie zapakowane przez Debiana, jest on dostępny dla Debiana odcinku przez backports repozytorium, Buster i Sid.

Aktualizacja 22.05.2018

Obejście sklepu spekulacyjnego (SSB) - znane również jako wariant 4

Systemy z mikroprocesorami wykorzystujące spekulacyjne wykonywanie i spekulacyjne wykonywanie odczytów pamięci przed poznaniem adresów wszystkich wcześniejszych zapisów pamięci mogą umożliwić nieuprawnione ujawnienie informacji atakującemu z dostępem lokalnym użytkownikom za pomocą analizy kanału bocznego.

Nieuczciwy odczyt rejestru systemowego (RSRE) - znany również jako wariant 3a

Systemy z mikroprocesorami wykorzystujące wykonywanie spekulacyjne i wykonujące spekulacyjne odczyty rejestrów systemowych mogą umożliwiać nieautoryzowane ujawnienie parametrów systemowych atakującemu z dostępem lokalnym użytkownikom za pomocą analizy kanału bocznego.

Edytuj 27 lipca 2018 r

NetSpectre: Czytaj dowolną pamięć w sieci

W tym artykule prezentujemy NetSpectre, nowy atak oparty na wariancie Spectre 1, który nie wymaga kodu kontrolowanego przez atakującego na urządzeniu docelowym, co wpływa na miliardy urządzeń. Podobnie jak lokalny atak Spectre, nasz atak zdalny wymaga obecności gadżetu Spectre w kodzie celu. Pokazujemy, że systemy zawierające wymagane gadżety Spectre w odsłoniętym interfejsie sieciowym lub interfejsie API mogą zostać zaatakowane przez nasz ogólny zdalny atak Spectre, umożliwiający odczyt dowolnej pamięci przez sieć. Atakujący wysyła tylko ofierze spreparowane żądania i mierzy czas reakcji na wyciek tajnej wartości z pamięci ofiary.

GAD3R
źródło
1
Usunąłem znacznik Debian, aby zezwolić, aby to Q miało zastosowanie do wszystkich Linuksów (jak w tytule); cofnij, jeśli zamierzasz skupić się tylko na Debianie.
Jeff Schaller

Odpowiedzi:

12

Alan Cox udostępnił link z bloga AMD: https://www.amd.com/en/corporate/speculative-execution

Wariant pierwszy: Bounds Check Bypass

Rozwiązane przez aktualizacje oprogramowania / systemu operacyjnego, które zostaną udostępnione przez sprzedawców i producentów systemów. Oczekiwany niewielki wpływ na wydajność.

Wariant drugi: wstrzyknięcie do rozgałęzienia

Różnice w architekturze AMD oznaczają prawie zerowe ryzyko wykorzystania tego wariantu. Jak dotąd nie wykazano wrażliwości na wariant 2 w procesorach AMD.

Wariant trzeci: Nieuczciwe ładowanie pamięci podręcznej danych

Zero podatności AMD z powodu różnic w architekturze AMD.

Dobrze byłoby mieć potwierdzenie tych oświadczeń AMD przez stronę trzecią.

„Łagodzenie” w systemach, których dotyczy problem, wymagałoby nowego jądra i ponownego uruchomienia, ale w wielu dystrybucjach nie ma jeszcze wydanych pakietów z poprawkami:

Debian:

Inne źródła informacji, które znalazłem:

Carlos Pasqualini
źródło
12
Cały zestaw informacji AMD nie pomoże pytającemu, którego procesorem jest Intel Core.
JdeBP
4
Jądro Linuxa znajduje się w poście Grega Kroah-Hartmana: kroah.com/log/blog/2018/01/06/meltdown-status
alanc
Zgodnie ze stronami debiana, do których prowadzi link powyżej (i stronami do nich linkowanymi), wydaje się, że łaty do jądra będą dystrybuowane, gdy odpowiedzialni dostawcy opublikują swój mikrokod. Jednak z security-tracker.debian.org/tracker/CVE-2017-5754 (jedyna jak dotąd naprawiona) wydaje się, że poprawki zostały udostępnione tylko dla stabilnych i niestabilnych wersji. Czy ktoś wie, czy możemy spodziewać się poprawek dla oldstable („jessie”)? Nie udało mi się znaleźć żadnego oświadczenia Debiana ani zespołu ds. Bezpieczeństwa Debiana w tej sprawie ...
Shevek
11

27 stycznia 2018 Intel Microcode psuje niektóre systemy

Intel Microcode Aktualizacja 08.01.2018 zająć wykonywanie spekulatywne rozgałęzienia luki bezpieczeństwa złamał kilka systemów. Wpłynęło to na wiele systemów Ubuntu od 8 stycznia do 21 stycznia. 22 stycznia 2018 r. Ubuntu wydało aktualizację, która przywraca starszy Microcode od 07.07.2017.

Jeśli wystąpiły problemy z aktualizacjami, przeinstalowałeś system Ubuntu i wyłączyłeś aktualizacje między 2018-01-08 a 2018-01-22, możesz spróbować ponownie uruchomić automatyczne aktualizacje Ubuntu.

16 stycznia 2018 aktualizacja Spectre w 4.14.14 i 4.9.77

Jeśli korzystasz już z jądra w wersjach 4.14.13 lub 4.9.76, tak jak ja, instalacja nie wymaga zastanowienia się, 4.14.14a 4.9.77kiedy pojawią się one w ciągu kilku dni, aby zmniejszyć lukę w zabezpieczeniach Spectre. Ta poprawka nazywa się Retpoline i wcześniej nie spekulowała na poważnym poziomie wydajności:

Greg Kroah-Hartman rozesłał najnowsze łaty dla wydań Linux 4.9 i 4.14, które teraz obejmują obsługę Retpoline.

Ten X86_FEATURE_RETPOLINE jest włączony dla wszystkich procesorów AMD / Intel. Aby uzyskać pełne wsparcie, musisz również zbudować jądro z nowszym kompilatorem GCC zawierającym wsparcie -mindirect-branch = thunk-extern. Zmiany w GCC wylądowały wczoraj w GCC 8.0 i są w trakcie potencjalnego powrotu do GCC 7.3.

Ci, którzy chcą wyłączyć obsługę Retpoline, mogą uruchomić załatane jądra za pomocą noretpoline .

Bez wchodzenia w szczegóły JavaScript, oto jak natychmiast uniknąć dziury w Meltdown (i od 10 stycznia 2018 r., Ochrona Spectre)

Aktualizacja z 12 stycznia 2018 r

Wstępna ochrona przed Spectre jest już dostępna i będzie ulepszana w nadchodzących tygodniach i miesiącach.

Jądra systemu Linux 4.14.13, 4.9.76 LTS i 4.4.111 LTS

Z tego artykułu Softpedia :

Jądra systemu Linux 4.14.13, 4.9.76 LTS i 4.4.111 LTS są teraz dostępne do pobrania z kernel.org i zawierają więcej poprawek w stosunku do luki w zabezpieczeniach Spectre, a także niektóre regresje z systemu Linux 4.14.12, 4.9 .75 LTS i 4.4.110 jądra LTS wydane w zeszłym tygodniu, ponieważ niektóre zgłaszały drobne problemy.

Wydaje się, że te problemy zostały teraz rozwiązane, więc można bezpiecznie zaktualizować systemy operacyjne oparte na systemie Linux do nowych wydanych dzisiaj wersji jądra, które obejmują więcej aktualizacji x86, niektóre poprawki PA-RISC, s390 i PowerPC (PPC), różne ulepszenia sterowniki (Intel i915, crypto, IOMMU, MTD) oraz zwykłe zmiany w jądrze mm i core.

Wielu użytkowników miało problemy z aktualizacjami Ubuntu LTS w dniach 4 stycznia 2018 r. I 10 stycznia 2018 r. Używam 4.14.13przez kilka dni bez żadnych problemów, jednak YMMV .


Aktualizacja z 7 stycznia 2018 r

Greg Kroah-Hartman napisał wczoraj aktualizację statusu dotyczącą luk w zabezpieczeniach jądra Meltdown i Spectre Linux. Niektórzy mogą nazwać go drugim najpotężniejszym człowiekiem w świecie Linuksa, tuż obok Linusa. Artykuł dotyczy stabilnych jąder (omówionych poniżej) i jąder LTS, które ma większość użytkowników Ubuntu.


Jądra Linuksa 4.14.11, 4.9.74, 4.4.109, 3.16.52 i 3.2.97 Wada krachu

Z tego artykułu :

Użytkownicy proszeni są o natychmiastową aktualizację swoich systemów

4 stycznia 2018 01:42 GMT · Przez Marius Nestor

Opiekunowie jądra Linuksa Greg Kroah-Hartman i Ben Hutchings wypuścili nowe wersje jądra Linuksa 4.14, 4.9, 4.4, 3.16, 3.18 i 3.12 LTS (Long Term Support), które najwyraźniej załatały jedną z dwóch krytycznych wad bezpieczeństwa, wpływających na najnowocześniejsze procesory.

Jądra Linux 4.14.11, 4.9.74, 4.4.109, 3.16.52, 3.18.91 i 3.2.97 są teraz dostępne do pobrania ze strony internetowej kernel.org, a użytkownicy są proszeni o aktualizację swoich dystrybucji GNU / Linux do tych nowych wersji, jeśli natychmiast uruchomią którąkolwiek z tych serii jądra. Dlaczego warto aktualizować? Ponieważ najwyraźniej usuwają krytyczną lukę zwaną Meltdown.

Jak informowaliśmy wcześniej, Meltdown i Spectre to dwa exploity, które wpływają na prawie wszystkie urządzenia zasilane przez nowoczesne procesory (CPU) wydane w ciągu ostatnich 25 lat. Tak, to znaczy prawie wszystkie telefony komórkowe i komputery osobiste. Rozpad może zostać wykorzystany przez nieuprzywilejowanego atakującego w celu złośliwego uzyskania poufnych informacji przechowywanych w pamięci jądra.

Poprawka do luki w zabezpieczeniach Spectre nadal działa

Chociaż Meltdown jest poważną luką, która może ujawnić twoje tajne dane, w tym hasła i klucze szyfrowania, Spectre jest jeszcze gorszy i nie jest łatwy do naprawienia. Badacze bezpieczeństwa twierdzą, że będzie nas to prześladować przez dłuższy czas. Spectre wykorzystuje technologię wykonywania spekulatywnego wykorzystywaną przez współczesne procesory w celu optymalizacji wydajności.

Do czasu usunięcia błędu Spectre zdecydowanie zaleca się przynajmniej aktualizację dystrybucji GNU / Linux do dowolnej z nowo wydanych wersji jądra Linux. Wyszukaj w repozytoriach oprogramowania ulubionej dystrybucji nową aktualizację jądra i zainstaluj ją jak najszybciej. Nie czekaj, aż będzie za późno, zrób to teraz!


Używałem jądra 4.14.10 przez tydzień, więc pobieranie i uruchamianie jądra Ubuntu Mainline w wersji 4.14.11 nie stanowiło dla mnie większego problemu.

Użytkownicy systemu Ubuntu 16.04 mogą być bardziej komfortowi dzięki wersjom jądra 4.4.109 lub 4.9.74, które zostały wydane w tym samym czasie, co 4.14.11.

Jeśli twoje regularne aktualizacje nie instalują żądanej wersji jądra, możesz to zrobić ręcznie, postępując zgodnie z odpowiedzią Zapytaj Ubuntu: https://askubuntu.com/questions/879888/how-do-i-update-kernel-to-the-latest -mainline-version / 879920 # 879920


4.14.12 - Jaką różnicę robi dzień

Niecałe 24 godziny po mojej pierwszej odpowiedzi została wydana łatka naprawiająca wersję jądra 4.14.11, która mogła się wydostać. Aktualizacja do 4.14.12 jest zalecana dla wszystkich użytkowników 4.14.11. Greg-KH mówi :

Ogłaszam wydanie jądra 4.14.12.

Wszyscy użytkownicy jądra 4.14 muszą dokonać aktualizacji.

W tej wersji wciąż znanych jest kilka drobnych problemów, na które wpadli ludzie. Mamy nadzieję, że zostaną rozwiązane w ten weekend, ponieważ łaty nie wylądowały na drzewie Linusa.

Na razie, jak zawsze, przetestuj swoje środowisko.

Patrząc na tę aktualizację, niewiele wierszy kodu źródłowego zostało zmienionych.

WinEunuuchs2Unix
źródło
1
Istnieje już rozwiązanie Meltdown, dostępne za pośrednictwem apt-get dist-upgrade.
luchonacho
1
Na moim telefonie teraz, ale aktualizacja LTS powoduje panikę jądra w dniu 01.10.2018. Zobacz Zapytaj Ubuntu.
WinEunuuchs2Unix
1
Na szczęście zaktualizowałem go do 109 (108 wywołuje panikę jądra). Więc nie miałem tego problemu. To działa dobrze.
luchonacho,
1
@ WinEunuuchs2Unix tutaj jest aktualizacja USN-3531-2: Regresja
mikrokodu
1
@ GAD3R Dziękuję bardzo za link. Pomaga mi opublikować odpowiedź w Ask Ubuntu, która może pomóc wielu osobom: askubuntu.com/questions/998471/…
WinEunuuchs2Unix
6

Wadę tę można wykorzystać zdalnie, odwiedzając stronę JavaScript.

W rzeczy samej. Jednym rozsądnym środkiem zaradczym jest wyłączenie JavaScript w przeglądarkach internetowych lub użycie przeglądarek internetowych, które nie obsługują JavaScript.

Większość przeglądarek obsługujących JavaScript ma ustawienie umożliwiające jego wyłączenie. Alternatywnie, jeśli chcesz zachować białą listę witryn lub domen, dla których zezwalasz na JavaScript, możesz skorzystać z różnych dodatków, takich jak uBlock Origin i NoScript .

Uwaga: Oczywiste jest, że wyłączenie / ograniczenie JavaScript nie powinno być Twoim jedynym ograniczeniem. Powinieneś dodatkowo przejrzeć (i prawdopodobnie zastosować) wszelkie odpowiednie poprawki jądra i inne aktualizacje bezpieczeństwa po ich napisaniu, przetestowaniu i opublikowaniu. Wypłat Debianie pochodnych polecenia zastosowanie takich jak sudo apt update , sudo apt list-upgradablei sudo apt upgrade.

Aktualizacja: nie wierz mi na słowo. Alan Cox mówi to samo:

Co trzeba zrobić, aby troska o dużym momencie jest javascript, ponieważ można wykorzystać zdalnie wykorzystywane przez JavaScript na stronach internetowych w celu kradzieży rzeczy z pamięci systemowej. ... rozważ takie rzeczy jak Adblockery i rozszerzenia, takie jak noscript, które mogą zatrzymać wiele śmieci. Zrób to jak najszybciej. Gdy pojawią się aktualizacje systemu operacyjnego, zastosuj je. ( Źródło )

sampablokuper
źródło
5
Przepraszam, chociaż to pomaga przeciwko Attacowi, bez JS nie byłbyś w stanie zostawić tutaj odpowiedzi. Ta rada jest podobna do „zaprzestania korzystania z Internetu” (w 2018 r.).
Moritz Zarówno
4
@MoritzBoth, na szczęście wiele witryn działa dobrze bez JS. Niestety, StackExchange wymaga JS do księgowania, jak zauważyłeś. To (poważny!) Niedociągnięcie w SE :(
sampablokuper
3
W przypadku FireFox dodatek typu noScript może pomóc ograniczyć użycie JavaScript w podejrzanych witrynach - chociaż ostatnie zmiany wprowadzone przez FF Quantum (V57) wrzuciły bardzo duży kamień do całej puli dodatków FF ...
SlySven
2
Od czasu wydania Quantum przeszedłem na Pale Moon, właśnie z tego powodu. Działa dla mnie naprawdę dobrze, w tym NoScript i Cookie Masters (kiedyś Cookie Monster).
Murphy
2
@ MoritzBoth Naprawdę nie sądzę, że wyłączenie JS sprowadza się do „zaprzestania korzystania z Internetu”, a tym bardziej do „zaprzestania korzystania z Internetu”. Jest to jednak świetny czas na podniesienie świadomości na temat problemów związanych z powszechnym poleganiem na JS od niektórych dostawców treści internetowych.
Tobia Tesan
5

Fakt, że można to wykorzystać przy użyciu JavaScript, nie jest głównym punktem i nie powinien być głównym problemem (chociaż jest to główny problem, ponieważ w ten sposób można łatwo wykonać zdalny kod w systemie, ale to nie jedyny sposób może się to zdarzyć).

Twoja uwaga nie powinna skupiać się na Javascript i / lub przeglądarce. Idealnie, twój procesor powinien zostać załatany. Niestety, dla większości obecnej fali błędów nie wydaje się to możliwe. Debian wraz ze wszystkimi innymi stronami dostarczającymi system operacyjny pójdzie w ten sposób jedyną możliwą drogą poza poleceniem procesora, który nie jest wadliwy: zmusza system do obejścia błędu w CPU. Te łatki nie naprawiają problemów. Zamiast tego system operacyjny ukrywa je najlepiej, jak to możliwe, w każdym programie uruchomionym na komputerze (a więc także w przeglądarce).

To ukrywanie jest dodatkową pracą obliczeniową, dlatego ogólna wydajność systemu będzie niższa niż bez niego. Ile mniej zależy prawdopodobnie w dużej mierze od tego, co dokładnie robią te programy.

Mając to na uwadze, wróć do pytania: co możesz zrobić, aby chronić swój system Debian, to zainstalować aktualizacje bezpieczeństwa. Ufam, że Debian zrobi wszystko, co możliwe w świetle tych błędów, aby uruchomić Debiana tak bezpiecznie, jak to możliwe, pomimo nieodłącznych wad procesora.

Nad tym problemem pracują już wszelkiego rodzaju duże firmy, podobnie jak liczni guru sprzętu i Linuksa. Nie chcę absolutnie powstrzymywać cię przed próbowaniem czegoś samemu lub próbowaniem pomocy w ogólnym wysiłku. Jeśli jednak interesuje Cię własne bezpieczeństwo i poprawka na czas, najprawdopodobniej znajdą lepsze rozwiązanie w krótszym czasie niż Ty, zaczynając od teraz, aby przyjrzeć się temu samemu.

użytkownik68856
źródło