Компонент Kaspersky Control Flow Monitor

12 января 2026

ID kcfm_component

Компонент Kaspersky Control Flow Monitor (KCFM) предназначен для мониторинга и контроля работоспособности процессов посредством контроля потока управления.

Компонент KCFM позволяет в решении на базе KasperskyOS:

Принцип работы компонента KCFM

Используя исходный код программы, которую требуется контролировать, возможно построить граф потока управления (Control Flow Graph, CFG) этой программы. Этот граф определяет полный набор системных вызовов и вызовов библиотечных функций, которые могут быть выполнены во время исполнения программы, а также все возможные последовательности их выполнения. Построение CFG происходит во время сборки программы.

Во время работы процесса (исполняющейся программы) отслеживаются вызовы функций и IPC-вызовы, выполняемые процессом. При обнаружении несоответствия в работе (аномалии) программы ожидаемому поведению компонент KCFM позволяет остановить и перезапустить контролируемую программу.

Важно! Компонент KCFM является экспериментальным и работает с ограничениями, описанными ниже. Этот компонент доступен пользователям для тестирования и предоставления отзывов.

Ограничения в экспериментальной версии компонента KCFM

Компонент KCFM имеет следующие ограничения:

  • Только один процесс может контролироваться в решении на базе KasperskyOS.
  • Поддерживаются только программы на языке C.
  • При использовании вычисляемых указателей при вызове функций в коде программы, инструменты построения графа потока управления не могут однозначно определить вызываемую функцию. В этом случае выдвигается предположение о возможных вызовах функций, производится построение сигнатуры с такими вызовами и выдается предупреждение.
  • Вызов функций работы с аппаратными обработчиками прерывания в коде программы игнорируется и выдается соответствующее предупреждение.
  • При использовании в коде программы функций API для работы с динамическими библиотеками с явным связыванием, выдается предупреждение о невозможности обработки вызова таких функций.
  • При обнаружении аномалий в работе процесса компонент KCFM перезапускает этот процесс. Других действий, кроме перезапуска, не предусмотрено.
  • Граф потока управления строится только на последовательностях вызовов к ядру и системной программе VFS.

Состав компонента KCFM

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

  • Исполняемые файлы модулей для построения графа потока управления контролируемой программы, мониторинга вызовов исполняющейся программы, а также обнаружения аномалий на основе графа потока управления. Эти файлы расположены в директориях /opt/KasperskyOS-Community-Edition-<platform>-<version>/toolchain/bin и /opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/bin.
  • Файлы формальной спецификации, расположенные в директории /opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/include/kcfm.
  • CMake-библиотеки для использования добавления модулей компонента KCFM в решение, расположенные в директории /opt/KasperskyOS-Community-Edition-<platform>-<version>/toolchain/lib/cmake/kcfm_tool.
  • Примеры решений для демонстрации использования компонента KCFM в директории /opt/KasperskyOS-Community-Edition-<platform>-<version>/examples/.

Построение графа потока управления программы

Граф потока управления строится во время сборки прикладной программы, если в файл CMakeLists.txt для сборки программы добавлена CMake-команда kcfm_generate_signature().

Подробнее см. "Пример kcfm_hello".

Контроль IPC-вызовов, выполняемых контролируемой программой выполняется с помощью данных аудита безопасности. Для того, чтобы компонент KCFM мог получить доступ к данным аудита безопасности контролируемой программы и настроить системную программу Klog, в файл CMakeLists.txt для сборки программы необходимо добавить CMake-команду kcfm_generate_audit_policy().

Код контролируемой программы может использовать статические или динамические библиотеки. В этом случае эти библиотеки также должны быть построены с помощью CMake, а в скрипт сборки должны быть добавлены CMake-команды kcfm_make_graph_lib() для построения графов потока вызовов этих библиотек.

Подробнее см. "Пример kcfm_http_server".

Обнаружение аномалий

Обнаружение аномалий выполняется модулем FlowChecker из состава компонента KCFM. Чтобы добавить модуль FlowChecker в решение, необходимо:

  • добавить его описание и IPC-каналы для подключения к нему в init-описание;
  • добавить CMake-команды для сборки и установки значений переменных окружения и аргументов командной строки в файл CMakeLists.txt для сборки программы Einit.

    Путь к файлу графа потока управления, построенного для контролируемой программы, задается с помощью переменной окружения FC_GRAPH_FILENAME.

Подробнее см. "Пример kcfm_http_server".

Обработка аномалий

При обнаружении аномалии, ее обработка выполняется модулем FlowMonitor из состава компонента KCFM. Чтобы добавить модуль FlowMonitor в решение, необходимо:

  • добавить его описание, IPC-каналы для подключения к нему в init-описание;
  • установить значения переменных окружения и аргументов командной строки к нему в init-описание;

    Имя контролируемого процесса задается в переменной окружения FM_ENTITY_NAME.

    Контролируемый процесс не должен запускаться с помощью Einit, так как он будет запущен модулем FlowMonitor, который использует для этого системную программу ExecutionManager.

  • использовать компонент ExecutionManager в решении;

Модуль FlowMonitor выполняет следующие действия:

  • запускает программу с помощью ExecutionManager;
  • контролирует статус (запущена\остановлена) программы с помощью ExecutionManager;
  • в случае остановки программы, перезапускает ее с помощью ExecutionManager;
  • получает и обрабатывает события обнаружения аномалий поведения контролируемого процесса от модуля FlowChecker. В этом случае модуль FlowMonitor выполняет следующие действия:
    • дает команду на остановку программы;
    • ждет пока программа не завершит свою работу;
    • дает команду на запуск программы.

Формирование политики безопасности

Компонент KCFM также позволяет автоматически сформировать часть политики безопасности решения в виде PSL-файла на основе исходного кода программы. В этом PSL-файле будут перечислены и разрешены все IPC-вызовы служб ядра и интерфейсов системной программы VFS, используемые в коде программы. Политика безопасности формируется так, чтобы разрешить программе доступ к используемым IPC-вызовам и запретить ко всем неиспользуемым.

Чтобы сгенерировать такой PSL-файл, необходимо в файл CMakeLists.txt для сборки программы добавить CMake-команду kcfm_generate_audit_policy(). Созданный PSL-файл необходимо включить в описание политики безопасности решения.

Подробнее см. "Пример kcfm_hello".

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