Контроль целостности отвечает на вопрос, на который не отвечает ни антивирус, ни фаервол: что на этом сервере изменилось с прошлой недели. Сигнатурный сканер ищет знакомое вредоносное; AIDE не знает ничего про вредоносность, он знает, что вчера этот файл был другим. Для обнаружения бэкдора, дописанного в существующий файл, это единственный работающий подход.
Ставится AIDE в две команды, а вот настраивается так, чтобы его отчёты читали, — уже сложнее. Именно на этом он обычно и умирает: первый отчёт приходит на десять тысяч строк, второй никто не открывает, через месяц задание удаляют.
Установка и первая база
sudo apt install aide aide-common
sudo aideinit
Инициализация занимает от нескольких минут до получаса — считаются хеши всех файлов. Результат кладётся рядом с рабочей базой под именем с суффиксом .new, и его надо ввести в действие:
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Дальше проверка выполняется командой:
sudo aide --check
Что исключить, чтобы отчёт был читаемым
Настройки лежат в /etc/aide/aide.conf и в каталоге /etc/aide/aide.conf.d/. Конфигурация Debian из коробки проверяет слишком много, и первое, что стоит сделать, — убрать то, что меняется само по себе постоянно:
/var/log— меняется каждую секунду;/var/libцеликом — базы данных, состояние пакетов, кэши служб;/var/cache,/tmp,/proc,/sys,/run;- каталоги загрузок и кэша сайта — их содержимое меняют посетители.
А проверять с максимальной строгостью имеет смысл узкий список:
/bin,/sbin,/usr/bin,/usr/sbin— исполняемые файлы системы;/lib,/usr/lib— библиотеки;/etc— конфигурация;/root/.sshи домашние каталоги.ssh;- код сайта, но без каталогов загрузок и кэша.
Ориентир такой: обычный ежедневный отчёт должен помещаться на экран. Если он длиннее, исключений недостаточно, и читать его перестанут.
Где держать базу
Существенный момент, который часто упускают. Если у чужого есть root, ему ничего не стоит подменить файл и тут же обновить базу AIDE — проверка после этого будет показывать, что всё в порядке. База, лежащая на той же машине с правом записи, защищает только от случайностей.
Разумный минимум для одного сервера:
- копировать базу после каждого обновления на другую машину, а проверку запускать, подкладывая эту копию;
- или хотя бы хранить контрольную сумму базы отдельно и сверять её перед проверкой:
sha256sum /var/lib/aide/aide.db
Даже такая простая мера превращает молчаливую подмену в заметное событие.
Обновление базы — осознанное действие
После легальных изменений (обновили систему, выложили новую версию сайта) база пересоздаётся:
sudo aide --update
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
Важно, в какой момент это делается. Правильно: посмотреть отчёт, убедиться, что каждое изменение объяснимо, и только потом обновлять. Неправильно и очень распространённо: запускать aide --update по расписанию, чтобы отчёты были чистыми. Во втором случае система работает, отчёты приходят, а изменения фиксируются как норма ровно в тот момент, когда происходят, — то есть смысл теряется полностью.
Расписание и нагрузка
Пакет aide-common ставит ежедневное задание сам. Проверка нагружает диск и процессор на несколько минут, поэтому её стоит запускать в тихое время и с пониженным приоритетом:
0 4 * * * ionice -c3 nice -n19 /usr/bin/aide --check
Как читать отчёт
Три раздела: добавленные, удалённые и изменённые файлы. По каждому изменению показывается, что именно поменялось: содержимое, права, владелец, время.
На что реагировать в первую очередь:
- изменение любого файла в
/bin,/sbin,/usr/binвне окна обновления системы; - новые файлы в системных каталогах;
- изменения в
authorized_keys,/etc/passwd,/etc/sudoers,/etc/crontabи/etc/cron.d; - появившийся файл
/etc/ld.so.preload— самостоятельно он не появляется никогда.
Сотня изменённых файлов сразу после apt upgrade — норма, и время отчёта это подтверждает. Три изменённых файла в /usr/bin в среду, когда обновлений не было, — повод остановиться и разобраться.
AIDE и debsums
Инструменты решают близкие задачи, но эталон у них разный. AIDE сравнивает с вашим собственным снимком — то есть видит изменения в любых файлах, включая код сайта. debsums сравнивает с контрольными суммами из пакетов дистрибутива — то есть видит подмену системных файлов без всякой предварительной настройки, но ничего не знает про то, что вы установили не из пакетов. Разумно держать оба; на практике первым обычно ставят debsums, потому что он не требует ни настройки, ни базы.
Общая слабость у них тоже одна: отчёт приходит письмом, письмо теряется. Поэтому смысл имеет не сам факт запуска проверки, а место, где виден результат последней. Как это выглядит — на странице демо ниже.