Компонент Kaspersky Control Flow Monitor
Компонент Kaspersky Control Flow Monitor (KCFM) предназначен для мониторинга и контроля работоспособности процессов посредством контроля потока управления.
Компонент KCFM позволяет в решении на базе KasperskyOS:
- обнаруживать аномалии поведения контролируемого процесса;
- при обнаружении аномалии перезапустить контролируемый процесс;
- [опционально] автоматически генерировать часть политики безопасности решения для IPC-вызовов программы к службам ядра и системной программе VFS.
Принцип работы компонента 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".