Page tree

Для поддержания безопасности и стабильности системы важно следить за ее состоянием. В основном это достигается с помощью мониторинга, анализа логов, а также - аудита системных событий. Хотя аудит сам по себе не является средством защиты от нежелательных действий, он полезен для обнаружения нарушений в безопасности и их дальнейшего устранения.

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

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

Установка

В системе CentOS пакет audit, как правило, установлен по умолчанию.

Для установки на Debian / Ubuntu выполните:

sudo apt-get install auditd

В пакет входит несколько утилит:

  • auditctl - управление системой аудита, получение информации о состоянии системы, добавление и удаление правил;
  • autrace - аудит событий, вызываемых процессами (аналогично strace);
  • ausearch - поиск событий в журналах;
  • aureport - создание отчетов о работе аудита.

Основные настройки демона auditd (формат логов, частота обновления, максимальный размер и др.) находятся в конфигурационном файле /etc/audit/auditd.conf . Как правило, стандартной конфигурации достаточно для эффективной работы с аудитом, но вы можете дополнительно изменить настройки по своему усмотрению. Подробную информацию о каждом параметре можно получить, например, здесь, либо выполнив man auditd.conf.

Создание правил

Настройка правил выполняется с помощью утилиты auditctl и следующих опций:

  • -l - вывести список созданных правил (если выполнить команду сразу после установки auditd, список правил будет пустым);
  • -а - добавить новое правило;
  • -d - удалить правило из списка;
  • -D - удалить все правила.

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

sudo auditctl -a список,действие -S имя_системного_вызова -F фильтр

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

Существует пять списков:

  • task – события, связанные с созданием процессов;
  • entry – события, происходящие при входе в системный вызов;
  • exit – события, происходящие во время выхода из системного вызова;
  • user – события, использующие параметры пользовательского пространства (uid, pid и gid);
  • exclude – используется для исключения событий.

На практике в основном используются entry и exit.

Действие - определяет, что нужно выполнить после события: записать его в журнал (always) или не записывать (never).

Имя системного вызова - при обращении к какому вызову должен срабатывать триггер и перехватываться событие (например, open, close, exit, и т.д.)

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

sudo auditctl -a exit,always -S open -F path =/etc/

Можно использовать более одного фильтра, например, дополнительно уточнить, что нас интересуют только события, связанные с изменением файлов: w (write) и a (attribute change):

sudo auditctl -a exit,always -S open -F path=/etc/ -F perm=wa

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

sudo auditctl -a exit,always -F path=/etc/ -F perm=wa

Чтобы следить за конкретным файлом, можно использовать еще более сокращенный вариант (опция -p здесь заменяет perm):

sudo auditctl -w /etc/passwd -p wa

Файл audit.rules

Задавать правила возможно как через консоль, так и путем сохранения их в файле  /etc/audit/audit.rules , в этом случае они будут действовать постоянно.

Синтаксис правил точно такой же, нужно только опустить саму команду auditctl, например:

-w /etc/passwd -p wa

В начале файла обычно задаются метаправила, определяющие базовые настройки:

# Удалить все ранее созданные правила 
-D
 
# Задать количество буферов, в которых будут храниться сообщения
-b 320
 
# Действие при переполнении буферов: 0 - ничего не делать; 1 - отправить сообщение в dmesg, 2 - отправить ядро в панику
-f 1

Далее указываются пользовательские правила.

Ниже приведены примеры правил для отслеживания различных событий.

# Наблюдение за конфигурационными файлами системы аудита
-w /etc/audit/auditd.conf -p wa
-w /etc/audit/audit.rules -p wa
 
# Наблюдение за журнальными файлами
-w /var/log/audit/
-w /var/log/audit/audit.log
 
# Настройки и задания at
-w /var/spool/at
-w /etc/at.allow
-w /etc/at.deny
 
# Файлы паролей и групп
-w /etc/group -p wa
-w /etc/passwd -p wa
-w /etc/shadow
 
# Конфигурационные и журнальные файлы входа в систему
-w /etc/login.defs -p wa
-w /etc/securetty
-w /var/log/faillog
-w /var/log/lastlog
 
# Список и имена хостов
-w /etc/hosts -p wa
 
# Стартовые скрипты демонов
-w /etc/init.d/
-w /etc/init.d/auditd -p wa
 
# Настройки сервера SSH
-w /etc/ssh/sshd_config
 
# Изменение прав доступа к файлам
-a entry,always -S chmod -S fchmod -S chown -S chown32 -S fchown -S fchown32 -S lchown -S lchown32
 
# Создание, открытие или изменение размеров файлов
-a entry,always -S creat -S open -S truncate -S truncate64 -S ftruncate -S ftruncate64
 
# Создание и удаление каталогов
-a entry,always -S mkdir -S rmdir
 
# Удаление или создание ссылок
-a entry,always -S unlink -S rename -S link -S symlink

# Монтирование файловых систем
-a entry,always -S mount -S umount -S umount2

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

sudo service auditd restart

Анализ журналов аудита

Журнальные файлы системы аудита хранятся по пути /var/log/audit. Для работы с ними используются утилиты aureport и ausearch, которые, обладая очень большим количеством опций, позволяют получать информативные отчеты из файлов журнала согласно заданным параметрам.

Полный список опций можно просмотреть с помощью man aureport (и man ausearch для второй утилиты) либо в различных источниках в сети, например, здесь.

Например, для получения отчета о файлах необходимо использовать aureport с опцией -f:

sudo aureport -f

Отчет можно ограничить только определенным промежутком времени:

sudo aureport --start месяц/день/год часы:минуты:секунды --end месяц/день/год часы:минуты:секунды
 
# Например:
sudo aureport -f --start 08/20/20 12:00 --end 08/20/20 13:00

Время можно указывать также с помощью параметров:

  • now (сейчас),
  • recent (десять минут назад),
  • today (сегодня, начиная с полуночи),
  • yesterday (вчерашний день),
  • this-week (неделя),
  • this-month (месяц),
  • this-year (год). 

Вывод команды содержит очень много информации, поэтому его можно сократить с помощью опции --summary, чтобы получить сводку обращений к каждому файлу. 

sudo aureport -f -i --start recent --summary

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

sudo aureport -f -i --start today | grep /etc/passwd

Далее с помощью ausearch можно проанализировать каждое событие отдельно:

sudo auserch -a номер_события

С помощью ausearch можно находить события и по другим параметрам, например:

По идентификатору пользователя (опция -ui):

sudo ausearch -ui 1111 --interpret

(Опция --interpret или -i позволяет выводить данные в удобном для чтения формате.)

По имени исполняемого файла (опция -x):

sudo ausearch -x /путь/к/файлу

По имени демона (опция -tm):

sudo ausearch -tm cron

По системному вызову (опция -sc):

sudo ausearch -sc ptrace

Для ограничения вывода определенным промежутком времени можно использовать тот же синтаксис, что для aureport.

Полный список опций ausearch можно просмотреть с помощью man ausearch или в различных источниках в сети, например, здесь.

  • No labels