Г. База данных безопасности

Информация обо всех пользователях баз данных СУБД «РЕД База Данных» хранится в общей базе данных безопасности, которая расположена в корневой директории каталога установки сервера и называется security5.fdb. В этой базе хранятся параметры пользователей системы, созданных с помощью различных плагинов управления пользователями, политики безопасности, хэши старых паролей. Эти данные располагаются в системных таблицах, которые представлены в таблице Г.1.

Таблица Г.1 Список системных таблиц security5.fdb

Таблица

Содержание

PLG$USERS

Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями Legacy_UserManager

PLG$SRP

Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями Srp

PLG$MF

Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями GostPassword_Manager

PLG$POLICIES

Хранит политики учетных записей пользователей

PLG$PASSWD_HISTORY

Хранит хэши старых паролей

PLG$USER_POLICY

Хранит информацию о назначенных пользователям политиках

Г.1. PLG$USERS

Хранит параметры пользователей системы, созданных с помощью плагина управления пользователями Legacy_UserManager.

Идентификатор столбца

Тип данных

Описание

PLG$USER_NAME

VARCHAR(63)

Уникальное имя пользователя (логин).

PLG$GROUP_NAME

VARCHAR(63)

Название группы.

PLG$UID

INTEGER

ID пользователя.

PLG$GID

INTEGER

ID группы.

PLG$PASSWD

VARBINARY(64)

Пароль.

PLG$COMMENT

BLOB SUB_TYPE TEXT SEGMENT 80

Комментарий.

PLG$FIRST_NAME

VARCHAR(32)

Имя пользователя.

PLG$MIDDLE_NAME

VARCHAR(32)

Отчество пользователя.

PLG$LAST_NAME

VARCHAR(32)

Фамилия пользователя.

PLG$PASSWD_TIME

TIMESTAMP

Дата установки пароля

Г.2. PLG$SRP

Идентификатор столбца

Тип данных

Описание

PLG$USER_NAME

VARCHAR(63)

Уникальное имя пользователя (логин).

PLG$VERIFIER

VARCHAR(128)

Зашифрованный пароль.

PLG$SALT

VARCHAR(32)

Некоторая случайная последовательность для формирования VERIFIER

PLG$COMMENT

BLOB SUB_TYPE TEXT SEGMENT 80

Комментарий.

PLG$FIRST

VARCHAR(32)

Имя пользователя.

PLG$MIDDLE

VARCHAR(32)

Отчество пользователя.

PLG$LAST

VARCHAR(32)

Фамилия пользователя.

PLG$ATTRIBUTES

BLOB SUB_TYPE TEXT SEGMENT 80

Пользовательские атрибуты

PLG$ACTIVE

BOOLEAN

Состояние пользователя: активное или неактивное

PLG$PASSWD_TIME

TIMESTAMP

Дата установки пароля

Г.3. PLG$MF

Идентификатор столбца

Тип данных

Описание

PLG$USER_NAME

VARCHAR(63)

Уникальное имя пользователя (логин).

PLG$HASH_ALG

VARCHAR(32)

Название алгоритма хэширования. Этот алгоритм будет использован для проверки пароля. Если поле не указано, то используется старый алгоритм хэширования.

PLG$MF_PASSWD

VARCHAR(256)

хэш пароля многофакторного пользователя.

PLG$COMMENT

BLOB SUB_TYPE TEXT SEGMENT 80

Комментарий.

PLG$FIRST

VARCHAR(32)

Имя пользователя.

PLG$MIDDLE

VARCHAR(32)

Отчество пользователя.

PLG$LAST

VARCHAR(32)

Фамилия пользователя

PLG$PASSWD_TIME

TIMESTAMP

Дата установки пароля

PLG$ATTRIBUTES

BLOB SUB_TYPE TEXT SEGMENT 80

Пользовательские атрибуты.

PLG$ACTIVE

BOOLEAN

Состояние пользователя: активное или неактивное.

Г.4. PLG$POLICIES

Используется для хранения политик учетных записей пользователей.

Идентификатор столбца

Тип данных

Описание

PLG$POLICY_NAME

VARCHAR(32)

Имя политики безопасности. Политика по умолчанию имеет значение поля равное DEFAULT.

PLG$PSWD_NEED_CHAR

INTEGER

Минимально допустимое число буквенных символов в пароле.

PLG$PSWD_NEED_DIGIT

INTEGER

Минимально допустимое число цифровых символов в пароле

PLG$PSWD_NEED_DIFF_CASE

INTEGER

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

PLG$PSWD_MIN_LEN

INTEGER

Минимально допустимая длина пароля

PLG$PSWD_VALID_DAYS

INTEGER

Срок действия пароля в днях.

PLG$PSWD_UNIQUE_COUNT

INTEGER

Количество не повторяющихся подряд паролей

PLG$MAX_FAILED_COUNT

INTEGER

Максимальное число ошибок при прохождении аутентификации.

PLG$AUTH_FACTORS

VARCHAR(64)

Методы аутентификации хранятся в виде строки, состоящей из символов:

  • S: SRP

  • L: Legacy (традиционная)

  • W: WIN_SSPI (доверенная)

  • G: GSS

  • C: Certificate

  • P: GostPassword

  • V: VerifyServer

PLG$MAX_UNUSED_DAYS

INTEGER

Максимальное время неактивности учетных записей пользователя в днях.

Г.5. PLG$PASSWD_HISTORY

Хранит хэши старых паролей.

Идентификатор столбца

Тип данных

Описание

PLG$KEY_ID

INTEGER

Суррогатный первичный ключ

PLG$PLUGIN

VARCHAR(64)

Плагин управления пользователями

PLG$USER_NAME

VARCHAR(63)

Ссылается на логин пользователя, определенный в системной таблице RDB$USERS.

PLG$PASSWD

VARBINARY(64)

Пароль Legacy

PLG$MF_PASSWD

VARCHAR(256)

Хэш пароля многофакторного пользователя

PLG$HASH_ALG

VARCHAR(32)

Название алгоритма хэширования. Этот алгоритм будет использован для проверки пароля. Если поле не указано, то используется старый алгоритм хэширования.

PLG$VERIFIER

VARCHAR(128)

Зашифрованный пароль (верификатор) SRP

PLG$SALT

VARCHAR(32)

Соль SRP

Г.6. PLG$USER_POLICY

Информация о назначенных пользователям политиках.

Идентификатор столбца

Тип данных

Описание

PLG$USER_NAME

VARCHAR(63)

Уникальное имя пользователя (логин)

PLG$POLICY_NAME

VARCHAR(32)

Имя политики безопасности

PLG$FAILED_COUNT

INTEGER

Число ошибок при прохождении аутентификации

PLG$ACCESS_TIME

TIMESTAMP

Время после которого пользователю будет разрешен доступ

PLG$LAST_ONLINE

TIMESTAMP

Дата последней активности пользователя

Д. Настройка КриптоПро (на примере версии 4.0)

Д.1. Настройка в операционной системе Windows

Д.1.1. Общие настройки

  1. Скачайте дистрибутив КриптоПро с официального сайта КриптоПРО в разделе загрузка. Доступ к скачиванию обеспечивается после регистрации на сайте.

  2. Установите КриптоПро.

  3. Настройте провайдер через Панель управления->КриптоПро CSP. На вкладке Алгоритмы настраиваются параметры для криптопровайдера (рисунок).

    Настройка алгоритмов

    Рис. Д.1 Настройка алгоритмов

    • Название криптопровайдера – GOST R 34.10-2012 Signature with Diffie_Hellman Key Exchange. Используется в параметре ProviderName файла конфигурации firebird.conf;

    • Параметры алгоритма шифрования – название алгоритма шифрования по умолчанию. Используется в параметре SymmetricMethod файла конфигурации firebird.conf;

    • Параметры алгоритма подписи – название алгоритма ЭЦП по умолчанию, аналогично использование псевдонима AT_SIGNATURE как значение параметра для утилиты mint;

    • Параметры алгоритма Диффи-Хелмана – название алгоритма, который будет использоваться по умолчанию для обмена сессионными ключами, аналогично использованию псевдонима AT_KEYEXCHANGE как значение параметра для утилиты mint.

Д.1.2. Создание контейнеров с закрытыми ключами

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

  1. Контейнеры сохраняются на считывателях, соответственно, необходимо настроить считыватели на вкладке оборудование.

  2. Необходимо установить биологический датчик случайных чисел на вкладке оборудование.

    _images/cryptopro_readers.png

    Рис. Д.2 Настройка считывателей

    _images/cryptopro_random.png

    Рис. Д.3 Настройка датчиков случайных чисел

  3. Для генерирования секретных ключей можно воспользоваться средством КриптоПро <каталог_установки_КриптоПро>\csptest.exe:

    csptest –keyset -provtype 81 -newkeyset -container <имя контейнера с
    секретным ключом>
    
  4. Необходимо создавать ключи без паролей, так как при аутентификации используется режим CRYPT_SILENT (чтобы не нарушать работу сервера(рисунок)).

    Запрос установки пароля

    Рис. Д.4 Запрос установки пароля

  5. При создании ключа следует учитывать разграничение доступа среди пользователей Windows, то есть ключ, созданный одним пользователем, не будет доступен другому. Если сервер работает в режиме службы (то есть от имени системного пользователя), то необходимо, чтобы владельцем контейнера с серверными ключами была сама операционная система. Для этого необходимо при создании серверного контейнера указать опцию -machinekeys:

    csptest –keyset -provtype 81 -newkeyset -container <имя контейнера>
    -machinekeys
    
  6. Ключи хранятся в следующем разделе реестра:

    HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\USERS\SID
    пользователя\Keys\<имя контейнера>
    

Д.1.2.1. Пример создания ключевой пары

csptest -keyset -newkeyset -container test_keyq
CSP (Type:80) v4.0.9014 KC1 Release Ver:4.0.9842 OS:Windows CPU:IA32
FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 8411672
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 Cryptographic
Service Provider
Container name: "test_keys"
Signature key is not available.
Attempting to create a signature key...
a signature key created.
Exchange key is not available.
Attempting to create an exchange key...
an exchange key created.
Keys in container:
signature key
exchange key
Extensions:
OID: 1.2.643.2.2.37.3.9
PrivKey: Not specified - 17.08.2018 19:19:40 (UTC)
OID: 1.2.643.2.2.37.3.10
PrivKey: Not specified - 17.08.2018 19:19:59 (UTC)
Total: SYS: 0,515 sec USR: 0,359 sec UTC: 121,656 sec
[ErrorCode: 0x00000000]

Д.1.3. Получение сертификата

Для получения сертификата в ОС Windows с помощью тестового центра КриптоПро выполните следующие действия:

  1. Сформируйте запрос на получение сертификата с помощью утилиты cryptcp и ее команды creatrqst.

    -creatrqst -dn <RDN> [-provtype <N>] [-provname <CSP>] [-SMIME]
    [-nokeygen|-exprt] [-keysize <n>] [-hashAlg <OID>] [-ex|-sg|-both]
    [-ku|-km] [-cont <имя>] [-silent] [-pin <пароль>|-askpin] [-certusage
    <OIDs>] [-der] [-ext <расширение>] <имя файла>
    

    При генерации запроса для клиентского сертификата необходимо указать заранее созданный клиентский контейнер с ключевой парой. Для этого используется опция -nokeygen. Например:

    cryptcp -creatrqst -nokeygen -cont test_keys -provtype 81 -dn
    CN=tester test.req
    

    Подробнее о командах и входных параметрах этой утилиты см. руководство по приложению командной строки CryptCP по адресу: http://cryptopro.ru/sites/default/files/products/cryptcp/cryptcp_5.0.x.pdf.

  2. Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).

  3. Нажмите "Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64"

  4. Вставьте в поле "Base-64-шифрованный запрос сертификата" содержимое файла test.req и нажмите кнопку "Выдать".

  5. Сохраните файл по ссылке "Загрузить сертификат". Выгрузку сертификата необходимо проводить в формате Base64.

  6. Установите полученный от УЦ сертификат в указанный ключевой контейнер:

    certmgr -inst -store uMy -file certnew.cer -cont test_keys
    

Также в ОС Windows возможно получение сертификата с помощью тестового центра КриптоПро без самостоятельного создания запроса.

Для этого нажмите "Сформировать ключи и отправить запрос на сертификат" и заполните некоторые данные.

Выданные сертификаты можно посмотреть в окне "Сертификаты" (Пуск\(\longrightarrow\)КРИПТО-ПРО\(\longrightarrow\)Сертификаты).

Просмотр сертификатов

Рис. Д.5 Просмотр сертификатов

Д.2. Настройка в операционной системе Linux

Д.2.1. Общие настройки

  1. Архив с программным обеспечением можно загрузить с официального сайта КриптоПРО в разделе загрузка: linux-ia32.tgz, linux-amd64.tgz.

    Примечание

    По умолчанию при скачивании с сайта КриптоПро выдается лицензия на три месяца

  2. Распакуйте архив и перейдите в распакованную папку.

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

    rpm -i lsb-cprocsp-base-X.X.X-X.rpm
    rpm -i lsb-cprocsp-rdr-X.X.X-X.rpm
    rpm -i lsb-cprocsp-capilite-X.X.X-X.rpm
    rpm -i lsb-cprocsp-kc1-X.X.X-X.rpm
    

    На ОС, основанных на Debian (Debian/Ubuntu) сначала необходимо поставить (если не установлены) пакеты LSB из состава дистрибутива, а также пакет alien, который является штатным средством для установки .rpm:

    apt-get install lsb-base alien lsb-core
    

    Затем при помощи alien поставить необходимые пакеты CSP, например:

    alien -kci ./lsb-cprocsp-base-X.X.X-X.rpm
    alien -kci ./lsb-cprocsp-rdr-X.X.X-X.rpm
    alien -kci ./lsb-cprocsp-capilite-X.X.X-X.rpm
    alien -kci ./lsb-cprocsp-kc1-X.X.X-X.rpm
    

    КриптоПро устанавливается по пути /opt/cprocsp. Контейнер должен быть доступен для пользователя reddatabase. Для этого скопируйте содержимое папки /var/opt/cprocsp/keys/user в /var/opt/cprocsp/keys/reddatabase и назначьте права:

    chown -R reddatabase: /var/opt/cprocsp/keys/reddatabase
    

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

  4. В Linux поддерживается провайдер Crypto-Pro GOST R 34.10-2012 KC1 CSP.

  5. Настройте сервер «РЕД База Данных» на работу с криптоплагином. Для этого в конфигурационном файле firebird.conf указываются следующие параметры:

    • CryptoPlugin – имя криптоплагина (значение по умолчанию Crypto_API)

    • SymmetricMethod – алгоритм, используемый для симметричного шифрования. Можно указывать название алгоритма или его идентификатор в криптопровайдере (AlgId). Идентификатор алгоритма можно узнать утилитами mint и hashgen при запуске без параметров (параметр CryptoPlugin в конфигурационном файле должен быть задан) или утилитой КриптоПро csptest с параметрами -enum -info.Если используется неанглоязычные названия алгоритмов, необходимо перекодировать их в 2-х байтный юникод, например ГОСТ Р 34.11-2012 примет вид %D0%93%D0%9E%D0%A1%D0%A2+%D0%A0+34.11-2012

    • HashMethod – название или идентификатор алгоритма хэширования. Способ представления аналогичен SymmetricMethod.

    • ProviderName – название или идентификатор алгоритма криптопровайдера. Способ представления аналогичен SymmetricMethod.

Д.2.2. Создание контейнера с закрытыми ключами

Предупреждение

Убедитесь, что пользователь операционной системы, от которого выполняется подключение, имеет достаточно прав на файл .registry_lock.

При использовании криптографических функций (например, во время многофакторной аутентификации) СУБД может падать внутри библиотеки КриптоПро версии 4.0 и ниже, если на файл /var/opt/cprocsp/tmp/.registry_lock установлены неправильные права (владелец root, например). В таком случае при попытке доступа к этому файлу из библиотеки КриптоПро происходит падение приложения, которое её использует. Таким приложением может быть клиент (например, ISQL) или процесс сервера. При этом выводится ошибка "support_mutex_open("registry_lock") failed:: Permission denied".

  1. Ридеры (readers) — устройства размещения контейнеров (аппаратные токены, каталог для размещения файлов). Просмотр доступных ридеров:

    $ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
    

    Ридер HDIMAGE размещается на /var/opt/cprocsp/keys/<имя пользователя>/.

  2. Инициализация ридера HDIMAGE (под правами root):

    cpconfig -hardware reader -add HDIMAGE store
    
  3. Создадим контейнер с именем test в локальном ридере HDIMAGE. Команды для работы с сертификатом нужно выполнять от имени пользователя ОС, от которого в дальнейшем будет запускаться клиентское приложение:

    $ csptest -keyset -provtype 81 -newkeyset -cont '\\.\HDIMAGE\test' -keytype exchange
    

    Для аутентификации по сертификату необходимо создать только ключи обмена (-keytype exchange). Если создать ключи и обмена и подписи, то сертификат будет по умолчанию привязан к ключу подписи и аутентификация с ним работать не будет.

    При установленном пакете cprocsp-rdr-gui-gtk будет показано графическое окно, где предложат двигать курсором мыши. Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры. После показа окна будет предложено указать пароль на контейнер (можно указать пустой, тогда пароль запрашиваться не будет) и снова предложат двигать курсором мыши.

    CSP (Type:81) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64
    FastCode:READY:AVX.
    AcquireContext: OK. HCRYPTPROV: 6679219
    GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
    Container name: "card"
    Signature key is not available.
    Attempting to create a signature key...
     signature key created.
     Exchange key is not available.
     Attempting to create an exchange key...
     an exchange key created.
     Keys in container:
     signature key
     exchange key
     Extensions:
     OID: 1.2.643.2.2.37.3.9
     OID: 1.2.643.2.2.37.3.10
     Total: SYS: 0,030 sec USR: 0,160 sec UTC: 22,910 sec
     [ErrorCode: 0x00000000]
    
  4. Ключи в Linux хранятся в /var/opt/cprocsp/keys/<имя пользователя>/<имя контейнера>.

  5. Просмотр доступных контейнеров:

    $ csptest -keyset -enum_cont -fqcn -verifyc
    
  6. Удаление контейнера:

    $ csptest -keyset -deletekeyset -cont '\\.\HDIMAGE\test'
    

Д.2.3. Создание сертификата

Для получения сертификата в ОС Linux с помощью тестового центра КриптоПро выполните следующие действия:

  1. Сформируйте запрос на получение сертификата с помощью утилиты cryptcp и ее команды creatrqst.

    -creatrqst -dn <RDN> [-provtype <N>] [-provname <CSP>] [-SMIME]
    [-nokeygen|-exprt] [-keysize <n>] [-hashAlg <OID>] [-ex|-sg|-both]
    [-ku|-km] [-cont <имя>] [-silent] [-pin <пароль>|-askpin] [-certusage
    <OIDs>] [-der] [-ext <расширение>] <имя файла>
    

    При генерации запроса для клиентского сертификата необходимо указать заранее созданный клиентский контейнер с ключевой парой. Для этого используется опция -nokeygen. Контейнер может быть указан без спецификатора HDIMAGE. Например:

    /opt/cprocsp/bin/ia32/cryptcp -creatrqst -nokeygen -cont
    '\\.\HDIMAGE\test' -provtype 81 -dn 'CN=tester' test.req
    

    Предупреждение

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

    Подробнее о командах и входных параметрах этой утилиты см. руководство по приложению командной строки CryptCP по адресу: https://www.cryptopro.ru/sites/default/files/products/cryptcp/cryptcp_5.0.x.pdf.

  2. Откройте тестовый удостоверяющий центр КриптоПро.

  3. Нажмите "Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64"

  4. Вставьте в поле "Base-64-шифрованный запрос сертификата" содержимое файла test.req и нажмите кнопку "Выдать".

  5. Сохраните файл по ссылке "Загрузить сертификат". Выгрузку сертификата необходимо проводить в формате Base64.

    Примечание

    Не все браузеры в ОС Linux могут поддерживать выгрузку сертификатов. Это зависит от настроек сервера центра сертификации.

  6. Устанавливаем, полученный от УЦ сертификат, в указанный ключевой контейнер:

    $ certmgr -inst -store uMy -file certnew.cer -cont '\\.\HDIMAGE\test'
    
  7. Чтобы посмотреть сертификаты, введите команду:

    $ certmgr -list
    
  8. Чтобы удалить сертификат, введите команду:

    $ certmgr -delete 1
    $ certmgr -delete -all
    

Д.2.4. Проверка сертификата

При проверке сертификата КриптоПро необходимо проверить сертификат центра сертификации и список отзыва. Можно в режиме онлайн, если с хоста сервера СУБД разрешено подключение к серверу УЦ КриптоПро. Если подключение запрещено или невозможно, для проверки сертификата нужно установить сертификат ЦС и список отзыва, скачав их по ссылке.

Установка должна выполняться в хранилище root от имени пользователя ОС, от которого будет запущен сервер СУБД. Пример команды установки сертификата ЦС:

sudo -u reddatabase /opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file /tmp/ca.cer

Установка списка отзыва сертификатов:

sudo -u reddatabase /opt/cprocsp/bin/amd64/certmgr -inst -crl -store uRoot -file /tmp/certcrl.crl