Antywirus może być zagrożeniem
-
- 01.06.2010
Błąd w implementacji oprogramowania antywirusowego może narażać system na ataki - od pominięcia ochrony, do przejęcia kontroli nad systemem włącznie. Takim atakiem jest podmiana argumentów.

Oprogramowanie antywirusowe musi uwzględniać ochronę przed różnymi atakami i wymaga ścisłej integracji z systemem Windows. Ponieważ w starszych wydaniach swoich produktów Microsoft nie przewidział gotowego API dla antywirusa, producenci antywirusów zmuszeni byli do modyfikacji struktur w jądrze systemu oraz przestrzeni użytkownika. Aby kontrolować to, co aplikacja robi, przechwytuje się odwołania do funkcji systemowych i wprowadza podprogramy, które kontrolują te odwołania i w razie potrzeby - blokują je.
Większość oprogramowania umieszcza swoje obiekty w powszechnie znanych miejscach. Niektóre produkty w dalszym ciągu opierają swoje zabezpieczenia o obiekty w przestrzeni użytkownika, chociaż nie jest to dobre podejście - jest równie podatne na błędy co kernel hooking i nie zapewni ochrony przed złośliwym kodem.
Aplikacje komunikują się z jądrem systemu operacyjnego za pomocą funkcji dostarczanych przez różne dynamiczne biblioteki Windows API, takie jak kernel32.dll, user32.dll, advapi32.dll i ntdll.dll. Zmiana takich odwołań w strefie Windows API umożliwia zablokowanie kodu, który z nich korzysta. Niestety wszystkie biblioteki API Windows rezydują w przestrzeni adresowej procesu należącej do użytkownika (user mode), zatem kod aplikacji mógłby omijać te wywołania, co umożliwia obejście zabezpieczeń. Bezpośrednich odwołań do jądra systemu nie da się przechwycić ani im zapobiegać przez umieszczanie obiektów user mode hooks.
Chociaż stare błędy zostały usunięte, kolejne badania udowodniły ponad wszelką wątpliwość, że wiele systemów antywirusowych nadal jest podatnych na ataki. Wynika to także stąd, że poprawna implementacja systemu zabezpieczeń wykorzystującego obiekty jądra systemu jest trudna. Wymaga ona wiele pracy i kosztów, a producenci nie zawsze są zainteresowani ponoszeniem dodatkowych nakładów.
Antywirus zmienia jądro
Wielu producentów decyduje się na wprowadzenie modyfikacji w mechanizmie odwołań systemowych jądra. Zmiany wprowadza się albo w tablicy deskryptorów procesów systemowych (SSDT - System Service Descriptor Table), co często określa się jako SSDT hooking, albo poprzez wprowadzenie bezpośrednich modyfikacji do kodu jądra. Metoda ta umożliwia zablokowanie niepożądanych wywołań pochodzących z przestrzeni użytkownika, skutecznie chroniąc przed tradycyjnym atakiem.