Общее
Для подписи ПО разработчику/администратору АИС необходимо иметь комплект ключей, которые необходимо получить (сгенерировать самостоятельно) следующим образом, а именно:
- закрытый ключ privkey.pem;
Хранение и работа с закрытым ключем должны выполняться безопасным образом согласно политики безопасности разработчика ПО/администратора АИС, чтобы исключить его компрометацию
- сертификат открытого ключа <org_name>.der.
Подпись файла/скрипта/исполняемого файла
Наложение подписи на одиночный файл выполняется командой:
sudo evmctl -k <закрытый ключ> ima_sign <подписываемый файл>
В результате работы, будет сформирована подпись и помещена в расширенный атрибут (extended attribute, xattr(7)) security.ima файла.
Проверка подписи:
evmctl -k <сертификат открытого ключа> ima_verify <файл>
Просмотр подписи:
Подпись может быть помещена не только в расширенный атрибут security.ima файла, но и так называемый dump-файл.
dump-файл позволяет, используя утилиту setfattr, накладывать на файл расширенные атрибуты, в том числе подписи
Для формирования подписи в dump-файл:
evmctl --dump -k <закрытый ключ> ima_sign <подписываемый файл> | tee <подписываемый файл>.dump
dump-файл можно наложить командой:
sudo setfattr --restore=filename.dump
Просмотр расширенных атрибутов:
Подпись ПО в 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 наложит подписи из этого дампа в процессе установки пакета.