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

Задание 2: Особенности маскирования

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

Маскирование параметров функций, использующих конфиденциальную информацию​

Примеры функций, принимающих на вход конфиденциальную информацию:

  • pm_create_security_admin()
  • pm_set_security_admin_password()
  • add_auth_record_to_storage()

Маскирование параметров при вызовах таких функций осуществляется только при значении параметра masking_mode = full.

Давайте рассмотрим примеры отображения информации о вызовах таких функций в журнале сообщений.

  1. Установите режим masking_mode = full в конфигурационном файле kms_dynamic_params.cfg:

    [UserName@ServerName ~]$ sudo su - kmadmin_pg
    [kmadmin_pg@ServerName ~]$ vi /etc/pangolin-security-utilities/kms_dynamic_params.cfg
  2. Перезапустите сервер, чтобы настройки применились:

    [UserName@ServerName ~]$ sudo systemctl restart postgresql
  3. Добавьте параметры в хранилище паролей с помощью функции add_auth_record_to_storage:

    postgres@postgres=# SELECT add_auth_record_to_storage('127.0.0.1', 5433, 'First_db', 'user7654', '<password>');
    ┌────────────────────────────┐
    │ add_auth_record_to_storage │
    ├────────────────────────────┤
    │ │
    └────────────────────────────┘
    (1 row)

    Изучите журнал сообщений:

    2023-03-02 05:50:53 MSK [15827]: [5-1] app=psql,user=postgres,db=postgres,client=<IP-Address>,type=client backend STATEMENT: SELECT add_auth_record_to_storage(***, ***, ***, ***, ***);
  4. Используя функцию pm_create_security_admin создайте еще одного администратора безопасности (должна быть включена защита от привилегированных пользователей):

    [postgres@ServerName ~]$ psql -U sec_admin -h 127.0.0.1 -d postgres
    Password for user sec_admin:
    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Type "help" for help.
    sec_admin@postgres=# SELECT pm_create_security_admin('sec_test1','<password>');
    pm_create_security_admin
    ---------------------------------------------------------------------------------------------------------------------------------------
    SCRAM-SHA-256$4096:Hev4aNTCQ3ur...........
    (1 row)

    Журнал сообщений:

    2022-11-18 13:23:23 MSK [18926]: [52-1] app=psql,user=sec_admin,db=postgres,client=<IP-Address>,type=client backend LOG: AUDIT: SESSION,14,1,READ,SELECT,,,"SELECT pm_create_security_admin('sec_test1','***');",<not logged>
    2022-11-18 13:23:23 MSK [18926]: [53-1] app=psql,user=sec_admin,db=postgres,client=<IP-Address>,type=client backend LOG: AUDIT: SESSION,14,2,PROTECTION,EXECUTE,FUNCTION,pg_catalog.pm_create_security_admin,"SELECT pm_create_security_admin('sec_test1','***');",<not logged>

Создание пользователя​

С использованием CREATE ROLE/USER в запросе создайте пользователя:

postgres@postgres=# CREATE USER user_test WITH ENCRYPTED PASSWORD '<password>';
CREATE
postgres@postgres=# ALTER USER user_test WITH ENCRYPTED PASSWORD '<password>';
ALTER

Журнал сообщений:

2023-03-02 17:50:58 MSK [30388]: [4-1] app=psql,user=postgres,db=postgres,client=<IP-Address>,type=client backend LOG: AUDIT: SESSION,1,1,ROLE,CREATE ROLE,,,CREATE USER user_test WITH ENCRYPTED PASSWORD ***;,<not logged>
2023-03-02 17:51:32 MSK [30388]: [5-1] app=psql,user=postgres,db=postgres,client=<IP-Address>,type=client backend LOG: AUDIT: SESSION,2,1,ROLE,ALTER ROLE,,,ALTER USER user_test WITH ENCRYPTED PASSWORD ***;,<not logged>

В случае создания пользователя с уже существующим именем, будет выдана ошибка, но в логе пароль также будет замаскирован:

postgres@postgres=# CREATE USER user_test WITH ENCRYPTED PASSWORD '<password>';
ERROR: role "user_test" already exists

Журнал сообщений:

2023-03-02 17:53:37 MSK [30388]: [6-1] app=psql,user=postgres,db=postgres,client=<IP-Address>,type=client backend ERROR: role "user_test" already exists
2023-03-02 17:53:37 MSK [30388]: [7-1] app=psql,user=postgres,db=postgres,client=<IP-Address>,type=client backend STATEMENT: CREATE USER user_test WITH ENCRYPTED PASSWORD ***;

Маскирование запросов в файлах ASH​

ASH (Active Session History) - файлы, в которых ведется история активных сессий (выполняющиеся в центральном процессоре или не находящиеся в режиме ожидания). С помощью них можно определить состояние БД или сервера в разные моменты времени, а на основе диагностики спрогнозировать, как изменится нагрузка в будущем и по каким причинам.

Сохранение текста запросов в такие ASH-файлы ASH регулируется собственными параметрами: performance insight и performance_insights.masking.

При этом, если значение параметра masking_mode = full, то маскирование будет выполняться независимо от значения параметра performance_insights.masking. Это связано с тем, что ASH пользуется текстами запросов, помещенных в представление pg_stat_activity, и при включенном маскировании тексты запросов в представлении находятся в уже замаскированном виде.

Завершение​

В рамках курса DBP1 вы познакомитесь со средствами безопасности, доступными в СУБД Pangolin. К ним относятся:

  • парольные политики
  • журналирование и аудит
  • обфускация
  • контроль загрузки модулей
  • защита от привилегированных пользователей
  • маскирование

Мы надеемся, что погружение в функциональности Pangolin было увлекательным и вы продолжите знакомиться с нашей СУБД.

До новых встреч!

Подведем итоги​

Вопрос 1

Выберите все функции, которые не работают с конфиденциальной информацией: