Консультация по продукту 1cloud

Настройка и аудит системы Linux с помощью демона Auditd

В инструкции рассмотрена установка, настройка и использование 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

Средняя оценка: 5,0, всего оценок: 2