Kontrola integralności ma nieprzyjemną właściwość: wymaga wzorca zdjętego z systemu na pewno czystego. Jeśli serwer pracuje trzeci rok, a pytanie o włamanie pojawiło się dopiero dziś, na wzorzec jest już za późno — zapiszemy jako normę to, co jest.
W Debianie i Ubuntu wzorzec jednak już istnieje i nie jest nasz: każdy zainstalowany pakiet niesie sumy kontrolne swoich plików. Porównanie nie wymaga ani konfiguracji, ani wcześniejszej migawki i działa na dowolnym systemie w dowolnej chwili. Narzędzie nazywa się debsums.
Użycie
sudo apt install debsums
sudo debsums -c
Przełącznik -c wypisuje tylko pliki, które nie zgadzają się ze wzorcem. Bez niego wynik to raport wiersz po wierszu o każdym pliku w systemie — dziesiątki tysięcy wierszy.
Sprawdzenie trwa kilka minut i obciąża dysk, więc na serwerze produkcyjnym warto uruchamiać je z obniżonym priorytetem:
sudo ionice -c3 nice -n19 debsums -c
Jak czytać wynik
Pusty wynik oznacza, że wszystkie sprawdzone pliki zgadzają się z tym, co zainstalowała dystrybucja. Niepusty wymaga analizy, a znaleziska dzielą się na dwie bardzo różne klasy.
Pliki konfiguracyjne w /etc. Ich zmiana to normalna praca: poprawialiśmy sshd_config, konfigurowaliśmy nginksa, dodawaliśmy parametry jądra. Takie rozbieżności są spodziewane. Żeby nie przeszkadzały, jest osobny tryb:
sudo debsums -e -c
-e sprawdza wyłącznie pliki konfiguracyjne — czasem przydatne, by zobaczyć listę wszystkiego, co na tej maszynie zmieniano.
Pliki wykonywalne i biblioteki. Rozbieżność w /usr/bin, /usr/sbin, /bin albo /usr/lib to dokładnie to, po co uruchamiano sprawdzenie. Uzasadnione przyczyny istnieją, ale jest ich niewiele: plik zmieniano ręcznie przy debugowaniu, nałożono obcą łatkę, pakiet aktualizował się w trakcie sprawdzania. Jeśli żadna nie pasuje, trzeba zająć się sprawą na poważnie.
Klasyczne cele podmiany to ls, ps, netstat, ss, find, sshd. Podmieniona wersja ukrywa w swoim wyniku potrzebne wiersze, a wszystkie nasze dalsze sprawdzenia przestają mówić prawdę.
Pokrycie jest niepełne — i trzeba o tym wiedzieć
Ograniczenie, o którym zwykle się nie pisze: nie wszystkie pakiety dostarczają sumy kontrolne. Pliki takich pakietów nie są sprawdzane w ogóle i w raporcie nie pojawią się w żadnych okolicznościach. Listę można zobaczyć tak:
sudo debsums -l
Czysty raport debsums oznacza więc „w sprawdzonej części wszystko w porządku”, a nie „system nie był zmieniany”. To samo dotyczy wszystkiego, co zainstalowano poza menedżerem pakietów: skompilowanego ze źródeł, pobranego jako plik binarny, postawionego skryptem ze strony twórcy — tego debsums z definicji nie pilnuje, i właśnie tam potrzebny jest AIDE.
Regularne uruchamianie
W pakiecie jest gotowe zadanie, włączane w /etc/default/debsums:
CRON_CHECK=weekly
Raz w tygodniu to rozsądna częstotliwość: sprawdzenie zauważalnie obciąża dysk, a pliki systemowe między aktualizacjami zmieniają się rzadko. Codzienne uruchamianie nie wnosi nic poza obciążeniem.
Jeśli plik naprawdę podmieniono
Pierwszy odruch to przeinstalować pakiet i przywrócić oryginał:
sudo apt install --reinstall coreutils
Polecenie jest właściwe, ale nie jako pierwsze działanie. Podmieniony plik systemowy oznacza, że ktoś miał roota, a przywrócenie pliku tego problemu nie rozwiązuje — niszczy tylko ślady. Kolejność musi być odwrotna: najpierw zachować kopię podejrzanego pliku i jego czas modyfikacji, sprawdzić, co jeszcze zmieniło się w tym samym okresie, przejrzeć zadania crona, klucze SSH i listę użytkowników. Przywracać dopiero potem.
Warto też pamiętać o ograniczeniu metody: jeśli system jest głęboko skompromitowany, sam debsums i biblioteki, z których korzysta, też mogą być podmienione. Sprawdzenie od wewnątrz nie daje absolutnej gwarancji — do tego uruchamia się system z nośnika zewnętrznego. Do codziennej pracy jednak wystarcza: przytłaczająca większość ataków jest zautomatyzowana i nie odznacza się taką wyrafinowaniem.
Miejsce w całości obrazu
debsums jest dobry tym, że niczego nie wymaga i działa od razu — dlatego wygodnie zaczynać od niego na serwerze, którego historii nie znamy. Jego słabość to niepełne pokrycie i brak wiedzy o wszystkim, co stoi poza pakietami. Para „debsums plus AIDE” zamyka obie strony: gotowy wzorzec dystrybucji dla plików systemowych i własna migawka dla reszty.
Jak zwykle rzecz nie w uruchomieniu, lecz w tym, żeby ostatni wynik z datą był na widoku. Jak to wygląda, pokazuje demonstracja poniżej.