Содержание

Skip to end of metadata
Go to start of metadata

Инструменты замкнутой программной среды (ЗПС) предоставляют возможность внедрения цифровой подписи в исполняемые файлы формата ELF, входящие в состав устанавливаемого СПО , и в расширенные атрибуты файловой системы.


Механизм контроля целостности исполняемых файлов и разделяемых библиотек формата ELF при запуске программы на выполнение реализован в модуле ядра ОС digsig_verif, который является не выгружаемым модулем ядра Linux и может функционировать в одном из следующих режимов:

  • исполняемым файлам и разделяемым библиотекам с неверной ЭЦП, а также без ЭЦП загрузка на исполнение запрещается (штатный режим функционирования);
  • исполняемым файлам и разделяемым библиотекам с неверной ЭЦП, а также без ЭЦП загрузка на исполнение разрешается, при этом выдается сообщение об ошибке проверки ЭЦП (режим для проверки ЭЦП в СПО);
  • ЭЦП при загрузке исполняемых файлов и разделяемых библиотек не проверяется (отладочный режим для тестирования СПО).


Механизм контроля целостности файлов при их открытии на основе ЭЦП в расширенных атрибутах файловой системы также реализован в модуле ядра ОС digsig_verif и может функционировать в одном из следующих режимов:

  • запрещается открытие файлов, поставленных на контроль, с неверной ЭЦП или без ЭЦП;
  • открытие файлов, поставленных на контроль, с неверной ЭЦП или без ЭЦП разрешается, при этом выдается сообщение об ошибке проверки ЭЦП (режим для проверки ЭЦП в расширенных атрибутах файловой системы);
  • ЭЦП при открытии файлов не проверяется.

Настройка модуля digsig_verif


Настройка режима функционирования модуля digsig_verif осуществляется посредством графического инструмента fly-admin-smc (<<Панель управления --- Безопасность --- Политика безопасности --- Замкнутая программная среда>>) или путем редактирования конфигурационного файла /etc/digsig/digsig_initramfs.conf. Описание использования графического инструмента приведено в электронной справке.

Редактирование конфигурационного файла /etc/digsig/digsig_initramfs.conf осуществляется следующим образом:

  • для использования отладочного режима для тестирования СПО необходимо установить для параметра DIGSIG_ELF_MODE значение 0:

    DIGSIG_ELF_MODE=0
  • для использования режима для проверки ЭЦП в СПО необходимо установить для параметра DIGSIG_ELF_MODE значение 2:

    DIGSIG_ELF_MODE=2
  • для использования штатного режима функционирования необходимо установить для параметра DIGSIG_ELF_MODE значение 1:

    DIGSIG_ELF_MODE=1

В модуль digsig_verify встроены открытые ключи АО "НПО РусБИТех", которые используются:

  • для проверки подписи исполняемых файлов;
  • для проверки подписи открываемых файлов в расширенных атрибутах;
  • для проверки подписи на дополнительных ключах, загружаемых из каталога /etc/digsig/keys.


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

  • основной набор (изначально три встроенных ключа АО "НПО РусБИТех") --- для проверки любых подписей;
  • дополнительный набор (изначально пустой) --- только для проверки подписи открываемых файлов в расширенных атрибутах.


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

Каталог /etc/digsig/keys содержит открытые ключи в формате gnupg --export, которыми расширяется основной набор ключей при загрузке системы. Каждый ключ, использованный для подписывания СПО, необходимо скопировать в каталог /etc/digsig/keys/, например, с использованием команды:

    cp /<каталог>/<файл ключа> /etc/digsig/keys/

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

  • файлы ключей в /etc/digsig/keys должны быть подписаны встроенными в модуль digsig_verify ключами АО "НПО РусБИТех";
  • файлы ключей в /etc/digsig/keys/subdirectory могут быть подписаны и встроенными ключами АО "НПО РусБИТех", и ключами из /etc/digsig/keys;
  • в целом, каждый ключ из подкаталога внутри /etc/digsig/keys должен быть подписан либо ключом из вышележащего каталога, либо встроенным ключом АО "НПО РусБИТех".

Например:

/etc/digsig/keys/key1.gpg - публичный ключ 1, подписанный  на первичном ключе АО <<НПО РусБИТех>>
/etc/digsig/keys/key2.gpg - публичный ключ 2, подписанный на первичном ключе АО <<НПО РусБИТех>>
/etc/digsig/keys/key1/key1-1.gpg - публичный ключ, подписанный на ключе 1
/etc/digsig/keys/key1/key1-2.gpg - публичный ключ, подписанный на ключе 1
/etc/digsig/keys/key2/key2-1.gpg - публичный ключ, подписанный на ключе 2
/etc/digsig/keys/key2/key2-2.gpg - публичный ключ, подписанный на ключе 2


Для проверки использования дополнительных ключей для контроля целостности исполняемых файлов и разделяемых библиотек формата ELF (до перезагрузки ОС) можно от имени учетной записи
администратора через механизм sudo выполнить команды:

cat /etc/digsig/key_for_signing.gpg > /sys/digsig/keys
cat /etc/digsig/keys/key1.gpg >> /sys/digsig/keys
cat /etc/digsig/keys/key2.gpg >> /sys/digsig/keys
cat /etc/digsig/keys/key1/key1-1.gpg >> /sys/digsig/keys
cat /etc/digsig/keys/key1/key1-2.gpg >> /sys/digsig/keys
cat /etc/digsig/keys/key2/key2-1.gpg >> /sys/digsig/keys
cat /etc/digsig/keys/key2/key2-2.gpg >> /sys/digsig/keys

При проверке ЭЦП в расширенных атрибутах файловой системы установка для параметра DIGSIG_XATTR_MODE значения 1 запрещает открытие поставленных на контроль файлов с неверной ЭЦП или без ЭЦП.


Настройка режима функционирования механизма контроля целостности файлов при их открытии на основе ЭЦП в расширенных атрибутах файловой системы осуществляется с помощью графического инструмента fly-admin-smc (<<Панель управления --- Безопасность --- Политика безопасности --- Замкнутая программная среда>>) или путем редактирования конфигурационного файла /etc/digsig/digsig_initramfs.conf.

Редактирование конфигурационного файла /etc/digsig/digsig_initramfs.conf осуществляется следующим образом:

  • для включения проверки подписей в режиме запрета открытия поставленных на контроль файлов с неверной ЭЦП или без ЭЦП в расширенных атрибутах файловой системы необходимо установить для параметра |DIGSIG_XATTR_MODE значение 1:

    GSIG_XATTR_MODE=1
  • для включения проверки подписей в режиме вывода предупреждений об открытии поставленных на контроль файлов с неверной ЭЦП или без ЭЦП в расширенных атрибутах файловой системы необходимо установить для параметра DIGSIG_XATTR_MODE значение 2:

    DIGSIG_XATTR_MODE=2
  • для игнорирования дополнительных ключей, используемых только при проверке ЭЦП в расширенных атрибутах файловой, необходимо установить для параметра DIGSIG_IGNORE_XATTR_KEYS значение 1:

    DIGSIG_IGNORE_XATTR_KEYS=1
  • для настройки шаблонов имен, используемых при проверке ЭЦП в расширенных атрибутах ФС, необходимо в файле /etc/digsig/xattr_control задать их список. Каждая строка задает свой шаблон в виде маски полного пути. Например, следующий шаблон определяет, что будет проверяться ЭЦП всех файлов в каталоге /bin, имя которых начинается на lo:

    \bin\lo        

Каталог /etc/digsig/xattr_keys содержит открытые ключи в формате gnupg --export, которыми расширяется дополнительный набор ключей модуля (изначально пустой набор, используемый только для проверки подписи в расширенных атрибутах файла). Подписи на ключах дополнительного набора не проверяются.

Каждый дополнительный ключ, использованный для подписывания файлов в расширенных атрибутах, необходимо скопировать в каталог /etc/digsig/xattr_keys/, например, с
использованием команды:

cp /<каталог>/<файл ключа> /etc/digsig/xattr_keys/

В каталоге /etc/digsig/xattr_keys/ может располагаться иерархическая структура дополнительных ключей для контроля целостности файлов.
В указанной структуре одни дополнительные ключи могут быть подписаны на других дополнительных ключах.
При этом дополнительные ключи должны располагаться в подкаталогах таким образом, чтобы при их загрузке не нарушалась цепочка проверки подписей:

/etc/digsig/xattr_keys/key1.gpg - публичный ключ 1
/etc/digsig/xattr_keys/key2.gpg - публичный ключ 2
/etc/digsig/xattr_keys/key1/key1-1.gpg - публичный ключ, подписанный на ключе 1
/etc/digsig/xattr_keys/key1/key1-2.gpg - публичный ключ, подписанный на ключе 1
/etc/digsig/xattr_keys/key2/key2-1.gpg - публичный ключ, подписанный на ключе 2
/etc/digsig/xattr_keys/key2/key2-2.gpg - публичный ключ, подписанный на ключе 2


Для проверки использования дополнительных ключей для контроля целостности файлов (до перезагрузки ОС) можно от имени учетной записи администратора через механизм sudo выполнить команды:

cat /etc/digsig/xattr_keys/key1.gpg >> /sys/digsig/xattr_keys
cat /etc/digsig/xattr_keys/key2.gpg >> /sys/digsig/xattr_keys
cat /etc/digsig/xattr_keys/key1/key1-1.gpg >> /sys/digsig/xattr_keys
cat /etc/digsig/xattr_keys/key1/key1-2.gpg >> /sys/digsig/xattr_keys
cat /etc/digsig/xattr_keys/key2/key2-1.gpg >> /sys/digsig/xattr_keys
cat /etc/digsig/xattr_keys/key2/key2-2.gpg >> /sys/digsig/xattr_keys

Управление модулем digsig_verif осуществляется через  интерфейс sysfs с использованием файлов:

  • /sys/digsig/elf_mode --- просмотр и переключение режима работы при проверке ЭЦП исполняемых файлов и разделяемых библиотек формата ELF;
  • /sys/digsig/xattr_mode --- просмотр и переключение режима работы при проверке ЭЦП в расширенных атрибутах файловой системы;
  • /sys/digsig/keys --- файл загрузки дополнительных ключей для проверки ЭЦП исполняемых файлов формата ELF и ЭЦП в расширенных атрибутах ФС;
  • /sys/digsig/ignore_gost2001 --- отключение проверки ЭЦП по ГОСТ~Р~34.10-2001;
  • /sys/digsig/ignore_xattr_keys --- 1;
  • /sys/digsig/xattr_control --- список шаблонов имен, используемых при проверке ЭЦП в расширенных атрибутах ФС;
  • /sys/digsig/xattr_keys --- файл загрузки дополнительных ключей, используемых только при проверке ЭЦП в расширенных атрибутах ФС.


Проверка режимов работы выполняется командами:

cat /sys/digsig/elf_mode
cat /sys/digsig/xattr_mode

Для отключения проверки ЭЦП по ГОСТ~Р~34.10-2001 необходимо в конфигурационном файле /etc/digsig/digsig_initramfs.conf установить следующее значение параметра:

DIGSIG_IGNORE_GOST2001=1


После внесения изменений в конфигурационный файл /etc/digsig/digsig_initramfs.conf и для загрузки модулем digsig_verif ключей после их размещения его в каталогах /etc/digsig/keys/ и /etc/digsig/xattr_keys/
необходимо от имени учетной записи администратора через механизм \verb|sudo| выполнить команду:

sudo update-initramfs -u -k all


Подписывание ПО

В модуле ядра digsig_verif реализован механизм, позволяющий использовать несколько ключей при подписывании файлов формата ELF.

Порядок использования ключей для digsig_verif:

  • дополнительные ключи записываются в /sys/digsig/keys или /sys/digsig/xattr_keys' в иерархической последовательности цепочек подписей;
  • все дополнительные ключи должны быть подписаны главным ключом или другим дополнительным ключом, подпись которого может быть проверена (за исключением первого ключа в каталоге /sys/digsig/xattr_keys).


Для создания дополнительных ключей используется GNU Privacy Guard.
Модифицированный GnuPG выводит ГОСТ~Р~34.11-94 в списке доступных алгоритмов.
Для получения списка доступных алгоритмов необходимо выполнить команду:

gpg --version

Пример списка:

 Click here to expand...
gpg (GnuPG) 1.4.18
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Поддерживаются следующие алгоритмы:
С открытым ключом: RSA, RSA-E, RSA-S, ELG-E, DSA,
          GOST_R 34.10-2001,GOST_R 34.10-2012
Симметричные: 3DES, CAST5, BLOWFISH,
          AES, AES192, AES256, TWOFISH,
          CAMELLIA128, CAMELLIA192, CAMELLIA256
Хэш-функции: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512,
          SHA224, GOST_R34.11-2012, GOST_R34.11-94
Алгоритмы сжатия: Без сжатия, ZIP, ZLIB,
          BZIP2


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

Сначала создается ключевая пара GOST R 34.10-2001, которая сохраняется в каталоге ~/.gnupg.
Для создания ключевой пары необходимо выполнить приведенную далее команду с последующим выбором в меню gpg алгоритма ГОСТ~Р~34.10-2001:

gpg --gen-key
Пример диалога:

 Click here to expand...
gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: создан каталог `/home/keys/.gnupg'
gpg: создан новый файл настоек `/home/keys/.gnupg/gpg.conf'
gpg: ВНИМАНИЕ: параметры в `/home/keys/.gnupg/gpg.conf' еще не активны при этом запуске
gpg: создана таблица ключей `/home/keys/.gnupg/secring.gpg'
gpg: создана таблица ключей `/home/keys/.gnupg/pubring.gpg'
Выберите тип ключа:
(1) RSA и RSA (по умолчанию)
(2) DSA и Elgamal
(3) DSA (только для подписи)
(4) RSA (только для подписи)
(10) GOST R 34.10-2001 (только для подписи) устаревший
(12) GOST R 34.10-2012 (только для подписи)
Ваш выбор? 12
GOST keypair will have 256 bits.
Выборите срок действия ключа.
0 = без ограничения срока действия
<n> = срок действия - n дней
<n>w = срок действия - n недель
<n>m = срок действия - n месяцев
<n>y = срок действия - n лет
Срок действия ключа? (0) 0
Срок действия ключа не ограничен
Все верно? (y/N) y

Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его
из Вашего имени, комментария и адреса электронной почты в виде:
"Baba Yaga (pensioner) <yaga@deepforest.ru>"

Ваше настоящее имя: Test GOST R 34.10-2012 Secondary Key
Адрес электронной почты: test@gost.secondary.key
Комментарий:
Вы выбрали следующий ID пользователя:
"Test GOST R 34.10-2001 Secondary Key <test@gost.secondary.key>"

Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход? O
Для защиты закрытого ключа необходим пароль.
Введите пароль: ПАРОЛЬ

Повторите пароль: ПАРОЛЬ

Экспорт ключа в файл осуществляется командой:

gpg --export "Test GOST R 34.10-2012 Secondary Key <test@gost.secondary.key>" > /tmp/secondary_gost_key.gpg
Ключ пользователя может быть заверен с использованием команд:
gpg --import /tmp/secondary_gost_key.gpg
gpg --sign-key "Test GOST R 34.10-2012 Secondary Key <test@gost.secondary.key>"
gpg --export "Test GOST R 34.10-2001 Secondary Key <test@gost.secondary.key>" > /tmp/secondary_gost_key_signed.gpg
Пользователь подписывает на данном ключе некоторый файл формата ELF с использованием утилиты bsign (по умолчанию подпись внедряется в том числе и в расширенные атрибуты файла):
bsign --sign test_elf


Пользователь подписывает утилитой bsign на данном ключе произвольный файл с внедрением подписи только в расширенные атрибуты:
keys@debian:~$ bsign --sign --xattr test_elf

Дополнительная информация доступна в справке по утилите bsign;

Для проверки правильности ЭЦП файла формата ELF используется утилита bsign:
bsign -w test_elf

Дополнительный ключ пользователя, подписанный на главном ключе, копируется в каталог /etc/digsig/.

Подписанный файл формата ELF может выполняться:
./test_elf


  • No labels