Для поддержания безопасности и стабильности системы важно следить за ее состоянием. В основном это достигается с помощью мониторинга, анализа логов, а также — аудита системных событий. Хотя аудит сам по себе не является средством защиты от нежелательных действий, он полезен для обнаружения нарушений в безопасности и их дальнейшего устранения.
Специальная утилита — auditd — позволяет вести мониторинг системных действий и анализировать их. Система аудита устанавливает триггеры на функции, ответственные за обработку системных вызовов (обращений к функциям ядра, без которых не может быть произведена ни одна операция в системе), после чего эти триггеры срабатывают согласно пользовательским правилам. Информация об всех действиях записывается в журнал и после может быть проанализирована администратором.
С помощью auditd можно отслеживать, например, такие события, как запуск и завершение работы системы; запуск и остановка приложений; доступ к файлам и изменение прав на них; изменение информации о пользователе или группе; установка сетевого соединения, изменение настроек сети и многое другое.
Установка
В системе CentOS пакет audit, как правило, установлен по умолчанию.
Для установки на Debian / Ubuntu выполните:
В пакет входит несколько утилит:
auditctl— управление системой аудита, получение информации о состоянии системы, добавление и удаление правил;autrace— аудит событий, вызываемых процессами (аналогичноstrace);ausearch— поиск событий в журналах;aureport— создание отчетов о работе аудита.
Основные настройки демона auditd (формат логов, частота обновления, максимальный размер и др.) находятся в конфигурационном файле /etc/audit/auditd.conf. Как правило, стандартной конфигурации достаточно для эффективной работы с аудитом, но вы можете дополнительно изменить настройки по своему усмотрению. Подробную информацию о каждом параметре можно получить, например, здесь, либо выполнив man auditd.conf.
Создание правил
Настройка правил выполняется с помощью утилиты auditctl и следующих опций:
-l— вывести список созданных правил (если выполнить команду сразу после установкиauditd, список правил будет пустым);-а— добавить новое правило;-d— удалить правило из списка;-D— удалить все правила.
Для создания нового правила используется команда:
Список — это список событий, в который нужно добавить правило. Для упрощения можно воспринимать список как фильтр, позволяющий сделать правило точнее.
Существует пять списков:
task— события, связанные с созданием процессов;entry— события, происходящие при входе в системный вызов;exit— события, происходящие во время выхода из системного вызова;user— события, использующие параметры пользовательского пространства (uid,pidиgid);exclude— используется для исключения событий.
На практике в основном используются entry и exit.
Действие — определяет, что нужно выполнить после события: записать его в журнал (always) или не записывать (never).
Имя системного вызова — при обращении к какому вызову должен срабатывать триггер и перехватываться событие (например, open, close, exit, и т.д.)
Фильтр — необязательная опция, которая используется для указания дополнительных параметров. Например, если нужно отслеживать обращения к файлам из каталога /etc, можно указать его в данном параметре:
Можно использовать более одного фильтра, например, дополнительно уточнить, что нас интересуют только события, связанные с изменением файлов: w (write) и a (attribute change):
При создании правил слежения за файлами можно не указывать имя системного вызова (опцию -S):
Чтобы следить за конкретным файлом, можно использовать еще более сокращенный вариант (опция -p здесь заменяет perm):
Файл audit.rules
Задавать правила возможно как через консоль, так и путем сохранения их в файле /etc/audit/audit.rules, в этом случае они будут действовать постоянно.
Синтаксис правил точно такой же, нужно только опустить саму команду auditctl, например:
В начале файла обычно задаются метаправила, определяющие базовые настройки:
Далее указываются пользовательские правила.
Ниже приведены примеры правил для отслеживания различных событий.
После внесения изменений в конфигурационный файл необходимо перезапустить auditd, чтобы они вступили в силу:
Анализ журналов аудита
Журнальные файлы системы аудита хранятся по пути /var/log/audit. Для работы с ними используются утилиты aureport и ausearch, которые, обладая очень большим количеством опций, позволяют получать информативные отчеты из файлов журнала согласно заданным параметрам.
Полный список опций можно просмотреть с помощью man aureport (и man ausearch для второй утилиты) либо в различных источниках в сети, например, здесь.
Например, для получения отчета о файлах необходимо использовать aureport с опцией -f:
Отчет можно ограничить только определенным промежутком времени:
Время можно указывать также с помощью параметров:
now(сейчас),recent(десять минут назад),today(сегодня, начиная с полуночи),yesterday(вчерашний день),this-week(неделя),this-month(месяц),this-year(год).
Вывод команды содержит очень много информации, поэтому его можно сократить с помощью опции --summary, чтобы получить сводку обращений к каждому файлу.
При обнаружении подозрительной попытки доступа, можно найти процесс, который ее произвел:
Далее с помощью ausearch можно проанализировать каждое событие отдельно:
С помощью ausearch можно находить события и по другим параметрам, например:
По идентификатору пользователя (опция -ui):
(Опция --interpret или -i позволяет выводить данные в удобном для чтения формате.)
По имени исполняемого файла (опция -x):
По имени демона (опция -tm):
По системному вызову (опция -sc):
Для ограничения вывода определенным промежутком времени можно использовать тот же синтаксис, что для aureport.
Полный список опций ausearch можно просмотреть с помощью man ausearch или в различных источниках в сети, например, здесь.