Zabójcza ochrona

Linuxowe rozwiązanie IPS StackDefender firmy NGSec nieoczekiwanie doczekało się wersji przeznaczonej dla 32-bitowych systemów Windows.

Linuxowe rozwiązanie IPS StackDefender firmy NGSec nieoczekiwanie doczekało się wersji przeznaczonej dla 32-bitowych systemów Windows.

Rolą StackDefender jest programowe blokowanie możliwości wykonywania kodu w obszarach pamięci przechowujących dane. Brzmi to dosyć dziwnie, wydaje się bowiem oczywiste, że dane wyraźnie różnią się od kodu wykonywalnego. Niemniej, z różnych powodów, architektura x86 daje takie możliwości.

Jeśli w wyniku błędu programisty, który przewidział zbyt mało miejsca na dane wejściowe, złośliwemu programowi uda się zapisać do bufora więcej informacji, istnieje spora szansa na wykonanie dowolnego kodu w tym obszarze pamięci. Problem przepełnienia bufora został po raz pierwszy opisany w 1996 r. Od tamtego czasu ta wątpliwa zaleta architektury x86 była wielokrotnie wykorzystywana przez wszelkiej maści złośliwe programy - ten "dowolny kod" to zwykle wirus lub koń trojański.

Bezpieczeństwo wymuszone

Metod ochrony przed przepełnieniem bufora pamięci aplikacji jest kilka. Pierwsza i najważniejsza polega na kontroli kodu na poziomie kompilatora - przy każdym wyjściu z funkcji program sam, ale w sposób transparentny dla programisty i użytkownika, sprawdza integralność swoich wewnętrznych struktur.

Wykrycie prób uruchomienia kodu w buforze danych powoduje "samobójstwo" programu - wymuszone zakończenie pracy z odpowiednim komunikatem o błędzie.

Technikę kontroli kodu zastosowano w kompilatorze Microsoft Visual Studio .Net wykorzystanym do budowy systemu Windows Ser-ver 2003. Z jakiegoś powodu jednak Microsoft zdecydował się wykorzystać tutaj jedną z najstarszych technologii StackGuard, obarczoną poważnymi słabościami. Z tego powodu skuteczność tych zabezpieczeń jest niewielka.

Drugą techniką jest analogiczna ochrona realizowana na poziomie jądra systemu. Polega ona na tym, że system operacyjny zmienia domyślny sposób zarządzania pamięcią tak, by strony z danymi nie mogły być traktowane jako kod wykonywalny. Takie rozwiązanie zostało zastosowane m.in. w projektach PAX i OpenWall dla Linuxa, przeniesionych potem także do systemów z serii BSD, a następnie pod Windows.

Kontrola na poziomie jądra jest w praktyce bardzo skuteczna - obejmuje wszystkie programy i biblioteki działające w systemie, bez względu na to, czy zostały wcześniej specjalnie przygotowane pod kątem ochrony pamięci, czy też nie. W razie wykrycia próby naruszenia integralności stosu każda aplikacja, nad którą przejęto kontrolę, jest wyłączana. Tę właśnie technikę wykorzystuje StackDefender.

Wygoda ma cenę

Oczywiście nie ma róży bez kolców. Jako rozwiązania całkowicie programowe, zabezpieczenia tej klasy wnoszą narzut na wydajność systemu, który w zależności od sposobu wykorzystywania pamięci przez aplikację wynosi 5-15%. Problem ten rozwiązuje wprowadzenie takiej ochrony w samym procesorze, co uczyniły w swoich najnowszych produktach firmy AMD i Intel w postaci flagi NX reklamowanej jako Enhanced Virus Protection. Równocześnie Microsoft wprowadził obsługę tej flagi w SP2 dla Windows XP. Odpowiednia poprawka jest również dostępna dla Linuxa.

Zanim jednak te procesory i wersje systemów operacyjnych wejdą do powszechnego użycia, upłynie trochę czasu. StackDefender wydaje się dobrym rozwiązaniem dla użytkowników Windows, bo zapewnia skuteczną ochronę, a przy tym jest niezależny od procesora i dostępny dla wielu wersji Windows (od NT 4.0). Tak naprawdę, to rozwiązanie prawie idealne. Jest wszakże jeden drobny szkopuł - koszt licencji jednostanowiskowej wynosi... 850 USD.

Taka polityka cenowa zamyka przed oprogramowaniem StackDefender większość rynku. Być może tak właśnie ma być - skoro nie ma konkurencji, ci, którym bardzo zależy, i tak zapłacą za podwyższenie bezpieczeństwa. Nawet oni mogą jednak podchodzić krytycznie do pomysłu wydawania takiej sumy za coś, co w odczuciu użytkowników Microsoft powinien był dostarczać od dawna i to za darmo. Być może za jakiś czas podobne pakiety dla Windows zaoferuje jeszcze kilka innych firm.

Taniej, czyli drożej

Zabezpieczenia przed przepełnianiem bufora znalazły się w najnowszych wersjach popularnych procesorów Intela, AMD, Transmeta i innych. Aby skorzystać z dobrodziejstw tej technologii, trzeba jednak kupić nowy komputer i dodatkowo wyposażyć go w Windows XP SP2. Użytkownicy starszych modeli komputerów również potrzebują ochrony, której jednak, niestety, nie otrzymują ze strony wielkich producentów.

Tę lukę wypełnia StackDefender - oprogramowanie dostępne dotychczas jedynie dla platformy Linux i BSD. Oprogramowanie blokuje możliwość wykonania kodu w obszarze pamięci przeznaczonym dla danych na poziomie jądra systemu operacyjnego. Zaletą takiej konstrukcji jest fakt, że nie ma potrzeby rekompilacji istniejących aplikacji. Oprogramowanie może też działać na dotychczasowym sprzęcie. Mankamentem są pewien spadek wydajności oraz cena licencji.