Установка модуля шифрования QSS с использованием ФДСЧ ПАК «Соболь»

Подготовка

Предполагается, что работы проводятся на сервере с установленной ОС Astra Linux 1.7, СУБД QHB уже установлена, файлы кластера находятся в директории /opt/qhb/, все действия выполняются от пользователя root. Также должны быть получены пакеты для установки. Необходимые пакеты запрашиваются у поставщика QHB и источника ДСЧ (в данном случае ПАК Соболь1).


Установка пакетов

Установить .deb пакеты:

sudo dpkg -i LIBGOSTCRYPTO_1_0_0_1_AMD64.DEB
sudo dpkg -i QSS_1_0_0_1_AMD64.DEB
sudo dpkg -i sobol_4.4-17-astra1.7-signed_amd64.deb
sudo dpkg -i sobol-scheck_4.4-17-astra1.7-signed_amd64.deb

Для установки libglade2-0 необходимо:

  1. Вставить диск с базовым репозиторием, добавить его в etc/apt/sources.list.
  2. Выполнить команду:
apt install libglade2-0

Настройка QSS

Добавить пользователей ОС, осуществляющих администрирование QSS, в группу qss-admin, используя следующую команду:

usermod -a -G qss-admin <имя_пользователя>

Добавить пользователей ОС, от которых будут осуществляться клиентские действия с QSS, в группу qss-client. В обязательном порядке добавляется пользователь qhb с помощью следующей команды:

usermod -a -G qss-client qhb

Дополнительные пользователи добавляются командой:

usermod -a -G qss-client <имя_пользователя>

Внести изменения в файл настроек /etc/qss/config.yml, сменить значение параметра hw_rng с Os на Sobol (используемый ФДСЧ2):

nano /etc/qss/config.yml

Рисунок 1. Внесенные изменения в файле /etc/qss/config.yml

config_yml

Вычислить хеш-сумму и добавить ее в конец файла с контрольными хеш-суммами /etc/qss/bin_integrity.streebog512:

qss-client streebog512 --skip-bin-integrity /usr/lib/libsobol.so >> /etc/qss/bin_integrity.streebog512

Проверить, что хеш-сумма правильно записана:

cat /etc/qss/bin_integrity.streebog512

Внести изменения в файл свойств сервиса /lib/systemd/system/qss.service (можно просто заменить содержимое):

[Unit]
Description=Quantum Secure Storage

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
User=qss
Group=qss
ExecStart=/usr/bin/qss

RestrictAddressFamilies=AF_UNIX
PrivateUsers=no
LimitMEMLOCK=infinity
LimitNOFILE=65536

RuntimeDirectory=qss
StateDirectory=qss
LogsDirectory=qss
ConfigurationDirectory=qss
RuntimeDirectoryMode=755
StateDirectory=750
LogsDirectoryMode=750
ConfigurationDirectoryMode=755
UMask=0077

CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE
CapabilityBoundingSet=~CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH
CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE
CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW
CapabilityBoundingSet=~CAP_SETGID CAP_SETFCAP CAP_SETPCAP CAP_SETUID
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_BOOT CAP_SYS_CHROOT CAP_SYS_NICE CAP_SYS_PACCT CAP_SYS_PTRACE CAP_SYS_RESOURCE CAP_SYS_TIME CAP_SYS_TTY_CONFIG
CapabilityBoundingSet=~CAP_IPC_LOCK CAP_BLOCK_SUSPEND CAP_CHOWN CAP_FOWNER CAP_FSETID CAP_IPC_OWNER CAP_KILL CAP_LEASE CAP_LINUX_IMMUTABLE CAP_WAKE_ALARM

Обновить конфигурацию сервисов:

systemctl daemon-reload

Запустить QSS как SystemD сервис:

systemctl start qss.service

Проверить работу сервиса:

systemctl status qss.service

Не должно быть ошибок, в строке «Active» выведено значение «active (running)». Включить автозагрузку службы при загрузке системы:

systemctl enable.service

Если после запуска происходит ошибка и сервис не запускается, нужно повысить права пользователя qss:

pdpl-user -l 63:63 qss

Инициализация хранилища QSS

Произвести инициализацию хранилища QSS от имени пользователя, входящего в группу qss-admin:

qss-admin --init <имя_пользователя>
<пароль_пользователя>
<пароль_пользователя>

Рисунок 2. Инициализация хранилища QSS из-под пользователя «user»

init_qss_storage

Выйти из административного интерфейса, используя команду exit либо комбинацию клавиш Ctrl+C или Ctrl+D. Проверить авторизацию в административном интерфейсе:

qss-admin <имя_пользователя>
<пароль_пользователя>

Рисунок 3. Проверка авторизации в административном интерфейсе

qss_connect

Создать рабочие ключи в административном интерфейсе, используя команду (типы ключей можно получить, используя встроенную справку либо автодополнение по нажатию Tab):

key create <key_type (аргумент выбрать клавишей <Tab>)>  <key_label>

Пример: key create kuznyechik key.

Рисунок 4. Создание рабочего ключа

creating_working_key

Рисунок 5. Проверка статуса командой «key list»

status_check

Разблокировать рабочие ключи в административном интерфейсе, используя команду:

key unlock <key_label> (key unlock key)

Рисунок 6. Разблокировка рабочих ключей командой «key unlock key»

unlock_key

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

key list

Рисунок 7. Проверка статуса командой «key list» после разблокировки

status_check_2

Выйти из административного интерфейса, используя команду exit либо комбинацию клавиш Ctrl+C или Ctrl+D. Добавить ключи в конфигурацию qss для qhb: в файле /opt/qhb/qss2_config.toml задать значение для параметра key — созданные и разблокированные раннее ключи key = <key_label> (в примере key).

Рисунок 8. Добавление ключа в конфигурацию «qss» для «qhb»

add_key

Установить доступ по умолчанию к таблицам с шифрованием в файле qhb.conf: установить default_table_access_method = 'qss' и qss_mode = 2. После этого нужно выполнить команду:

systemctl restart qhb-test»

Рисунок 9. Редактирование файла «qhb.conf»

qhb_conf

Рисунок 10. Установка и настройка автоматического шифрования

automatic_encryption


Проверка работоспособности модуля шифрования QSS

После того как был установлен модуль шифрования QSS, который использует ФДСЧ ПАК «Соболь», необходимо проверить его работоспособность. Для этого проводится небольшой тест. Нужно авторизоваться как qhb.

Рисунок 11. Авторизация под пользователем «qhb»

user_qhb

Перед началом тестирования необходимо проверить значения в полях меню port и default_table_access_method. Значение в поле port требуется для того, чтобы можно было подключиться к оболочке, в которой будут выполняться команды SQL. Параметр Default_table_access_method задает табличный метод доступа по умолчанию, который используется при создании таблиц или материализованных представлений, если тот не указан явно в команде CREATE, либо при выполнении команды SELECT ... INTO, которая не позволяет явно задать метод доступа. Значение по умолчанию — heap (не шифрованные данные).

Открыть в текстовом редакторе конфигурационный файл qhb.conf командой nano /opt/qhb/qhb.conf (так как этот файл нужно открыть только для проверки; вместо nano можно использовать vim или cat).

Найти поле со значением port и запомнить его.

Рисунок 12. Уточнение значения в поле «port»

port_value

Далее найти поле default_table_access_method. В примере указано значение qss. Оно было изменено при настройке модуля шифрования QSS. Это значит, что по умолчанию записи в новых созданных таблицах будут зашифрованы модулем шифрования QSS. Также в данном поле может быть указано значение heap. Это означает, что в новых таблицах значения будут не зашифрованы.

Рисунок 13. Уточнение значения в поле «default_table_access_method»

default_method

После проверки продолжить тестирование модуля QSS. Подключиться к оболочке для выполнения команд SQL. Для этого ввести команду psql -h localhost -p 50000, где:

  • -h — указывает хост, на котором работает сервер QHB (по умолчанию используется localhost, если сервер находится на одной машине);
  • -p — указывает номер порта который представлен в qhb.conf (в данном случае это не порт по умолчанию (5432), а измененный порт при настройке QHB).

Рисунок 14. Подключение к СУБД

connect_to_dbms

Командой \dt+ выводится список таблиц с наполнением. В примере представлены ранее созданные таблицы (далее будут создаваться другие).

Рисунок 15. Вывод списка таблиц БД

list_of_tables

Создать 2 таблицы. Одна будет с шифрованными данными вторая с незашифрованными данными. Для создания таблицы с шифрованием используется команда:

create table test_qss (id int4, test text) using qss;

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

Для создания таблицы без шифрования используется команда:

create table test_heap (id int4, test text) using heap;

обязательно нужно указать, что таблица не должна шифроваться, с помощью параметра using heap.

Рисунок 16. Создание 2 таблиц БД

add_tables

Командой \dt+ проверить созданные таблицы. В столбце Метод доступа видно, что одна таблица шифруется, а вторая — нет.

Рисунок 17. Вывод списка таблиц БД после добавления

list_of_tables_2

Ввести команды:

SELECT pg_relation_filepath('test_qss');

SELECT pg_relation_filepath('test_heap');

Они показывают путь к файлу таблицы, индекса, последовательности или другой сущности, хранящейся в отдельном файле (необходимые далее поля base/5/16398 и base/5/16403).

Рисунок 18. Вывод пути к файлу таблицы БД и его индексу

file_paths

Добавить новые записи в таблицу базы данных командами:

insert into test_qss(id,test) values (1…,'Gamma test QSS 1…');
insert into test_heap(id,test) values (1…,'Gamma test HEAP 1…');

Рисунок 19. Добавление новых записей в таблицу базы данных

add_new_record

Выполнить команду:

checkpoint;

Данная команда нужна для принудительного выполнения контрольной точки (checkpoint) в журнале упреждающей записи (WAL). Это необходимо, чтобы:

  • Обеспечить целостность данных — изменения записываются на диск, что гарантирует, что база данных может восстановиться до согласованного состояния после сбоя.
  • Оптимизировать производительность — регулярные контрольные точки ограничивают объем журнала транзакций (WAL), который нужно обработать при восстановлении.
  • Управлять использованием памяти — контрольные точки сбрасывают «грязные» страницы данных из памяти на диск, позволяя QHB освободить память для новых транзакций.

После подготовки требуется проверка, шифруются ли данные. Для этого необходимо подключиться к базе данных по SFTP. Так как обычный пользователь не имеет прав для каталога /opt/qhb/ и всех объектов внутри него, то нужно повысить права командой

chmod -R 775 /opt/qhb/

Далее необходимо перейти в директорию /opt/qhb/base/5/ и там найти созданные ранее таблицы 16398 и 16403.

Рисунок 20. Просмотр созданных ранее таблиц

viewing_tables

При просмотре таблицы 16398 видно, что записанные в ней данные зашифрованы.

Рисунок 21. Проверка шифрования таблицы БД 16398

checking_the_encryption

В таблице 16403 видно, что записанные в ней данные не зашифрованы.

Примечание
Очень важно учитывать, на каком языке записаны данные в таблицах базы данных. Не всегда кириллица корректно воспринимается редакторами или программами, даже если они изначально были на нее рассчитаны.

Рисунок 22. Проверка шифрования таблицы БД 16403

checking_the_encryption_2

1

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

2

ФДСЧ — физический датчик случайных чисел.