Аудит системных вызовов Журналирование
Окружение
Подсистема аудита и её инструменты помогают сделать систему пользователя более безопасной, предоставляя средства для детальной регистрации и анализа происходящего в ней. Однако, подсистема аудита сама по себе не выполняет активных функций безопасности — не защищает от сбоев, уязвимостей и каких-либо нарушений безопасности.
Подсистема аудита состоит из нескольких компонентов, обеспечивающих важную функциональность всей платформы. Компоненты аудита в ядре перехватывают системные вызовы от процессов пользовательского пространства. Затем, в случае прохождения их через фильтр exclude, направляют их в один из фильтров user, task, filesystem, io_uring или exit, передавая итоговый результат службе auditd.
Служба auditd ведёт журнал аудита, который в дальнейшем может использоваться для поиска и анализа событий, создания отчётов.
При создании процесса ядро создает для него специальную структуру данных — контекст аудита. Этот контекст будет использоваться для сбора информации о действиях процесса.
Во время входа в системный вызов, ядро фиксирует его номер, дату и время выполнения. Однако сами аргументы системного вызова не сохраняются. Вместо этого ядро перехватывает обращения к функциям getname() и path_lookup(), для записи той информации, которая необходима для принятия решения о допустимости выполнения системного вызова. Например, если непривилегированный процесс выполняет функцию chroot("foo"), то ядро отклонит запрос до того, как начнется поиск по пути "foo", поэтому путь не будет отражён в записи аудита.
chroot("foo")
Кроме того, сохранение всех аргументов системных вызовов потребовало бы увеличения потребления ресурсов и могло быть небезопасным, так как некоторые данные могут быть ложными или ненадежными (например, из-за атаки на совместно используемую память) в отличие от истинной информации, фактически используемой ядром.
Во время выхода из системного вызова генерируется та часть сообщения аудита, которая ответственна за информацию о системном вызове, включая имена файлов и номера inode (если доступны). Сообщение о системном вызове генерируется, только если установлен флаг, указывающий, что системный вызов находится под аудитом (он устанавливается, например, когда SELinux генерирует AVC сообщение или когда другая часть ядра определяет, что должно формироваться сообщение для аудита). Следует заметить, что полное сообщение аудита приходит в пользовательское пространство по частям, это позволяет не хранить сообщения неопределенный срок внутри ядра.
Во время завершения процесса контекст аудита уничтожается.
Во время генерации сообщения аудита может быть выполнена простая фильтрация (например, для увеличения производительности — отключение аудита системных вызовов, выполняемых от имени пользователя, работающего с базой данных). Фильтрация может быть, как простой, так и сложной. В основном, инструментарий аудита использует компоненты ядра (например, SELinux), чтобы принимать решение о том, что необходимо подвергать аудиту, а что нет.
Для передачи сообщений между подсистемой аудита в ядре и процессами пользовательского пространства используются сокеты NETLINK семейства NETLINK_AUDIT. Сообщения аудита находятся в специальном буфере ядра до передачи их в службу auditd, задача которой принять и записать эти сообщения в файл. Если буфер ядра окажется переполнен в результате высокой нагрузки на систему, критического количества событий аудита или иной причины, то будет предпринято действие в зависимости от настроек: сообщения будут сброшены (утеряны), для вывода сообщений будет использована функция printk (вывод в буфер журнала ядра, используется по умолчанию), вызов kernel panic и остановка работы системы.
Сообщения могут не журналироваться (настраивается отдельно) в зависимости от настроек аудита, скорости генерации сообщений или загруженности памяти.
Когда какая-то часть ядра генерирует часть сообщения аудита, эта часть будет немедленно послана в пользовательское пространство, и автоматически будет установлен флаг, указывающий, что этот системный вызов находится под аудитом. Таким образом, при выходе из системного вызова будет сформирована дополнительная информация (если включен аудит системных вызовов).
Дата последнего изменения: 24.09.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Нажимая «Отправить запрос», вы соглашаетесь с условиями обработки персональных данных.
Вы будете получать только актуальную информацию по обновлению безопасности
Подписываясь на уведомления, вы соглашаетесь с условиями обработки персональных данных.
На ваш почтовый адрес отправлено письмо с подтверждением подписки.