Компания выставила на обсуждение в списке рассылки разработчиков ядра Linux код LSM-модуля с реализацией механизма IPE (Integrity Policy Enforcemen), расширяющего существующие системы мандатного управления доступом. Вместо привязки к меткам и путям в IPE решение о разрешении или запрете операции принимается на основе постоянных свойств системного компонента с которым выполняется операция. Модуль позволяет определить общую политику обеспечения целостности для всей системы, указывающую какие операции допустимы и каким способом следует верифицировать подлинность компонентов.
IPE нацелен на создание полностью верифицируемых систем, целостность которых подтверждена от начального загрузчика и ядра до конечных исполняемых файлов, конфигурации и загружаемых файлов. Например, при помощи IPE можно указать какие исполняемые файлы разрешено запускать с учётом поверки их соответствия эталонной версии при помощи криптографических хэшей, предоставляемых системой dm-verity. В случае изменения или подмены файла IPE может блокировать операцию или журналировать факт нарушения целостности.
Предложенный механизм может применяться в прошивках для встраиваемых устройств, в которых всё программное обеспечение и настройки специально собираются и предоставляются владельцем, например, в датацентрах Microsoft IPE применяется в оборудовании для межсетевых экранов. От других систем проверки целостности, таких как IMA, IPE отличается независимостью от метаданных в ФС – все свойства, определяющие допустимость операций, хранятся непосредственно в ядре.
Правила задаются в текстовой форме с использование наборов ключ-значение. Базовыми являются ключ “op”, определяющий операцию к которой применяется правило (например, op=EXECUTE сработает при попытке выполнения), и “action”, определяющий действие (например, “action=DENY” для блокировки). Правила привязываются к свойствам, предоставляемым внешними подсистемами, такими как dm-verity и fs-verity.
Например, правила
op=EXECUTE boot_verified=TRUE action=ALLOW op=EXECUTE dmverity_signature=FALSE action=DENY op=EXECUTE fsverity_digest=sha256:401fce…0dec146938 action=DENY
разрешит только загрузку с верифицированного раздела, запретит запуск файлов с разделов, не имеющих подписей в dm-verity, а также выборочно запретит выполнение файла с хэшем “401fce…0dec146938”.
Начальный набор загрузочных правил определяется при помощи настройки SECURITY_IPE_BOOT_POLICY и включается в состав сборки ядра, а остальные правила добавляются по мере необходимости через файл
/sys/kernel/security/ipe/new_policy. Передаваемые правила шифруются с использованием сертификата, определённого в SYSTEM_TRUSTED_KEYRING.
На системах общего назначения предлагается применять IPE в сочетании с механизмом DIGLIM, развиваемым компанией Huawei. DIGLIM реализован при помощи eBPF и позволяет легко реализовать контроль целостности на уровне отдельных файлов в обычных дистрибутивах, не требуя их переработки (преподносится как вариант Secure Boot, работающий на прикладном уровне). Суть DIGLIM в поддержании пула проверочных хэшей для файлов и метаданных, и предоставления доступа к исполняемым файлам только если его хэш присутствует в пуле. Список хэшей может быть получен от пакетного менеджера RPM или вручную сгенерирован пользователем.