Antywirus może być zagrożeniem

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.

Antywirus może być zagrożeniem

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.

Modyfikacja Windows API nie ochroni systemu

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.

Przechwycenie odwołań w jądrze systemu (kernel hook) zawsze niesie ze sobą pewną dozę ryzyka. Oprogramowanie antywirusowe jest skomplikowane i często zawiera błędy, które można wykorzystać do ataku. David Matoušek, badacz obecnie związany z Different Internet Experience Ltd, już w 2007 r. opublikował raport na temat problemów z bezpieczeństwem systemów, w których umieszczono błędne implementacje kernel mode hook. Badania dowiodły, że większość dostawców oprogramowania antywirusowego implementuje takie struktury źle. Niektóre z tych błędów umożliwiały przejęcie kontroli nad systemem przy bardzo ograniczonych uprawnieniach (na poziomie gościa). Pośród podatnych systemów były między innymi: Kaspersky Internet Security, Norton Internet Security, Symantec Client Firewall, G-Data InternetSecurity, Avast, Panda Internet Security, TrendMicro Internet Security czy ZoneAlarm Pro. W tym ostatnim produkcie błąd w obsłudze NtCreatePort został usunięty, by później pojawić się ponownie.

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.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200