Пример kcfm_echo_server
Пример демонстрирует интеграцию компонента 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-описания.
Сценарий работы
- В файл
./files/echo_server/CMakeLists.txtдля сборки программыWebServerдобавлены следующие CMake-команды:kcfm_generate_audit_policy()для автоматического формирования части политики безопасности решения;kcfm_generate_signature()для построения графа потока управления.
- При сборке программы
WebServerформируется часть политики информации в файлеbuild/_headers_/hello/Hello/kcfmDefaultPolicy.pslи файлы, содержащие граф потока управления в директорииbuild/hello/kcfm_generated.Построение графа потока управления в примере kcfm_echo_server может занять длительное время (до 2 часов).
- После сборки образа решения программа WebServer запускает веб-сервер, доступный по адресу
http://localhost:1106при запуске примера в QEMU. IP-адрес при запуске на RaspberryPI определяется параметрами сетевого подключения устройства - При переходе по адресу веб-сервера в браузере открывается веб-страница
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.
См. "Сборка и запуск примеров".