Пример kcfm_echo_server

30 сентября 2026

ID echo_server_kcfm_example

Пример демонстрирует интеграцию компонента KCFM в веб-сервер на базе KasperskyOS, где сигнатура поведения приложения формируется, упаковывается в KPA-пакет вместе с ELF-файлом и при запуске сравнивается с реальным поведением для обнаружения аномалий. Процесс включает разворачивание пакета, запуск приложения через KCFM и мониторинг его работы для выявления отклонений от заданной сигнатуры.

Директория примера в SDK

Код примера и скрипты для сборки находятся по следующему пути:

/opt/KasperskyOS-Community-Edition-<platform>-<version>/examples/kcfm_echo_server

Список программ

  • В пример входят системные программы, поставляемые в загрузочном образе KasperskyOS, а также дополнительные системные программы и драйверы, необходимые для работы с эмулятором или конкретной аппаратной платформе, где будет запускаться решение. Подробнее см. "Архитектура и запуск решения на базе KasperskyOS".

    Системные программы добавляются в образ решения автоматически при сборке.

  • FlowChecker – программа, являющаяся модулем компонента KCFM, которая на основе аудита безопасности обнаруживает аномалии поведения прикладной программы Server. В случае обнаружения аномалии FlowChecker сообщает об этом FlowMonitor. В скрипте сборки примера ./kcfm/CMakeLists.txt содержатся инструкции для упаковки программы в KPA-пакет.
  • FlowMonitor – программа, являющаяся модулем компонента KCFM, который обеспечивает контроль выполнения программы Server, а именно: обеспечивает запуск программы и обработку сообщения о выявлении аномалии. В скрипте сборки примера ./kcfm/CMakeLists.txt содержатся инструкции для упаковки программы в KPA-пакет.
  • WebServer – контролируемая прикладная программа, выполняющая функции веб-сервера. В скрипте сборки программы (файл ./web_server/CMakeLists.txt) содержатся инструкции для упаковки прикладной программы в KPA-пакет.
  • Launcher – прикладная программа, запускающая процессы приложений KCFM и приложения для аутентификации и обработки команд. В скрипте сборки программы (файл ./launcher/CMakeLists.txt) содержатся инструкции для упаковки прикладной программы в KPA-пакет.
  • CommandProcessor – прикладная программа, которая обрабатывает команды от веб-сервера, проводит аутентификацию пользователя и управляет сессией. В скрипте сборки программы (файл ./command_processor/CMakeLists.txt) содержатся инструкции для упаковки прикладной программы в KPA-пакет.

Формирование сигнатуры

CMake-команда kcfm_generate_signature, расположенная в файле ./web_server/CMakeLists.txt, определяет какие интерфейсы будут использованы при создании CFG и сигнатуры приложения. Список интерфейсов указывается в параметре EDL. Для этого примера используются интерфейсы kl.core.Core, kl.VfsNet, kl.VfsEntity и echo_server.CommandProcessor, то есть интерфейсы обращения к ядру ОС, сетевой подсистеме, файловой подсистеме и интерфейсы обращения к программе CommandProcessor.

Описание политики безопасности

Файл security.psl содержит описание политики безопасности решения на базе KasperskyOS и находится в директории ./einit/src. Декларации в PSL-файле снабжены комментариями, которые поясняют назначение этих деклараций.

Описание политики безопасности решения в этом примере разрешает любые взаимодействия процессов между собой и ядром. Эту политику можно использовать только в качестве заглушки на ранних стадиях разработки решения, чтобы модуль безопасности не препятствовал взаимодействиям.

Дополнительно в файл web_server/CMakeLists.txt для сборки программы WebServer добавлена CMake-команда kcfm_generate_default_policy(). Эта команда автоматически формирует часть политики безопасности решения в виде PSL-файла на основе исходного кода программы. В этом PSL-файле перечислены и разрешены все IPC-вызовы служб ядра и интерфейсов системной программы VFS, используемые в коде программы. Политика безопасности формируется так чтобы разрешить программе доступ к используемым IPC-вызовам и запретить ко всем неиспользуемым. PSL-файл создается в директории ./build/server/Server и включается в описание политики безопасности решения.

Также в файл web_server/CMakeLists.txt для сборки программы WebServer добавлена CMake-команда kcfm_generate_audit_policy(), которая создает профили аудита безопасности, необходимые для того, чтобы компонент KCFM мог получить доступ данным аудита безопасности контролируемой программы. Эти профили аудита добавляются в политику безопасности решения.

Дополнительные файлы

В директории ./resources/xdl/echo_server расположен файл WebServer.edl – EDL-описания программ WebServer, CommandProcessor и их IDL-интерфейсов.

В директории ./resources/hdd/etc расположены файлы конфигурации для программ VfsNet и Dhcpcd: hosts и dhcpcd.conf соответственно, а также файл resolv.conf, содержащий данные о DNS сервере, и файл logrr_server_config.json, содержащий уровень логирования.

Директория ./resources/hdd/var/db/dhcpcd используется программой Dhcpcd для хранения данных о подключении к сети.

В директории ./resources/hdd/www расположены файлы, используемые программой WebServer в процессе работы веб-сервера.

Файл ./logrr/CMakeLists.txt содержит инструкции для сборки подсистемы логирования.

Файл ./einit/CMakeLists.txt содержит инструкции для сборки загрузочного образа KasperskyOS.

В директории ./einit/src/ расположены файлы настроек системной программы ServiceManager, которая отвечает за установку и запуск KPA-пакетов:

  • Файл initial_install.json содержит список KPA-пакетов, которые должны быть установлены при первом запуске KasperskyOS.
  • Файл initial_install_kcfm.json содержит список KPA-пакетов, которые должны быть установлены при первом запуске KasperskyOS, когда включена технология KCFM.
  • Файл system_services.json содержит список установленных программ, которые должны запускаться каждый раз при запуске KasperskyOS.

Файлы ./einit/src/product_init_qemu.yaml и ./einit/src/product_init_rpi4.yaml содержат параметры запуска системных программ DNetSrv, VfsNet, UART и подсистемы логирования и в формате Init-описания.

Сценарий работы

  1. В файл ./files/echo_server/CMakeLists.txt для сборки программы WebServer добавлены следующие CMake-команды:
    • kcfm_generate_audit_policy() для автоматического формирования части политики безопасности решения;
    • kcfm_generate_signature() для построения графа потока управления.
  2. При сборке программы WebServer формируется часть политики информации в файле build/_headers_/hello/Hello/kcfmDefaultPolicy.psl и файлы, содержащие граф потока управления в директории build/hello/kcfm_generated.

    Построение графа потока управления в примере kcfm_echo_server может занять длительное время (до 2 часов).

  3. После сборки образа решения программа WebServer запускает веб-сервер, доступный по адресу http://localhost:1106 при запуске примера в QEMU. IP-адрес при запуске на RaspberryPI определяется параметрами сетевого подключения устройства
  4. При переходе по адресу веб-сервера в браузере открывается веб-страница auth.html для проведения аутентификации пользователя.

    Корректные данные для аутентификации содержатся в файле kcfm_echo_server/command_processor/src/session_manager.cpp

    При введении корректной информации аутентификации и нажатии кнопки Login веб-сервер открывает локальную веб-страницу command.html. Данная страница показывает токен, выданный при аутентификации, и поле ввода команды.

    Введенная команда обрабатывается программой CommandProcessor. Результат отображается на странице. Для примера echo_server результат является текстом введенной команды.

    Для проверки выявления аномалии поведения программы web_server, которая встроена в исходный код сервера и основана на выполнении паразитной работы, запускаемой с помощью уязвимости основанной на переполнении буфера, необходимо ввести команду "hack@anomaly". После ввода этой команды web_server выполняет паразитную активность (сохраняет путь выполняемой программы в файл hack.txt).

    Программа FlowChecker обнаруживает аномалию и сообщает программе FlowMonitor, которая перезагружает web_server.

Сборка и запуск примера

Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition SDK.

См. "Сборка и запуск примеров".

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!