В инструкции рассмотрена установка, настройка и использование Auditd на серверах под управлением операционной системы Linux.
Что это такое?
Linux Audit Daemon - это среда, позволяющая проводить аудит событий в системе Linux. Используя мощную систему аудита возможно отслеживать многие типы событий для мониторинга и проверки системы, например:
- доступ к файлам;
- изменение прав на файлы;
- просмотр пользователей, изменивших конкретный файл;
- обнаружение несанкционированных изменений;
- мониторинг системных вызовов и функций;
- обнаружение аномалий, таких как сбои;
- мониторинг набора команд.
Установка и настройка
Для установки используйте ваш пакетный менеджер, например для Debian/Ubuntu:
На серверах CentOS демон auditd обычно уже предустановлен (пакеты audit and audit-libs).
Конфигурация выполняется с помощью двух файлов: auditd.conf - настройка самого демона, audit.rules - настройка правил, используемых средством auditctl.
Примечание: auditctl - клиентский инструмент для настройки auditd.
Файл auditd.conf настраивает демон аудита Linux (auditd) с акцентом на том, где и как он должен регистрировать события. Он также определяет, как работать с дисками, журналом повторов и количеством хранимых логов. Обычно стандартная конфигурация подходит для большинства систем.
Чтобы настроить, какие именно события подвергать проверке, в структуре аудита используется файл правил с именем audit.rules.
Активные правила можно просмотреть с помощью опции -l:
auditctl -l
Сразу после установки набор правил будет пустым.
Удалить правила можно с помощью опции -D:
auditctl -D
Чтобы выполнить мониторинг файла, необходимо определить его полное имя и разрешения для поиска:
Например:
Ключ -F задет фильтры, определив переменную path, мы задаем, какой каталог или файл следует отслеживать. Переменная path определяет, какой вид доступа вызовет событие. Существует 4 вида доступа и они похожи на разрешения файлов, но обратите внимание, что между ними существует важное различие:
- r = читать
- w = писать
- x = выполнить
- a = изменить атрибут
Ключ -a указывает список и действие. Допустимые списки: task, exit, user, exclude. Допустимые действия: never, always.
Поиск связанного события или доступ к файлу можно быстро отслеживать с помощью инструмента ausearch:
ausearch -f <имя_файла>
Например:
Пример вывода, в котором подробно видно кто, когда и с помощью каких команд использовал файл:
- time - время события
- name - имя объекта
- cwd - текущий рабочий путь, из которого происходил доступ к файлу
- syscall - связанный системный вызов
- auid - идентификатор пользователя аудита
- exe - двоичный файл, выполняющий действие над файлом
Обратите внимание, что auid определяет исходного пользователя вошедшего в систему. Другие поля могут указывать на другого пользователя, в зависимости от того, какой пользователь используется при выполнении действия.
Системные вызовы регистрируются с помощью числового значения. Поскольку на разных архитектурах разный набор системных вызовов, необходимо ее определить:
Используя команду ausyscall, можно определить, что представляет собой числовой вызов:
ausyscall <архитектура> <номер>
Например вызов 82 на архитектуре x86_64:
Аудит пользователей
Auditd может использоваться для мониторинга системных вызовов, включая доступ к файлам. Чтобы узнать, к каким файлам обратился конкретный пользователь необходимо знать его идентификатор:
Пример:
- -S open - обращение к системному вызову open
- -F auid=80 указывает идентификатор пользователя
Такая информация полезна для обнаружения вторжений, а также при проведении расследований киберинцедентов.
Аудит журнальных файлов
Аудит журнальных файлов выполняется с помощью утилиты aureport, которая позволяет создавать сводные отчеты о событиях, записанных в файлах журнала Audit. По умолчанию все файлы audit.log находятся в каталоге /var/log/audit/ и запрашиваются для создания отчета. Вы можете указать другой файл для запуска отчета с помощью опции -if:
aureport <опции> -if <имя_файла>
Чтобы создать отчет для зарегистрированных событий за определенный промежуток времени, используйте следующую команду:
aureport --start <месяц>/<день>/<год> <часы>:<минуты>:<секунды> --end <месяц>/<день>/<год> <часы>:<минуты>:<секунды>
Например:
Чтобы создать отчет обо всех событиях журналируемых файлов, используйте следующую команду:
Для генерации сводки событий используйте ключ --summary:
Чтобы создать сводный отчет о неудачных событиях для всех пользователей, используйте следующую команду:
Для создания сводного отчета о всех неудачных попытках входа в систему для каждого пользователя, используйте следующую команду: