Мы часто рассказываем о KasperskyOS — микроядерной ОС для подключенных к Интернету систем с особыми требованиями к кибербезопасности. И периодически получаем закономерный вопрос: а где можно пощупать эту вашу KasperskyOS? Поскольку на данный момент KasperskyOS является закрытой операционной системой, мы пока не готовы раскрыть ее исходный код. Однако всем, кому это интересно, можем предложить познакомиться с KasperskyOS Community Edition SDK (KasperskyOS CE SDK). В этом посте мы расскажем, из чего состоит SDK, и разберемся, как взаимодействовать с нашей операционной системой.

KasperskyOS CE SDK — это общедоступная версия KasperskyOS, разработанная с целью демонстрации основных принципов разработки безопасных решений. С помощью Community Edition SDK вы можете разрабатывать свои проекты, основываясь на подходе Secure by Design, то есть с учетом безопасности, заложенной в архитектуру решения.

Для каких проектов можно использовать KasperskyOS Community Edition SDK? Да много для каких! Например, для проектов по управлению объектами инфраструктуры, для систем умного дома, для систем навигации и управления дронами. Иными словами, для любых проектов, подразумевающих подключение к публичным сетям передачи данных, требующих удаленного управления, а главное — тех, для которых злонамеренное воздействие может привести к серьезным негативным последствиям и ущербу. KasperskyOS предназначена для того, чтобы создавать программно-аппаратные системы, защищенные от любых, даже от еще неизвестных угроз, и не требующие наложенных средств защиты, таких как отдельные антивирусные приложения.

Как установить KasperskyOS CE SDK

Для начала необходимо скачать KasperskyOS Community Edition SDK c официального сайта системы или с портала Kaspersky Appicenter for Developers (где также находятся другие публичные SDK для продуктов на базе KasperskyOS).

Попробовать KasperskyOS CE SDK в работе можно двумя способами.

  • Запустить KasperskyOS CE SDK с собранными примерами приложений на обычном десктопе или ноутбуке, где установлен (или развернут на виртуальной машине) Linux. Установить SDK можно в Debian-подобных дистрибутивах Linux; рекомендованная версия: Ubuntu GNU/Linux 22.04 (Jammy Jellyfish). Подробнее о совместимости читайте здесь.

  • Установить KasperskyOS CE SDK на аппаратную платформу — мини-компьютер Raspberry Pi 4 Model B или Radxa ROCK 3A.

Состав SDK

KasperskyOS Community Edition SDK поставляется в виде deb-пакета.

Пользователю предоставляются:

  • образ ядра операционной системы KasperskyOS;

  • инструменты для разработки: компилятор Clang, компоновщик LD, отладчик GDB, эмулятор QEMU и сопутствующие инструменты;

  • утилиты и скрипты — например, генераторы исходного кода, скрипт makekss для создания модуля безопасности Kaspersky Security Module, скрипт makeimg для создания образа решения;

  • набор библиотек, обеспечивающих частичную совместимость со стандартом POSIX.1-2008 (прежде всего ограничения связаны с обеспечением безопасности; подробнее в онлайн-справке);

  • драйверы;

  • системные программы (например, виртуальная файловая система);

  • примеры работы с компонентами KasperskyOS;

  • лицензионное соглашение;

  • файл с информацией о стороннем коде (Legal Notices).

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

Поддерживаемая функциональность

Релиз KasperskyOS Community Edition SDK 1.3 предназначен для запуска на QEMU (архитектура ARM64), Raspberry Pi 4 Model B (ревизии 1.4, 1.5) и Radxa ROCK 3A (ревизия 1.3).

Raspberry Pi 4 Specifications
Raspberry Pi 4 Specifications

Источники изображений: Raspberry Pi, Radxa ROCK 3A

Стоит обратить внимание, что QEMU не подойдет для отладки драйверов реальных устройств, так как решение для QEMU собирается для модели платформы vexpress-a15, которая отличается от поддерживаемого HW как типами периферийных устройств, так и их маппингом.

Для работы с Raspberry Pi 4 Model B реализованы драйверы: GPIO, I2C, SPI, UART, Ethernet, USB, Bluetooth, PCIE, BSP, SD, Watchdog, blkdev, VideoCore mailbox. Для работы с Radxa ROCK 3A реализованы драйверы: USB, GPIO, Pinctrl, I2C, SPI, UART, USB-UART, Ethernet, SD/emmc, ADC, CAN. В примерах можно найти частичную демонстрацию их использования. Также обеспечена поддержка файловых систем: ext2, ext3, ext4, fat, ramfs. Возможно использование как статических библиотек, так и динамических. Имеется поддержка QEMU и kernel GDB stub. Тулчейн в составе KasperskyOS Community Edition SDK использует компилятор Clang 17.

Для удобства реализовали расширение для редактора исходного кода Visual Studio Code, которое обеспечивает интеграцию с KasperskyOS Community Edition SDK. Включены компоненты PackageManager, позволяющие работать с KPA-пакетами, и ExecutionManager, представляющий собой C++ интерфейс для создания, запуска и остановки процессов в решениях на базе KasperskyOS. KasperskyOS Community Edition SDK позволяет разрабатывать приложения на языках C, C++ и Rust.

Для упрощения процесса разработки решений в состав KasperskyOS Community Edition SDK 1.3 также включены следующие сторонние библиотеки и приложения:

  • инструменты разработчика: iPerf, GoogleTest, ATF, Clang, Rust;

  • обработка и форматирование данных: zlib, spdlog, PCRE, libxml2, nlohmann/json, jsoncpp, JSON Schema Validator, fmt, libffi, boost, abseil-cpp, libyaml;

  • веб-сервер: civetweb;

  • сеть: ntp, dhcpcd, MQTT Mosquitto, libpcap, ftpd;

  • защита данных: MbedTLS, OpenSSL;

  • работа с периферией: lwext4, libevdev;

  • хранение данных: SQLite.

Для получения базовых знаний и навыков разработки кибериммунных решений на базе KasperskyOS мы рекомендуем присоединиться к бесплатному курсу Разработка для KasperskyOS на платформе Stepik, который научит создавать простые программы под Raspberry Pi 4 и QEMU с использованием KasperskyOS Community Edition SDK.

Примеры

Список примеров в поставке KasperskyOS Community Edition SDK 1.3 достаточно большой:

Цель KasperskyOS Community Edition SDK, как было сказано выше, это наглядное изучение принципов разработки Secure by Design. Существуют типовые сценарии и угрозы, которые встречаются во многих решениях. Как справляться с частью из них, мы описали в главе про паттерны безопасности и подготовили особые примеры с их реализацией:

Структура всех примеров выглядит следующим образом.

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

    1. интерфейсы IPC (Inter-Process Communication) — .idl;

    2. связь интерфейсов с функциональными компонентами — .cdl;

    3. имя класса процессов и параметры компонента верхнего уровня — .edl;

    4. процессы, запускаемые при загрузке KasperskyOS, и IPC-каналы, используемые процессами для взаимодействия между собой — init.yaml.

  2. Описание политики безопасности решения на базе KasperskyOS. В упрощенном представлении описание политики безопасности состоит из привязок, которые ассоциируют описания событий безопасности с вызовами методов, предоставляемых объектами моделей безопасности. Используется специально разработанный язык PSL (Policy Specification Language) — .psl

  3. Функциональная логика решения — .с / .h

  4. Скрипт, автоматизирующий сборку и запуск образа — cross-build.sh

  5. Документация — README.md

  6. Сценарий сборки — CMakeLists.txt

В KasperskyOS Community Edition нет GUI, поэтому запускаемые образы примеров являются конечными продуктами.

Работа с примером Secure Login

А теперь попробуем разобраться, как запустить один из примеров KasperskyOS Community Edition SDK. Поработаем с примером Secure Login, который демонстрирует возможность передачи критической для системы информации через недоверенную среду.

В примере имитируется получение удаленного доступа к IoT-устройству посредством передачи этому устройству учетных данных пользователя. Недоверенной средой внутри IoT-устройства является веб-сервер, который обслуживает запросы пользователей.

Практика показывает, что такой веб-сервер является легко обнаруживаемым и зачастую успешно атакуемым, так как IoT-устройства не имеют встроенных средств защиты от проникновения и других атак. Кроме того, пользователи получают доступ к IoT-устройству через недоверенную сеть. Очевидно, что в таких условиях для защиты учетных данных пользователя от компрометации необходимо использовать криптографические алгоритмы.

С точки зрения архитектуры в таких системах можно выделить следующие субъекты:

  • источник данных: браузер пользователя;

  • точка коммуникации с устройством: веб-сервер;

  • подсистема обработки информации пользователя: подсистема аутентификации.

Поэтому пример Secure Login включает:

  • веб-сервер CivetWeb (недоверенный компонент, программа WebServer);

  • подсистему аутентификации пользователей (доверенный компонент, программа AuthService);

  • TLS-терминатор (доверенный компонент, программа TLs Entity). Этот компонент поддерживает транспортный механизм TLS (Transport Layer Security). TLS-терминатор совместно с веб-сервером поддерживает протокол HTTPS на стороне устройства (веб-сервер взаимодействует с браузером через TLS-терминатор).

Попробуем запустить пример. Для этого необходимо следующее.

1. Подготовить систему:

a) скачать последнюю версию KasperskyOS Community Edition SDK;

b) настроить Docker-контейнер;

c) установить KasperskyOS CE SDK.

2. Открыть директорию примера secure_login: /opt/KasperskyOS-Community-Edition-<version>/examples/secure_login/

3. Выполнить команду: ./cross-build.sh

Частичный лог:

4. Открыть в браузере страницу по адресу https://localhost:1106 (рекомендованный браузер — Google Chrome). В примере используется свой сертификат, поэтому большинство современных браузеров сообщит о незащищенности соединения. Нужно согласиться использовать незащищенное соединение, которое тем не менее будет зашифрованным.

5. Увидеть User Authentication:

6. Нажать Log in, чтобы появилось окно ввода логина и пароля:

7. Ввести логин user1 и пароль password1:

8. Увидеть уведомление об успешном логине:

Что же произошло под капотом?

  1. HTTP-трафик между браузером и TLS-терминатором передается в зашифрованном виде, а сам веб-сервер работает с открытым HTTP-трафиком.

  2. Программа WebServer обращается к программе AuthService по IPC для получения страницы, содержащей форму ввода имени пользователя и пароля.

  3. Программа AuthService выполняет следующие действия:

    1. генерирует закрытый ключ, открытые параметры, а также вычисляет открытый ключ по алгоритму Диффи — Хеллмана;

    2. создает страницу auth.html с формой ввода имени пользователя и пароля (код страницы содержит открытые параметры и открытый ключ);

    3. передает полученную страницу программе WebServer по IPC.

  4. Код страницы auth.html, который исполняется на стороне браузера, осуществляет следующие действия:

    1. генерирует закрытый ключ, вычисляет открытый ключ и общий секретный ключ по алгоритму Диффи — Хеллмана;

    2. выполняет шифрование пароля операцией XOR с использованием общего секретного ключа;

    3. передает веб-северу имя пользователя, зашифрованный пароль и открытый ключ.

  5. Программа WebServer обращается к программе AuthService по IPC для получения страницы, содержащей результат аутентификации, передавая имя пользователя, зашифрованный пароль и открытый ключ.

  6. Программа AuthService выполняет следующие действия:

    1. вычисляет общий секретный ключ по алгоритму Диффи — Хеллмана;

    2. расшифровывает пароль с использованием общего секретного ключа;

    3. возвращает страницу result_err.html или страницу result_ok.html, в зависимости от результата аутентификации.

Обратная связь

Мы будем благодарны пользователям KasperskyOS CE SDK за любую форму обратной связи: вопросы, предложения, информацию о найденных багах. Для этих целей мы создали форум, на котором наши специалисты ответят на все ваши вопросы и помогут в решении проблем при запуске ваших решений.

Также хотелось бы обратить внимание, что ПО (включая Runtime компоненты) может быть использовано только в непроизводственной тестовой среде. Что это значит? Для личных или исследовательских нужд пользователь может спокойно работать с KasperskyOS CE SDK (компилировать, запускать предоставляемый код и модифицировать его, разрабатывать собственные решения на базе KasperskyOS CE, демонстрировать свои решения), но, если появилась потребность в Production, то приходите к нам, и вместе мы обязательно найдем решение ?

Полезные ссылки

Комментарии (5)


  1. gudvinr
    18.02.2025 14:02

    Релиз KasperskyOS Community Edition SDK 1.3 предназначен для запуска на QEMU (архитектура ARM64), Raspberry Pi 4 Model B (ревизии 1.4, 1.5) и Radxa ROCK 3A (ревизия 1.3).

    Упустили возможность заколлабиться с репкой


  1. sandersru
    18.02.2025 14:02

    Бегло глянул на изменения памятуя первый выпуск версии 0.5. Прогресс идет как в библиотеках, динамической линковке так и примерах. Рад, что проект развивается, не смотря на скептиков.

    Обратную совместимость с ioctl в линукс так и не прикрутили смотрю, все же решили в свой HAL двигаться для SPI/I2C/GPIO and etc? Фактически же 99% констант уже перенесли, осталось сделать всякое константное, например вместо SPI_IOC_RD_MODE - KOS_SPI_IOC_RD_MODE и вперед

    BTW: В linux 4.6 появилась работа с GPIO как с массивами, а не просто с одним пином.

    Посмотрите в сторону gpiochip_info/gpioline_info/gpiohandle_request/gpiohandle_data


  1. rukhi7
    18.02.2025 14:02

    Все здорово конечно, только совершенно не понятно где у вас KasperskyOS на этой картинке

    Складывается впечатление что KasperskyOS как бы не при чем даже в примере который выбран для демонстрации.


    1. beliakov
      18.02.2025 14:02

      Складывается впечатление что KasperskyOS как бы не при чем даже в примере который выбран для демонстрации.

      В этом примере cross-build.sh собирает образ KasperskyOS с веб-сервером и другими задействованными программами. И затем запускает в QEMU то что получилось. QEMU там "свой", вместе с SDK устанавливается.


      1. rukhi7
        18.02.2025 14:02

        В этом примере cross-build.sh собирает образ KasperskyOS с веб-сервером

        Так вы позиционируете свою KasperskyOS как операционную систему для серверов?