Контроль целостности Системы

Контроль целостности с помощью AIDE

Общие принципы работы AIDE

AIDE – программа контроля целостности Системы – используется для защиты от вредоносных программ, вирусов и обнаружения несанкционированных действий. AIDE создает базу данных с информацией о файлах и каталогах (контрольная сумма, время изменения) и периодически сравнивает их текущее состояние с этой базой.

Это позволяет выявить нарушения целостности Системы и принять меры для восстановления измененных файлов из резервной копии или с образа восстановления Системы. AIDE помогает сократить время расследования инцидентов, сосредоточившись на файлах, которые были изменены.

Дополнительные возможности AIDE:

  • поддержка различных атрибутов файлов, в том числе: тип файла, inode, uid, gid, разрешения, количество ссылок, mtime, ctime и atime;
  • поддержка сжатия Gzip, SELinux, XAttrs, Posix ACL и атрибутов файловой системы;
  • поддержка различных алгоритмов, включая md5, sha1, sha256, sha512, rmd160, crc32 и т. д.;
  • отправка уведомлений по электронной почте.

Установка и создание базы данных

Пользователю необходимо установить пакеты AIDE из репозиториев в Систему с помощью команды:

sudo dnf install aide

Далее необходимо создать базу данных AIDE, которая будет хранить контрольные суммы, права доступа и другие атрибуты файлов и директорий. Сравнивая текущие данные с ранее созданной базой, администратор может легко обнаружить любые отклонения, что позволяет оперативно реагировать на подозрительные изменения.

База данных в AIDE создается с помощью команды:

sudo aideinit

В ходе создания БД будет запрошен пароль от GPG-ключа, которым будет подписываться база AIDE для контроля ее целостности. Затем будет выполнено первичное заполнение базы /var/lib/aide/aide.db, т.е. зафиксировано заведомо корректное состояние Системы. Проверка целостности ОС и обновление базы данных.

Также необходимо своевременно проводить обновление базы данных AIDE после внесения легитимных изменений в Систему (например, при установке обновлений), чтобы актуализировать её состояние. Для этого выполните команду:

sudo aide --update

Затем замените старую базу на новую:

mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

Настройка конфигурационного файла

Для проведения более корректных проверок AIDE необходимо правильно настроить его конфигурационный файл, который находится по пути /etc/aide.conf. Этот файл определяет, какие файлы и каталоги будут проверяться, какие атрибуты файлов отслеживаются, а также исключения из проверки. Вот основные шаги по настройке конфигурации AIDE:

Чтобы изменить настройки AIDE, нужно открыть конфигурационный файл в текстовом редакторе:

sudo nano /etc/aide.conf

Далее задать необходимые атрибуты для проверки в тексте файла.

Для проверки всех атрибутов файла можно использовать следующую запись:

/etc p+i+n+u+g+s+m+c+md5

Для мониторинга только изменения прав доступа и содержания файлов:

/var/log p+c+md5

Проверка только атрибутов и прав доступа:

NORMAL = p+i+n+u+g+s+m+S+sha256

Проверка всех атрибутов, включая контрольные суммы:

EXTENDED = p+i+n+u+g+s+m+S+sha256+md5+rmd160

где параметры:

  • p – права доступа;
  • i – inode номер;
  • n – количество ссылок;
  • u – идентификатор пользователя (UID);
  • g – идентификатор группы (GID);
  • s – размер файла;
  • m – время последней модификации;
  • S – время последнего изменения статуса файла;
  • sha256, md5 – контрольные суммы файлов.

В отдельном разделе конфигурации также указываются файлы и каталоги, которые будут отслеживаться на предмет изменений. Пример конфигурации:

Проверка корневой файловой системы с полными атрибутами, определёнными в строчке NORMAL:

/    NORMAL

Проверка каталога /etc с расширенными атрибутами, определенными в строчке EXTENDED:

/etc EXTENDED

Чтобы избежать проверки определённых системных файлов или временных данных, вы можете добавлять исключения с помощью символа "!" перед каталогом или файлом.

!/tmp
!/var/tmp

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

sudo aideinit

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

database=file:/var/lib/aide/aide.db
database_out=file:/var/lib/aide/aide.db.new
NORMAL = p+i+n+u+g+s+m+S+sha256
/etc    EXTENDED
/bin    NORMAL
/sbin   NORMAL
!/proc
!/sys
!/var/tmp
!/var/cache

Этот пример включает основные правила для мониторинга критически важных директорий Системы и исключает временные и кешированные файлы.

Проверка целостности

После создания базы данных и настройки конфигурации можно запустить проверку целостности Системы. Это делается командой:

aide --check

Команда сравнит текущее состояние файлов с данными, сохраненными в базе. Результаты проверки будут выведены в терминал, где можно увидеть, какие файлы были изменены, добавлены или удалены.

Для запуска проверки немедленно можно воспользоваться командой:

sudo systemctl restart aidecheck.service

Результаты проверок также записываются в системный журнал, который можно открыть и просмотреть по команде:

sudo journalctl -u aidecheck.service

При необходимости фиксации корректных изменений конфигурации ОС нужно использовать следующую команду, при этом будет запрошен пароль доступа к ключу GPG:

sudo aideupdate

Чтобы посмотреть статус последней проверки, нужно выполнить команду:

systemctl status aidecheck.service

Автоматизация проверки

Для удобства администрирования Системы проверку целостности ОС можно автоматизировать с помощью использования таймера systemd. Подробная настройка файлов с расширением .timer рассмотрена в разделе 0.

Для настройки таймера через systemd выполняются следующие шаги для настройки задания:

  • Создание Unit-файла для автоматизации проверки AIDE, где будет указано, как именно systemd должен запускать проверку. Необходимо создать файл /etc/systemd/system/aide-check.service со следующим содержанием:
[Unit]
Description=AIDE integrity check
Documentation=man:aide(1)
[Service]
Type=oneshot
ExecStart=/usr/sbin/aide --check
  • Далее создать таймер-файл, который будет запускать проверку по расписанию. Например, проверка может выполняться ежедневно. Создайте файл /etc/systemd/system/aide-check.timer со следующим содержанием:
[Unit]
Description=Daily AIDE integrity check
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

Таймер можно настроить на любое другое расписание, например, использовать параметр OnCalendar=weekly для еженедельной проверки.

  • Далее необходимо активировать таймер-файл командой:
    sudo systemctl enable aide-check.timer
    sudo systemctl start aide-check.timer
    
    Команда enable добавляет таймер в автозапуск, а команда start запускает таймер сразу после выполнения команды.
  • Для того, чтобы провести проверку статуса таймера и убедиться, что он работает корректно, используется команда:
    sudo systemctl status aide-check.timer
    

Контроль целостности на основе Afick

Назначение и общие сведения

Afick (Another File Integrity ChecKer) является инструментом проверки целостности, который создаёт базу эталонных значений и сравнивает её с текущим состоянием файловой системы.

В отличие от AIDE, Afick работает быстрее на больших файловых деревьях, использует внутреннюю оптимизацию поиска изменений и обеспечивает более гибкое управление конфигурацией. Принцип работы основан на трёх этапах:

  • создание базы контрольных значений;
  • сравнение текущего состояния файлов с эталонной базой;
  • формирование отчёта с указанием новых, изменённых и удалённых объектов.

Afick применяется для обнаружения подозрительных модификаций, возникающих в результате ошибок конфигурации, действий пользователей или возможной компрометации Системы. Инструмент рекомендуется использовать как дополнение к другим механизмам безопасности ОС.

Начало работы

Установка выполняется администратором из репозитория ОС:

dnf install afick

После установки в систему добавляются служебные файлы, утилита проверки и конфигурационный файл /etc/afick.conf.

Файлы Afick размещаются в следующих каталогах:

  • основной конфигурационный файл:
    /etc/afick.conf
    
  • каталоги служебных данных:
    /var/lib/afick/
    
  • файлы журналов Afick (если включено логирование):
    /var/log/afick/
    

Для выполнения операций Afick требуются административные права. Все операции создания или обновления базы выполняются только от имени суперпользователя, так как инструмент должен иметь доступ ко всем контролируемым файлам.

Конфигурационный файл /etc/afick.conf определяет, какие каталоги и файлы подлежат проверке, какие параметры целостности анализируются, а также где хранится база контрольных значений. Файл содержит следующие основные типы директив:

  • Общие параметры, которые задают расположение рабочих файлов Afick:
    database=/var/lib/afick/afick.db
    logfile=/var/log/afick/afick.log
    
  • Списки контролируемых файлов и каталогов:
    include=/etc
    include=/usr/bin
    include=/usr/sbin
    
    По умолчанию включаются основные системные каталоги.
  • Исключения из проверок:
    exclude=/var/log
    exclude=/run
    exclude=/tmp
    exclude=/proc
    

Рекомендуется исключать каталоги, которые меняются регулярно и не имеют отношения к контролю целостности.

  • Определение конкретных атрибутов для проверки:
    • размер файла (size);
    • контрольные суммы (sha1, md5 — в зависимости от выбранного алгоритма);
    • права доступа (mode);
    • владелец и группа (uid, gid);
    • временные метки изменения файла (mtime); Пример использования всех параметров вместе:
    check=sha1,size,mtime,uid,gid,mode
    
  • Настройка уровней отчётности. Директива имеет вид:
    report=<уровень>
    
    Поддерживаются следующие уровни отчётности:
    • short — краткий отчёт; выводится только сводная информация без перечисления конкретных файлов. Используется для минимального контроля в автоматизированных сценариях;
    • changes — отчёт только о фактически изменённых объектах; отображаются новые, изменённые и удалённые файлы. Рекомендуемый режим для регулярных проверок;
    • all — полный отчёт по всем проверяемым объектам; выводится состояние каждого файла независимо от того, произошло изменение или нет. Применяется для первичного аудита либо детального анализа;
    • debug — расширенный отчёт в диагностическом режиме; включает служебную информацию, подробные сообщения о ходе проверки и обработки файлов. Используется для отладки конфигурации.

Создание базы целостности и выполнение проверки

После настройки файла /etc/afick.conf требуется создать эталонную базу контрольных значений. Инициализация базы выполняется командой:

afick --init

В ходе операции Afick анализирует указанные каталоги, вычисляет контрольные суммы, фиксирует атрибуты файлов и сохраняет эталонное состояние в базе данных, расположенной по пути, определённому в конфигурации (по умолчанию /var/lib/afick/afick.db).

Инициализация выполняется один раз — перед началом эксплуатации Системы или после масштабных обновлений.

База Afick содержит следующие сведения о каждом проверяемом файле:

  • контрольные суммы;
  • права доступа;
  • владельца и группу;
  • размеры;
  • временные метки.

При выполнении последующих проверок Afick сравнивает фактическое состояние системы с данными из базы и фиксирует:

  • новые файлы;
  • удалённые файлы;
  • изменённые файлы;
  • изменения атрибутов.

После законного изменения конфигурации (обновление пакетов, изменение системных файлов) база должна быть обновлена с помощью команды:

afick --update

В противном случае Afick будет продолжать считать данные изменения нарушением целостности. Рекомендуется выполнять обновление базы только после проверки, что изменения являются корректными и одобрены администратором.

Полная проверка целостности выполняется командой:

afick --check

По результатам формируется отчёт, в котором изменения классифицируются как:

  • added — файл добавлен;
  • removed — файл удалён;
  • changed — изменено содержимое;
  • attrs — изменены атрибуты (права, владелец, размер);
  • mtime — изменена временная метка.

Файл отчёта создаётся в соответствии с настройками конфигурации (обычно /var/log/afick/afick.log).

Для обеспечения регулярного контроля целостности рекомендуется автоматизировать выполнение команды проверки с помощью планировщика systemd timers, который заменяет классический cron.

Эталонная база (afick.db) и файл конфигурации должны храниться на носителе с ограниченным доступом. После завершения настройки их можно защитить от модификации, установив неизменяемый атрибут:

chattr +i /etc/afick.conf
chattr +i /var/lib/afick/afick.db

При использовании Afick на серверах с регулярными изменениями следует корректно поддерживать список исключений, чтобы исключить регулярные изменения служебных каталогов из проверки.