Tak Spectre może przekraczać granice hosta / gościa, gościa / hosta i gościa / gościa, ponieważ jest to usterka na poziomie procesora, co oznacza, że potencjalnie wrażliwe informacje mogą przeciekać przez wszystko, co działa na rdzeniu procesora.
Większość wiadomości w Internecie mówi o tym, że dostawcy usług w chmurze są tym najbardziej dotknięci, ponieważ mają ogromne klastry systemów, które są zwirtualizowane i mogą potencjalnie zostać wykorzystane do ujawnienia poufnych informacji.
Większość dużych dostawców powinna już być załatana wady, najlepiej jak potrafią, ale będzie to problem, który będzie istniał przez jakiś czas.
Security.SE ma kanoniczne pytania i odpowiedzi na ten temat i wspomina o maszynach wirtualnych:
Używam maszyny wirtualnej / kontenerów, w jakim stopniu jestem podatny na atak?
Zgodnie z odpowiedzią Steffena Ullricha
- Ataki topnienia nie przenikają do maszyn wirtualnych, tylko wycieku pamięci jądra do procesów lokalnych.
- Spectre może działać na różnych maszynach wirtualnych.
Również od Steffen Meltdown i Spectre współpracują z kontenerami, ponieważ kontenery zależą od jądra hosta.
Maszyny wirtualne używają rzeczywistego procesora w systemie, a niektóre uprzywilejowane instrukcje są uwięzione i można je przekierować. Używa tych samych pamięci podręcznych i instrukcji, co host. Jest to zasadniczo kolejna warstwa fizycznego procesora w systemie.
Wirtualizacja jest szybka tylko dlatego, że wykorzystuje fizyczny procesor z jak najmniejszą abstrakcją i opiera się na sprzęcie procesora w celu zapewnienia izolacji. Rzeczy takie jak qemu mogą wykonywać emulację, co byłoby bezpieczniejsze, ponieważ nie jest to procesor sprzętowy, ale jest znacznie wolniejsze i różni się od wirtualizacji.
Z kanonicznego postu Security.se ponownie:
Spectre działa na innym poziomie i nie pozwala na dostęp do danych w przestrzeni jądra z przestrzeni użytkownika. W tym ataku atakujący oszukuje wykonanie spekulatywne, aby przewidywać błędne wykonywanie instrukcji. W skrócie, predyktor jest zmuszony do przewidywania określonego wyniku gałęzi (jeśli -> prawda), co powoduje prośbę o dostęp do pamięci poza zakresem, którego normalnie nie zażądałby proces ofiary, powodując nieprawidłowe wykonanie spekulacyjne. Następnie przez boczny kanał pobiera wartość tej pamięci. W ten sposób pamięć należąca do procesu ofiary wycieka do złośliwego procesu.
Ponieważ maszyna wirtualna działa na rzeczywistym sprzęcie CPU, wystarczy uruchomić określoną pętlę, aby „wyszkolić” spekulacyjny silnik wykonawczy. Następnie może użyć precyzyjnego pomiaru czasu, aby oglądać pamięci podręczne dla określonych wzorców dostępu wskazujących na proces hosta lub gościa (lub innej maszyny wirtualnej), który chce wykorzystać.
W ten sposób oznacza to, że maszynę można wykorzystać we wszystkich kierunkach. Od hosta do VM, od VM do hosta oraz od VM do VM.
Tak, nie jest to wcale łatwe i trudne do ściągnięcia, ponieważ rdzeń procesora VM może się zmienić na kaprys hosta, a host może z przyjemnością planować zadania na różnych rdzeniach, ale przez długi czas wystarczająca ilość informacji może zostać wyciekły, aby wydać tajny klucz do jakiegoś ważnego systemu lub konta. Biorąc pod uwagę wystarczającą ilość czasu i odpowiednio skryte oprogramowanie, wszystko jest potencjalnie otwarte.
Jeśli chcesz mieć „bezpieczną” maszynę wirtualną, musisz zagwarantować, że jej rdzenie są izolowane. Jedynym prawdziwym sposobem na zablokowanie tego ataku byłoby „wymuszenie” hosta i maszyn wirtualnych do używania tylko niektórych rdzeni, aby nigdy nie działały na tym samym sprzęcie, ale prowadziłoby to do skutecznego wzrostu kosztów, ponieważ nie byłbyś w stanie mieć tyle maszyn wirtualnych na danym hoście. Nigdy nie będziesz w stanie uniknąć większej liczby maszyn wirtualnych niż dostępnych rdzeni, co jest czymś, czego spodziewałbym się na serwerach „niskiego obciążenia”, ponieważ wiele systemów pozostaje bezczynnych przez 90% swojego życia.