Eksportuj (0) Drukuj
Rozwiń wszystko
Expand Minimize

Zapobieganie wykonywaniu danych

Jaką funkcję pełni zapobieganie wykonywaniu danych?

Zapobieganie wykonywaniu danych (DEP, Data Execution Prevention) to zestaw technologii sprzętowych i programowych przeprowadzających dodatkowe sprawdzanie pamięci w celu zapewnienia ochrony przed atakami przy użyciu złośliwego kodu. W systemie Windows Server 2003 z dodatkiem Service Pack 1 zapobieganie wykonywaniu danych jest realizowane zarówno sprzętowo, jak i programowo.

Sprzętowe zapobieganie wykonywaniu danych

Sprzętowe zapobieganie wykonywaniu danych polega na oznaczaniu jako niewykonywalne wszystkich lokalizacji pamięci wewnątrz procesu z wyjątkiem tych, które ewidentnie zawierają kod wykonywalny. Istnieje cała klasa ataków, które polegają na próbie wstawienia i wykonania kodu z niewykonywalnych lokalizacji pamięci. Funkcja DEP uniemożliwia przeprowadzenie takich ataków, przechwytując je i generując wyjątek.

Sprzętowe zapobieganie wykonywaniu danych opiera się na układach procesora, które oznaczają pamięć specjalnym atrybutem wskazującym, że z danej lokalizacji kod nie powinien być wykonywany. Zapobieganie wykonywaniu danych jest realizowane na poziomie poszczególnych stron pamięci wirtualnej, a zaznaczanie wybranych stron pamięci polega z reguły na zmianie odpowiedniego bitu we wpisie tabeli stron (PTE, Page Table Entry).

Konkretna sprzętowa implementacja funkcji DEP i oznaczania stron pamięci wirtualnej zależy od architektury procesora. Jednak wszystkie procesory obsługujące sprzętowe zapobieganie wykonywaniu danych mogą generować wyjątek, gdy zostanie wykonany kod ze strony oznaczonej ustawieniem odpowiedniego atrybutu.

Zarówno koncern Advanced Micro Devices (AMD), jak i Intel Corporation zdefiniowały i dostarczają architektury zgodne z systemem Windows obsługujące funkcję DEP.

32-bitowe wersje systemu Windows Server 2003 z dodatkiem Service Pack 1 korzystają z funkcji NX (No-Execute Page-Protection — ochrona stron przed wykonywaniem danych) zdefiniowanej przez firmę AMD dla jej procesorów lub z bitu XD (Execute Disable — blokada wykonywania) zdefiniowanego przez firmę Intel. Aby stosowanie tych funkcji było możliwe, procesor musi działać w trybie rozszerzania adresów fizycznych (PAE, Physical Address Extension). W przypadku procesorów z 64-bitowymi rozszerzeniami 64-bitowe wersje systemu Windows korzystają z funkcji procesorów NX lub XD, a w przypadku procesorów IPF — z pewnych wartości pola praw dostępu we wpisach tabeli stron.

Można się spodziewać, że wszystkie przyszłe 32- i 64-bitowe procesory będą zapewniały obsługę sprzętowego zapobiegania wykonywaniu danych. Firma Microsoft kontynuuje współpracę z producentami procesorów, prowadząc kampanię na rzecz wprowadzania i rozwijania technologii DEP.

Programowe zapobieganie wykonywaniu danych

W systemie Windows Server 2003 z dodatkiem Service Pack 1 zastosowano dodatkowe testy zabezpieczeń funkcji DEP. Te testy, znane jako programowe zapobieganie wykonywaniu danych, mają eliminować zagrożenia związane z nadużyciem mechanizmów obsługi wyjątków w systemie Windows. Programowe zapobieganie wykonywaniu danych działa na każdym procesorze, na którym można uruchomić system Windows Server 2003 z dodatkiem Service Pack 1. Domyślnie programowe zapobieganie wykonywaniu danych obejmuje ochroną tylko ograniczone systemowe pliki binarne i jest niezależne od możliwości procesora w zakresie sprzętowego zapobiegania wykonywaniu danych.

Dla kogo ta funkcja jest przeznaczona?

Funkcję DEP oraz wymagania oprogramowania działającego na obsługującej je platformie powinni znać deweloperzy aplikacji i sterowników. Z wymaganiami technologii DEP powinni bliżej zapoznać się programiści tych aplikacji, w których przeprowadzane jest dokładnie zsynchronizowane generowanie kodu (JIT, just-in-time) albo wykonywanie pamięci z domyślnego stosu procesu lub sterty.

Deweloperzy sterowników powinni zapoznać się z trybem PAE na platformach obsługujących sprzętowe zapobieganie wykonywaniu danych. Działanie tego trybu na komputerach z systemem Windows Server 2003 Standard Edition z dodatkiem Service Pack 1 zostało zmienione w celu poprawienia zgodności sterowników.

Jakie nowe możliwości dodano do tej funkcji w systemie Windows Server 2003 z dodatkiem Service Pack 1?

Zapobieganie wykonywaniu danych w 32- i 64-bitowych wersjach systemu Windows i aplikacjach

Szczegółowy opis

Sprzętowe zapobieganie wykonywaniu danych

Aby zapewnić deweloperom aplikacji i sterowników spójność, dla 32- i 64-bitowych wersji systemu Windows zaprojektowano taki sam model ochrony pamięci (obejmujący funkcję DEP).

Deweloperzy aplikacji powinni zapoznać się z działaniem technologii DEP w trybie użytkownika. W systemach Windows następstwem wyjątku funkcji DEP w trybie użytkownika jest wyjątek STATUS_ACCESS_VIOLATION (0xc0000005). Pierwszy parametr ExceptionInformation w strukturze EXCEPTION_RECORD zawiera typ naruszenia zasad dostępu, do którego doszło. Wartość 8 elementu ExceptionInformation[0] informuje, że naruszenie zasad dostępu było naruszeniem wykonywania.

W większości procesów wyjątek STATUS_ACCESS_VIOLATION pozostanie nieobsłużony i spowoduje zakończenie procesu.

Zapobieganie wykonywaniu danych obejmuje również sterowniki w trybie jądra. Nie można selektywnie włączać i wyłączać funkcji DEP dla obszarów pamięci w trybie jądra. W 32-bitowych wersjach systemu Windows zapobieganie wykonywaniu danych obejmuje domyślnie stos. W przypadku funkcji DEP w trybie jądra w 64-bitowych wersjach systemu Windows jest inaczej — zapobieganie wykonywaniu danych obejmuje stos, pulę stronicowaną i pulę sesji.

Sterowniki urządzeń nie mogą wykonywać kodu ze stosu, gdy zapobieganie wykonywaniu danych jest włączone. Naruszenie zasad dostępu funkcji DEP w trybie jądra spowoduje błąd 0xFC: ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY.

Programowe zapobieganie wykonywaniu danych

Programowe zapobieganie wykonywaniu danych obejmuje dodatkowe sprawdzenia w mechanizmach obsługi wyjątków systemu Windows. Jeśli pliki obrazu programu są zbudowane przy użyciu bezpiecznej strukturalnej obsługi wyjątków (SafeSEH, Safe Structured Exception Handling), programowe zapobieganie wykonywaniu danych gwarantuje, że przed wysłaniem wyjątku procedura obsługi wyjątku zostanie zarejestrowana w tabeli funkcji znajdującej się wewnątrz obrazu pliku.

Jeśli pliki obrazu programu nie są zbudowane przy użyciu mechanizmu SafeSEH, programowe zapobieganie wykonywaniu danych gwarantuje, że przed wysłaniem wyjątku procedura obsługi wyjątku będzie znajdowała się wewnątrz regionu pamięci oznaczonego jako wykonywalny.

Zamykanie aplikacji przez funkcję zapobiegania wykonywaniu danych

Większość aplikacji nie napotka żadnego problemu związanego z funkcją zapobiegania wykonywaniu danych. Jeśli jednak tak się stanie, zostanie wyświetlony komunikat funkcji zapobiegania wykonywaniu danych informujący o zaistniałym problemie.

Komunikat funkcji DEP informuje, że w aplikacji wystąpił problem związany z funkcją zapobiegania wykonywaniu danych, oraz daje użytkownikowi możliwość zapoznania się z dodatkowymi informacjami na temat funkcji DEP i ewentualnie jej wyłączenia dla zamykanej aplikacji.

ImportantWażne
Gdy wystąpi problem z funkcją DEP w przypadku jakiejś aplikacji, firma Microsoft zaleca skontaktowanie się z jej producentem w celu uzyskania aktualizacji. Przed wyłączeniem funkcji DEP dla danej aplikacji należy starannie rozważyć jego wpływ na zabezpieczenia. Możliwość zmiany ustawień funkcji zapobiegania wykonywaniu danych dla zamykanej aplikacji przy użyciu przycisku Zmień ustawienia w oknie komunikatu funkcji DEP zależy od konfiguracji tej funkcji dla całego systemu. Zmiany dotyczące ochrony przy użyciu funkcji DEP dla danej aplikacji można wprowadzać tylko wtedy, gdy konfiguracja funkcji DEP dla całego systemu jest ustawiona w trybie OptOut.

Komunikat funkcji zapobiegania wykonywaniu danych jest wyświetlany tuż przed pojawieniem się okna Raportowanie błędów systemu Windows, które umożliwia wysłanie do firmy Microsoft raportu o problemie związanym z tą funkcją.

W systemie Windows Server 2003 z dodatkiem Service Pack 1 komunikat funkcji zapobiegania wykonywaniu danych będzie wyświetlany podczas następnego interakcyjnego logowania administratora do systemu. W systemie Windows Server 2003 z dodatkiem Service Pack 1 to działanie zmieniło się w stosunku do systemu Windows XP z dodatkiem Service Pack 2, ponieważ raportowanie błędów systemu Windows jest domyślnie konfigurowane w trybie kolejkowania. Tryb kolejkowania polega na tym, że komunikaty raportowania błędów są umieszczane w kolejce do czasu następnego interakcyjnego logowania administratora do systemu.

Aby dowiedzieć się więcej o raportowaniu błędów systemu Windows lub skonfigurować je w taki sposób, aby komunikaty funkcji DEP i raportowania błędów systemu Windows były wyświetlane tuż po wystąpieniu problemu z aplikacją, zobacz temat „Using Windows Server 2003 in a Managed Environment: Windows Error Reporting” (Używanie systemu Windows Server 2003 w środowisku zarządzanym: raportowanie błędów systemu Windows) w witrynie firmy Microsoft w sieci Web pod adresem http://go.microsoft.com/fwlink/?LinkId=38443.

Po zamknięciu aplikacji z powodu funkcji DEP usługa raportowania błędów systemu Windows generuje pewną sygnaturę błędu. Można ją wyświetlić, używając łącza „kliknij tutaj” w oknie dialogowym Raportowanie błędów systemu Windows. Sygnatura błędu dla problemu związanego z funkcją DEP ma następujące atrybuty:

 

Parametr Przykładowa wartość Opis

EventType

BEX

Wskazuje przepełnienie buforu (/GS) lub wyjątek funkcji DEP. Wartość BEX64 wskazuje przepełnienie buforu (/GS) lub wyjątek funkcji DEP w 64-bitowych wersjach systemu Windows.

P1

DEPDemo.exe

Nazwa pliku wykonywalnego aplikacji, w której wystąpił problem

P2

5.1.2600.2180

Wersja pliku wykonywalnego aplikacji, w której wystąpił problem

P3

416725f2

Sygnatura aplikacji, która spowodowała błąd.

P4

DEPDemo.exe

Nazwa modułu, w którym wystąpił błąd.

P5

5.1.2600.2180

Wersja modułu, w którym wystąpił błąd.

P6

416725f2

Sygnatura modułu, w którym wystąpił błąd.

P7

00002060

Przesunięcie błędu (adres instrukcji, jeśli moduł nie jest załadowany pod adresem błędu).

P8

C0000005

Wskazuje wyjątek STATUS_ACCESS_VIOLATION. Jeśli ten parametr ma wartość c0000409, problem oznacza błąd związany z /GS.

P9

00000008

Wskazuje wyjątek wykonania STATUS_ACCESS_VIOLATION. Wartość 00000002 wskazuje wyjątek wykonania STATUS_ACCESS_VIOLATION w 64-bitowych wersjach systemu Windows w architekturze Intel Itanium.

Komunikat funkcji zapobiegania wykonywaniu danych może nie być wyświetlany w przypadku niektórych aplikacji, w których wystąpi problem związany z tą funkcją, niezależnie od konfiguracji raportowania błędów systemu Windows. Te aplikacje obsługują wyjątek STATUS_ACCESS_VIOLATION wygenerowany przez funkcję DEP albo instalują filtr nieobsłużonych wyjątków zastępujący domyślny filtr nieobsłużonych wyjątków systemu Win32. Domyślny filtr nieobsłużonych wyjątków systemu Win32 jest odpowiedzialny za wyzwalanie komunikatów funkcji zapobiegania wykonywaniu danych i raportowania błędów systemu Windows. Komunikat funkcji zapobiegania wykonywaniu danych może również nie być wyświetlany, jeśli aplikacja wywoła funkcję SetErrorMode() z flagą SEM_NOGPFAULTERRORBOX.

Dlaczego ta zmiana jest ważna? Jakie zagrożenia pozwala zminimalizować?

Główną zaletą funkcji DEP jest to, że zapobiega wykonywaniu kodu ze stron danych, takich jak domyślna sterta, różne stosy i pule pamięci. W normalnych operacjach systemu kod nie jest wykonywany z domyślnej sterty ani z domyślnego stosu. Sprzętowe zapobieganie wykonywaniu danych polega na wykrywaniu kodu uruchamianego z tych lokalizacji i generowaniu wyjątku w przypadku, gdy dojdzie do wykonania kodu. Jeśli wyjątek jest nieobsługiwany, proces zostanie zakończony. Wykonywanie kodu z pamięci chronionej w trybie jądra powoduje wystąpienie błędu.

Wprawdzie zakończenie procesu czy spowodowanie zakończenia działania systemu z błędem nie wydaje się rozwiązaniem idealnym, jednak pomaga zablokować wykonywanie złośliwego kodu. Uniemożliwienie wykonywania złośliwego kodu w systemie może zapobiec uszkodzeniu systemu lub propagowaniu się złośliwego kodu, którego destrukcyjne efekty mogą szybko przewyższyć skutki spowodowane przerwaniem procesu lub błędem systemu.

Funkcja DEP może zapobiec niektórym infekcjom wirusów lub innym atakom polegającym na dołączeniu do procesu kodu wykonywalnego, a następnie próbie jego wykonania. W systemie z funkcją DEP próba wykonania wprowadzonego kodu powinna spowodować wygenerowanie wyjątku. Programowe zapobieganie wykonywaniu danych może pomóc w eliminowaniu zagrożeń związanych z nadużyciem mechanizmów obsługi wyjątków w systemie Windows.

Dodatkowa zaleta funkcji DEP wiąże się z prawidłowym projektowaniem i najważniejszymi wskazówkami dla deweloperów aplikacji i sterowników. Funkcja DEP zmusza deweloperów do unikania wykonywania kodu zawartego na stronach danych, o ile nie zostaną one jawnie oznaczone jako strony wykonywalne.

Co zostało zmienione?

Zgodność aplikacji

Niektóre zachowania aplikacji powinny być zgodne z funkcją DEP. Aplikacje, w których odbywa się dynamiczne generowanie kodu (na przykład dokładnie zsynchronizowane generowanie kodu — JIT) i w których nie oznacza się w sposób jawny wygenerowanego kodu uprawnieniem do wykonywania, mogą mieć problemy ze zgodnością z funkcją DEP. Procedury obsługi wyjątków aplikacji, które nie są budowane przy użyciu bezpiecznej strukturalnej obsługi wyjątków (SafeSEH), muszą być zlokalizowane w wykonywalnych obszarach pamięci.

Aplikacje, w których nastąpi próba naruszenia reguł funkcji DEP, otrzymają wyjątek z kodem stanu STATUS_ACCESS_VIOLATION (0xC0000005). W aplikacji, która wymaga wykonywalnego obszaru pamięci, należy jawnie ustawić atrybut wykonywania dla odpowiedniego obszaru pamięci, określając wartość PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE lub PAGE_EXECUTE_WRITECOPY dla argumentu ochrony pamięci funkcji przydzielania pamięci Virtual* . Pamięć przydzielona ze sterty przy użyciu funkcji malloc() i HeapAlloc() jest niewykonywalna.

Zgodność sterowników

Problemy zgodności sterowników z funkcją DEP sprowadzają się głównie do problemów zgodności wynikających z trybu PAE.

noteUwaga
Tryb PAE jest wymagany tylko na komputerach z 32-bitowymi wersjami systemu Windows i z procesorami obsługującymi sprzętowe zapobieganie wykonywaniu danych.

Funkcja DEP może stwarzać problemy ze zgodnością sterowników, w których są stosowane różne techniki generowania kodu w czasie rzeczywistym. Chociaż wiele sterowników działających w ten sposób zostało już naprawionych — zwłaszcza że funkcja DEP jest „zawsze włączona” dla sterowników ładowanych w 64-bitowych wersjach systemu Windows — nie ma gwarancji, że wszystkie sterowniki zostały zaktualizowane. Niemniej jednak te techniki są stosowane w niewielu sterownikach, a sama funkcja DEP nie powinna powodować dużej liczbę problemów ze zgodnością sterowników.

Główną obawą dotyczącą zgodności sterowników jest działanie trybu rozszerzania adresów fizycznych (PAE, Physical Address Extension) w systemach 32-bitowych. Tryb PAE umożliwia procesorom adresowanie więcej niż 4 GB pamięci. Zasadnicza różnica między stronicowaniem pamięci w trybie PAE i w innych trybach polega na tym, że w trybie PAE jest wymagany dodatkowy poziom stronicowania (są trzy poziomy zamiast dwóch).

Niektóre sterowniki mogą się nie ładować przy włączonym trybie PAE, ponieważ urządzenie może nie umożliwiać 64-bitowego adresowania lub sterownik może zakładać, że tryb PAE wymaga więcej niż 4 GB pamięci RAM. Takie sterowniki oczekują, że w trybie PAE będą zawsze otrzymywać 64-bitowe adresy i że one lub ich urządzenia nie mogą interpretować takich adresów.

Inne sterowniki mogą się dać załadować w trybie PAE, ale będą powodować niestabilność systemu przez bezpośrednie modyfikowanie systemowych wpisów tabeli stron. W trybie PAE sterowniki te spodziewają się 32-bitowych wpisów tabeli stron, a otrzymują 64-bitowe.

Największy problem zgodności sterowników z trybem PAE jest związany z transmisjami bezpośredniego dostępu do pamięci (DMA, Direct Memory Access) i przydzielaniem rejestrów mapowania. Wiele urządzeń obsługujących tryb DMA, zazwyczaj kart 32-bitowych, nie obsługuje 64-bitowego adresowania fizycznego. Działając w trybie 32-bitowym, urządzenie takie może adresować całą fizyczną przestrzeń adresową. W trybie PAE może się zdarzyć, że dane znajdą się pod adresem fizycznym powyżej 4 GB. Aby umożliwić urządzeniom z takimi ograniczeniami funkcjonowanie w tej konfiguracji, w systemach Windows 2000 Server i nowszych zastosowano podwójne buforowanie transakcji DMA, zapewniając 32-bitowy adres wskazywany przez rejestr mapowania. Urządzenie może wykonać daną transakcję DMA z 32-bitowym adresem docelowym, a jądro skopiuje pamięć pod adres 64-bitowy przekazany do sterownika.

Gdy system działa z wyłączonym trybem PAE, sterowniki urządzeń 32-bitowych nie wymagają nigdy wspomagania rejestrów mapowania rzeczywistą pamięcią. Oznacza to, że podwójne buforowanie nie jest konieczne, ponieważ wszystkie urządzenia i sterowniki zawierają się w 32-bitowej przestrzeni adresowej. Z testów sterowników dla 32-bitowych urządzeń przeprowadzanych w komputerach z 64-bitowymi procesorami wynika, że większość przetestowanych sterowników obsługujących DMA spodziewa się nieograniczonych rejestrów mapowania.

Aby ograniczyć problemy zgodności, w warstwie abstrakcji sprzętu (HAL, Hardware Abstraction Layer) systemu Windows Server 2003 Standard Edition z dodatkiem Service Pack 1 wprowadzono zmiany mające na celu naśladowanie działania trybu DMA w 32-bitowej warstwie abstrakcji sprzętu. Poprawiona warstwa HAL zapewnia nieograniczone rejestry mapowania, gdy system działa w trybie PAE. Ponadto menedżer pamięci jądra ignoruje wszelkie adresy fizyczne powyżej 4 GB. Pamięć RAM powyżej granicy 4 GB nie będzie możliwa do zaadresowania przez system Windows, a tym samym będzie nieużyteczna w systemie. Z powodu ograniczenia przestrzeni adresowej do 4 GB urządzenia z 32-bitową transmisją DMA z modułem rozstrzygającym o dostępie do magistrali (bus master) nie będą widziały transakcji o adresach powyżej granicy 4 GB. Ponieważ te zmiany eliminują konieczność podwójnego buforowania transakcji, można uniknąć pewnej klasy błędów związanych z poprawną implementacją obsługi podwójnego buforowania w niektórych sterownikach.

Należy zaznaczyć, że działanie trybu PAE w systemie Windows Server 2003 Enterprise Edition z dodatkiem Service Pack 1 i w systemie Windows Server 2003 Datacenter Edition z dodatkiem Service Pack 1 nie zmieniło się w stosunku do wersji bez dodatku SP1.

W wyniku tych zmian w warstwie HAL i menedżerze pamięci wpływ na zgodność sterowników urządzeń powinien być minimalny na komputerach z systemem Windows Server 2003 z dodatkiem Service Pack 1 z włączoną funkcją DEP.

Zgodność systemu

Ostatni problem zgodności związany z funkcją DEP dotyczy systemów z włączonym trybem PAE, które mogą nie być przeznaczone do obsługi fizycznej pamięci RAM większej niż 4 GB. Podczas wewnętrznych testów w firmie Microsoft zauważono, że w przypadku pewnych komputerów z procesorami obsługującymi sprzętowe zapobieganie wykonywaniu danych występują problemy z rozruchem lub stabilnością, gdy procesor działa w trybie PAE.

Tryb PAE jest wymagany w celu usprawnienia funkcji NX procesora. Projektanci systemów i oprogramowania układowego powinni być więc świadomi tego, że system może działać w trybie PAE, nawet jeśli mikroukład i oprogramowanie układowe systemu nie są zaprojektowane do obsługi fizycznej pamięci RAM większej niż 4 GB.

Na szczególną uwagę zasługuje systemowe oprogramowanie układowe interpretujące wpisy tabeli stron w celu określenia instrukcji wykonywanych przez system operacyjny. Gdy procesor działa w trybie PAE, wpisy tabeli stron są rozszerzane do długości 64 bitów. Deweloperzy systemów i oprogramowania układowego powinni kontaktować się z producentami procesorów i mikroukładów w celu uzyskania dodatkowych informacji o tym, jak bezpiecznie określać instrukcje wykonywane przez system operacyjny.

Deweloperzy systemów pracujący z procesorami AMD mogą uzyskać więcej informacji w podręczniku dewelopera jądra i systemu BIOS dla komputerów z procesorami AMD Athlon 64 i AMD Opteron. Aby go uzyskać, należy przejść do witryny sieci Web procesorów AMD Athlon 64 pod adresem http://go.microsoft.com/fwlink/?LinkId=28165 i kliknąć łącze „BIOS and Kernel Developer’s Guide for AMD Athlon 64 and AMD Opteron Processors” (Podręcznik dewelopera jądra i systemu BIOS dla komputerów z procesorami AMD Athlon 64 i AMD Opteron).

Firma Intel nie udostępnia publicznie szczegółowych informacji na temat trybu zarządzania systemem (SMM, System Management Mode). W celu uzyskania dodatkowych informacji projektanci systemów pracujący z procesorami firmy Intel powinni kontaktować się bezpośrednio z firmą Intel.

Aby uzyskać więcej informacji o obsłudze trybu PAE w systemie Windows, zobacz artykuł opisujący pamięć w trybie rozszerzania adresów fizycznych w systemie Windows w witrynie firmy Microsoft w sieci Web pod adresem http://go.microsoft.com/fwlink/?LinkId=28166.

Jak rozwiązać te problemy?

W aplikacjach wymagających wykonywalnych obszarów pamięci należy podczas przydzielania pamięci używać atrybutów PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE lub PAGE_EXECUTE_WRITECOPY. Ponadto w aplikacjach tych nie można wykonywać kodu z domyślnej sterty procesu ani ze stosu. Większość aplikacji, które wykonują akcje niezgodne z funkcją DEP, będą wymagały aktualizacji, aby stały się zgodne. Aplikacje muszą być także budowane z użyciem bezpiecznej strukturalnej obsługi wyjątków (SafeSEH, Safe Structured Exception Handling) albo powinny mieć procedury obsługi wyjątków umiejscowione w pamięci jawnie oznaczonej jako wykonywalna.

Aplikacja może przydzielać pamięć wykonywalną z odpowiednimi opcjami ochrony pamięci przy użyciu funkcji API VirtualAlloc(). Jako minimum należy stosować opcję ochrony pamięci PAGE_EXECUTE. Po wygenerowaniu kodu wykonywalnego zaleca się ustawienie przez aplikację opcji ochrony pamięci uniemożliwiających dostęp do przydzielonej pamięci w trybie zapisu. W aplikacjach można zabronić dostępu w trybie zapisu do przydzielonej pamięci, korzystając z funkcji API VirtualProtect(). Zablokowanie dostępu w trybie zapisu zapewnia maksymalną ochronę wykonywalnych obszarów pamięci z przestrzeni adresowej procesu.

Jeśli jakiś złośliwy proces spróbuje wstawić do obszaru wykonywalnego swój kod, dostęp do pamięci spowoduje wyjątek zapisu STATUS_ACCESS_VIOLATION. Wykonywalne obszary w przestrzeni adresowej aplikacji powinny być jak najmniejsze. W ten sposób można zminimalizować powierzchnię ataku, za pośrednictwem której kod wykonywalny mógłby zostać wprowadzony do przestrzeni adresowej procesu i uruchomiony.

Zaawansowane aplikacje mogą wpływać na układ swojej pamięci wirtualnej i tworzyć obszary wykonywalne. Aplikacje te powinny lokować obszary wykonywalne w przestrzeni adresów poniżej obszarów niewykonywalnych. Lokowanie obszarów wykonywalnych poniżej niewykonywalnych ma na celu ochronę przed przepełnieniem buforu do pamięci wykonywalnej.

W przypadku pewnej niewielkiej liczby plików wykonywalnych i bibliotek kod wykonywalny może znajdować się w sekcji danych obrazu pliku. W niektórych przypadkach aplikacje mogą umieszczać w sekcjach danych małe segmenty kodu (zwane powszechnie łącznikami). Jednak funkcja DEP oznacza sekcje pliku obrazu załadowane do pamięci jako niewykonywalne, o ile do danej sekcji nie zostanie zastosowany atrybut wykonywalny.

Dlatego należy kod wykonywalny z sekcji danych przenieść do sekcji kodu albo sekcję danych zawierającą kod wykonywalny oznaczać jawnie jako wykonywalną. Atrybut wykonywalny IMAGE_SCN_MEM_EXECUTE (0x20000000) należy dodawać do pola Characteristics odpowiedniego nagłówka sekcji, która zawiera kod wykonywalny.

Używając programu łączącego firmy Microsoft dostarczanego z produktami Microsoft Visual Studio, atrybut wykonywalny można dodać do sekcji za pomocą opcji /SECTION. Opcja /SECTION programu łączącego ma następujący format:

/SECTION: Nazwa ,[E][R][W][S][D][K][L][P][X][,ALIGN=#]

Wartość E oznacza atrybut wykonywalny (0x20000000). Aby uzyskać więcej informacji na temat opcji /SECTION i innych opcji programu łączącego firmy Microsoft, zobacz witrynę sieci MSDN w sieci Web pod adresem http://go.microsoft.com/fwlink/?LinkId=28167.

Ponadto atrybuty sekcji w istniejących obrazach można zmieniać za pomocą narzędzia Microsoft COFF Binary File Editor (Editbin.exe). W narzędzie Editbin jest dostępna opcja /SECTION o następującym formacie:

/SECTION: Nazwa [= nowa_nazwa ][,[[!]{CDEIKOMPRSUW}][A{1248PTSX}]]

Wartości C i E oznaczają odpowiednio atrybut kodu i atrybut wykonywalny. Aby uzyskać więcej informacji na temat narzędzia Editbin i opcji /SECTION, zobacz witrynę MSDN w sieci Web pod adresem http://go.microsoft.com/fwlink/?LinkId=28168.

Firma Microsoft udostępniła dodatki Service Pack dla systemu Microsoft .NET Framework w wersji 1.0 i 1.1 rozszerzające go o funkcję DEP w systemie Windows Server 2003 z dodatkiem Service Pack 1. Aplikacje korzystające z systemu Microsoft .NET Framework będą nadal działały normalnie, ale nie będą korzystały z funkcji DEP, jeśli nie zostanie zainstalowany odpowiedni dodatek Service Pack dla środowiska Microsoft .NET Framework.

Firma Microsoft zachęca deweloperów aplikacji rozprowadzających biblioteki Microsoft .NET Framework do zaktualizowania ich do wersji obsługujących funkcję DEP — Microsoft .NET Framework w wersji 1.0 z dodatkiem Service Pack 3 lub Microsoft .NET Framework w wersji 1.1 z dodatkiem Service Pack 1.

Jakie ustawienia zostały dodane lub zmienione w systemie Windows Server 2003 z dodatkiem Service Pack 1?

Systemowa konfiguracja zapobiegania wykonywaniu danych

Podstawowa różnica w działaniu funkcji DEP w systemie Windows Server 2003 z dodatkiem Service Pack 1 w porównaniu do systemu Windows XP z dodatkiem Service Pack 2 polega na tym, że w systemie operacyjnym serwera domyślną konfiguracją jest ochrona wszystkich aplikacji i usług. W systemie Windows XP z dodatkiem SP2 funkcja DEP była domyślnie włączona tylko dla najważniejszych programów i usług.

Funkcję DEP dla systemu można konfigurować za pomocą przełączników w pliku Boot.ini. Ponadto wprowadzono zmiany w aplecie System w Panelu sterowania, aby umożliwić użytkownikowi końcowemu (zalogowanemu do systemu jako administrator) łatwe konfigurowanie ustawień funkcji DEP.

Ustawienia systemowej konfiguracji funkcji DEP mają zastosowanie tylko do aplikacji i procesów 32-bitowych działających w 32- i 64-bitowych wersjach systemu Windows. W 64-bitowych wersjach systemu Windows sprzętowe zapobieganie wykonywaniu danych, o ile jest dostępne, jest zawsze stosowane do 64-bitowych procesów oraz obszarów pamięci jądra i nie ma systemowych ustawień konfiguracyjnych, za pomocą których można by je wyłączyć.

System Windows obsługuje cztery systemowe konfiguracje sprzętowego i programowego zapobiegania wykonywaniu danych.

Konfiguracja zapobiegania wykonywaniu danych

Konfiguracja Opis

OptIn

(domyślna dla systemu Windows XP z dodatkiem SP2 i 64-bitowego wydania systemu Windows XP)

W systemach z procesorami obsługującymi sprzętowe zapobieganie wykonywaniu danych funkcja DEP jest włączona domyślnie dla ograniczonego zestawu systemowych binariów i aplikacji, które z niej korzystają. W przypadku tej opcji funkcją DEP są domyślnie objęte tylko binaria systemu Windows.

OptOut

(domyślna dla systemu Windows Server 2003 z dodatkiem Service Pack 1)

Funkcja DEP jest domyślnie włączona dla wszystkich procesów. Użytkownicy mogą w aplecie System w Panelu sterowania utworzyć ręcznie listę konkretnych aplikacji, do których funkcja DEP nie jest stosowana. Użytkownicy zaawansowani mogą wyłączać funkcję DEP dla pojedynczych aplikacji za pomocą zestawu narzędzi zgodności aplikacji (Application Compatibility Toolkit). Poprawki zgodności systemu (kliny) dla funkcji DEP są obowiązujące.

AlwaysOn

Ta konfiguracja zapewnia objęcie funkcją DEP całego systemu. Wszystkie procesy działają zawsze z zastosowaniem funkcji DEP. Lista wyjątków wykluczających konkretne aplikacje spod ochrony funkcją DEP jest niedostępna. Poprawki zgodności systemu (kliny) dla funkcji DEP nie są obowiązujące. Aplikacje, które zostały wykluczone za pomocą zestawu narzędzi zgodności aplikacji (Application Compatibility Toolkit), działają z zastosowaniem funkcji DEP.

AlwaysOff

Ta konfiguracja powoduje wyłączenie funkcji DEP dla wszystkich składników systemu niezależnie od sprzętowego zapobiegania wykonywaniu danych. O ile we wpisie rozruchu opcja /noexecute=alwaysoff nie została zastąpiona opcją /execute, procesor w 32-bitowych wersjach systemu Windows będzie działać w trybie PAE.

Sprzętowe i programowe zapobieganie wykonywaniu danych można konfigurować w ten sam sposób. Jeśli w zasadach funkcji DEP dla całego systemu zostanie ustawiona konfiguracja OptIn, te same kluczowe pliki binarne i aplikacje systemu Windows będą chronione przez sprzętowe i programowe zapobieganie wykonywaniu danych. Jeśli system nie obsługuje sprzętowej funkcji DEP, kluczowe pliki binarne i aplikacje systemu Windows będą chronione tylko przez programową funkcję DEP.

Podobnie jeśli w zasadach funkcji DEP dla całego systemu zostanie ustawiona konfiguracja OptOut, aplikacje wykluczone z ochrony funkcją DEP będą wyłączone spod działania sprzętowego i programowego zapobiegania wykonywaniu danych.

Opisane cztery konfiguracje funkcji DEP dla całego systemu można wybierać za pomocą przełączników w pliku Boot.ini. Ustawienia w pliku Boot.ini są następujące:

/noexecute=policy_level

gdzie poziom_zasady jest zdefiniowany jako AlwaysOn, AlwaysOff, OptIn lub OptOut.

Żadne istniejące ustawienie /noexecute w pliku Boot.ini nie jest zmieniane podczas instalowania dodatku Service Pack 1 do systemu Windows Server 2003 ani podczas przenoszenia obrazu systemu operacyjnego Windows między komputerami z obsługą i bez obsługi sprzętowego zapobiegania wykonywaniu danych.

Podczas instalowania dodatku Service Pack 1 do systemu Windows Server 2003 domyślnie jest włączany poziom zasad OptOut, o ile w instalacji nienadzorowanej nie został określony inny poziom zasad. Jeśli w przypadku wersji systemu Windows obsługującej funkcję DEP we wpisie rozruchu nie ma ustawienia /noexecute=poziom_zasady, działanie systemu jest takie samo jak w przypadku użycia opcji /noexecute=OptIn.

Użytkownik końcowy, który zaloguje się jako administrator, może ręcznie konfigurować funkcję zapobiegania wykonywaniu danych, przełączając między zasadami OptIn i OptOut na karcie Zapobieganie wykonywaniu danych okna dialogowego Opcje wydajności. Poniżej przedstawiono procedurę ręcznego konfigurowania funkcji DEP na komputerze:

Aby skonfigurować ustawienia funkcji zapobiegania wykonywaniu danych
  1. Kliknij przycisk Start, kliknij polecenie Panel sterowania, a następnie dwukrotnie kliknij ikonę System.

  2. Kliknij kartę Zaawansowane. Następnie w obszarze Wydajność kliknij przycisk Ustawienia.

  3. Kliknij kartę Zapobieganie wykonywaniu danych.

  4. Kliknij opcję Włącz funkcję DEP tylko dla istotnych programów i usług systemu Windows, aby wybrać zasadę OptIn.

  5. Kliknij opcję Włącz funkcję DEP dla wszystkich programów i usług oprócz tych wybranych poniżej, aby wybrać zasadę OptOut.

  6. W przypadku wybrania zasady OptOut kliknij przycisk Dodaj w celu dodania aplikacji, dla których funkcja DEP ma być wyłączona.

Użytkownicy zaawansowani mogą zmieniać konfigurację funkcji DEP dla całego systemu na różne sposoby. Plik Boot.ini można modyfikować bezpośrednio za pomocą mechanizmów skryptowych lub przy użyciu narzędzia Bootcfg.exe, wchodzącego w skład dodatku Service Pack 1 do systemu Windows Server 2003.

W przypadku nienadzorowanych instalacji systemu Windows Server 2003 z dodatkiem Service Pack 1 konkretną konfigurację funkcji DEP można wstępnie zdefiniować w pliku Unattend.txt. Konfigurację funkcji DEP dla całego systemu można określić we wpisie OSLoadOptionsVar w sekcji [Data].

Konfiguracja zapobiegania wykonywaniu danych dla określonych aplikacji

Gdy funkcja DEP ma ustawiony poziom zasady OptOut, w celu uzyskania zgodności aplikacji można selektywnie wyłączać funkcję DEP dla pojedynczych aplikacji 32-bitowych. Funkcja DEP jest jednak zawsze włączona dla aplikacji 64-bitowych.

Użytkownik końcowy może selektywnie wyłączać funkcję zapobiegania wykonywaniu danych dla aplikacji za pomocą karty Zapobieganie wykonywaniu danych w oknie Właściwości systemu.

Użytkownicy zaawansowani mogą stosować poprawkę zgodności aplikacji o nazwie DisableNX, dołączaną do dodatku Service Pack 1 do systemu Windows Server 2003. Poprawka zgodności DisableNX wyłącza funkcję DEP dla programu, do którego zostanie zastosowana.

Poprawkę zgodności DisableNX można stosować do aplikacji za pomocą zestawu narzędzi zgodności aplikacji (Application Compatibility Toolkit). Aby uzyskać więcej informacji o zgodności aplikacji systemu Windows, zobacz artykuł w witrynie firmy Microsoft w sieci Web pod adresem http://go.microsoft.com/fwlink/?LinkId=23302.

Czy oceniasz te materiały jako pomocne?
(Pozostało znaków: 1500)
Dziękujemy za opinię.

Zawartość społeczności

Dodaj
Pokaż:
© 2014 Microsoft