Контроль целостности отвечает на вопрос, на который не отвечает ни антивирус, ни фаервол: что на этом сервере изменилось с прошлой недели. Сигнатурный сканер ищет знакомое вредоносное; 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, потому что он не требует ни настройки, ни базы.

Общая слабость у них тоже одна: отчёт приходит письмом, письмо теряется. Поэтому смысл имеет не сам факт запуска проверки, а место, где виден результат последней. Как это выглядит — на странице демо ниже.