Заобикаляне на хардуерната DEP реализация в Windows
Microsoft е свършила добра работа за подобряване на нивото на защита, резултатите от които са се появили в XP Service Pack 2. Описаната техника на атака не трябва да се възприема като последица от факта, че Microsoft не е в състояние да направи нещо ефективно и надеждно, тъй като бяха направени отстъпки по отношение на сигурността, за да се запази съвместимостта. Винаги има компромис между новите системи за сигурност и потенциалните проблеми със съвместимостта и трябва да се отбележи, че може би никой друг не се интересува толкова от поддържането на обратна съвместимост на своите продукти, както Microsoft.
Заобикаляне на хардуерната DEP реализация в Windows
Една от най-значимите промени, въведени от Microsoft в Windows XP Service Pack 2 и Windows 2003 Server Service Pack 1, беше поддръжката на нова функция, наречена Data Execution Prevention (DEP). Този механизъм ви позволява да правите точно това, което подсказва името му: предотвратяване на изпълнение на код в области на паметта, които не са предназначени за изпълнение. Тази технология е много важна за предотвратяване на експлоатация на много уязвимости в софтуера, тъй като повечето експлойти разчитат на съхраняване на произволен код в области на паметта, които не са предназначени за изпълнение, като стека или купчината.
DEP може да работи в два режима. Първият режим се нарича Software-princed DEP (Software-princed DEP) и има ограничена функционалност, за да предотврати изпълнението на експлойт код, използвайки SEH техниката за пренаписване. Софтуерът DEP се използва на компютри, които нямат хардуерна поддръжка за неизпълними страници. В допълнение, защитата на софтуера DEP е вградена по време на компилация и следователно работи само за системни библиотеки и приложения на трети страни, възстановени с поддръжка на DEP. Заобиколното решение за софтуер DEP е описано по-рано и няма да бъде обсъждано в тази статия.
Вторият режим на DEP операция е хардуерно наложен DEP. Използва се в случаите, когато хардуерът поддържа неизпълними страници с памет. Повечето съществуващи процесори, подобни на Intel, не поддържат тази функция (поради наследената поддръжка на страници само за четене или запис), но по-новите чипсети започват да поддържат неизпълними страници чрез разширенията на адреси на страници (PAE). Хардуерният DEP е най-интересният режим, тъй като наистина прави повечето методи за атака много трудни за използване. Тази статия описва техника за заобикаляне на DEP в хардуерен режим.
Преди да опишем методологията, би било разумно да дефинираме някои понятия, по които ще оперираме. В този случай техниката е предназначена да осигури изпълнението на код от област на паметта, която не е предназначена за изпълнение, като стека на нишки или купчина от процеси, при условие че се използва хардуерен DEP. Тази техника трябва напълно да неутрализира DEP, тъй като при писане на експлойти все още се използва техниката за изпълнение на произволен код от записваеми области на паметта. В допълнение, този метод трябва да бъде възможно най-гъвкав и да работи както за съществуващи, така и за нови експлойти, без големи промени. След като взехме решение за изискванията, е време да разберем новите функции, дошли с хардуерния DEP.
Докато внедряваше поддръжка за DEP, Microsoft беше добре наясно колко приложения на трети страни могат да се сблъскат с проблеми с несъвместимостта поради въпроса дали дадена област памет е изпълнима. Имайки предвид това, DEP е проектиран с възможност за персонализиране на параметрите му. По подразбиране защитата е активирана само за системни процеси и за някои предварително дефинирани приложения (OptIn), или за всички приложения с изключение на предварително дефинираните (OptOut). Тези два флага се предават на ядрото по време на зареждане чрез опцията/NoExecute във файла boot.ini. Освен това, в допълнение към NoExecute, на ядрото могат да бъдат предадени още два флага - AlwaysOn или AlwaysOff. Тези две опции определят дали DEP да се използва за всеки процес, независимо от настройките му. Windows XP SP2 използва OptIn по подразбиране, докато Windows 2003 Server SP1 използва OptOut.