Данная статья предназначена в первую очередь для разработчиков, чьи программные продукты должны работать на компьютерах под управлением ОС Astra Linux Special Edition в условиях применения Замкнутой Программной Среды (ЗПС). Для того, чтобы ЗПС позволила запуск добавляемых разработчиками файлов (исполняемых файлов и библиотек), эти файлы должны быть подписаны. Далее описывается процедура подписывания файлов.
См. также статью Инструменты для выполнения подписания файлов DLL и проверки подписи.
Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
Astra Linux Common Edition 2.12
Подготовительные действия
Все действия осуществляются от имени непривилегированного пользователя, если не указано иное.
Далее в статье:
- Название организации принято за ORG;
- Предполагается, что подписываемый файл test_elf находится в том же каталоге, что и ключи, используемые для подписания.
- Ознакомиться с разделом 16. ОГРАНИЧЕНИЕ ПРОГРАММНОЙ СРЕДЫ документации "Руководство по КСЗ. Часть 1 РУСБ.10015-01 97 01-1";
- Изучить программную документацию:
man bsign
;man gpg
.
Изучить дополнительные информационные материалы
- Убедиться в наличии и доступности комплекта ключей. Ключи могут быть:
- Получены от ООО "РусБИТех-Астра" (далее - изготовитель) по запросу. Это ключи, подписанные ключами изготовителя. См. статью Как получить ключи для подписи СПО.
- Эти ключи могут использоваться для проверки всех типов подписей.
- Созданы самостоятельно (самоподписанные ключи).
- Эти ключи не могут использоваться для проверки встраиваемых подписей.
- Эти ключи могут использоваться для проверки подписей в расширенных атрибутах и, в обновлениях начиная с Astra Linux Special Edition 1.8, отсоединенных подписей.
- Наличие подписи изготовителя в этих ключах не проверяется.
- Получены от ООО "РусБИТех-Астра" (далее - изготовитель) по запросу. Это ключи, подписанные ключами изготовителя. См. статью Как получить ключи для подписи СПО.
Импорт ключей, полученных от изготовителя
Если комплект ключей получен в виде ISO-образа - примонтировать этот образ. Если комплект ключей получен в виде архива — распаковать архив.
При работе с ключами соблюдать меры безопасности для предотвращения несанкционированного доступа к секретному ключу и паролю и предотвращению утери секретного ключа.Модуль gpg и модуль digsig_verif - абсолютно не связаны и независимы. Список импортированных ключей в gpg никак не влияет на проверку исполняемых файлов при включении режима замкнутой программной среды (ЗПС).
Импортировать в таблицу ключей пользователя секретный ключ.
Ключи должны быть импортированы в таблицу ключей того пользователя, от имени которого в дальнейшем будет выполняться подписывание. Если подписывание будет выполняться с использованием sudo, то импорт также следует выполнять с использованием sudo. Ключи могут быть импортированы в несколько таблиц, например, для подписания с пользованием с sudo и без использования sudo, но дублирование ключей затрудняет их контроль и увеличивает риск утечки.Для импорта ключей:
- Импортировать предустановленные ключи изготовителя, если это не было сделано ранее. Импортировать ключи следует в порядке их подписания, т.е. сначала ключ, которым выполнялась подпись, затем - подписанный ключ:
gpg --import /etc/digsig/primary_key_2018.gpg gpg --import /etc/digsig/partners_rbt_root_key_2018.gpg
- Перейти в каталог с полученными ключами и импортировать ключи из полученного комплекта ключей. Для выполнения операции импорта понадобится указать пароль. В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5) запрос пароля не производится. Пароль находится в этом же каталоге в файле ORG_password.txt. Будьте аккуратны при копировании в буфер обмена — символ перевода строки будет распознан соответственно. Во избежание ошибок при вводе пароля рекомендуется указать файл с паролем с помощью опции при выполнении команды импорта:gpg --import --pinentry-mode=loopback --passphrase-file=ORG_password.txt ORG_secret.gpgВ примере выше опция --passphrase-file позволяет не запрашивать пароль, а прочитать его из файла, указанного в этой опции.
Проверить список импортированных ключей и запомнить идентификатор ключа ORG_secret_key_id:
gpg --list-secret-keysИдентификатор ключа в выводе команды представлен строкой из сорока шестнадцатиричных цифр (строкой из 8 символов и указывается через обратную косую черту ("слэш") после алгоритма в Astra Linux Special Edition 1.5).
- Импортировать предустановленные ключи изготовителя, если это не было сделано ранее. Импортировать ключи следует в порядке их подписания, т.е. сначала ключ, которым выполнялась подпись, затем - подписанный ключ:
Создание и регистрация самоподписанного ключа
- Для создания самоподписанных ключей:
- Создать файл с параметрами ключей, например:
Key-Type:GOST_R34.10-2012 %no-protection Name-Real:<название_организации> Name-Comment: No comments Name-Email: <адрес_электронной_почты>
- Выполнить генерацию ключей:gpg --gen-key --batch <имя_файла_с_параметрами>При генерации будет создана пара из закрытого и открытого ключей. Закрытый ключ не подлежит распространению и используется для подписывания файлов. Копии открытого ключа распространяется для для проверки подписей, сделанных парным закрытым ключом.
- Создать файл с параметрами ключей, например:
- Регистрация самоподписанного ключа требуется на тех машинах, на которых будут проверяться подписи, сделанные этим ключом Для регистрации самоподписанного ключа:
- Экспортировать открытый ключ, сохранив его в файле:gpg --export "<название_организации>" > <название_организации>.gpg
- Опционально: передать открытый ключ изготовителю для подписания и получить подписанный ключ.
- На всех машинах, на которых будет выполняться проверка подписи:
- Разместить копии файла с экспортированным (подписанным) ключом:
- Если ключ подписан изготовителем, то в каталоге /etc/digsug/keys. Такой ключ может применяться для проверки всех типов подписей.
- Если ключ не подписан изготовителем, то в каталоге /etc/digsig/xattr_keys. Такой ключ не может применяться для проверки встраиваемых подписей, и может применяться для проверки подписей в расширенных атрибутах и, в обновлениях начиная с Astra Linux Special Edition 1.8, отсоединенных подписей.
- Если ЗПС была включена до размещения ключей, то:
- Зарегистрировать ключи в ядре:sudo update-initramfs --uk all
- Перезагрузить ОС.
- Зарегистрировать ключи в ядре:
- Разместить копии файла с экспортированным (подписанным) ключом:
- Экспортировать открытый ключ, сохранив его в файле:
Подписывание файлов
После выполнения подписывания следует в обязательном порядке тестировать работоспособность ПО. В случае выявления нарушения работы ПО (возможно для файлов с нестандартной структурой) использовать вместо встроенных подписей отсоединенные.
Доступные инструменты для подписывания файлов:
- начиная с обновления Astra Linux Special Edition 1.8 — инструмент
bsign-integrator
; - инструмент
bsign
, применение которого описано далее; - инструменты
bsign-dll
иbsign-dot-net
.
Доступные методы подписания файлов зависят от наличия ключей:
- При наличии ключей подписанных изготовителем можно использовать все типы подписей.
- При наличии только самоподписанных ключей можно использовать подписи в расширенных атрибутах и, начиная с обновления Astra Linux Special Edition 1.8, отсоединенные подписи.
- При применении самоподписанных ключей для создания встраиваемой подписи подписание и проверка подписи командами
bsign
(bsign-integrator
) выполняются без ошибок, однако в ЗПС такая не может быть проверена и работать не будет. Для создания встраиваемых подписей следует использовать только ключи, подписанные изготовителем. - Если инструменты подписывания отказываются подписывать файлы или подписывают файлы с ошибками, то для таких файлов следует использовать отсоединенную подпись. Такая ситуация возможна для файлов с нарушениями стандартов формата ELF.
Одним из возможных симптомов некорректного подписания файла является уменьшение его размера в результате добавления подписи.
- При применении самоподписанных ключей для создания встраиваемой подписи подписание и проверка подписи командами
Для подписания файлов:
- Архивы и пакеты (deb-файлы) необходимо предварительно распаковать для анализа содержащихся в них файлов.
Убедиться в пригодности файла для подписания, проверив его тип. Проверить тип файла можно с помощью команды file. Например, для файла /bin/bash:
file /bin/bashДля файла формата PE:
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=30bada4dfa11f45a96a5993d4c2fd41a27a61663, strippedfile SampleRes.dll
SampleRes.dll: PE32 executable (DLL) (console) Intel 80386, for MS WindowsЕсли тип файла не ELF, то:
- в Astra Linux Special Edition 1.8 для
- в Аstra Linux c установленным актуальным оперативным обновлением для подписания файлов формата PE можно использовать
bsign
, явно задавая тип подписи; в более ранних обновлениях bsign может не поддерживать подписи для формата файлов PE, и в таких случаях следует использовать процедуру создания встраиваемой подписи из статьи Инструменты для выполнения подписания файлов DLL и проверки подписи;
- для подписания файлов иных форматов следует использовать подписи в расширенных атрибутах и отсоединенные подписи.
Подписание тестового ELF-файла test_elf с помощью команды bsign:
bsign -s test_elfЕсли тип подписи не указан явно (см. далее), то начиная с версии bsign 1.4.1 по умолчанию используется встраиваемая подпись (-E). В версиях 1.2.1 — 1.4.1 тип подписи автоматически определяется в зависимости от формата файла (ELF или PE). В более ранних обновлениях используется встраиваемая подпись и, в некоторых версиях, подпись в расширенных атрибутах.Если импортирован только один ключ, можно ограничиться вышеуказанной командой без каких-либо опций. При наличии нескольких ключей, можно указать, каким именно ключом следует подписать файл:
bsign -s --pgoptions="--default-key=ORG_secret_key_id" test_elfДля подписания файлов форматов отличных от ELF следует дополнительно указать опцию, определяющую тип подписи. См. ЗПС: инструмент bsign и ЗПС: инструмент bsign-integrator.При работе из командной строки без использования графической оболочки (например, при подключении через ssh или при работе в консоли), требуется использовать дополнительные опции, т.к. в этом случае не может быть выдан графический запрос на ввод пароля, и операция завершится ошибкой (сообщением о неверно введенном пароле). В таком случае можно:
- Сохранить пароль в файле (в примере ниже - в файле ORG_password.txt.
Использовать команду bsign со следующими опциями:
bsign -N -s --pgoptions="--batch --pinentry-mode=loopback --passphrase-file=ORG_password.txt --default-key=ORG_secret_key_id" test_elfгде опция -N запрещает запрос пароля командой bsign, а значение опции --pgoptions предписывает использовать пароль, сохраненный в файле, без интерактивного запроса.
После того, как файл подписан, можно проверить подпись:
Особенности создания отсоединенной подписи
Для создания отсоединенной опции с помощью команды bsign используется опция -D (–detached) этой команды:
По умолчанию подпись создается в каталоге /etc/digsig/external_sig
. Имя файла с подписью формируется как полный путь к подписываемому файлу в котором символы косая черта ("/") заменены символами коммерческое at ("@") и добавлено расширение ,sign. Например, для файла /home/user/detached_example полный путь к файлу будет /etc/digsig/external_sig/@home@user@detached_example.sign
. Каталог /etc/digsig/external_sig
по умолчанию недоступен непривилегированным пользователям. Чтобы разрешить в него запись можно использовать ACL, например:
Более удобным может быть использование явного указания каталога, в котором должна сохраняться создаваемая отсоединенная подпись, с помощью опции -T команды bsign. Например, для сохранения отсоединенных подписей в текущем каталоге:
Для того, чтобы отсоединенная подпись могла проверяться необходимо:
- Скопировать подпись в каталог
/etc/digsig/external_sig/
на машине, на которой будет выполняться проверка. - Загрузить подпись в ядро на машине, на которой будет выполняться проверка и перезагрузить ОС. Подробнее см. Ограничения программной среды в Astra Linux Special Edition x.8.
Запуск подписанных файлов на клиентских машинах
Далее под клиентской машиной подразумевается машина, на которой:
- Включен ЗПС.
- Используются подписанные файлы.
Машина, на которой выполняется подписывание файлов, в подавляющем большинстве случаев не является клиентской машиной.
Для того, чтобы подписанные файлы могли использоваться на клиентских машинах при включенной ЗПС:
- на клиентскую машину должны быть скопированы:
- ключи для проверки подписей;
- отсоединенные подписи, если они используются.
- скопированные ключи и подписи загружены в ядро ОС клиентской машины.
Подробную информацию о настройке ЗПС на клиентских машинах см. в статье Ограничения программной среды в Astra Linux Special Edition x.8.