Сетевой периметр пробивают, и рано или поздно злоумышленник оказывается на самом хосте. Задача этого урока - дать вам глаза и уши внутри системы, чтобы заметить чужое присутствие даже когда антивирус молчит. Мы разберём четыре дополняющих друг друга инструмента: AIDE следит за целостностью файлов, auditd пишет журнал системных вызовов уровня ядра, chkrootkit и rkhunter ищут известные руткиты, а OpenSCAP проверяет соответствие политикам. В конце поговорим о том, что делать, когда что-то из этого сработало.

Как это работает
AIDE (Advanced Intrusion Detection Environment) - это host-based контроль целостности. Он один раз снимает эталонный слепок файловой системы: для каждого отслеживаемого файла считает размер, права, владельца, inode, время изменения и криптографические хеши (по умолчанию sha256/sha512). Этот слепок складывается в базу. Потом при каждой проверке AIDE заново считает атрибуты и сравнивает с базой. Если бинарник /usr/bin/ssh вдруг сменил хеш, а штатных обновлений не было - это сигнал. Ключевая идея: база должна храниться вне досягаемости атакующего, иначе он подменит и файл, и слепок.
auditd работает иначе и глубже. Это демон пространства пользователя, который принимает события от audit-подсистемы ядра. Вы описываете правила: следить за изменением конкретного файла, за вызовом execve, за модификацией прав. Ядро при каждом таком событии генерирует запись с тем, кто (uid/auid), что и когда сделал. auid (loginuid) особенно ценен: он привязывает действие к исходному вошедшему пользователю, даже если тот сделал su в root. Это ваш несгораемый журнал для расследований.
chkrootkit и rkhunter - сигнатурные сканеры. Они ищут известные руткиты по характерным файлам, строкам в бинарниках, скрытым процессам и портам, аномалиям вроде promiscuous-режима сетевой карты. Это не панацея: новый или таргетированный руткит они не увидят. Их сила - быстро отловить массовое известное вредоносное ПО.
OpenSCAP - это движок для оценки соответствия (compliance). Он берёт машиночитаемую политику в формате SCAP (профили CIS, STIG, PCI-DSS), прогоняет сотни проверок конфигурации и выдаёт отчёт: что соответствует требованиям безопасности, а что нет. Это не поиск вторжения, а проверка, что хост вообще правильно укреплён.
Команды и примеры
Установка. Debian 13 / Ubuntu 24.04:
Код: Выделить всё
apt install aide auditd rkhunter chkrootkit openscap-scanner ssg-debderivedКод: Выделить всё
dnf install aide audit rkhunter openscap-scanner scap-security-guideAIDE - инициализация и проверка:
Код: Выделить всё
# Создать эталонную базу (долго, читает все файлы)
aide --init
# Debian кладёт новую базу как aide.db.new, её надо ввести в строй:
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# В RHEL имена с .gz: aide.db.new.gz -> aide.db.gz
# Проверка против базы
aide --check
# Обновить базу после ЛЕГИТИМНЫХ изменений (например после apt upgrade)
aide --updateauditd - правила и поиск. Правила кладут в /etc/audit/rules.d/*.rules, затем augenrules --load:
Код: Выделить всё
# Следить за изменением файла паролей, метка key=passwd
auditctl -w /etc/passwd -p wa -k passwd
# Следить за всеми execve от обычных пользователей (audit 64-bit)
auditctl -a always,exit -F arch=b64 -S execve -F auid>=1000 -F auid!=4294967295 -k userexecКод: Выделить всё
# Все события по нашей метке за сегодня
ausearch -k passwd -ts today -i
# Кто и какие команды выполнял
aureport -x --summary
# Сводка по неудачным аутентификациям
aureport -au --failedСканеры руткитов:
Код: Выделить всё
chkrootkit
rkhunter --update # обновить базы сигнатур
rkhunter --propupd # зафиксировать эталон свойств файлов (после установки/апдейта)
rkhunter --check --sk # проверка без пауз между секциямиКод: Выделить всё
# Список профилей в дистрибутиве
oscap info /usr/share/xml/scap/ssg/content/ssg-rhel10-ds.xml
# Прогон профиля CIS с HTML-отчётом
oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis \
--results-arf arf.xml --report report.html \
/usr/share/xml/scap/ssg/content/ssg-rhel10-ds.xmlЧастые грабли
- База AIDE на той же машине - бесполезна при компрометации. Выносите aide.db на read-only носитель или отдельный хост, проверку запускайте из доверенного окружения.
- Постоянный шум AIDE: /var, /proc, /sys, логи и кеши меняются всегда. Без аккуратных исключений и регулярного --update отчёт превращается в стену текста, которую перестают читать.
- auditd-правила в rules.d не применяются автоматически без augenrules --load или перезапуска; auditctl-правила живут только до перезагрузки.
- auditctl -e 2 делает конфигурацию неизменяемой до ребута. Удобно для защиты от сокрытия следов, но вы сами не сможете править правила на лету.
- rkhunter без свежего --propupd после каждого легитимного обновления засыпает вас ложными Warning про изменённые бинарники.
- OpenSCAP проверяет конфиг, а не наличие злоумышленника. Зелёный отчёт о соответствии не означает отсутствие вторжения.
- Запуск сканера руткитов уже на скомпрометированной системе ненадёжен: руткит может подменить ps, ls и сам сканер. По возможности проверяйте с загрузочного носителя.
- Установите aide и auditd на тестовый стенд (apt или dnf по вашему дистрибутиву).
- Выполните aide --init, введите базу в строй (mv new-базы) и сделайте контрольный aide --check - убедитесь, что изменений нет.
- Создайте файл /usr/local/bin/test.sh, добавьте строку в /etc/hosts, снова запустите aide --check и найдите оба изменения в отчёте.
- Добавьте правило auditctl -w /etc/hosts -p wa -k hostsmod, повторно отредактируйте /etc/hosts.
- Через ausearch -k hostsmod -i найдите запись и определите auid того, кто менял файл.
- Запустите rkhunter --check --sk и просмотрите итоговый блок Warnings.
- Прогоните oscap xccdf eval с профилем CIS, откройте report.html и выберите одну failed-проверку для устранения.
- Чем принципиально отличается контроль целостности через AIDE от аудита через auditd и почему их применяют вместе?
- Что такое auid (loginuid) в записи audit и почему он важнее обычного uid при расследовании?
- Какие шаги нужны, чтобы правило из /etc/audit/rules.d/ начало действовать, и чем оно отличается от правила, заданного auditctl?
- Почему базу AIDE и эталонные данные rkhunter нельзя считать доверенными после возможной компрометации хоста?
- В чём разница между задачей OpenSCAP и задачей сканеров руткитов, и почему успешный compliance-отчёт не гарантирует отсутствие вторжения?
- Как корректно обновить эталоны AIDE и rkhunter после планового обновления пакетов, чтобы избежать ложных срабатываний?