Задание 1: Введение в аудит
В практических заданиях данного модуля подразумевается использование развернутого вручную Pangolin (установка рассматривается в курсе DBA1: Глава 02 Установка). Если для установки вы пользовались инсталлятором, директории, пути к ним, значения конфигурационных параметров СУБД, а также включенные функциональности могут отличаться от примеров.
Более подробно с аудитом можно ознакомиться в разделе «Журналирование и аудит» документации.
Формат записей аудита
Каждая запись аудита представляет собой строку в стандартном логе сервера и состоит из двух основных частей:
-
Префикс записи: является общим для всех сообщений журнала и может включать различную информацию о процессе и сессии:
%m: Метка времени с точностью до миллисекунд.%u: Имя пользователя.%d: Имя базы данных.%p:PIDпроцесса.%l: Номер строки журнала для каждой сессии или процесса, начинается с 1.%s: Штамп времени начала процесса.%v: Идентификатор виртуальной транзакции (backendID/localXID).%x: Идентификатор транзакции (0, если не присвоен).%q: Ничего не выводит. Не пользовательские процессы останавливаются в этой точке. Игнорируется пользовательскими процессами.%%: Выводит символ%.
ПримечаниеПрефикс может быть перенастроен в переменной
log_line_prefixсерверной конфигурации.Пример префикса журнальной записи:
%m %u %d [%p]включает дату/время, имя пользователя, имя базы данных и идентификатор процесса для каждой записи журнала аудита.
-
Запись аудита: начинается с тега (метки)
AUDIT, после которого следует детализированная информация о событии в виде последовательности полей.Пример полной записи в логе:
2023-10-26 10:30:00.123 postgres admin : AUDIT: {классы событий}, {детали операции}
Характеристики базового аудита
Классы событий
Классы аудита, предусмотренные базовой функциональностью pgAudit, настраиваются в параметре pgaudit.log конфигурационного файла postgresql.conf и включают:
READ: операцииSELECTиCOPY, если источник — отношение или запрос;WRITE: операцииINSERT,UPDATE,DELETE,TRUNCATE, иCOPY, если цель — отношение;FUNCTION: вызовы функций и блокиDO;ROLE: операторы, связанные с ролями и привилегиямиGRANT,REVOKE,CREATE/ALTER/DROP ROLE;DDL: всеDDL, не входящие в классROLE, например перенос таблицы и/или индекса в другое табличное пространство, а также создание, изменение, удаление таблицы, индексов, функций и других объектов БД;MISC: прочие команды, включаяDISCARD,FETCH,CHECKPOINT,VACUUM,SET;MISC_SET: прочие командыSET, включаяSET ROLE;MISC_SET_ROLE: только события выполнения командSET ROLE/RESET ROLE.
Уровни важности сообщений
Если вывод журнала отправляется в syslog, используется следующее разделение сообщений по степени важности:
| Уровень серьезности | Описание | Уровень в syslog |
|---|---|---|
DEBUG1 ... DEBUG5 | Предоставляет разработчикам последовательно более подробную информацию | DEBUG |
INFO | Предоставляет информацию, неявно запрошенную пользователем, например, вывод из VACUUM VERBOSE | INFO |
NOTICE | Предоставляет информацию, которая может быть полезна пользователям, например, уведомление об «усечении» длинных идентификаторов | NOTICE |
WARNING | Выдает предупреждения о возможных проблемах, например, COMMIT за пределами блока транзакции | NOTICE |
ERROR | Сообщает об ошибке, которая привела к прерыванию текущей команды | WARNING |
LOG | Сообщает информацию, представляющую интерес для администраторов | INFO |
FATAL | Сообщает об ошибке, которая привела к прерыванию текущего сеанса | ERR |
PANIC | Сообщает об ошибке, которая привела к прерыванию всех сеансов работы с базой данных | CRIT |
Расширенный аудит
СУБД Pangolin значительно расширяет возможности стандартного расширения pgAudit для обеспечения более глубокого и гибкого контроля за событиями безопасности:
-
Отделение лога аудита от системного лога: упрощает анализ событий безопасности, которые не смешиваются с другими системными сообщениями.
-
Добавление нового системного процесса для асинхронной записи: подобно
syslogger, этот процесс записывает события аудита в отдельный файл, снижая влияние на производительность основной СУБД. -
Добавление новых классов событий аудита: стандартизированное представление записей:
CONNECTION: События, связанные с подключениями к серверу;PROTECTION: Использование функций настройки механизма защиты от привилегированных пользователей (об этом в следующем модуле...);RECOVERY: Восстановление базы данных;INTEGRITY: Нарушения целостности объектов контроля;ACTION: Запуск/остановка базы данных с указанием причины;PARAMETER: Изменения конфигурации системы управления базами данных;ALL: Включает все вышеперечисленные классы.
И это все?
На самом деле в рамках доработки аудита Pangolin реализовано свыше 100 классов событий, соответствующих требованиям безопасности, однако в рамках данного курса мы не будем подробно останавливаться на каждом из них.
-
Возможность выбора отношений для аудита: Существует возможность указывать, какие именно таблицы или представления будут регистрироваться, что позволяет уменьшить общий объем журнала.
Активация этих расширенных возможностей аудита контролируется параметром pgaudit.legal.
Уровни важности событий в расширенном аудите
При использовании расширенных возможностей аудита записи фиксируются в отдельном файле. Также несколько изменена система уровней важностей для более удобного определения критичности происходящих событий и принятия соответствующих мер. Важность предопределена для каждого события и не может быть изменена:
| Уровень важности | Признаки событий |
|---|---|
Аварийный EMERGENCY | События полной блокировки пользовательского доступа к СУБД или отдельным БД. Например, скомпрометированы двоичные файлы ядра СУБД, загрузка в память СУБД недоверенного кода или перезапись контролируемой функции |
Фатальный FATAL | События блокировки одиночного объекта или ограничения доступа к объекту. Например, превышено количество неуспешных попыток авторизации или блокировка пользователя по параметру парольной политики |
Критический CRITICAL | События отказа в неавторизованном доступе. Например, отклонена попытка подключения с неверным паролем или попытка суперпользователем без разрешения прочитать или изменить данные в объекте под защитой |
Высокий HIGH | События изменения объектов защиты и прав на них (например, на пользовательские учетные записи и пароли, параметры политик, права на объекты, системные привилегии). Так фиксируются вызовы команд для изменения БД, ТП, схем, отношений, кода, для которых возможно задать/сменить владельца объекта, схему/табличное представление, права доступа. Также в данную группу событий входит добавление/изменение фильтров, умеющих просматривать параметры или результаты, менять поведение других команд. Например: ALTER USER (GROUP), CREATE DATABASE, CREATE EVENT TRIGGER .. |
Средний MEDIUM | События получения разрешенных привилегий для их применения (SET - включает SET ROLE), а также действия, разрешенные только суперпользователю (перезапуск сервера, снятие и восстановление резервной копии), администратору безопасности (просмотр политики) или существующему владельцу объекта (настройка индексов, триггеров), но которые не ведут к изменению объектов/прав/кода. Например: подключение/отключение сессии, CREATE INDEX |
Низкий LOW | Нормальное, постоянное использование полученных привилегий. Например, SELECT/INSERT/UPDATE/DELETE и прочие пользовательские действия |
Отладочный DEBUG | Внутренняя информация о деятельности механизмов защиты |
Подведем итоги
Вопрос 1
Что такое pgAudit в СУБД Pangolin и какова его основная цель?
Вопрос 2
Какой уникальный тег предваряет все записи аудита в системном журнале Pangolin?
Вопрос 3
Назовите два дополнительных класса событий аудита, специфичных для Pangolin
Вопрос 4
Приведите один пример события, которое может быть отнесено к уровню событий "EMERGENCY"