В инструкции рассмотрена установка, настройка и использование Auditd на серверах под управлением операционной системы Linux.
Что это такое?
Linux Audit Daemon - это среда, позволяющая проводить аудит событий в системе Linux. Используя мощную систему аудита возможно отслеживать многие типы событий для мониторинга и проверки системы, например:
- доступ к файлам;
- изменение прав на файлы;
- просмотр пользователей, изменивших конкретный файл;
- обнаружение несанкционированных изменений;
- мониторинг системных вызовов и функций;
- обнаружение аномалий, таких как сбои;
- мониторинг набора команд.
Установка и настройка
Для установки используйте ваш пакетный менеджер, например для Debian/Ubuntu:
apt-get install auditd audispd-plugins
На серверах 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
Чтобы выполнить мониторинг файла, необходимо определить его полное имя и разрешения для поиска:
auditctl -a exit,always -F path=<имя_файла> -F perm=<разрешения>
Например:
auditctl -a exit,always -F path=/etc/passwd -F perm=wa
Ключ -F задет фильтры, определив переменную path, мы задаем, какой каталог или файл следует отслеживать. Переменная path определяет, какой вид доступа вызовет событие. Существует 4 вида доступа и они похожи на разрешения файлов, но обратите внимание, что между ними существует важное различие:
- r = читать
- w = писать
- x = выполнить
- a = изменить атрибут
Ключ -a указывает список и действие. Допустимые списки: task, exit, user, exclude. Допустимые действия: never, always.
Поиск связанного события или доступ к файлу можно быстро отслеживать с помощью инструмента ausearch:
ausearch -f <имя_файла>
Например:
ausearch -f /etc/passwd
Пример вывода, в котором подробно видно кто, когда и с помощью каких команд использовал файл:
---- time->Tue Jul 17 18:22:08 2018 type=PROCTITLE msg=audit(1531840928.084:4647): proctitle=7669002F6574632F706173737764 type=PATH msg=audit(1531840928.084:4647): item=3 name="/etc/passwd~" inode=8470805 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:passwd_file_t:s0 objtype=CREATE type=PATH msg=audit(1531840928.084:4647): item=2 name="/etc/passwd" inode=8470805 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:passwd_file_t:s0 objtype=DELETE type=PATH msg=audit(1531840928.084:4647): item=1 name="/etc/" inode=8388737 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 objtype=PARENT type=PATH msg=audit(1531840928.084:4647): item=0 name="/etc/" inode=8388737 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 objtype=PARENT type=CWD msg=audit(1531840928.084:4647): cwd="/root" type=SYSCALL msg=audit(1531840928.084:4647): arch=c000003e syscall=82 success=yes exit=0 a0=f9d720 a1=facda0 a2=fffffffffffffe90 a3=7ffd396260e0 items=4 ppid=9580 pid=9620 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=33 comm="vi" exe="/usr/bin/vi" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null) ----
- time - время события
- name - имя объекта
- cwd - текущий рабочий путь, из которого происходил доступ к файлу
- syscall - связанный системный вызов
- auid - идентификатор пользователя аудита
- exe - двоичный файл, выполняющий действие над файлом
Обратите внимание, что auid определяет исходного пользователя вошедшего в систему. Другие поля могут указывать на другого пользователя, в зависимости от того, какой пользователь используется при выполнении действия.
Системные вызовы регистрируются с помощью числового значения. Поскольку на разных архитектурах разный набор системных вызовов, необходимо ее определить:
uname -m
Используя команду ausyscall, можно определить, что представляет собой числовой вызов:
ausyscall <архитектура> <номер>
Например вызов 82 на архитектуре x86_64:
ausyscall x86_64 82
Аудит пользователей
Auditd может использоваться для мониторинга системных вызовов, включая доступ к файлам. Чтобы узнать, к каким файлам обратился конкретный пользователь необходимо знать его идентификатор:
auditctl -a exit,always -F arch=<архитектура> -S open -F auid=<идентификатор>
Пример:
auditctl -a exit,always -F arch=x86_64 -S open -F auid=80
- -S open - обращение к системному вызову open
- -F auid=80 указывает идентификатор пользователя
Такая информация полезна для обнаружения вторжений, а также при проведении расследований киберинцедентов.
Аудит журнальных файлов
Аудит журнальных файлов выполняется с помощью утилиты aureport, которая позволяет создавать сводные отчеты о событиях, записанных в файлах журнала Audit. По умолчанию все файлы audit.log находятся в каталоге /var/log/audit/ и запрашиваются для создания отчета. Вы можете указать другой файл для запуска отчета с помощью опции -if:
aureport <опции> -if <имя_файла>
Чтобы создать отчет для зарегистрированных событий за определенный промежуток времени, используйте следующую команду:
aureport --start <месяц>/<день>/<год> <часы>:<минуты>:<секунды> --end <месяц>/<день>/<год> <часы>:<минуты>:<секунды>
Например:
aureport --start 07/15/2018 00:00:00 --end 07/10/2018 00:00:00
Чтобы создать отчет обо всех событиях журналируемых файлов, используйте следующую команду:
aureport -x
Для генерации сводки событий используйте ключ --summary:
aureport -x --summary
Чтобы создать сводный отчет о неудачных событиях для всех пользователей, используйте следующую команду:
aureport -u --failed --summary -i
Для создания сводного отчета о всех неудачных попытках входа в систему для каждого пользователя, используйте следующую команду:
aureport --login --summary -i