Компонент Kaspersky Control Flow Monitor
Компонент Kaspersky Control Flow Monitor (KCFM) предназначен для мониторинга и контроля работоспособности процессов посредством контроля потока управления.
Компонент KCFM позволяет в решении на базе KasperskyOS:
- обнаруживать аномалии поведения контролируемого процесса;
- при обнаружении аномалии перезапустить контролируемый процесс;
- [опционально] автоматически генерировать часть политики безопасности решения для IPC-вызовов программы к службам ядра и системной программе VFS.
Подробнее см. "Пример kcfm_echo_server" в составе SDK.
Принцип работы компонента KCFM
Используя исходный код программы, которую требуется контролировать, возможно построить граф потока управления (Control Flow Graph, CFG) этой программы. Этот граф определяет полный набор системных вызовов и вызовов библиотечных функций, которые могут быть выполнены во время исполнения программы, а также все возможные последовательности их выполнения. Построение CFG происходит во время сборки программы.
Во время работы процесса (исполняющейся программы) отслеживаются IPC-вызовы, выполняемые процессом. При обнаружении несоответствия в работе (аномалии) программы ожидаемому поведению компонент KCFM позволяет остановить и перезапустить контролируемую программу.
Важно! Компонент KCFM является экспериментальным и работает с ограничениями, описанными ниже. Этот компонент доступен пользователям для тестирования и предоставления отзывов.
Ограничения в экспериментальной версии компонента KCFM
Компонент KCFM имеет следующие ограничения:
- Компонент не поставляется в составе SDK для аппаратной платформы OrangePi RV2.
- Только один процесс может контролироваться в решении на базе KasperskyOS.
- Поддерживаются только программы на языках C и С++.
- При использовании вычисляемых указателей при вызове функций в коде программы, инструменты построения графа потока управления не могут однозначно определить вызываемую функцию. В этом случае выдвигается предположение о возможных вызовах функций, производится построение сигнатуры с такими вызовами и выдается предупреждение.
- Вызов функций работы с аппаратными обработчиками прерывания в коде программы игнорируется и выдается соответствующее предупреждение.
- При использовании в коде программы функций API для работы с динамическими библиотеками с явным связыванием, выдается предупреждение о невозможности обработки вызова таких функций.
- При обнаружении аномалий в работе процесса компонент KCFM перезапускает этот процесс. Других действий, кроме перезапуска, не предусмотрено.
Состав компонента 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_generate_signature() необходимо добавить в KPA-пакет прикладной программы.
Для отслеживания IPC-вызовов, выполняемых контролируемой программой, требуется включить в описание политики специальный профиль аудита. Чтобы сделать это, нужно добавить в файл CMakeLists.txt для сборки контролируемой программы CMake-команду kcfm_generate_audit_policy().
Код контролируемой программы может использовать статические или динамические библиотеки. В этом случае эти библиотеки также должны быть построены с помощью CMake, а в скрипт сборки должны быть добавлены CMake-команды kcfm_make_graph_lib() для построения графов потока вызовов этих библиотек.
Обнаружение аномалий
Обнаружение аномалий выполняется модулем FlowChecker из состава компонента KCFM. Чтобы добавить модуль FlowChecker в решение, необходимо упаковать приложение FlowChecker в KPA-пакет и добавить его в состав решения. Упаковка в KPA-пакет и добавление компонента в состав решения выполняется в скриптах сборки CMakeLists.txt. Подробнее см. "Пример kcfm_echo_server" в составе SDK.
Обработка аномалий
При обнаружении аномалии, ее обработка выполняется модулем FlowMonitor из состава компонента KCFM. Чтобы добавить модуль FlowMonitor в решение, необходимо упаковать приложение FlowMonitor в KPA-пакет и добавить его в состав решения. Упаковка в KPA-пакет и добавление компонента в состав решения выполняется в скриптах сборки CMakeLists.txt. Подробнее см. "Пример kcfm_echo_server" в составе SDK.
Модуль FlowMonitor выполняет следующие действия:
- запускает программу с помощью
ExecutionManager; - контролирует статус (запущена\остановлена) программы с помощью
ExecutionManager; - в случае остановки программы, перезапускает ее с помощью
ExecutionManager; - получает и обрабатывает события обнаружения аномалий поведения контролируемого процесса от модуля
FlowChecker. В этом случае модульFlowMonitorвыполняет следующие действия:- дает команду на остановку программы;
- ждет пока программа не завершит свою работу;
- дает команду на запуск программы.
Формирование политики безопасности
Компонент KCFM также позволяет автоматически сформировать часть политики безопасности решения в виде PSL-файла на основе исходного кода программы. В этом PSL-файле будут перечислены и разрешены все IPC-вызовы служб ядра и интерфейсов системной программы VFS, используемые в коде программы. Политика безопасности формируется так, чтобы разрешить программе доступ к используемым IPC-вызовам и запретить ко всем неиспользуемым.
Чтобы сгенерировать такой PSL-файл, необходимо в файл CMakeLists.txt для сборки программы добавить CMake-команду kcfm_generate_audit_policy(). Созданный PSL-файл необходимо включить в описание политики безопасности решения.