KasperskyOS Community Edition 1.3

Краткое руководство разработчика решений на базе KasperskyOS

Подготовка к разработке

Чтобы начать разрабатывать решения на базе KasperskyOS, нужно выполнить следующие шаги:

  1. Установить KasperskyOS Community Edition и среду разработки (например, Microsoft Visual Studio Code с расширениями для разработки на C/C++ и поддержки CMake, а также расширением KasperskyOS SDK Extension) на компьютер, соответствующий системным требованиям.

    KasperskyOS Community Edition включает компиляторы C/C++, генераторы исходного кода, отладчик GDB, эмулятор QEMU, утилиты (например, binutils, cmake) и другие инструменты. Исполняемые файлы инструментов находятся в директории toolchain/bin.

  2. Изучить раздел "Обзор KasperskyOS".
  3. Изучить этот раздел.

    Во время работы над проектом потребуется обращаться к разным разделам для получения детальных сведений.

Изучение примеров из состава KasperskyOS Community Edition

В директории examples из состава KasperskyOS Community Edition находятся примеры проектов решений на базе KasperskyOS, содержащие описание README.md и комментарии в текстовых файлах. Каждый пример помещен в отдельную директорию. Чтобы собрать пример, нужно скопировать его в директорию, где разрешен доступ на запись (например, в домашнюю директорию), и запустить скрипт cross-build.sh. В результате сборки будет создан образ решения <директория примера>/build/einit/kos-*image. Если в скрипте cross-build.sh утилита cmake вызвана с параметром --target sim, то собранный образ будет автоматически запущен на QEMU. Также примеры могут быть собраны для запуска на Raspberry Pi 4 B или Radxa ROCK 3A. Подробнее см. "Сборка и запуск примеров".

Сведения о примерах см. в "Примеры в KasperskyOS Community Edition".

В некоторых примерах реализованы паттерны безопасности, используемые при разработке под KasperskyOS.

Расположение библиотек и исполняемых файлов поставляемых компонентов решения

Библиотеки (в том числе транспортные) поставляемых компонентов решения находятся в директории sysroot-*-kos/lib из состава KasperskyOS Community Edition.

Исполняемые файлы поставляемых компонентов решения находятся в директории sysroot-*-kos/bin из состава KasperskyOS Community Edition.

Создание проекта решения на базе KasperskyOS

Рекомендуется использовать систему сборки CMake, хотя можно применить другую систему сборки или создать собственный скрипт сборки, использующий инструменты для сборки из состава KasperskyOS Community Edition.

Чтобы создать CMake-проект решения на базе KasperskyOS, нужно создать иерархию директорий и файлов, как описано в разделе "Использование CMake из состава KasperskyOS Community Edition" (аналогично примерам проектов). Помимо файлов с исходным кодом CMake-проект решения включает скрипт сборки *.sh, файлы CMakeLists.txt, файл init.yaml(.in), файлы security.psl.in и *.psl, файлы *.idl, *.cdl, *.edl.

Создание скрипта сборки (файла *.sh)

Скрипт сборки можно создать, исходя из описания в разделе "Использование CMake из состава KasperskyOS Community Edition", или можно взять готовый скрипт из примеров проектов. Значение параметра --target при вызове утилиты cmake определяет цель сборки. Целью сборки может быть, например, создание и запуск образа решения на QEMU или создание образа решения для запуска на аппаратной платформе.

Создание сценариев сборки (файлов CMakeLists.txt)

Файлы CMakeLists.txt содержат сценарии сборки. Требуется создать один корневой файл CMakeLists.txt и по одному файлу CMakeLists.txt для каждой программы, включаемой в решение. Чтобы создать файлы CMakeLists.txt, нужно использовать сведения из раздела "Использование CMake из состава KasperskyOS Community Edition" и примеры проектов.

Файлы CMakeLists.txt содержат как стандартные CMake-команды (например, add_executable(), add_library(), target_link_libraries()), так и CMake-команды, специфичные для проектов решений на базе KasperskyOS.

Создание init-описания (файлов init.yaml.in и init.yaml)

На основе файла init.yaml.in в процессе сборки создается файл init.yaml, который представляет собой init-описание. Макросы, указанные в файле init.yaml.in, раскрываются в файле init.yaml. В init-описании указаны процессы (кроме процесса инициализирующей программы) и IPC-каналы, которые будут созданы при запуске решения. Также могут быть указаны параметры запуска и переменные окружения программ. Используя макросы в файле init.yaml.in, можно, например, добавить в файл init.yaml IPC-каналы, параметры запуска и переменные окружения программ, заданные через CMake-команду set_target_properties() в файлах CMakeLists.txt (см. "Файлы CMakeLists.txt для сборки прикладных"). Кроме этого, в файле init.yaml.in поддерживается возможность указывать переменные, заданные CMake-командой set() в файлах CMakeLists.txt.

Чтобы создать файл init.yaml.in, нужно использовать синтаксис, описанный разделе "Обзор: Einit и init.yaml", и можно использовать макросы.

Также для запуска процессов можно использовать системную программу ExecutionManager.

Создание описания политики безопасности решения (файлов security.psl.in и *.psl)

На основе файла security.psl.in в процессе сборки создается файл security.psl, который представляет собой верхнеуровневый файл описания политики безопасности решения. Макросы, указанные в файле security.psl.in, раскрываются в файле security.psl в виде деклараций включения файлов *.psl, расположенных в директории sysroot-*-kos/include/kl из состава KasperskyOS Community Edition. Также в файле security.psl.in поддерживается возможность указывать переменные, заданные CMake-командой set() в файлах CMakeLists.txt.

Файл security.psl содержит часть описания политики безопасности решения и ссылается на файлы с другими ее частями. Например, часть описания политики безопасности решения, управляющая взаимодействиями между программами и ядром KasperskyOS, помещается в файл core.psl.

Чтобы создать файл security.psl.in и другие файлы *.psl (например, core.psl), нужно изучить разделы "Описание политики безопасности решения на базе KasperskyOS" и "Шаблон security.psl.in", а также необходимо иметь полное представление о том, что должно быть разрешено и запрещено каждой программе в решении и при каких условиях.

В файлы security.psl.in и другие файлы *.psl можно включать декларации для выполнения аудита безопасности и тестирования политики.

На ранних этапах разработки можно использовать заглушку политики безопасности решения, которая разрешает любые взаимодействия (см. "Примеры описаний простейших политик безопасности решений на базе KasperskyOS").

Создание формальных спецификаций компонентов решения (файлов *.idl, *.cdl, *.edl)

Для каждой программы в решении должна быть создана формальная спецификация, которая описывает программу с точки зрения взаимодействия с другими программами. Формальная спецификация задает, например, предоставляет ли программа службы другим программам или нет, какие службы предоставляет программа, какие интерфейсы у служб программы, может ли программа обращаться к модулю безопасности Kaspersky Security Module через интерфейс безопасности.

Файл *.edl обязателен, а файлы *.cdl и *.idl опциональны. Если программа не предоставляет служб другим программам в решении, то ее формальная спецификация может состоять из одного файла *.edl. Например, формальная спецификация инициализирующей программы состоит из одного файла Einit.edl, который создается автоматически при сборке решения.

Файлы формальных спецификаций поставляемых компонентов решения находятся в директории sysroot-*-kos/include/kl из состава KasperskyOS Community Edition. Также поставляется формальная спецификация ядра KasperskyOS, файлы которой расположены в директории sysroot-*-kos/include/kl/core из состава KasperskyOS Community Edition. Исполняемый файл компонента решения сопровождается полным набором файлов формальной спецификации. Библиотеки для создания компонента решения сопровождаются файлами *.cdl и *.idl.

Для программ, разрабатываемых в проекте, формальные спецификации нужно создать. При этом для создания файла *.edl можно использовать CMake-команду. Если исполняемый файл программы компонуется с поставляемыми в составе KasperskyOS Community Edition библиотеками, то в формальную спецификацию этой программы нужно включить файлы *.cdl и *.idl, сопровождающие эти библиотеки.

Создание инициализирующей программы

В состав решений на базе KasperskyOS входит инициализирующая программа. Каждый проект решения содержит директорию einit. Название этой директории соответствует имени инициализирующей программы, но не содержит ее исходного кода, поскольку код этой программы генерируется автоматически при сборке решения.

Создание IPC-каналов

IPC-каналы можно создать статически и динамически. См. "Создание IPC-каналов".

Создание и использование транспортного кода

Чтобы создать транспортный код на языке C, нужно использовать CMake-команды nk_build_*dl_files() (см. "Библиотека nk"). В результате использования этих CMake-команд создаются файлы *.edl.h, *.cdl.h, *.idl.h, содержащие транспортный код. Эти файлы нужно включить в исходный код как клиентов, так и серверов. Какие именно файлы включать, зависит от того, какие элементы транспортного кода требуются. Например, может быть достаточно включить *.idl.h в код клиента и *.edl.h в код сервера. Но клиенту также могут потребоваться константы, определенные в *.edl.h. Кроме того, через параметр NK_FLAGS CMake-команд nk_build_*dl_files() можно задать флаги выборочной генерации транспортного кода, которые изменяют содержимое файлов *.edl.h, *.cdl.h, *.idl.h.

Примеры использования элементов транспортного кода на языке C приведены в разделах "Инициализация IPC-транспорта для межпроцессного взаимодействия и управление обработкой IPC-запросов (transport-kos.h, transport-kos-dispatch.h)" и "Инициализация IPC-транспорта для обращения к модулю безопасности (transport-kos-security.h)".

О создании и использовании транспортного кода на языке C++ см. "Транспортный код на языке C++" и "Генерация транспортного кода для разработки на языке C++".

Если компонент решения поставляется с транспортными библиотеками, транспортный код создавать не нужно.

Обращение к модулю безопасности Kaspersky Security Module

Интерфейс безопасности нужно задать в формальной спецификации программы. Пример кода для обращения к модулю безопасности Kaspersky Security Module приведен в разделе "Инициализация IPC-транспорта для обращения к модулю безопасности (transport-kos-security.h)".

Работа с IPC-сообщениями

IPC-сообщение содержит фиксированную часть и опциально арену. Фиксированная часть представляет собой структуру, которая является элементом транспортного кода. Работа с фиксированной частью IPC-сообщений сводится к записи и чтению полей структуры. Для работы с ареной IPC-сообщений нужно использовать API (см. "Работа с ареной IPC-сообщений").

Использование динамических библиотек

Можно использовать динамические библиотеки (*.so). См. "Использование динамических библиотек".

Работа с файловыми системами и сетевым стеком

В составе KasperskyOS Community Edition поставляются исполняемые файлы и библиотеки, содержащие реализации файловых систем и сетевого стека. Функциональность доступна программам через функции POSIX и другие функции стандартной библиотеки языка C.

См. "Файловые системы и сеть".

Работа с KPA-пакетами

KPA-пакет является упаковкой для программы, предназначенной для установки в решение на базе KasperskyOS.

В составе KasperskyOS Community Edition поставляются компоненты и утилиты для работы с KPA-пакетами:

  • Утилиты для управления KPA-пакетами позволяют собрать в системе, где установлен KasperskyOS Community Edition, KPA-пакет из исходных файлов программы и установить KPA-пакет в собираемый образ решения на базе KasperskyOS.
  • Компонент PackageManager позволяет установить KPA-пакеты в работающее решение на базе KasperskyOS, а также удалить KPA-пакеты и получить сведения о них.

См. "Работа с KPA-пакетами".

API KasperskyOS

KasperskyOS предоставляет следующие API:

  • POSIX (с ограничениями и особенностями реализации) и другие API стандартной библиотеки языка C:
    • основные API (заголовочные файлы в директориях sysroot-*-kos/include/strict, sysroot-*-kos/include/sys из состава KasperskyOS Community Edition);
    • расширенные API (заголовочные файлы в директории sysroot-*-kos/include из состава KasperskyOS Community Edition).

    Заголовочные файлы расширенных API включают заголовочные файлы основных API (через директиву include включаются заголовочные файлы, расположенные в директории sysroot-*-kos/include/strict из состава KasperskyOS Community Edition).

  • Собственные API:
    • высокоуровневые API (заголовочные файлы в директории sysroot-*-kos/include/kos из состава KasperskyOS Community Edition);
    • низкоуровневые API (заголовочные файлы в директории sysroot-*-kos/include/coresrv из состава KasperskyOS Community Edition).

Компоненты для прикладной разработки

В составе KasperskyOS Community Edition поставляются:

  • компонент MessageBus, который реализует шину сообщений;
  • компонент LogRR, который представляет собой систему для журналирования информации о работе других программ.

Отладка программ

Чтобы выполнить отладку программ, нужно использовать отладчик GDB из состава KasperskyOS Community Edition. Отладку можно выполнить как на QEMU, так и на аппаратной платформе. Для отладки на QEMU нужно использовать GDB-сервер QEMU или GDB-сервер ядра KasperskyOS. Для отладки на аппаратной платформе требуется использовать GDB-сервер ядра KasperskyOS.

См. "Отладка программ в решении на базе KasperskyOS".

Разработка драйверов

Драйвер в KasperskyOS может быть драйвером шины и/или драйвером-клиентом, может быть локальным или распределенным между процессами. Для разработки драйверов в составе KasperskyOS Community Edition поставляется библиотека kdf (заголовочные файлы в директории sysroot-*-kos/include/kdf из состава KasperskyOS Community Edition).

См. "Разработка драйверов под KasperskyOS".

Использование глоссария

В глоссарии приведены термины и аббревиатуры в алфавитном порядке. Для каждого термина приводится определение, и указаны ссылки на связанные с этим термином разделы.