Пример Defer to Kernel демонстрирует использование паттернов Defer to Kernel и Policy Decision Point.
Пример Defer to Kernel содержит три пользовательские сущности: PictureManager, ValidPictureClient и NonValidPictureClient.
В этом примере сущности ValidPictureClient и NonValidPictureClient обращаются к сущности PictureManager для получения информации.
Только сущности ValidPictureClient разрешено взаимодействие с сущностью PictureManager.
Ядро KasperskyOS гарантирует изоляцию сущностей.
Контроль взаимодействия сущностей в KasperskyOS вынесен в модуль безопасности Kaspersky Security Module. Эта подсистема анализирует каждый отправляемый запрос и ответ и на основе заданной политики безопасности выносит решение: разрешить или запретить его доставку.
Политика безопасности в примере Defer to Kernel имеет следующие особенности:
Динамическое создание IPC-каналов
Пример также демонстрирует возможность динамического создания IPC-каналов между сущностями. Динамическое создание IPC-каналов осуществляется с помощью сервера имен – специального сервиса ядра, представленного сущностью NameServer. Возможность динамического создания IPC-каналов позволяет изменять топологию взаимодействия сущностей "на лету".
Любая сущность, которой разрешено взаимодействие с NameServer по IPC, может зарегистрировать в сервере имен свои интерфейсы. Другая сущность может запросить у сервера имен зарегистрированные интерфейсы, после чего осуществить подключение к нужному интерфейсу.
При этом все взаимодействия по IPC (даже созданные динамически) контролируются с помощью модуля безопасности.
Сборка примера
Сборка примера осуществляется с помощью системы сборки CMake
, входящей в состав KasperskyOS Community Edition.
Файлы, содержащие код примера и скрипты для сборки, находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/defer_to_kernel
Для сборки и запуска примера необходимо выполнить следующий скрипт:
/opt/KasperskyOS-Community-Edition-<version>/examples/defer_to_kernel/cross-build.sh