Antywirus może być zagrożeniem

Tablica SSDT jest związana z implementacją odwołań systemowych w trybie jądra i zawiera adresy podprogramów (usług systemowych), które mogą być pośrednio wywołane z trybu użytkownika. Za pomocą SSDT odbywa się połączenie obiektów programistycznych pracujących w przestrzeni użytkownika z obiektami działającymi w kernel mode i właśnie dlatego jest to dobre miejsce do umieszczenia ochrony przed złośliwym kodem. Zmiana adresów przechowanych w SSDT umożliwia wprowadzenie mechanizmów kontroli w postaci podprogramów sprawdzających, czy dane odwołanie nie stanowi zagrożenia dla bezpieczeństwa systemu. W razie potrzeby aplikacja zablokuje dane wywołanie lub zapyta użytkownika. Jeśli wywołanie jest bezpieczne, zostanie przekazane do oryginalnej usługi systemowej wraz z identycznymi parametrami. Proces ten musi być wykonany bez zmiany kontekstu wywołania, by całość była przezroczysta dla aplikacji i usług systemu operacyjnego.

Niestety, modyfikacja SSDT niesie ze sobą pewne konsekwencje - zła implementacja może w pewnych warunkach stanowić poważną lukę w bezpieczeństwie. W ubiegłorocznym numerze Computerworld 40-41/2009 opisywaliśmy przykładowy atak, który umożliwił instalację niepodpisanego obiektu w jądrze 64-bitowych systemów Windows 7 oraz Windows Server 2008R2. Błąd w implementacji kernel hook programu antywirusowego umożliwił wprowadzenie dowolnego, niepodpisanego kodu do jądra Windows.

Nowa technika ataku, nazywana "zamianą argumentów" albo "KHOBE" od nazwy narzędzia testowego, umożliwia ominięcie modyfikacji wprowadzonych przez antywirusy. Dotyczy to zarówno kernel mode hooks, jak i ochrony w przestrzeni użytkownika, ale najważniejszym zastosowaniem jest omijanie zabezpieczeń wprowadzanych na poziomie jądra, głównie SSDT hooks. Wynika to stąd, że user mode hook można ominąć za pomocą prostszych ataków, a SSDT hooks są najczęściej stosowaną metodą umieszczenia ochrony w jądrze systemu Windows wśród producentów oprogramowania antywirusowego.

Wyścig po włamanie

Idea ataku zakłada wywołanie odwołania systemowego z parametrami, które na pewno przejdą testy bezpieczeństwa wykonywane przez oprogramowanie ochronne, a następnie podmianę parametrów. W chwili wywołania, podprogram kontrolujący argumenty dokona odpowiednich sprawdzeń i przekaże sterowanie dalej, do oryginalnej usługi systemowej. Gdy nadejdzie przedział czasowy wykonania danego odwołania, parametry są zmieniane na takie, które na pewno by nie przeszły testów. Jeśli ta zamiana odbędzie się po sprawdzeniu kodu, ale przed wykonaniem właściwej usługi systemowej, atak będzie udany. Jest to jeden z przypadków wykorzystania podatności zwanej "wyścigiem" (ang. race condition).


TOP 200