Контролът на целостта има неприятно свойство: изисква еталон, снет от система, която със сигурност е била чиста. Ако сървърът работи трета година, а въпросът за пробив е възникнал едва днес, за еталон е късно — ще запишем като норма това, което е.
В Debian и Ubuntu обаче еталон вече съществува и той не е наш: всеки инсталиран пакет носи контролните суми на своите файлове. Сравнението не изисква нито конфигурация, нито предишна моментна снимка и работи на всяка система по всяко време. Инструментът се нарича debsums.
Използване
sudo apt install debsums
sudo debsums -c
Ключът -c извежда само файловете, които не съвпадат с еталона. Без него изходът е отчет ред по ред за всеки файл в системата — десетки хиляди редове.
Проверката трае няколко минути и натоварва диска, затова на работещ сървър си струва да се стартира с понижен приоритет:
sudo ionice -c3 nice -n19 debsums -c
Как се чете резултатът
Празен изход означава, че всички проверени файлове съответстват на това, което е инсталирала дистрибуцията. Непразният изисква разбор, а находките се делят на два много различни класа.
Конфигурационни файлове в /etc. Промяната им е нормална работа: поправяли сме sshd_config, настройвали сме nginx, добавяли сме параметри на ядрото. Такива разминавания са очаквани. За да не пречат, има отделен режим:
sudo debsums -e -c
-e проверява изключително конфигурационните файлове — понякога полезно, ако искате да видите списък на всичко, което е променяно на машината.
Изпълними файлове и библиотеки. Разминаване в /usr/bin, /usr/sbin, /bin или /usr/lib е точно това, заради което е стартирана проверката. Оправдани причини има, но са малко: файлът е променян ръчно при отстраняване на проблем, наложена е чужда кръпка, пакетът се е обновявал по време на проверката. Ако никоя не подхожда, въпросът трябва да се вземе насериозно.
Класическите цели за подмяна са ls, ps, netstat, ss, find, sshd. Подменена версия скрива в изхода си нужните редове и всичките ни по-нататъшни проверки престават да казват истината.
Покритието е непълно — и това трябва да се знае
Ограничение, за което обикновено не се пише: не всички пакети доставят контролни суми. Файловете на такива пакети изобщо не се проверяват и няма да се появят в отчета при никакви обстоятелства. Списъкът се вижда така:
sudo debsums -l
Чист отчет на debsums следователно означава „в проверената част всичко е наред“, а не „системата не е променяна“. Същото важи за всичко, инсталирано извън пакетния мениджър: компилирано от изходен код, изтеглено като двоичен файл, поставено със скрипт от сайта на разработчика — това debsums по определение не следи, и точно там е нужен AIDE.
Редовно стартиране
В пакета има готова задача, включва се в /etc/default/debsums:
CRON_CHECK=weekly
Веднъж седмично е разумна честота: проверката осезаемо натоварва диска, а системните файлове между обновяванията се променят рядко. Ежедневното стартиране не носи нищо освен натоварване.
Ако файл наистина е подменен
Първият рефлекс е пакетът да се преинсталира и оригиналът да се възстанови:
sudo apt install --reinstall coreutils
Командата е правилна, но не като първо действие. Подменен системен файл означава, че някой е имал root, а възстановяването на файла не решава този проблем — само унищожава следите. Редът трябва да е обратен: първо запазете копие на подозрителния файл и времето на промяната му, разберете какво още се е променило през същия период, прегледайте cron задачите, SSH ключовете и списъка с потребители. Възстановявайте едва след това.
Струва си да се помни и границата на метода: ако системата е дълбоко компрометирана, може да са подменени и самият debsums, и библиотеките, които използва. Проверка отвътре не дава абсолютна гаранция — за това системата се стартира от външен носител. За ежедневната работа обаче стига: преобладаващата част от атаките са автоматизирани и не се отличават с такава изтънченост.
Място в общата картина
debsums е добър с това, че не изисква нищо и работи веднага — затова е удобно с него да се започва на сървър, чиято история не познавате. Слабостта му е непълното покритие и незнанието за всичко, което стои извън пакетите. Двойката „debsums плюс AIDE“ закрива и двете страни: готовият еталон на дистрибуцията за системните файлове и собствена моментна снимка за останалото.
Както обикновено, работата не е в стартирането, а в това последният резултат с дата да е пред очите. Как изглежда това, показва демонстрацията по-долу.