Odwołanie do ochrony przed wykorzystaniem
Dotyczy:
- Ochrona punktu końcowego w usłudze Microsoft Defender (plan 1)
- Ochrona punktu końcowego w usłudze Microsoft Defender (plan 2)
- Microsoft Defender XDR
Chcesz poznać usługę ochrony punktu końcowego w usłudze Microsoft Defender? Utwórz konto, aby skorzystać z bezpłatnej wersji próbnej.
Ochrona przed lukami w zabezpieczeniach zapewnia zaawansowaną ochronę aplikacji, które mogą być stosowane przez administratorów przedsiębiorstwa i specjalistów IT po skompilowaniu i dystrybucji oprogramowania przez dewelopera.
Ten artykuł pomaga zrozumieć, jak działa ochrona przed lukami w zabezpieczeniach, zarówno na poziomie zasad, jak i na poziomie poszczególnych środków zaradczych, aby ułatwić pomyślne tworzenie i stosowanie zasad ochrony przed lukami w zabezpieczeniach.
Jak są stosowane środki zaradcze
Środki zaradcze ochrony przed lukami w zabezpieczeniach są stosowane dla aplikacji.
Środki zaradcze są konfigurowane za pośrednictwem wpisu rejestru dla każdego programu, dla którego skonfigurowano ochronę. Te ustawienia są przechowywane we wpisie rejestru MitigationOptions dla każdego programu (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\*ImageFileName*\MitigationOptions
). Stają się one skuteczne po ponownym uruchomieniu programu i pozostają skuteczne do momentu ich zmiany i ponownego uruchomienia programu.
Ważna
Opcje wykonywania plików obrazów umożliwiają tylko określenie nazwy pliku lub ścieżki, a nie numeru wersji, architektury lub innego wyróżnika. Należy zachować ostrożność przy stosowaniu środków zaradczych do aplikacji, które mają unikatowe nazwy lub ścieżki – stosuj je tylko na urządzeniach, na których przetestowano tę wersję i tę architekturę aplikacji.
Jeśli skonfigurujesz środki zaradcze ochrony przed lukami w zabezpieczeniach przy użyciu pliku konfiguracji XML przy użyciu programu PowerShell, zasady grupy lub mdm, podczas przetwarzania tego pliku konfiguracji XML są skonfigurowane indywidualne ustawienia rejestru.
Resetowanie ochrony przed lukami w zabezpieczeniach
Ważna
Gdy zasady dystrybucji pliku XML nie są już wymuszane, ustawienia wdrożone przez ten plik konfiguracji XML nie zostaną automatycznie usunięte.
Aby usunąć ustawienia ochrony przed lukami w zabezpieczeniach, wyeksportuj konfigurację XML z czystego urządzenia Windows 10 lub Windows 11 i wdróż ten nowy plik XML. Alternatywnie firma Microsoft udostępnia plik XML w ramach Zabezpieczenia Windows Baselines na potrzeby resetowania ustawień ochrony przed lukami w zabezpieczeniach.
Aby zresetować ustawienia ochrony przed lukami w zabezpieczeniach przy użyciu programu PowerShell, użyj następującego polecenia:
Set-ProcessMitigation -PolicyFilePath EP-reset.xml
Poniżej przedstawiono plik EP-reset.xml dystrybuowany z punktami odniesienia zabezpieczeń systemu Windows:
<?xml version="1.0" encoding="UTF-8"?>
<MitigationPolicy>
<AppConfig Executable="ONEDRIVE.EXE">
<DEP OverrideDEP="false" />
<ASLR OverrideRelocateImages="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
</AppConfig>
<AppConfig Executable="firefox.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
</AppConfig>
<AppConfig Executable="fltldr.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="GROOVE.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="Acrobat.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="AcroRd32.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="chrome.exe">
<DEP OverrideDEP="false" />
</AppConfig>
<AppConfig Executable="EXCEL.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="iexplore.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="INFOPATH.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="java.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaw.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaws.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="LYNC.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSACCESS.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSPUB.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OIS.EXE">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OUTLOOK.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="plugin-container.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="POWERPNT.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="PPTVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VISIO.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VPREVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="WINWORD.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wmplayer.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wordpad.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
</MitigationPolicy>
Odwołanie do ograniczania ryzyka
W poniższych sekcjach szczegółowo opisano zabezpieczenia zapewniane przez poszczególne środki zaradcze ochrony przed programami wykorzystującymi luki w zabezpieczeniach, zagadnienia dotyczące zgodności dotyczące ograniczania ryzyka oraz dostępne opcje konfiguracji.
Dowolna ochrona kodu
Opis
Dowolna ochrona kodu pomaga chronić przed złośliwym atakującym ładującym wybrany przez siebie kod do pamięci przez lukę w zabezpieczeniach pamięci i możliwość wykonania tego kodu.
Dowolna funkcja ochrony kodu chroni aplikację przed wykonywaniem kodu wygenerowanego dynamicznie (kodu, który nie jest ładowany, na przykład z samego pliku exe lub biblioteki dll). Dowolna funkcja strażnika kodu uniemożliwia oznaczenie pamięci jako pliku wykonywalnego. Za każdym razem, gdy aplikacja próbuje przydzielić pamięć, sprawdzamy flagi ochrony. (Pamięć może być przydzielana z flagami ochrony odczytu, zapisu i/lub wykonywania). Jeśli alokacja próbuje dołączyć wykonanie flagi ochrony, alokacja pamięci kończy się niepowodzeniem i zwraca kod błędu (STATUS_DYNAMIC_CODE_BLOCKED). Podobnie, jeśli aplikacja próbuje zmienić flagi ochrony pamięci, która została już przydzielona i zawiera wykonanie flagi ochrony – wtedy zmiana uprawnień zakończy się niepowodzeniem i zwróci kod błędu (STATUS_DYNAMIC_CODE_BLOCKED).
Uniemożliwiając ustawienie wykonania flagi, funkcja zapobiegania wykonywaniu danych w systemach Windows 10 i Windows 11 może ochronić przed ustawieniem wskaźnika instrukcji na tę pamięć, uruchamiając ten kod.
Zagadnienia dotyczące zgodności
Dowolna ochrona kodu uniemożliwia przydzielanie dowolnej pamięci jako pliku wykonywalnego, co stanowi problem ze zgodnością z metodami takimi jak kompilatory just-in-time (JIT). Większość nowoczesnych przeglądarek, na przykład, kompiluje język JavaScript w kod natywny w celu optymalizacji wydajności. Aby zapewnić obsługę tego ograniczenia ryzyka, należy zmienić ich architekturę, aby przenieść kompilację JIT poza chroniony proces. Inne aplikacje, których projekt dynamicznie generuje kod na podstawie skryptów lub innych języków pośrednich, są podobnie niezgodne z tym środkiem zaradczym.
Opcje konfiguracji
Zezwól na rezygnację z wątku — możesz skonfigurować ograniczanie ryzyka, aby zezwolić pojedynczemu wątkowi na rezygnację z tej ochrony. Deweloper musi napisać aplikację z świadomością tego ograniczenia ryzyka i wywołać interfejs API SetThreadInformation z parametrem ThreadInformation ustawionym na ThreadDynamicCodePolicy , aby umożliwić wykonywanie kodu dynamicznego w tym wątku.
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji można następnie wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w sekcji Defender for Endpoint.
Blokuj obrazy o niskiej integralności
Opis
Blokowanie obrazów o niskiej integralności uniemożliwia aplikacji ładowanie niezaufanych plików, zazwyczaj dlatego, że zostały pobrane z Internetu z przeglądarki w trybie piaskownicy.
To ograniczenie ograniczania ryzyka blokuje ładowanie obrazów, jeśli obraz ma Access Control Entry (ACE), który udziela dostępu do procesów o niskim poziomie il i który nie ma etykiety zaufania ACE. Jest on implementowany przez menedżera pamięci, który blokuje zamapowanie pliku na pamięć. Jeśli aplikacja próbuje zamapować obraz o niskiej integralności, wyzwala błąd STATUS_ACCESS_DENIED. Aby uzyskać szczegółowe informacje na temat działania poziomów integralności, zobacz sekcję Obowiązkowa kontrola integralności.
Zagadnienia dotyczące zgodności
Blokowanie obrazów o niskiej integralności uniemożliwia aplikacji ładowanie plików pobranych z Internetu. Jeśli przepływ pracy aplikacji wymaga załadowania pobranych obrazów, chcesz upewnić się, że są one pobierane z procesu wyższego zaufania lub są jawnie ponownie oznaczane w celu zastosowania tego ograniczenia ryzyka.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Blokuj obrazy zdalne
Opis
Blokowanie obrazów zdalnych pomaga zapobiegać ładowaniu przez aplikację plików hostowanych na urządzeniu zdalnym – takim jak udostępnienie UNC. Blokowanie obrazów zdalnych pomaga chronić przed ładowaniem plików binarnych do pamięci, które znajdują się na urządzeniu zewnętrznym kontrolowanym przez osobę atakującą.
To ograniczenie ograniczania ryzyka blokuje ładowanie obrazu, jeśli obraz zostanie określony jako znajdujący się na urządzeniu zdalnym. Jest on implementowany przez menedżera pamięci, który blokuje zamapowanie pliku na pamięć. Jeśli aplikacja próbuje zamapować plik zdalny, wyzwala błąd STATUS_ACCESS_DENIED.
Zagadnienia dotyczące zgodności
Blokowanie obrazów zdalnych uniemożliwia aplikacji ładowanie obrazów z urządzeń zdalnych. Jeśli aplikacja ładuje pliki lub wtyczki z urządzeń zdalnych, nie będzie zgodna z tym środkiem zaradczym.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Blokuj niezaufane czcionki
Opis
Blokuj niezaufane czcionki — zmniejsza to ryzyko wystąpienia wady podczas analizowania czcionek, które może doprowadzić do uruchomienia kodu na urządzeniu przez osobę atakującą. Tylko czcionki zainstalowane w katalogu Windows\czcionki zostaną załadowane do przetwarzania przez interfejs GDI.
To ograniczenie ryzyka jest implementowane w ramach interfejsu GDI, który weryfikuje lokalizację pliku. Jeśli plik nie znajduje się w katalogu czcionek systemowych, czcionka nie zostanie załadowana do analizowania i to wywołanie zakończy się niepowodzeniem.
To ograniczenie ryzyka jest dodatkiem do wbudowanych środków zaradczych dostępnych w systemie Windows 10 1607 i nowszych oraz w systemie Windows 11, który przenosi analizowanie czcionek z jądra i do kontenera aplikacji w trybie użytkownika. Wszelkie luki w zabezpieczeniach oparte na analizowaniu czcionek są wykonywane w trybie sandbox i izolowanym, co znacznie zmniejsza ryzyko. Aby uzyskać szczegółowe informacje na temat tego ograniczenia ryzyka, zobacz blog Hartowanie systemu Windows 10 za pomocą ograniczenia ryzyka wykorzystywania luk w zabezpieczeniach zero-day.
Zagadnienia dotyczące zgodności
Najczęściej używane czcionki spoza katalogu czcionek systemowych to czcionki z sieci web. Nowoczesne przeglądarki, takie jak Microsoft Edge, używają DirectWrite zamiast interfejsu GDI i nie mają na to wpływu. Jednak może to mieć wpływ na starsze przeglądarki, takie jak Internet Explorer 11 (i tryb IE w nowej przeglądarce Microsoft Edge), szczególnie dla aplikacji, takich jak Office 365, które używają symboli czcionki do wyświetlania interfejsu użytkownika.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Ochrona integralności kodu
Opis
Ochrona integralności kodu gwarantuje, że wszystkie pliki binarne załadowane do procesu są podpisane cyfrowo przez firmę Microsoft. Funkcja ochrony integralności kodu zawiera sygnatury WHQL (Windows Hardware Quality Labs), co umożliwia uruchamianie sterowników zatwierdzonych przez program WHQL w ramach procesu.
To ograniczenie ryzyka jest implementowane w menedżerze pamięci, co blokuje mapowanie pliku binarnego do pamięci. Jeśli spróbujesz załadować plik binarny, który nie jest podpisany przez firmę Microsoft, żużel pamięci zwróci błąd STATUS_INVALID_IMAGE_HASH. Blokowanie na poziomie menedżera pamięci zapobiega obu plikom binarnym ładowanym przez proces i plikom binarnym wprowadzonym do procesu.
Zagadnienia dotyczące zgodności
To ograniczenie ograniczania ryzyka blokuje w szczególności wszelkie pliki binarne, które nie są podpisane przez firmę Microsoft. W związku z tym jest ono niezgodne z większością oprogramowania innych niż Microsoft, chyba że jest ono dystrybuowane przez sklep Microsoft Store (i podpisane cyfrowo) oraz wybrano opcję zezwalania na ładowanie obrazów podpisanych przez Sklep Microsoft.
Opcje konfiguracji
Zezwalaj również na ładowanie obrazów podpisanych przez sklep Microsoft Store — aplikacje dystrybuowane przez sklep Microsoft Store są podpisane cyfrowo przez sklep Microsoft Store, a dodanie tej konfiguracji umożliwia załadowanie plików binarnych przechodzących przez proces certyfikacji magazynu przez aplikację.
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Ochrona przepływu sterowania (CFG)
Opis
Funkcja strażnika przepływu sterowania (CFG) zmniejsza ryzyko wykorzystania luk w zabezpieczeniach uszkodzenia pamięci przez ochronę pośrednich wywołań funkcji. Na przykład osoba atakująca może użyć luki w zabezpieczeniach przepełnienia buforu, aby zastąpić pamięć zawierającą wskaźnik funkcji i zastąpić ten wskaźnik funkcji wskaźnikiem wybranego przez siebie kodu wykonywalnego (który można również wprowadzić do programu).
To ograniczenie ryzyka jest zapewniane przez wstrzyknięcie kolejnego sprawdzenia w czasie kompilacji. Przed każdym wywołaniem funkcji pośredniej są dodawane kolejne instrukcje, które sprawdzają, czy obiekt docelowy jest prawidłowym obiektem docelowym wywołania przed jego wywołaniem. Jeśli obiekt docelowy nie jest prawidłowym obiektem docelowym wywołania, aplikacja zostanie zakończona. W związku z tym tylko aplikacje skompilowane z obsługą CFG mogą korzystać z tego ograniczenia ryzyka.
Sprawdzanie prawidłowego elementu docelowego jest dostarczane przez jądro systemu Windows. Po załadowaniu plików wykonywalnych, metadane dla pośrednich obiektów docelowych wywołań są wyodrębniane w czasie ładowania i oznaczone jako prawidłowe obiekty docelowe wywołań. Ponadto, gdy pamięć jest przydzielona i oznaczona jako plik wykonywalny (na przykład dla wygenerowanego kodu), te lokalizacje pamięci są również oznaczone jako prawidłowe obiekty docelowe wywołań w celu obsługi mechanizmów – takich jak kompilacja JIT.
Zagadnienia dotyczące zgodności
Ponieważ aplikacje muszą być kompilowane w celu obsługi CFG, deklarują zgodność z nią w sposób niejawny. W związku z tym większość aplikacji powinna pracować z włączonym ograniczaniem ryzyka. Ponieważ te testy są kompilowane do pliku binarnego, konfiguracja, którą można zastosować, polega tylko na wyłączeniu kontroli w jądrze systemu Windows. Innymi słowy, ograniczenie ryzyka jest domyślnie włączone, ale można skonfigurować jądro systemu Windows, aby zawsze zwracało wartość "tak", jeśli później ustalisz, że wystąpił problem ze zgodnością, którego deweloper aplikacji nie wykrył podczas testowania, co powinno być rzadkie.
Opcje konfiguracji
Użyj ścisłego CFG — w trybie ścisłym wszystkie pliki binarne załadowane do procesu muszą zostać skompilowane dla funkcji strażnika przepływu sterowania (lub nie mają w nich kodu wykonywalnego, takiego jak biblioteki dll zasobów), aby można było je załadować.
Uwaga
Funkcja Kontroluj ochronę przepływu nie ma trybu inspekcji. Pliki binarne są kompilowane z włączonym ograniczeniem ryzyka.
Zapobieganie wykonywaniu danych (DEP)
Opis
Zapobieganie wykonywaniu danych (DEP) uniemożliwia wykonywanie pamięci, która nie została jawnie przydzielona jako plik wykonywalny. Program DEP chroni przed osobą atakującą, która wprowadza złośliwy kod do procesu – na przykład przez przepełnienie buforu – a następnie wykonuje ten kod.
Jeśli spróbujesz ustawić wskaźnik instrukcji na adres pamięci, który nie jest oznaczony jako wykonywalny, procesor zgłasza wyjątek (naruszenie ogólnej ochrony), powodując awarię aplikacji.
Zagadnienia dotyczące zgodności
Wszystkie pliki wykonywalne x64, ARM i ARM-64 mają domyślnie włączoną funkcję DEP i nie można jej wyłączyć. Ponieważ aplikacja nie jest wykonywana bez programu DEP, zakłada się zgodność.
Wszystkie pliki binarne x86 (32-bitowe) mają domyślnie włączoną funkcję DEP, ale funkcję DEP można wyłączyć dla każdego procesu. Niektóre starsze aplikacje, zwykle opracowane przed systemem Windows XP z dodatkiem SP2, mogą nie być zgodne z programem DEP. Takie aplikacje zwykle generują kod dynamicznie (na przykład kompilowanie JIT) lub łączą się ze starszymi bibliotekami (takimi jak starsze wersje ATL), które dynamicznie generują kod.
Opcje konfiguracji
Włącz emulację konwersji bitowej ATL — ta opcja konfiguracji wyłącza konwersji bitowej ATL. ATL, biblioteka szablonów ActiveX, została zaprojektowana tak, aby była jak najmniejsza i szybka. Aby zmniejszyć rozmiar pliku binarnego, zostanie użyta technika o nazwie thunking. Thunking jest zwykle pomyślany, żeby zagwarantować interakcję między 32-bitowych i 16-bitowych aplikacjami — ale tutaj nie ma składników 16-bitowych ATL. Zamiast tego w celu zoptymalizowania pod kątem rozmiaru binarnego usługa ATL przechowuje kod maszyny w pamięci, która nie jest wyrównana do wyrazów (tworząc mniejszy plik binarny), a następnie wywołuje ten kod bezpośrednio. Składniki usługi ATL skompilowane przy użyciu programu Visual Studio 7.1 lub starszego (Visual Studio 2003) nie przydzielają tej pamięci jako wykonywalnej — emulacji thunk rozwiązuje ten problem ze zgodnością. Aplikacje, które mają binarny model rozszerzenia (np. Internet Explorer 11), często muszą mieć włączoną emulację ATL Thunk.
Wyłącz punkty rozszerzeń
Opis
To ograniczenie ryzyka powoduje wyłączenie różnych punktów rozszerzenia dla aplikacji, które mogą służyć do ustanawiania trwałości lub podniesienia uprawnień do złośliwej zawartości.
Obejmują one:
- Biblioteki DLL usługi AppInit — za każdym razem, gdy proces się uruchamia, system ładuje określoną bibliotekę DLL do kontekstu nowo uruchomionego procesu przed wywołaniem funkcji punktu wejścia. Szczegóły bibliotek DLL AppInit można znaleźć tutaj. Po zastosowaniu tego ograniczenia biblioteki DLL usługi AppInit nie są ładowane. Począwszy od systemu Windows 7 biblioteki DLL AppInit muszą być podpisane cyfrowo — jak zostało to opisane tutaj. Ponadto, począwszy od Windows 8, biblioteki DLL usługi AppInit nie zostaną załadowane, jeśli włączono funkcję SecureBoot, jak opisano tutaj.
- Legacy IME — Edytor IME (Input Method Editor) umożliwia użytkownikowi wpisywanie tekstu w języku zawierającym więcej znaków niż można przedstawić na klawiaturze. Inne firmy mogą tworzyć edytory IME. Złośliwy edytor IME może uzyskać poświadczenia lub inne poufne informacje z tego przechwytywania danych wejściowych. Niektóre środowiska IME, nazywane starszymi imes, działają tylko w aplikacjach klasycznych systemu Windows, a nie w aplikacjach platformy UWP. To ograniczenie ryzyka uniemożliwia również ładowanie starszej wersji środowiska IME do określonej aplikacji klasycznej systemu Windows.
- Windows Event Hooks — aplikacja może wywołać SetWinEventHook API, aby zarejestrować zainteresowanie zdarzeniem. Określono bibliotekę DLL i można ją wprowadzić do procesu. To ograniczenie ryzyka wymusza opublikowanie elementu zaczepienia w procesie rejestrowania zamiast uruchamiania w procesie za pośrednictwem wstrzykniętej biblioteki DLL.
Zagadnienia dotyczące zgodności
Większość z tych punktów rozszerzeń jest stosunkowo rzadko używana, więc wpływ na zgodność jest zwykle niewielki – szczególnie na poziomie pojedynczej aplikacji. Jedną z kwestii jest to, czy użytkownicy korzystają ze starszych ime innych firm, które nie będą działać z chronioną aplikacją.
Opcje konfiguracji
Brak opcji konfiguracji dla tego ograniczenia ryzyka.
Uwaga
Opcja Wyłącz punkty rozszerzeń nie ma trybu inspekcji.
Wyłącz wywołania systemowe Win32k
Opis
Win32k.sys zapewnia szeroką powierzchnię ataku dla osoby atakującej. Jako składnik trybu jądra często jest on przeznaczony jako wektor ucieczki dla aplikacji, które są w trybie piaskownicy. To ograniczenie ryzyka zapobiega wywołaniu pliku win32k.sys przez zablokowanie wątku konwertowania na wątek graficznego interfejsu użytkownika, który następnie uzyskuje dostęp do wywoływania funkcji Win32k. Wątek jest inny niż graficzny interfejs użytkownika podczas tworzenia, jest konwertowany przy pierwszym wywołaniu na plik win32k.sys lub za pośrednictwem wywołania interfejsu API do IsGuiThread.
Zagadnienia dotyczące zgodności
To ograniczenie ryzyka jest przeznaczone dla procesów, które są dedykowanymi procesami spoza interfejsu użytkownika. Na przykład wiele nowoczesnych przeglądarek korzysta z izolacji procesów i uwzględnia procesy inne niż interfejs użytkownika. To ograniczenie będzie miało wpływ na każdą aplikację, która wyświetla graficzny interfejs użytkownika przy użyciu jednego procesu.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Nie zezwalaj na procesy podrzędne
Opis
To ograniczenie ryzyka uniemożliwia aplikacji tworzenie nowych aplikacji podrzędnych. Popularną techniką stosowaną przez osoby atakujące jest zainicjowanie na urządzeniu zaufanego procesu ze złośliwymi danymi wejściowymi (zagrożenia typu „living off the land”), który często wymaga uruchomienia innej aplikacji na urządzeniu. Jeśli nie ma żadnych uzasadnionych powodów, dla których aplikacja uruchamiałaby proces podrzędny, to ograniczenie ryzyka ogranicza ten potencjalny wektor ataku. Środki zaradcze są stosowane przez ustawienie właściwości tokenu procesu, która blokuje tworzenie tokenu dla procesu podrzędnego z komunikatem o błędzie STATUS_CHILD_PROCESS_BLOCKED.
Zagadnienia dotyczące zgodności
Jeśli aplikacja uruchamia aplikacje podrzędne z jakiegokolwiek powodu, takie jak obsługa hiperlinków uruchamiających przeglądarkę lub przeglądarkę zewnętrzną lub uruchamiających inne narzędzia na komputerze, ta funkcja jest uszkodzona po zastosowaniu tego ograniczenia ryzyka.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Eksportowanie filtrowania adresów
Opis
Filtrowanie adresów eksportu (EAF) zmniejsza ryzyko, że złośliwy kod będzie patrzył na tablicę adresów eksportowych wszystkich załadowanych modułów, aby znaleźć moduły, które zawierają przydatne API do ich ataku. Jest to powszechna taktyka używana przez kod powłoki. Aby ograniczyć ryzyko takiego ataku, to ograniczenie ryzyka chroni trzy powszechnie atakowane moduły:
- Ntdll.dll
- Kernelbase.dll
- kernel32.dll
Środki zaradcze chronią stronę pamięci w [katalogu eksportu wskazującym na eksportowanie tabeli adresu. Ta strona pamięci ma zastosowany PAGE_GUARD ochrony. Gdy ktoś próbuje uzyskać dostęp do tej pamięci, generuje STATUS_GUARD_PAGE_VIOLATION. Ograniczenie ryzyka obsługuje ten wyjątek, a jeśli instrukcja dostępu nie przejdzie weryfikacji, proces zostanie zakończony.
Zagadnienia dotyczące zgodności
To ograniczenie ryzyka jest przede wszystkim problemem dla aplikacji, takich jak debugery, aplikacje w trybie sandbox, aplikacje korzystające z technologii DRM lub aplikacje, które implementują technologię ochrony przed debugowaniem.
Opcje konfiguracji
Wartość dostępu dla modułów, które są często wykorzystywane przez programy wykorzystujące luki w zabezpieczeniach — ta opcja, znana również jako EAF+, dodatkowo zabezpiecza inne często atakowane moduły:
mshtml.dll
flash*.ocx
jscript*.ocx
vbscript.dll
vgx.dll
mozjs.dll
xul.dll
acrord32.dll
acrofx32.dll
acroform.api
Ponadto włączenie funkcji EAF+powoduje dodanie ochrony PAGE_GUARD do strony zawierającej nagłówek „MZ”, pierwsze dwa bajty nagłówka DOS w pliku PE, który jest kolejnym aspektem znanej zawartości pamięci, którego kod powłoki może wyszukać w celu zidentyfikowania modułów potencjalnie interesujących pamięć.
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Wymuś losowe generowanie obrazów (obowiązkowa funkcja ASLR)
Opis
Randomizacja układu przestrzeni adresowej (ASLR) zmniejsza ryzyko użycia przez osobę atakującą wiedzy na temat układu pamięci systemu w celu wykonania kodu, który już istnieje w pamięci procesu i jest już oznaczony jako plik wykonywalny. Może to zmniejszyć ryzyko, że atakujący użyje technik takich, jak ataki return-to-libc, gdzie osoba atakująca ustawi kontekst, a następnie zmodyfikuje adres zwrotny, aby wykonać istniejący kod z kontekstem odpowiadającym celowi osoby atakującej.
Obowiązkowa funkcja ASLR wymusza zmianę bazy wszystkich bibliotek DLL w ramach procesu. Deweloper może włączyć funkcję ASLR przy użyciu opcji /DYNAMICBASE — to ograniczenie ryzyka ma taki sam efekt.
Gdy menedżer pamięci jest mapowany na obrazie w proces, obowiązkowa biblioteka ASLR wymusi ponowne bazę bibliotek DLL i EXE, które nie zdecydowały się na aslr. Należy jednak pamiętać, że ta operacja bazowania nie ma entropii i dlatego może być umieszczona w przewidywalnej lokalizacji w pamięci. W przypadku ponownej bazy i losowej lokalizacji plików binarnych to ograniczenie ryzyka powinno być sparowane z Dostosuj alokacje pamięci (Bottom-up ASLR).
Zagadnienia dotyczące zgodności
Ten wpływ na zgodność usługi ASLR jest zwykle ograniczony do starszych aplikacji, które zostały utworzone przy użyciu kompilatorów, które przyjmowały założenia dotyczące podstawowego adresu pliku binarnego lub usunięto im podstawowe informacje o relokacji. Może to prowadzić do nieprzewidywalnych błędów, ponieważ przepływ wykonywania próbuje przejść do oczekiwanej, a nie rzeczywistej lokalizacji w pamięci.
Opcje konfiguracji
Nie zezwalaj na usuwanie zdjęć — ta opcja blokuje ładowanie obrazów, dla których usunięto informacje o relokacji. Format pliku Windows PE zawiera adresy bezwzględne, a kompilator generuje również [podstawową tabelę relokacji, która może być używana przez moduł ładujący do znajdowania wszystkich odwołań do pamięci względnej i ich przesunięcia, aby można było je zaktualizować, jeśli plik binarny nie ładuje się pod preferowanym adresem podstawowym. Niektóre starsze aplikacje usuwają te informacje w kompilacjach produkcyjnych, dlatego tych plików binarnych nie można zmienić. To ograniczenie ryzyka blokuje ładowanie takich plików binarnych (zamiast zezwalać na ich ładowanie pod preferowanym adresem podstawowym).
Uwaga
Opcja Wymuś losowość dla obrazów (Obowiązkowe ASLR) nie ma trybu inspekcji.
Sprzętowa ochrona stosu
Opis
Sprzętowa ochrona stosu zapewnia niezawodną ochronę przed lukami w zabezpieczeniach ROP, ponieważ przechowuje rekord zamierzonego przepływu wykonywania programu. Aby zapewnić bezproblemowe wdrażanie ekosystemu i zgodność aplikacji, system Windows oferuje tę ochronę jako model zgody, dzięki czemu deweloperzy mogą odbierać tę ochronę we własnym tempie.
Zagadnienia dotyczące zgodności
Sprzętowa ochrona stosu działa tylko na mikroukładach z obsługą sprzętowych stosów w tle, technologii wymuszania przepływu sterowania (CET) firmy Intel lub stosów w tle AMD.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji można następnie wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w sekcji Defender for Endpoint.
Wymuszaj dla wszystkich modułów zamiast zgodnych modułów — możesz włączyć to ograniczenie, aby wymusić dla wszystkich modułów zamiast zgodnych modułów.
Filtrowanie adresów importu (IAF)
Opis
Ograniczanie ryzyka filtrowania adresów importu (IAF) pomaga ograniczyć ryzyko tego, że osoba atakująca zmieni przepływ sterowania aplikacji, modyfikując tabelę adresów importu (IAT) w celu przekierowania do dowolnego kodu wybranego przez osobę atakującą po wywołaniu tej funkcji. Osoba atakująca może użyć tego podejścia, aby przejąć kontrolę lub przechwycić, zbadać i potencjalnie zablokować wywołania poufnych interfejsów API.
Strony pamięci dla wszystkich chronionych interfejsów API mają zastosowany PAGE_GUARD ochrony. Gdy ktoś próbuje uzyskać dostęp do tej pamięci, generuje STATUS_GUARD_PAGE_VIOLATION. Ograniczenie ryzyka obsługuje ten wyjątek, a jeśli instrukcja dostępu nie przejdzie weryfikacji, proces zostanie zakończony.
To ograniczenie ryzyka chroni następujące interfejsy API systemu Windows:
GetProcAddress
GetProcAddressForCaller
LoadLibraryA
LoadLibraryExA
LoadLibraryW
LoadLibraryExW
LdrGetProcedureAddress
LdrGetProcedureAddressEx
LdrGetProcedureAddressForCaller
LdrLoadDll
VirtualProtect
VirtualProtectEx
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
NtProtectVirtualMemory
CreateProcessA
CreateProcessW
WinExec
CreateProcessAsUserA
CreateProcessAsUserW
GetModuleHandleA
GetModuleHandleW
RtlDecodePointer
DecodePointer
Zagadnienia dotyczące zgodności
Uzasadnione aplikacje, które przeprowadzają przechwytywanie interfejsu API, mogą zostać wykryte przez to ograniczenie ryzyka i spowodować awarię niektórych aplikacji. Przykłady obejmują oprogramowanie zabezpieczające i podkładki zgodności aplikacji.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Generuj losowo alokacje pamięci (funkcja ASLR „od dołu do góry”)
Opis
Losowe przydzielanie pamięci (Bottom-up ASLR) dodaje entropię do relokacji, więc ich lokalizacja jest losowa, a zatem mniej przewidywalna. To ograniczenie ryzyka wymaga zastosowania obowiązkowego żądania ASLR.
Rozmiar 32-bitowej przestrzeni adresowej nakłada praktyczne ograniczenia na entropię, którą można dodać, a zatem aplikacje 64-bitowe utrudniają osobie atakującej odgadnięcie lokalizacji w pamięci.
Zagadnienia dotyczące zgodności
Większość aplikacji zgodnych z obowiązkową funkcją ASLR (przebudowa) jest również zgodna z inną entropią standardu ASLR typu Bottom-up. Niektóre aplikacje mogą mieć problemy z obcinaniem wskaźnika, jeśli zapisują wskaźniki lokalne w zmiennych 32-bitowych (oczekując adresu podstawowego poniżej 4 GB), a zatem będą niezgodne z opcją wysokiego poziomu entropii (którą można wyłączyć).
Opcje konfiguracji
Nie używaj wysokiej entropii — ta opcja wyłącza użycie wysokiej entropii ASLR, co powoduje dodanie 24 bitów entropii (1 TB wariancji) do alokacji w dół dla aplikacji 64-bitowych.
Uwaga
Opcja Zlokalizuj alokacje pamięci (Bottom-up ASLR) nie ma trybu inspekcji.
Symuluj wykonywanie (SimExec)
Opis
Funkcja „Symuluj wykonywanie (SimExec)” jest środkiem zaradczym tylko dla aplikacji 32-bitowych. Pomaga to sprawdzić, czy wywołania poufnych interfejsów API wracają do legalnych funkcji wywołujących. Robi to, przechwytując wywołania do poufnych interfejsów API, a następnie symulując wykonywanie tych interfejsów API, przechodząc przez zakodowane instrukcje języka zestawów w poszukiwaniu instrukcji RET, która powinna z kolei powrócić do obiektu wywołującego. Następnie sprawdza tę funkcję i cofa się w pamięci, aby znaleźć poprzednią instrukcję CALL w celu określenia, czy funkcja i instrukcja CALL są zgodne, oraz czy RET nie został przechwycony.
Interfejsy API przechwycone przez to ograniczenie ryzyka to:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
W przypadku wykrycia gadżetu ROP proces zostanie zakończony.
Zagadnienia dotyczące zgodności
Aplikacje wykonujące przechwytywanie interfejsu API, w szczególności oprogramowanie zabezpieczające, mogą powodować problemy ze zgodnością z tym środkiem zaradczym.
To ograniczenie ryzyka jest niezgodne ze środkiem zaradczym funkcji Arbitrary Code Guard (ACG).
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Weryfikuj wywołanie interfejsu API (CallerCheck)
Opis
Weryfikacja wywołania interfejsu API (CallerCheck) jest środkiem zaradczym dla technik programowania zwrotnego (ROP), które weryfikują, czy poufne interfejsy API zostały wywołane z prawidłowego obiektu wywołującego. To ograniczenie ryzyka sprawdza przekazany adres zwrotny, a następnie heurystycznie dezasembluje wstecz, aby znaleźć wywołanie powyżej adresu zwrotnego w celu określenia, czy cel wywołania pasuje do parametru przekazanego do funkcji.
Interfejsy API przechwycone przez to ograniczenie ryzyka to:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
W przypadku wykrycia gadżetu ROP proces zostanie zakończony.
Zagadnienia dotyczące zgodności
Aplikacje wykonujące przechwytywanie interfejsu API, w szczególności oprogramowanie zabezpieczające, mogą powodować problemy ze zgodnością z tym środkiem zaradczym.
To ograniczenie ryzyka jest niezgodne ze środkiem zaradczym funkcji Arbitrary Code Guard (ACG).
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Weryfikuj łańcuchy wyjątków (SEHOP)
Opis
Sprawdzanie poprawności łańcuchów wyjątków (SEHOP) jest środkiem zaradczym dla techniki zastępowania Structured Exception Handler (SEH). Ustrukturyzowana obsługa wyjątków to proces, w którym aplikacja może poprosić o obsługę określonego wyjątku. Procedury obsługi wyjątków są połączone w łańcuch, więc jeśli jedna procedura obsługi wyjątków zdecyduje się nie obsługiwać określonego wyjątku, może zostać przekazana do następnego programu obsługi wyjątków w łańcuchu, dopóki nie zdecyduje się go obsłużyć. Ponieważ lista programów obsługi jest dynamiczna, jest przechowywana w stosie. Osoba atakująca może użyć luki w zabezpieczeniach przepełnienia stosu, aby następnie zastąpić procedurę obsługi wyjątków wskaźnikiem do kodu wybranego przez osobę atakującą.
To ograniczenie ryzyka zależy od projektu SEH, gdzie każdy wpis SEH zawiera zarówno wskaźnik do procedury obsługi wyjątków, jak i wskaźnik do następnego programu obsługi w łańcuchu wyjątków. To ograniczenie ryzyka jest wywoływane przez dyspozytora wyjątków, który weryfikuje łańcuch SEH po wywołaniu wyjątku. Sprawdza, czy:
- Wszystkie rekordy łańcucha wyjątków znajdują się w granicach stosu
- Wszystkie rekordy wyjątków zostały wyrównane
- Brak wskaźników obsługi wyjątków wskazujących na stos
- Brak wskaźników wstecznych
- Łańcuch wyjątków kończy się znanym końcowym programem obsługi wyjątków
Jeśli te sprawdzanie poprawności zakończy się niepowodzeniem, obsługa wyjątków zostanie przerwana i wyjątek nie zostanie obsłużony.
Zagadnienia dotyczące zgodności
Problemy ze zgodnością z SEHOP są stosunkowo rzadkie. Rzadko zdarza się, aby aplikacja była zależna od uszkodzenia łańcucha wyjątków. Jednak na niektóre aplikacje mają wpływ subtelne zmiany czasu, które mogą objawiać się jako warunek wyścigu, który ujawnia utajoną usterkę wielowątkową w aplikacji.
Opcje konfiguracji
Uwaga
Opcja Wartość łańcuchów wyjątków (SEHOP) nie ma trybu inspekcji.
Weryfikuj użycie dojścia
Opis
Funkcja Sprawdzania poprawności użycia dojścia jest środkiem zaradczym, który pomaga chronić przed osobą atakującą przy użyciu istniejącego dojścia w celu uzyskania dostępu do chronionego obiektu. Opcja Dojście jest odwołaniem do chronionego obiektu. Jeśli kod aplikacji odwołuje się do nieprawidłowego dojścia, może to wskazywać, że atakujący próbuje użyć wcześniej zarejestrowanego dojścia (ale którego zliczania odwołań aplikacji nie byłoby świadome). Jeśli aplikacja próbuje użyć nieprawidłowego obiektu, zamiast po prostu zwracać wartość null, aplikacja zgłasza wyjątek (STATUS_INVALID_HANDLE).
To ograniczenie ryzyka jest automatycznie stosowane do aplikacji ze sklepu Windows Store.
Zagadnienia dotyczące zgodności
Środki zaradcze mogą mieć wpływ na aplikacje, które nie śledziły dokładnie odwołań i które nie opakowują tych operacji w procedurach obsługi wyjątków.
Opcje konfiguracji
Uwaga
Opcja Wartość użycia dojścia nie ma trybu inspekcji.
Weryfikuj integralność stosu
Opis
Opcja Wartość integralności sterty zwiększa poziom ochrony ograniczania sterty w systemie Windows, powodując zakończenie działania aplikacji w przypadku wykrycia uszkodzenia sterty. Środki zaradcze obejmują:
- Zapobieganie zwalnianiu dojścia HEAP
- Przeprowadzanie kolejnej weryfikacji rozszerzonych nagłówków bloków dla alokacji sterty
- Sprawdzanie, czy alokacje sterty nie są jeszcze oflagowane jako używane
- Dodawanie stron ochrony do dużych alokacji, segmentów sterty i podsegmentów powyżej minimalnego rozmiaru
Zagadnienia dotyczące zgodności
To ograniczenie ryzyka jest już domyślnie stosowane w przypadku aplikacji 64-bitowych i 32-bitowych przeznaczonych dla systemu Windows Vista lub nowszego. Starsze aplikacje z systemu Windows XP lub starszego są najbardziej zagrożone, chociaż problemy ze zgodnością występują rzadko.
Opcje konfiguracji
Uwaga
Opcja Zweryfikuj wartość sterty nie ma trybu inspekcji.
Weryfikuj integralność zależności obrazu
Opis
Opcja Zweryfikuj zależności obrazu pomaga chronić przed atakami, które próbują zastąpić kod bibliotekami dll statycznie połączonymi przez pliki binarne systemu Windows. Technika obsadzania bibliotek DLL nadużywa mechanizmu wyszukiwania loadera do wstrzykiwania złośliwego kodu, co może być wykorzystane do uzyskania złośliwego kodu uruchomionego w podwyższonym kontekście. Gdy moduł ładujący ładuje plik binarny z podpisem systemu Windows, a następnie ładuje wszystkie biblioteki dll, od których zależy plik binarny, te pliki binarne są weryfikowane w celu upewnienia się, że są one również podpisane cyfrowo jako pliki binarne systemu Windows. Jeśli sprawdzanie podpisu zakończy się niepowodzeniem, biblioteki dll nie zostaną załadowane i zgłosi wyjątek, zwracając stan STATUS_INVALID_IMAGE_HASH.
Zagadnienia dotyczące zgodności
Problemy ze zgodnością są nietypowe. Dotyczy to aplikacji, które zależą od zastąpienia plików binarnych systemu Windows lokalnymi wersjami prywatnymi, a także istnieje niewielkie ryzyko ujawnienia drobnych usterek chronometrażu w aplikacjach wielowątkowych.
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Weryfikuj integralność stosu (StackPivot)
Opis
Opcja Zweryfikuj integralność stosu (StackPivot) pomaga chronić przed atakiem Stack Pivot, atakiem ROP, w którym atakujący tworzy fałszywy stos w pamięci sterty, a następnie oszukuje aplikację, aby powróciła do fałszywego stosu, który kontroluje przepływ wykonania.
To ograniczenie ryzyka przechwytuje wiele interfejsów API systemu Windows i sprawdza wartość wskaźnika stosu. Jeśli adres wskaźnika stosu nie spadnie między dolną i górną częścią stosu, zostanie zarejestrowane zdarzenie, a jeśli nie w trybie inspekcji, proces zostanie zakończony.
Interfejsy API przechwycone przez to ograniczenie ryzyka to:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
Zagadnienia dotyczące zgodności
Ma to wpływ na aplikacje korzystające z fałszywych stosów, a także istnieje niewielkie ryzyko ujawnienia drobnych usterek chronometrażu w aplikacjach wielowątkowych. Aplikacje wykonujące przechwytywanie interfejsu API, w szczególności oprogramowanie zabezpieczające, mogą powodować problemy ze zgodnością z tym środkiem zaradczym.
To ograniczenie ryzyka jest niezgodne ze środkiem zaradczym funkcji Arbitrary Code Guard (ACG).
Opcje konfiguracji
Tylko inspekcja — możesz włączyć to ograniczanie ryzyka w trybie inspekcji, aby zmierzyć potencjalny wpływ na zgodność aplikacji. Zdarzenia inspekcji możesz wyświetlać w podglądzie zdarzeń lub za pomocą zaawansowanego wyszukiwania zagrożeń w Microsoft Defender for Endpoint.
Porada
Chcesz dowiedzieć się więcej? Engage ze społecznością microsoft security w naszej społeczności technicznej: Ochrona punktu końcowego w usłudze Microsoft Defender Tech Community.