Подпись ПО

Редактировал(а) Роман Воробьев 2021/07/22 02:26

Общее

Для подписи ПО разработчику/администратору АИС необходимо иметь комплект ключей, которые необходимо получить(сгенерировать самостоятельно) следующим образом, а именно:

  • закрытый ключ privkey.pem;

    Хранение и работа с закрытым ключем должны выполняться безопасным образом согласно политики безопасности разработчика ПО/администратора АИС, чтобы исключить его компрометацию.

  • сертификат открытого ключа <org_name>.der.

Подпись файла/скрипта/исполняемого файла

Наложение подписи на одиночный файл выполняется командой:
sudo evmctl -k <закрытый ключ> ima_sign <подписываемый файл>
В результате работы, будет сформирована подпись и помещена в расширенный атрибут (extended attribute, xattr(7)) security.ima файла.

Проверка подписи:
evmctl -k <сертификат открытого ключа> ima_verify <файл>

Просмотр:
evmctl show <файл>

Подпись может быть помещена не только в расширенный атрибут security.ima файла, но и так называемый dump-файл.
dump-файл позволяет, используя утилиту setfattr(1), накладывать на файл расширенные атрибуты, в том числе подписи.

Для формирования подписи в dump-файл:
evmctl --dump -k <закрытый ключ> ima_sign <подписываемый файл> | tee <подписываемый файл>.dump

dump-файл можно наложить командой:
sudo setfattr --restore=filename.dump

Просмотр расширенных атрибутов:
getfattr -m . -d <файл>

Подпись ПО в deb-пакетах

Менеджер пакетов dpkg из состава ОС ОСнова позволяет для файлов в составе deb-пакетов, сохранить, а при установке deb-пакетов, восстановить наложенные подписи.

В составе ОС ОСнова имеется ряд инструментов, позволяющих выполнить подпись содержимого deb-пакетов, в том числе и ПО.

В общем случае, для подписи содержимого deb-пакетов необходимо использовать скрипт sign-deb.sh

Указанный скрипт выполняет подпись для всех файлов, содержащихся в deb-пакете, а не только файлов ПО, а также подпись модулей ядра.

sudo /usr/lib/ima-evm-utils/sign-deb.sh /полный/путь/к/закрытому_ключу.pem /полный/путь/к/сертификату.der /полный/путь/к/закрытому_ключу_ядра.pem /полный/путь/к/сертификату_ядра.der /полный/путь/к/пакету.deb

Третий параметр может совпадать с первым, а четвертый со вторым.
В каталоге signed будет сформирован подписанный пакет.deb.

Если в составе deb-пакета имеется ПО, содержащее код Python (файлы вида *.py), необходимо дополнительно, те после sign-deb.sh, выполнить подпись с использованием sign-deb-dump-pyc.sh.

sudo /usr/lib/ima-evm-utils/sign-deb-dump-pyc.sh /полный/путь/к/закрытому_ключу.pem /полный/путь/к/сертификату.der /usr/lib/ima-evm-utils/fix_pyc.py /полный/путь/к/пакету.deb

Дамп файл будет записан в .deb пакет.

Если необходимо подписать deb-пакет(ы) ПО, которые невозможно изменить (например, зафиксированы контрольные суммы), то возможно сформировать отделенные подписи в dump-файле.

Для формирования отделенных подписей содержимого deb-пакета используется скрипт sign-foreign-deb.sh.

sudo /usr/lib/ima-evm-utils/sign-foreign-deb.sh /полный/путь/к/закрытому_ключу.pem /полный/путь/к/пакету.deb

В каталоге dumps будет сформирован файл пакет.dump.

Этот файл следует разместить в каталоге /etc/dpkg/ima.d/ перед установкой пакета, тогда dpkg наложит подписи из этого дампа в процессе установки пакета.