Nowa technika rootkitowa dla GNU/Linuksa
Linuksowy ekspert Anthony Lineberry zamierza niebawem opublikować własną bibliotekę libmemrk. Wspomniał o tym podczas odczytu "Alice in User-Land: Hijacking the Linux Kernel via /dev/mem", który wygłosił na odbywającej się właśnie w Amsterdamie konferencji bezpieczeństwa Black Hat. Libmemrk ma działać w środowiskach 32- i 64-bitowych.
Narzędzie libmemrk otworzy twórcom rootkitów nowe możliwości ukrywania plików i procesów, a także wpływania na ruch sieciowy. Sztuczka polega na wykorzystaniu urządzeniowego sterownika /dev/mem do zapisania w pamięci roboczej dowolnego kodu z poziomu użytkownika bez konieczności posiadania szerszych uprawnień. Interfejs /dev/mem pozwala na korzystanie z pamięci adresowanej fizycznie, a używają go między innymi serwer X i program DOSEmu. Poza tym przemyt rootkitów za pośrednictwem /dev/mem jest podobno trudniejszy do wykrycia niż w przypadku klasycznej metody z wykorzystaniem modułów jądra (Loadable Kernel Modules, LKM).
Zaprezentowana biblioteka ma też uwolnić autorów rootkitów od żmudnych czynności związanych z konwersją wirtualnych adresów pamięci na fizyczne oraz z wyszukiwaniem sektorów podatnych na ataki. Dopiero po znalezieniu odpowiednich – z reguły używanych przez jądro – obszarów pamięci napastnik może przystąpić do nadpisywania istniejących komórek systemu, zastępując je własnym kodem. Właściwa zawartość, a więc ta zapisywana przez kernel, zostaje wówczas umieszczona w specjalnym buforze.
Zagrożenie
Poszczególne kroki umożliwiające przeprowadzenie udanego ataku oraz czynności spoczywające na narzędziu libmemrk zostały opisane przez Lineberry'ego w dokumencie "Malicious Code Injection via /dev/mem"
. Ekspert zaznacza jednak, że taki atak nie powiedzie się w środowiskach wirtualnych, ponieważ hiperwizor zachowuje się inaczej niż niezwirtualizowany sprzęt. Lineberry zastrzega też, że libmemrk nie zwalnia programisty od konieczności ręcznego przygotowania całości ataku w Assemblerze. W przyszłości planowana jest możliwość wykorzystania w tym celu narzędzia libcc, aby przynajmniej zminimalizować to ograniczenie.
Ochrona
Równocześnie specjalista podał kilka wskazówek pozwalających użytkownikom GNU/Linuksa uchronić się przed tego typu rootkitami. Jego zdaniem wystarczy odpowiednia modyfikacja sterownika pamięci – chodzi o to, aby uniemożliwiał on wskaźnikowi zapisu/odczytu lseek przeszukiwanie sektorów o pojemności przekraczającej 16 kilobajtów. Pod tym względem bezpieczne fabrycznie są aktualne wersje Red Hata i Fedory, których jądro zawiera już modyfikacje wchodzące w skład pakietu SELinux.
Według Lineberry'ego odpowiednie poprawki wprowadzono już także do wersji 2.6.26 głównej linii rozwojowej kernela. Chodzi o dwie nowe funkcje: range_is_allowed() i devmem_is_allowed(). Niemniej jednak ochrona ta nie zadziała, jeśli równocześnie nie jest ustawiona flaga STRICT_DEVMEM; w takiej sytuacji devmem_is_allowed() zawsze zwraca pozytywny wynik.
Ekspert przypomina, że po skompilowaniu jądra funkcja STRICT_DEVMEM jest domyślnie wyłączona. Lineberry nie zdradził, kiedy będzie można pobrać bibliotekę libmemrk. Poinformował tylko, że jest obecnie w trakcie usuwania ostatnich niedociągnięć.
Rodowód
Warto tu zaznaczyć, że technika z wykorzystaniem interfejsu /dev/mem nie jest nowa. W 2001 roku magazyn "Phrack" opublikował artykuł zatytułowany "Linux on-the-fly kernel patching without LKM", w którym opisano podobną metodę z /dev/kmem/. Już wtedy autorzy publikacji zastanawiali się nad wykorzystaniem pliku specjalnego pozwalającego na dostęp do pamięci, zrezygnowali jednak z odpowiednich testów.
(pwi)

















