Для Linux представлена система верификации исполняемых файлов по цифровым подписям

16.01.2013 22:35

Один из инженеров из компании Red Hat представил в списке рассылки разработчиков ядра Linux патчи с реализацией системы верификации исполняемых файлов в формате ELF с использованием цифровых подписей. Разработка дополняет систему верификации модулей ядра, созданную в рамках проекта по обеспечению поддержки механизма UEFI Secure Boot.

В текущей реализации режима верификации модулей ядра пришлось заблокировать механизм kexec наряду с другими возможностями, которые могут быть использованы для обхода цепочки проверки загружаемых модулей (через kexec могло быть запущено ядро в режиме без проверки цифровых подписей модулей). Одним из предложенных решений указанной проблемы стала поддержка проверки по цифровой подписи исполняемого файла /sbin/kexec, применяемого для загрузки нового ядра с использованием системного вызова sys_kexec(). Другим мотивом обеспечения верификации исполняемых файлов являлось желание выполнения команды kdump для ядер, загруженных в режиме UEFI Secure Boot. Другой возможностью является создание полностью верифицируемых систем, в которых гарантируется неизменность не только ядра, но и исполняемых компонентов пользовательского уровня.

Кроме патчей для ядра Linux представлена новая утилита signelf, предназначенная для заверения исполняемых файлов ELF с использованием закрытого ключа и сертификата x509, созданных в процессе сборки ядра Linux с включенным режимом верификации. В процессе выполнения вызова exec(), ядро проверяет снабжён ли файл цифровой подписью и проводит верификацию (проверяется загружаемое в память содержимое секции PT_LOAD). Если цифровая подпись соответствует проверочному ключу или файл не подписан, то программа выполняется в обычном режиме, иначе выполнение блокируется.

В настоящее время поддерживается только подписывание статически слинкованных исполняемых файлов. В силу необходимости формирования подписей для всех используемых библиотек пока не поддерживается динамическое связывание. Явное обращение к вызову dlopen() не блокируется, поэтому задействование в программе данной функции следует проверять вручную перед формированием подписи.

Из других проектов по использованию цифровых подписей для защиты целостности исполняемых файлов можно отметить интегрированную начиная с ядра Linux 2.6.30 инфраструктуру IMA (Integrity Management Architecture) и предложенные компанией Ericsson системы DSI (Distributed Security Infrastructure) и DigSig (Digital Signature in the Kernel).