Оглавление |
---|
Информация | ||
---|---|---|
| ||
|
Общая информация
Инструменты замкнутой программной среды (ЗПС) предоставляют администраторам ОС возможность внедрения цифровой подписи в исполняемые файлы формата ELF, входящие в состав устанавливаемого СПО, и в расширенные атрибуты файловой системы.
Механизм контроля целостности исполняемых файлов и разделяемых библиотек формата ELF при запуске программы на выполнение (загрузке библиотеки) реализован в модуле ядра ОС digsig_verif. Модуль digsig_verif является невыгружаемым модулем ядра Linux и может функционировать в одном из следующих режимов:
- исполняемым файлам и разделяемым библиотекам с неверной ЭЦП, а также без ЭЦП загрузка на исполнение запрещается (штатный режим функционирования);
- исполняемым файлам и разделяемым библиотекам с неверной ЭЦП, а также без ЭЦП загрузка на исполнение разрешается, при этом выдается сообщение об ошибке проверки ЭЦП (режим для проверки ЭЦП в СПО);
- ЭЦП при загрузке исполняемых файлов и разделяемых библиотек не проверяется (отладочный режим для тестирования СПО).
Механизм контроля целостности файлов при их открытии на основе ЭЦП, содержащейся в расширенных атрибутах файлов, также реализован в модуле ядра ОС digsig_verif и может функционировать в одном из следующих режимов:
- запрещается открытие или запуск файлов, поставленных на контроль, имеющих неверную ЭЦП или не имеющих ЭЦП (т.е. файлов, либо не подписанных, либо не имеющих ключа в каталогах /etc/digsig/xattr_keys или /etc/digsig/keys);
- открытие файлов, поставленных на контроль, имеющих неверную ЭЦП или не имеющих ЭЦП разрешается, при этом выдается сообщение об ошибке проверки ЭЦП (режим для проверки ЭЦП в расширенных атрибутах файловой системы);
- ЭЦП при открытии файлов не проверяется.
Настройка модуля digsig_verif
Настройка режима функционирования модуля digsig_verif осуществляется посредством графического инструмента fly-admin-smc (<<Панель управления --- Безопасность --- Политика безопасности --- Замкнутая программная среда>>) или путем редактирования конфигурационного файла /etc/digsig/digsig_initramfs.conf. Описание использования графического инструмента приведено в электронной справке.
Дополнительно для настройки режима функционирования модуля digsig_verif с проверкой подписи в исполняемых файлах можно использовать инструмент командной строки astra-digsig-control, входящий в пакет astra-safepolicy (см. Инструменты командной строки astra-safepolicy).
Порядок прямого редактирования конфигурации модуля digsig_verif для настройки режима проверки подписи ELF:
Раскрыть | ||||||
---|---|---|---|---|---|---|
Редактирование конфигурационного файла /etc/digsig/digsig_initramfs.conf осуществляется следующим образом:
|
В модуль digsig_verify встроены открытые ключи АО "НПО РусБИТех", которые используются:
- для проверки подписи исполняемых файлов;
- для проверки подписи открываемых файлов в расширенных атрибутах;
- для проверки подписи на дополнительных ключах, загружаемых из каталога /etc/digsig/keys.
В каждый момент времени модуль использует два набора ключей:
- основной набор (изначально три встроенных ключа АО "НПО РусБИТех") --- для проверки любых подписей;
- дополнительный набор (изначально пустой) --- только для проверки подписи открываемых файлов в расширенных атрибутах.
Если дополнительный набор не содержит ключа, который использовался для подписи файла в расширенных атрибутах, модуль ищет подходящий ключ в основном наборе.
Каталог /etc/digsig/keys содержит открытые ключи в формате gnupg --export, которыми расширяется основной набор ключей при загрузке системы. Каждый ключ, использованный для подписывания СПО, необходимо скопировать в каталог /etc/digsig/keys/, например, с использованием команды:
Command |
---|
sudo 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 выполнить команды:
Command |
---|
sudo -s cat /etc/digsig/key_for_signing.gpg > /sys/digsig/keys exit |
Предупреждение |
---|
При проверке ЭЦП в расширенных атрибутах файловой системы установка для параметра DIGSIG_XATTR_MODE значения 1 запрещает открытие поставленных на контроль файлов с неверной ЭЦП или без ЭЦП. |
Настройка режима функционирования механизма контроля целостности файлов при их открытии на основе ЭЦП в расширенных атрибутах файловой системы осуществляется с помощью графического инструмента fly-admin-smc (<<Панель управления --- Безопасность --- Политика безопасности --- Замкнутая программная среда>>) или путем редактирования конфигурационного файла /etc/digsig/digsig_initramfs.conf.
Порядок прямого редактирования конфигурации модуля digsig_verif для настройки режима проверки подписи в расширенных атрибутах (xattr):
Раскрыть | ||||||||
---|---|---|---|---|---|---|---|---|
Редактирование конфигурационного файла /etc/digsig/digsig_initramfs.conf осуществляется следующим образом:
|
- Для отображения сообщения о загрузке неподписанного файла можно добавить в автозапуск утилиту fly-syslog-monitor.
Каталог /etc/digsig/xattr_keys содержит открытые ключи в формате gnupg --export, которыми расширяется дополнительный набор ключей модуля (изначально пустой набор, используемый только для проверки подписи в расширенных атрибутах файла). Подписи на ключах дополнительного набора не проверяются.
Каждый дополнительный ключ, использованный для подписывания файлов в расширенных атрибутах, необходимо скопировать в каталог /etc/digsig/xattr_keys/, например, с
использованием команды:
Command |
---|
sudo 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 выполнить команды:
Command |
---|
sudo -s cat /etc/digsig/xattr_keys/key1.gpg >> /sys/digsig/xattr_keys exit |
Управление модулем 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 --- файл загрузки дополнительных ключей, используемых только при проверке ЭЦП в расширенных атрибутах ФС.
Проверка режимов работы выполняется командами:
Command |
---|
cat /sys/digsig/elf_mode cat /sys/digsig/xattr_mode |
Предупреждение | ||
---|---|---|
Для отключения проверки ЭЦП по ГОСТ~Р~34.10-2001 необходимо в конфигурационном файле /etc/digsig/digsig_initramfs.conf установить следующее значение параметра:
|
Предупреждение | ||
---|---|---|
После внесения изменений в конфигурационный файл /etc/digsig/digsig_initramfs.conf и для загрузки модулем digsig_verif ключей после их размещения его в каталогах /etc/digsig/keys/ и /etc/digsig/xattr_keys/
|
Подписывание ПО
В модуле ядра digsig_verif реализован механизм, позволяющий использовать несколько ключей при подписывании файлов формата ELF.
Порядок использования ключей для digsig_verif:
- дополнительные ключи записываются в /sys/digsig/keys или /sys/digsig/xattr_keys' в иерархической последовательности цепочек подписей;
- все дополнительные ключи должны быть подписаны главным ключом или другим дополнительным ключом, подпись которого может быть проверена (за исключением первого ключа в каталоге /sys/digsig/xattr_keys).
Для создания дополнительных ключей используется GNU Privacy Guard.
Модифицированный GnuPG выводит ГОСТ~Р~34.11-94 в списке доступных алгоритмов.
Для получения списка доступных алгоритмов необходимо выполнить команду:
Command |
---|
gpg --version |
Пример списка:
Раскрыть |
---|
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:
Command |
---|
gpg --gen-key |
Пример диалога:
Раскрыть |
---|
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 Для защиты закрытого ключа необходим пароль. Введите пароль: ПАРОЛЬ Повторите пароль: ПАРОЛЬ |
Экспорт ключа в файл осуществляется командой:
Command |
---|
gpg --export "Test GOST R 34.10-2012 Secondary Key <test@gost.secondary.key>" > /tmp/secondary_gost_key.gpg |
Ключ пользователя может быть заверен с использованием команд:
Command |
---|
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 (по умолчанию подпись внедряется в том числе и в расширенные атрибуты файла):
Command |
---|
bsign --sign test_elf |
Пользователь подписывает утилитой bsign на данном ключе произвольный файл с внедрением подписи только в расширенные атрибуты:
Command |
---|
keys@debian:~$ bsign --sign --xattr test_elf |
Дополнительная информация доступна в справке по утилите bsign;
Для проверки правильности ЭЦП файла формата ELF используется утилита bsign:
Command |
---|
bsign -w test_elf |
Дополнительный ключ пользователя, подписанный на главном ключе, копируется в каталог /etc/digsig/.
Подписанный файл формата ELF может выполняться:
Command |
---|
./test_elf |
Проверка работы ЗПС
Модуль проверки подписи приложений digsig_verif является невыгружаемым модулем ядра. Сообщения таких модулей можно просмотреть командой:
Command |
---|
sudo dmesg |
Или, в случае модуля digsig_verif:
Command |
---|
sudo dmesg | grep DIGSIG |
При попытке запуска наподписанной неподписанной программы в ЗПС в журнале будут отображаться сообщения вида:
Блок кода |
---|
... DIGSIG: [ERROR] NOT SIGNED: path=.... |
Журналы с сообщениями об ошибках сохраняются в файлах /var/log/messages и /var/log/kernel.log.