Перейти к основному содержимому

Задание 1: Введение в аудит

Примечание

В практических заданиях данного модуля подразумевается использование развернутого вручную Pangolin (установка рассматривается в курсе DBA1: Глава 02 Установка). Если для установки вы пользовались инсталлятором, директории, пути к ним, значения конфигурационных параметров СУБД, а также включенные функциональности могут отличаться от примеров.

Более подробно с аудитом можно ознакомиться в разделе «Журналирование и аудит» документации.

Формат записей аудита​

Каждая запись аудита представляет собой строку в стандартном логе сервера и состоит из двух основных частей:

  1. Префикс записи: является общим для всех сообщений журнала и может включать различную информацию о процессе и сессии:

    • %m: Метка времени с точностью до миллисекунд.
    • %u: Имя пользователя.
    • %d: Имя базы данных.
    • %p: PID процесса.
    • %l: Номер строки журнала для каждой сессии или процесса, начинается с 1.
    • %s: Штамп времени начала процесса.
    • %v: Идентификатор виртуальной транзакции (backendID/localXID).
    • %x: Идентификатор транзакции (0, если не присвоен).
    • %q: Ничего не выводит. Не пользовательские процессы останавливаются в этой точке. Игнорируется пользовательскими процессами.
    • %%: Выводит символ %.
    Примечание

    Префикс может быть перенастроен в переменной log_line_prefix серверной конфигурации.

    Пример префикса журнальной записи:

    %m %u %d [%p]

    включает дату/время, имя пользователя, имя базы данных и идентификатор процесса для каждой записи журнала аудита.

  2. Запись аудита: начинается с тега (метки) 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 VERBOSEINFO
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"