Udostępnij przez


Sprawdzanie integralności kodu

Integralność pamięci to funkcja zabezpieczeń opartych na wirtualizacji (VBS) dostępna w systemach Windows 10, Windows 11 i Windows Server 2016 i nowszych. Integralność pamięci i język VBS zwiększają model zagrożenia systemu Windows i zapewniają silniejszą ochronę przed złośliwym oprogramowaniem próbującym wykorzystać jądro systemu Windows. VBS wykorzystuje hypervisor systemu Windows do stworzenia izolowanego środowiska wirtualnego, które staje się podstawowym elementem zaufania dla systemu operacyjnego, zakładając, że jądro może być podatne na zagrożenia. Integralność pamięci jest krytycznym składnikiem, który chroni i wzmacnia zabezpieczenia systemu Windows, uruchamiając integralność kodu trybu jądra w izolowanym środowisku wirtualnym VBS. Integralność pamięci ogranicza również alokacje pamięci jądra, które mogą być użyte do naruszenia bezpieczeństwa systemu. Zapewnia, że strony pamięci jądra stają się wykonywalne dopiero po przejściu kontroli integralności kodu w bezpiecznym środowisku uruchomieniowym, a same strony wykonywalne nigdy nie są zapisywalne.

Uwaga

Integralność pamięci jest czasami określana jako integralność kodu chronionego przez hypervisor (HVCI) lub jako integralność kodu wymuszana przez hypervisori została pierwotnie wydana jako część Device Guard. Funkcja Device Guard nie jest już używana z wyjątkiem lokalizacji integralności pamięci i ustawień VBS w zasadach grupy lub rejestrze systemu Windows.

Sprawdzanie integralności kodu zapewnia zgodność z wymaganiami dotyczącymi użycia pamięci jądra w kontekście integralności pamięci i wykrywa następujące naruszenia:

Kod błędu Problem z integralnością kodu
0x2000:
  • 2 — adres w kodzie sterownika, w którym wykryto błąd.
  • 3 — Rodzaj basenu.
  • 4 — Znacznik puli (jeśli podano).

Obiekt wywołujący określił typ puli wykonywalnej. (Oczekiwano: NonPagedPoolNx)
0x2001:
  • 2 — adres w kodzie sterownika, w którym wykryto błąd.
  • 3 — Ochrona stron (WIN32_PROTECTION_MASK).
Obiekt wywołujący określił ochronę strony wykonywalnej. (Oczekiwano: wyczyszczone bity PAGE_EXECUTE*)
0x2002:
  • 2 — adres w kodzie sterownika, w którym wykryto błąd.
  • 3 — Priorytet strony (MM_PAGE_PRIORITY logicznie OR z MdlMapping*).
Obiekt wywołujący określił wykonywalne mapowanie języka MDL. (Oczekiwano: MdlMappingNoExecute).
0x2003:
  • 2 — nazwa pliku obrazu (ciąg Unicode).
  • 3 — adres nagłówka sekcji.
  • 4 — Nazwa sekcji (ciąg zakodowany w formacie UTF-8).
Plik obrazu zawiera sekcję wykonywalną i zapisywalną.
0x2004:
  • 2 — nazwa pliku obrazu (ciąg Unicode).
  • 3 — adres nagłówka sekcji.
  • 4 — Nazwa sekcji (ciąg zakodowany w formacie UTF-8).
Obraz zawiera sekcję, która nie jest dopasowana do strony.
0x2005:
  • 2 — nazwa pliku obrazu (ciąg Unicode).
  • 3 — Katalog IAT.
  • 4 — Nazwa sekcji (ciąg zakodowany w formacie UTF-8).
Obraz zawiera plik IAT znajdujący się w sekcji pliku wykonywalnego.

Aktywowanie tej opcji:

Sprawdzanie integralności kodu dla co najmniej jednego sterownika można aktywować przy użyciu Menedżera weryfikatora sterowników lub wiersza polecenia Verifier.exe. Aby uzyskać szczegółowe informacje, zobacz Wybieranie opcji weryfikatora sterowników. Aby aktywować lub dezaktywować opcję sprawdzania integralności kodu, należy ponownie uruchomić komputer.

  • W wierszu polecenia

    W wierszu polecenia sprawdzanie integralności kodu jest reprezentowane przez 0x02000000 (Bit 25). Na przykład:

    verifier /flags 0x02000000 /driver MyDriver.sys

    Funkcja będzie aktywna po następnym rozruchu.

  • Korzystanie z Menedżera weryfikatora sterowników

  1. Uruchom Menedżera weryfikatora sterowników. Wpisz Weryfikator w oknie wiersza polecenia.
  2. Wybierz pozycję Utwórz ustawienia niestandardowe (dla deweloperów kodu), a następnie kliknij przycisk Dalej.
  3. Wybierz (zaznacz) sprawdzanie integralności kodu.
  4. Uruchom ponownie komputer.

Implementowanie kodu zgodnego z integralnością pamięci