Rootkit detection techniques used by the OSSEC HIDS
by Daniel B. Cid, daniel.cid@gmail.com

Zaczynając od wersji 0.4, OSSEC HIDS dokonuje wykrywania rootkitów na
każdym systemnie na którym jest zainstalowany agent. Mechanizm
wykrywania rootkitów (rootcheck) jest wykonywany co X minut
(wyspecyfikowane przez użytkownika - domyśnie co dwie godziny) w celu
wykrycia zinstalowanych rootkitów. Używany razem z analizatorem logów
oraz mechanizmem sprawdzania integralności, staje się bardzo wydajnym
systemem monitorowania (OSSEC HIDS dokonuje analizy logów i sprawdzania
integralności od wersji 0.1).

Inną właściwością dołączoną do wersji 0.4 jest automatyczne rozsyłanie
sygnatur wykrywania rootkitów do wszystkich agentów przez serwer.
Redukuje to ilość obowiązków administratora. Serwer z agentami utrzymuje
kontakt co 10 minut. Dodatkowo jeśli serwer zostanie zaktualizowany
nowymi sygnaturami, przekazuje je wszystkim skonfigurowanym agentom.
Aby uzyskać więcej informacji zajżyj do dokumentacji zarządzania.


Kroki wykonywane przez rootcheck w celu wykrycia rootkitów:

1- Czyta plik rootkit_files.txt, który zawiera sporą baze danych o
   rootkitach i używanych przez nie plików. Próbuje wykonać: stats,
   fopen i opendir na każdym z takich plików. Używa wszystkich tych
   wywołań systemowych, ponieważ istnieją rootkity pracujące na poziomie
   jądra, które ukrywają pliki przed niektórymi wywołaniami. Im więcej
   użyjemy wywołań, tym lepsza będzie detekcja. Metoda jest podobna do
   reguły anty-virusa, potrzebuje nieustanntgo uaktualniania. Szanse
   detekcji rootkita którego nie ma (false-positive) są małe, za to już
   szanse nie wykrycie rootkita (false-negative) rosną wraz z
   modyfikacjami rootkitów.

2- Czyta plik rootkit_trojans.txt który zawiera baze danych sygnatur
   plików modyfikowanych na trojany przez rootkity. Technika modyfikacji
   binariów na wersje z trojanami jest powszechnie używana przez
   większość dostępnych rootkitów. Nastepująca metoda nie wykrywa
   rootkitów poziomu jądra ani żadnych jeszcze nie znanych.

3- Skanuje katalog /dev wyszukując anomali. /dev powinien tylko zawierać
   pliki urządzeń oraz skrypt Makedev. Duża część rootkitów używa
   katalogu /dev w celu ukrycia plików. Ta metoda może wykryć nieznane
   dotąd rootkity.

4- Skanuje cały system plików szukając niespotykanych plików oraz
   tych z podejrzanymi uprawnieiami. Pliki użytkownika root z
   możliwością zapisu dla innych są bardzo niebezpieczne, dlatego
   rootkit wyszukuje takie. Pliki z ustawionym suid oraz ukryte katalogi
   również są sprawdane.

5- Szuja ukrytych procesów. Używa getsid() oraz kill() do sprawdzenia
   czy dany pid jest używany. Jeśli dany pid jest używany, a "ps" nie
   widzi go, wskazuje to na obecność rootkita poziomu jądra lub
   zmodyfikowaną wersję "ps". Weryfikuje także wyniki kill i getsid,
   które powinny być identyczne.

6- Wyszukuje ukrytych portów. Używa bind() do sprawdzenia każdego portu
   tcp i udp w systemie. Jeśli nie możemy wykonać bind na danym porcie
   (czyli jest używany), a "netstat" go nie pokazuje, to prawdopodobnie
   mamy zainstalowanego rootkita.

7- Skanuje wszystkie interfejsy w systemnie i wyszukuje te z włączonym
   trybem "promisc". Jeśli interfejs jest w trybie "promisc", "ifconfig"
   tego powinien pokazać to, jeśli nie prawdopodobnie mamy
   zainstalowanego rootkita.

EOF
