Udostępnij przez


Problemy z zabezpieczeniami dotyczące pamięci udostępnionej maszyny wirtualnej NDIS

W tym temacie omówiono potencjalne kwestie bezpieczeństwa związane z przydzielaniem pamięci współdzielonej przez maszynę wirtualną na bufory odbiorcze dla kolejki maszyny wirtualnej (VMQ). Temat zawiera następujące sekcje:

Uwaga W Hyper-V partycja podrzędna jest również znana jako maszyna wirtualna.

omówienie problemów z zabezpieczeniami pamięci udostępnionej maszyny wirtualnej

Maszyny wirtualne nie są zaufanymi jednostkami oprogramowania. Oznacza to, że złośliwa maszyna wirtualna nie może zakłócać działania innych maszyn wirtualnych ani systemu operacyjnego zarządzania działającego w partycji nadrzędnej Hyper-V. Ta sekcja zawiera podstawowe informacje i wymagania, aby upewnić się, że autorzy sterowników rozumieją problemy z zabezpieczeniami i wymaganiami dotyczącymi pamięci udostępnionej vmQ. Aby uzyskać więcej informacji na temat pamięci udostępnionej, zobacz temat alokacji zasobów pamięci udostępnionej w sekcji Pisanie sterowników VMQ.

W środowisku zwirtualizowanym pamięć udostępniona maszyny wirtualnej może być widoczna lub modyfikowana przez maszynę wirtualną. Jednak wyświetlanie lub modyfikowanie danych skojarzonych z innymi maszynami wirtualnymi nie jest dozwolone. Maszyny wirtualne nie mogą również uzyskiwać dostępu do przestrzeni adresowej zarządzania.

Część nagłówka odebranych pakietów musi być chroniona. Maszyna wirtualna nie może wpływać na zachowanie przełącznika rozszerzalnego Hyper-V u dostawcy usług wirtualnych sieci (VSP). W związku z tym filtrowanie sieci VLAN (wirtualnej sieci LAN) musi nastąpić, zanim karta sieciowa zastosuje DMA do transferu danych do pamięci współdzielonej maszyny wirtualnej. Ponadto, uczenie się adresów przez przełącznik kontroli dostępu do mediów (MAC) nie może być zakłócone.

Jeśli port przełącznika rozszerzalnego Hyper-V połączony z maszyną wirtualną ma skojarzony identyfikator VLAN, komputer hosta musi upewnić się, że docelowy adres MAC i identyfikator VLAN przychodzącej ramki są zgodne z odpowiednimi atrybutami tego portu, zanim host przekaże pakiet do wirtualnej karty sieciowej maszyny wirtualnej. Jeśli identyfikator sieci VLAN ramki nie jest zgodny z identyfikatorem sieci VLAN portu, pakiet zostanie porzucony. Gdy bufory odbiorcze wirtualnej karty sieciowej są przydzielane z pamięci hosta, host może sprawdzić identyfikator VLAN i w razie potrzeby odrzucić ramkę, zanim jej zawartość zostanie udostępniona docelowej maszynie wirtualnej. Jeśli ramka nie zostanie skopiowana do przestrzeni adresowej maszyny wirtualnej, nie będzie ona dostępna dla tej maszyny wirtualnej.

Jeśli jednak maszyna wirtualna VMQ jest skonfigurowana do używania pamięci udostępnionej, karta sieciowa używa narzędzia DMA do przesyłania ramek przychodzących bezpośrednio do przestrzeni adresowej maszyny wirtualnej. To przeniesienie wprowadza problem z zabezpieczeniami, w którym maszyna wirtualna może zbadać zawartość odebranych ramek bez oczekiwania na zastosowanie wymaganego filtrowania sieci VLAN przez rozszerzalny przełącznik.

Jak system Windows Server 2008 R2 rozwiązuje problem z zabezpieczeniami

W systemie Windows Server 2008 R2, przed tym jak VSP skonfiguruje kolejkę maszyny wirtualnej do używania pamięci współdzielonej przydzielonej z przestrzeni adresowej maszyny wirtualnej, stosuje następujący test filtrowania dla kolejki.

(MAC address == x) && (VLAN identifier == n)

Jeśli sprzęt karty sieciowej może obsługiwać ten test przed transferem DMA do buforów odbiorczych, karta sieciowa może odrzucić ramki z nieprawidłowymi identyfikatorami VLAN lub wysłać je do kolejki domyślnej, aby można je było odfiltrować przez przełącznik rozszerzalny. Jeśli sterownik miniportu pomyślnie ustawi filtr w tej kolejce za pomocą tego testu, rozszerzalny przełącznik może używać pamięci współdzielonej maszyny wirtualnej dla tej kolejki. Jeśli jednak sprzęt karty sieciowej nie jest w stanie filtrować ramek na podstawie docelowego adresu MAC i identyfikatora sieci VLAN, przełącznik rozszerzalny używa pamięci współdzielonej przez hosta dla tej kolejki.

Rozszerzalny przełącznik sprawdza źródłowy adres MAC odebranych ramek w celu skonfigurowania informacji o routingu dla ramek przesyłanych — jest to podobne do przełącznika uczenia fizycznego. Możliwe jest zainstalowanie sterowników filtrów zapory w stosie hosta, na przykład powyżej sterownika miniportu sprzętu karty sieciowej i poniżej sterownika przełącznika rozszerzalnego. Sterowniki filtrów zapory mogą uzyskiwać dostęp do danych w odebranej ramce przed przełącznikiem rozszerzalnym. Jeśli cały bufor odbiorczy dla każdej ramki jest przydzielany z przestrzeni adresowej maszyny wirtualnej, złośliwa maszyna wirtualna może uzyskać dostęp do części ramki, które mogą zostać zbadane przez sterownik filtru lub przełącznik rozszerzalny uruchomiony na hoście.

Aby rozwiązać ten problem z zabezpieczeniami, w przypadku korzystania z pamięci udostępnionej maszyny wirtualnej dla kolejki maszyny wirtualnej, karta sieciowa musi podzielić pakiet na przesunięciu bajtów, które jest co najmniej rozmiarem wyprzedzenia, ustaloną z góry stałą wartością. Wszelkie dane lookahead — co oznacza dane będące przed przesunięciem bajtów określającym rozmiar lookahead — muszą zostać przeniesione za pomocą DMA do pamięci współdzielonej, która została przydzielona dla danych lookahead. Dane post-lookahead — pozostały ładunek ramki — powinny być przesyłane za pomocą DMA do przydzielonej pamięci współdzielonej dla danych post-lookahead.

Na poniższej ilustracji przedstawiono relacje dla struktur danych sieciowych, gdy przychodzące dane są podzielone na pamięci udostępnionej lookahead i post-lookahead.

Diagram ilustrujący struktury pakietów VMQ, pokazujący dane wyprzedzające i po wyprzedzeniu w oddzielnych buforach pamięci współdzielonej.

Wymagania podsumowujące dotyczące pamięci udostępnionej VMQ są następujące:

  • Karta sieciowa może podzielić odebraną ramkę na granicę nagłówka sieci, która jest większa niż rozmiar głowicy. Na żądanie NDIS i bez wyjątku wszystkie ramki, które są odbierane i przypisane do maszyny wirtualnej, muszą być podzielone na granicy rozmiaru patrzenia do przodu lub poza nią.

  • Dane lookahead muszą być przesyłane za pomocą DMA do pamięci współdzielonej, która została przydzielona przez sterownik miniportu. Sterownik miniportu musi określić w wywołaniu alokacji, że pamięć będzie używana na dane początkowe (lookahead).

  • Dane po przeglądzie muszą być przesyłane za pomocą DMA do pamięci współdzielonej, przydzielonej przez sterownik miniportu. Sterownik miniportu musi określić w wywołaniu alokacji, że pamięć będzie używana do danych post-lookahead.

  • Sterowniki miniportu nie mogą być zależne od tego, jaką przestrzeń adresową NDIS będzie używać do ukończenia żądania alokacji pamięci udostępnionej. Oznacza to, że przestrzeń adresowa udostępnionej pamięci dla danych typu lookahead lub post-lookahead jest specyficzna dla implementacji. W wielu przypadkach NDIS lub rozszerzalny przełącznik może spełniać wszystkie żądania, w tym żądania do użycia po analizie wstępnej, z przestrzeni adresowej pamięci hosta.

  • Kolejność, w jakiej ramki są odbierane w kolejce odbiorczej VMQ, musi być zachowana, gdy ramki w tej kolejce są przekazywane w górę stosu sterownika.

  • Adapter sieciowy musi przydzielić wystarczającą ilość pamięci na wypełnienie w każdym buforze post-lookahead. Przydział ten umożliwia skopiowanie danych przedwyprzedzeniowych do części bufora po wyprzedzeniu i umożliwia dostarczenie klatki do maszyny wirtualnej w ciągłym buforze.

Jeśli na sprzęcie nie ma mechanizmu spełniającego te wymagania dotyczące pamięci udostępnionej VMQ, sprzęt obsługujący rozproszone zbieranie SAM po stronie odbiorczej może osiągnąć te same wyniki, przydzielając dwa bufory odbiorcze dla każdej odebranej ramki. W takim przypadku rozmiar pierwszego buforu jest ograniczony do żądanego rozmiaru przewidywania.

Jeśli karta sieciowa nie spełnia tych wymagań dotyczących pamięci udostępnionej VMQ żadną metodą, program VSP przydzieli pamięć dla buforów odbiorczych VMQ z przestrzeni adresowej hosta i skopiuje odebrane pakiety z buforów odbiorczych karty sieciowej do przestrzeni adresowej maszyny wirtualnej.

Jak system Windows Server 2012 i nowsze wersje rozwiązują problem z zabezpieczeniami

Począwszy od systemu Windows Server 2012, program VSP nie przydziela pamięci współdzielonej z VM do buforów odbierania VMQ. Zamiast tego program VSP przydziela pamięć dla buforów odbiorczych VMQ z przestrzeni adresowej hosta, a następnie kopiuje odebrane pakiety z buforów odbiorczych karty sieciowej do przestrzeni adresowej maszyny wirtualnej.

Następujące kwestie dotyczą sterowników miniportu VMQ, które działają w systemie Windows Server 2012 i nowszych wersjach systemu Windows:

  • W przypadku sterowników miniportu NDIS 6.20 VMQ nie jest wymagana żadna zmiana. Jednak gdy program VSP przydziela kolejkę maszyny wirtualnej, wydając żądanie metody OID (identyfikator obiektu) OID_RECEIVE_FILTER_ALLOCATE_QUEUE, ustawi LookaheadSize składowej struktury NDIS_RECEIVE_QUEUE_PARAMETERS na zero. Wymusi to, aby sterownik miniportu nie dzielił pakietu na bufory pre-lookahead i post-lookahead.

  • Począwszy od NDIS 6.30, sterowniki miniportu VMQ nie mogą reklamować wsparcia dla dzielenia danych pakietowych na bufory przed wglądem i bufory po wglądzie. Gdy sterownik miniportu rejestruje swoje możliwości VMQ, musi przestrzegać tych reguł podczas inicjowania struktury NDIS_RECEIVE_FILTER_CAPABILITIES.

    • Sterownik miniportu nie może ustawić flagi NDIS_RECEIVE_FILTER_LOOKAHEAD_SPLIT_SUPPORTED w członie Flags.

    • Sterownik miniportu musi ustawić MinLookaheadSplitSize i MaxLookaheadSplitSize członków na zero.

    Aby uzyskać więcej informacji na temat rejestrowania możliwości VMQ, zobacz Określanie możliwości VMQ karty sieciowej.