24 czerwiec 2010
Wydrukuj tę stronę

Sprawdzanie serwera na obecność rootkitów

Kategorie:  Server  Gentoo  Linux

Jak skonfigurować serwer Linuksowy do regularnego sprawdzania obecności rootkitów w systemie

Wszyscy wiedzą, że Linux nie jest przyjaznym środowiskiem dla złośliwego oprogramowania. Nie oznacza to jednak, że zainfekowanie systemu złośliwym kodem jest absolutnie niemożliwe. Typowe dla Windows wirusy nie są prawdziwym zagrożeniem dla Linuksa ale każdy administrator Linuksa wie, że istnieje ograniczona ilość tak zwanych rootkitów, które są stworzone dla systemów klasy Posix. Posiadanie ich w systemie to poważna dziura w zabezpieczeniach. Tak długo jak korzystamy ze zweryfikowanych repozytoriów oprogramowania jest mało prawdopodobne aby tego typu kod stał się częścią jakiegoś programu w naszym systemie. Niemniej zawsze dobrze jest sprawdzić wszystko dwa razy, nawet jeśli ryzyko zainfekowania systemu jest bliskie zeru. Postaram się wyjaśnić w jaki sposób sprawdzam obecność tego typu oprogramowania w moich systemach. Zaprezentowane poniżej informacje dotyczą dystrybucji Gentoo Linux ale większość z nich (z wyjątkiem instrukcji instalacji) powinny dać się zastosować w dowolnej dystrybucji Linuksa lub nawet w dowolnym systemie klasy Posix (włączając w to MacOsX).

Aby mieć pewność, że nie posiadam w systemie żadnych rootkitów wykorzystuję pakiet chkrootkit. Możesz pobrać kod źródłowy programu ze strony projektu i skompilować go ręcznie ale najprawdopodobniej znajdziesz ten program w repozytorium pakietów każdej popularnej dystrybucji Linuska. W Gentoo Linuksie zainstalowali byśmy ten pakiet odmaskowując ostatnią jego wersję:

echo "app-forensics/chkrootkit" >> /etc/portage/package.keywords
 

i wykonując komendę emerge w celu jego instalacji:

emerge -av app-forensics/chkrootkit

Następnie możemy sprawdzić system ręcznie wykonując:

/usr/sbin/chkrootkit

Oczywiście dobrze byłoby żeby nasz system mógł być sprawdzany od czasu do czasu. W Gentoo Linuksie po instalacji chkrootkit mamy już zdefiniowane zadanie crona w katalogu /etc/cront.weekly/chkrootkit. Tutaj możesz zobaczyć to zadanie:

  1. #!/bin/sh
  2. #
  3. # uncomment this to make it work
  4. #
  5.  
  6. #exec /usr/sbin/chkrootkit -q

Aby sprawić, że sprawdzenie będzie przeprowadzane raz w tygodniu wystarczy odkomentować ostatnią linię. Jak widzisz to zadanie crona jest stosunkowo mało skomplikowane uruchamia chkrootkit w trybie cichym. Nie jest to o co mnie chodzi. Chciałbym być informowany przez mój serwer za każdym razem gdy sprawdzenie serwera jest wykonywane, chciałbym także móc przejrzeć pełne rezultaty sprawdzenia. Właśnie dla tego napisałem mój własny skrypt crona, który zrobi dla mnie to czego oczekuje. Mój skrypt sprawdza system wykorzystując chkrootkit i zapisuje wyniki skanowania do pliku tekstowego. Na samym końcu wysyła rezultaty skanowania jako załącznik do maila. W ten sposób mogę przeanalizować wynik sprawdzenia i co najważniejsze mam pewność, że sprawdzenie systemu zostało wykonane. Jedyny problem jaki miałem z tym skryptem to dołączenie rezultatów skanowaia do maila. Prosta komenda Uniksowa mail nie jest zbyt przyjazna właśnie dla tego użyłem bardzo sympatycznego i prostego w użyciu konsolowego klienta poczty o nazwie mutt. Zanim wykonam skrypt muszę zainstalować mutt w moim systemie. W Gentoo zrobiłem to w ten sposób:

emerge -av mail-client/mutt

Teraz możemy spojrzeć na skrypt, który nazwałem chkrootkit_cron.sh:

Wyświetl źródło skryptu
  1. SERVERNAME=$(hostname)
  2. DATE=$(date +"%d.%m.%Y")
  3. EMAIL=my_administrator@email.org
  4. FILENAME="/var/tmp/fulltest-${DATE}.txt"
  5.  
  6. /usr/sbin/chkrootkit 2>&1 > ${FILENAME}
  7.  
  8. if (cat ${FILENAME} | grep -q "INFECTED\|Vulnerable") then
  9. echo "There seems to be a problem!!!!" > /var/tmp/msgfile-${DATE}
  10. echo "-------------------------------------------------" >> /var/tmp/msgfile-${DATE}
  11. cat ${FILENAME} | grep "INFECTED\|Vulnerable" >> /var/tmp/msgfile-${DATE}
  12. echo "-------------------------------------------------" >> /var/tmp/msgfile-${DATE}
  13. echo "You can see whole test results in attachment file" >> /var/tmp/msgfile-${DATE}
  14. else
  15. echo "Your system is not infected" > /var/tmp/msgfile-${DATE}
  16. echo "You can see whole test results in attachment file" >> /var/tmp/msgfile-${DATE}
  17. fi
  18.  
  19. /usr/bin/mutt -s "${DATE} Weekly chkrootkit from ${SERVERNAME}" ${EMAIL} -a ${FILENAME} < /var/tmp/msgfile-${DATE}

Jak widzisz ten skrypt próbuje zgadnąć jaki jest rezultat skanowania wykorzystując komendę grep i wysyła mi maila z ostrzeżeniem lub po prostu informacją zależnie od wyniku skanowania.

Ostatnią rzeczą jaką muszę zrobić to umieścić ten plik w katalogu /etc/cron.weekly i sprawić aby plik miał atrybut wykonywalności w ten sposób:

chmod +x /etc/cron.weekly/chkrootkit_cron.sh

Opcjonalnie możesz stworzyć plik task.cron. Podobny do tego:

30     4      *      *       1-7/2       /usr/local/bin/chkrootkit_cron.sh

i dodać go do crontaba wykonując następującą komendę:

crontab task.cron

W ten sposób twoje sprawdzenie będzie wykonywane co drugi dzień tygodnia o 4.30 rano. Możesz dostosować te ustawienia wedle swojego uznania. Niektóre implementacje cron mogą wymagać dodatkowo wykonania komendy:

crontab /etc/crontab

Ja nie muszę wykonywać tej komendy jako, że używam na moich serwerach vixe-cron.

Mój skrypt jest także dostępny na moim serwerze svn, możesz do niego uzyskać dostęp podążając za tym linkiem.

Źródła:




Komentarze

Jeśli znalazłeś jakieś błędy w powyższej informacji lub po prostu chcesz wypowiedzieć swoje zdanie na jej temat, będę wdzięczny za pozostawienie komentarza.
Wszystkie komentarze będą pokazywać się na stronie po tym jak zostaną zatwierdzone. Przepraszam za to ale chcę mieć pewność, że moja strona będzie wolna od obraźliwych lub wulgarnych treści. Nie mam nic przeciwko krytyce ale zrób to właściwie dobierając słowa.

Pozostaw komentarz