Sdílet prostřednictvím


Problémy se zabezpečením sdílené paměti virtuálního počítače NDIS

Toto téma popisuje potenciální problémy zabezpečení související s přidělováním sdílené paměti z virtuálního počítače pro přijímací vyrovnávací paměti fronty virtuálního počítače (VMQ). Toto téma obsahuje následující části:

Poznámka V Hyper-V se podřízený oddíl označuje také jako virtuální počítač (VM).

přehled problémů se zabezpečením se sdílenou pamětí virtuálního počítače

Virtuální počítače nejsou důvěryhodné entity softwaru. To znamená, že škodlivý virtuální počítač nesmí být schopen narušovat jiné virtuální počítače ani operační systém pro správu, který běží v Hyper-V nadřazeného oddílu. Tato část obsahuje základní informace a požadavky, které zajistí, aby zapisovači ovladačů porozuměli problémům se zabezpečením a požadavkům na sdílené paměti VMQ. Další informace o sdílené paměti naleznete v sekci Zápis ovladačů VMQ, v tématu Přidělení prostředků sdílené paměti.

Ve virtualizovaném prostředí může virtuální počítač zobrazit nebo upravit sdílenou paměť virtuálního počítače. Zobrazení nebo úprava dat přidružených k jiným virtuálním počítačům ale není povolené. Virtuální počítače také nemají povolený přístup k provoznímu adresního prostoru pro správu.

Část hlavičky přijatých paketů musí být chráněná. Virtuálnímu počítači není dovoleno ovlivňovat chování rozšiřitelného přepínače Hyper-V v poskytovateli síťových virtuálních služeb (VSP). Proto musí filtrování sítě VLAN (virtual LAN) proběhnout předtím, než síťový adaptér použije DMA k přenosu dat do sdílené paměti virtuálního počítače. Učení adres MAC (Media Access Control) přepínače také nemůže být ovlivněno.

Pokud Hyper-V rozšiřitelný port přepínače, který je připojený k virtuálnímu počítači, má přidružený identifikátor sítě VLAN, musí hostitelský počítač zajistit, aby cílová adresa MAC a identifikátor sítě VLAN příchozího rámce odpovídaly příslušným atributům portu předtím, než hostitel předá paket virtuálnímu síťovému adaptéru virtuálního počítače. Pokud identifikátor sítě VLAN rámce neodpovídá identifikátoru sítě VLAN portu, paket se zahodí. Pokud jsou vyrovnávací paměti pro virtuální síťový adaptér přiděleny z paměti hostitele, může hostitel zkontrolovat identifikátor sítě VLAN a v případě potřeby rámec vypustit, aby byl jeho obsah viditelný pro cílový virtuální počítač. Pokud se rámec nezkopíruje do adresního prostoru virtuálního počítače, nemůže k němu tento virtuální počítač přistupovat.

Pokud je ale nástroj VMQ nakonfigurovaný tak, aby používal sdílenou paměť, síťový adaptér používá DMA k přímému přenosu příchozích snímků do adresního prostoru virtuálního počítače. Tento přenos představuje problém se zabezpečením, kdy může virtuální počítač zkoumat obsah přijatých snímků, aniž by čekal na rozšíření přepínače, aby použil požadované filtrování sítě VLAN.

jak systém Windows Server 2008 R2 řeší problém se zabezpečením

V systému Windows Server 2008 R2, předtím, než VSP konfiguruje frontu VM pro využití sdílené paměti přidělené z adresního prostoru virtuálních počítačů, používá následující test filtrování pro frontu.

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

Pokud hardware síťového adaptéru může tento test podporovat před přenosem DMA do přijímacích vyrovnávacích pamětí, může síťový adaptér buď zahodit rámce s neplatnými VLAN identifikátory, nebo je odeslat do výchozí fronty, aby je bylo možné vyfiltrovat rozšiřitelným přepínačem. Pokud je ovladač miniportu úspěšný v požadavku na nastavení filtru s tímto testem ve frontě, může rozšiřitelný přepínač pro tuto frontu použít sdílenou paměť virtuálního počítače. Pokud ale hardware síťového adaptéru nedokáže filtrovat rámce na základě cílové adresy MAC i identifikátoru sítě VLAN, bude rozšiřitelný přepínač pro tuto frontu používat sdílenou paměť hostitele.

Rozšiřitelný přepínač zkontroluje zdrojovou adresu MAC přijatých rámců a nakonfiguruje směrovací informace pro přenos snímků – to znamená, že se podobá přepínači fyzického učení. Je možné nainstalovat ovladače filtrů brány firewall v hostitelském zásobníku. Například nad ovladačem miniportu pro hardware síťového adaptéru a pod ovladačem rozšiřitelného přepínače. Ovladače filtru brány firewall mají přístup k datům v přijatém rámci před rozšiřitelným přepínačem. Pokud je pro každý rámec přidělena celá vyrovnávací paměť příjmu z adresního prostoru virtuálního počítače, může škodlivý VM přistupovat k částem rámce, které by mohly být zkoumány ovladačem filtru nebo rozšiřitelným přepínačem spuštěným v hostiteli.

Pokud chcete tento problém se zabezpečením vyřešit, musí síťový adaptér při použití sdílené paměti virtuálního počítače pro frontu virtuálních počítačů rozdělit paket v byte offsetu, který je alespoň ve velikosti lookahead, což je pevně stanovená předem určená hodnota. Všechna předběžná data, což znamená data, která přesahují bajtový offset pro velikost lookahead, musí být přenesena pomocí DMA do sdílené paměti, která byla přidělena pro tato předběžná data. Post-lookahead data, což je zbytek datové části rámce, by se měla přenést pomocí DMA do sdílené paměti, která byla přidělena pro data následného vyhledávání.

Následující obrázek znázorňuje vztahy v síťových datových strukturách, když se příchozí data rozdělí do předvídacích a po předvídání sdílených paměťových vyrovnávacích pamětí.

Diagram znázorňující struktury paketů VMQ, zobrazující data nahlížení a data po nahlížení v samostatných sdílených paměťových vyrovnávacích pamětích.

Souhrnné požadavky na sdílenou paměť VMQ jsou následující:

  • Síťový adaptér může rozdělit přijatý rámec na hranici síťového záhlaví, která je větší než předpokládaná velikost. Pokud ale rozhraní NDIS vyžaduje, musí být bez výjimky všechny rámce, které jsou přijaty a přiřazeny k VMQ, rozděleny na nebo za hranici velikosti lookahead, kterou rozhraní NDIS požaduje.

  • Data předběžného náhledu musí být přenesena pomocí DMA do sdílené paměti, která je přidělena ovladačem miniportu. Ovladač miniportu musí při volání přidělení paměti specifikovat, že paměť bude použita pro předvídaná data.

  • Data po předzpracování musí být přenesena pomocí DMA do sdílené paměti, kterou přiděluje miniportový ovladač. Ovladač miniportu musí ve volání přidělení specifikovat, že paměť bude použita pro data navazujícího pohledu.

  • Ovladače miniportu nesmí být závislé na tom, který adresní prostor NDIS použije k dokončení žádosti o přidělení sdílené paměti. To znamená, že adresní prostor sdílené paměti pro vyhledávání nebo následné vyhledávání dat je specifický pro implementaci. V mnoha případech NDIS nebo rozšiřitelný přepínač můžou vyhovovat všem požadavkům, včetně požadavků pro následné použití, z adresního prostoru paměti hostitele.

  • Pořadí, ve kterém jsou rámce přijaty ve frontě příjmu VMQ, musí být zachovány, když jsou rámečky v této frontě označeny zásobníkem ovladačů.

  • Síťový adaptér musí přidělit dostatek místa v paměti pro zpětné vyplňování v každé vyrovnávací paměti pro následné vyhledávání. Toto přidělení umožňuje zkopírování dat do části zpětného vyplňování vyrovnávací paměti pro následné vyhledávání a umožňuje doručení rámce do virtuálního počítače v souvislé vyrovnávací paměti.

Pokud hardware neobsahuje žádný mechanismus pro splnění těchto požadavků pro sdílenou paměť VMQ, hardware, který podporuje scatter-gather DMA na straně příjmu, může dosáhnout stejných výsledků tím, že přidělí dvě přijímací vyrovnávací paměti pro každý přijatý rámec. V tomto případě je velikost první vyrovnávací paměti omezená na požadovanou velikost předpovědi.

Pokud síťový adaptér nemůže žádnou metodou splnit tyto požadavky na sdílenou paměť VMQ, VSP přidělí paměť pro přijímací vyrovnávací paměti VMQ z adresního prostoru hostitele a zkopíruje přijaté pakety ze síťových adaptérů do adresního prostoru virtuálního počítače.

řešení problému se zabezpečením ve Windows Serveru 2012 a novějších verzích

Počínaje Windows Serverem 2012 neposkytuje Poskytovatel virtuálních služeb sdílenou paměť pro přijímací vyrovnávací paměti VMQ. Místo toho VSP přidělí paměť pro přijímací vyrovnávací paměti VMQ z adresního prostoru hostitele a poté zkopíruje přijaté pakety z přijímacích vyrovnávacích pamětí síťového adaptéru do adresního prostoru virtuálního počítače.

Následující body platí pro ovladače miniportu VMQ, které běží na Windows Serveru 2012 a novějších verzích Windows:

  • Pro ovladače miniportu NDIS 6.20 VMQ se nevyžaduje žádná změna. Pokud však VSP přidělí frontu virtuálního počítače vydáním požadavku metody OID (identifikátor objektu) OID_RECEIVE_FILTER_ALLOCATE_QUEUE, nastaví LookaheadSize člena struktury NDIS_RECEIVE_QUEUE_PARAMETERS na nulu. Tím vynutíte, aby ovladač miniportu nerozdělil paket na předem vypadající a následné vyrovnávací paměti.

  • Počínaje verzí NDIS 6.30 nesmí ovladače miniportu VMQ oznamovat podporu rozdělení dat paketů do vyrovnávacích pamětí před vyhledáváním a po vyhledávání. Když ovladač miniportu zaregistruje své funkce VMQ, musí při inicializaci struktury NDIS_RECEIVE_FILTER_CAPABILITIES dodržovat tato pravidla:

    • Ovladač miniportu nesmí nastavit příznak NDIS_RECEIVE_FILTER_LOOKAHEAD_SPLIT_SUPPORTED v Flags položce.

    • Ovladač miniportu musí nastavit členy struktury MinLookaheadSplitSize a MaxLookaheadSplitSize na nulu.

    Další informace o registraci funkcí VMQ naleznete v tématu Určení schopností VMQ síťového adaptéru.