Система обнаружения вторжений secDetector
Введение
secDetector – это система обнаружения вторжений, разработанная для операционных систем (далее ОС) семейства openEuler / openScaler. Она обеспечивает обнаружение вторжений и реагирование на них для критически важной информационной инфраструктуры и сокращает затраты на разработку, одновременно улучшая обнаружение и реагирование для сторонних средств безопасности. Основанная на шаблонах атак ATT&CK, secDetector обеспечивает блокировку в режиме реального времени и гибкое реагирование в дополнение к большому количеству примитивов безопасности.
secDetector может использоваться в трех режимах:
- Пользователи системы могут включать его для генерации сигналов тревоги и обработки подозрительных событий.
- Интеграция со службами повышения осведомленности о безопасности для сбора системной информации для анализа сложных угроз безопасности (таких как APT) и блокировки критических событий в режиме реального времени.
- Используется для создания точных, эффективных и своевременных возможностей обнаружения вторжений и реагирования на них на основе расширяемой платформы, разрабатываемой специалистами по безопасности или поставщиками услуг по повышению осведомленности о безопасности.
Архитектура
secDetector состоит из четырех частей: SDK, service, cases и core.
- SDK
SDK предоставляется в виде библиотеки user-mode dynamic link library (DLL), развернутой в службах повышения осведомленности о безопасности, для которой требуется secDetector. SDK взаимодействует со службой secDetectord (service) для выполнения связанных операций таких как добавление подписки, отказ от нее и чтение сообщений. Информация об исключениях, предоставляемая secDetector, определяется как различные случаи. Службы повышения осведомленности о безопасности могут подписываться на эти случаи по мере необходимости.
- Service (user-mode служба приложения)
Service представляет собой сервисное приложение в пользовательском режиме. Она управляет подписками на службы повышения осведомленности о безопасности и поддерживает статус запущенных обращений. В единой среде он собирает и пересылает информацию, собранную ядром и обращениями, в различные службы повышения осведомленности о безопасности, а также управляет конфигурациями и требованиями к управлению служб повышения осведомленности о безопасности в обращениях и ядре и направляет их. Поскольку нескольким службам повышения осведомленности о безопасности может потребоваться одно и то же обращение, служба находит и регистрирует пересечение обращений всех служб повышения осведомленности о безопасности.
- Cases (обращения)
Обращения соответствуют серии тестов обнаружения исключений, которые представлены в разных формах. Например, каждый тест для обнаружения исключений ядра (kernel exceptions) доступен в модуле ядра (файл .ko). Обращение представляет собой проверку, которая обычно охватывает тип исключений или исключительных событий. Например, тесты процессов предназначены для событий создания, завершения и изменения свойств всех процессов, в то время как тесты модификации памяти собирают такую информацию, как список модулей ядра и параметры безопасности. Тестовое обращение может отслеживать несколько событий, но логика мониторинга может быть развернута по-разному в одном и том же потоке выполнения. Рабочие процессы представлены для представления области действия теста обнаружения в одном и том же потоке выполнения, при этом проверка содержит один или несколько рабочих процессов. Например, process probe управляет созданием и изменением свойств в различных рабочих процессах.
- Core (ядро системы обнаружения)
Ядро является базовой платформой для управления обращениями и предоставляет общие функциональные модули, необходимые для рабочих процессов. Платформа обнаружения исключений ядра поддерживается модулем ядра ОС (файлом .ko), в котором обращение может регистрироваться в ядре или отменять регистрацию в ядре. Ядро также предоставляет специальные интерфейсы взаимодействия для обработки внешних динамических запросов. Рабочий процесс состоит из четырех типов функциональных блоков: генератор событий, сборщик информации, анализатор событий и модуль реагирования.
Обращения сases и ядро core объединены в драйверы, которые обеспечивают реализацию функций secDetector на системном уровне (bottom-layer system-level implementation).
Драйверы подразделяются на kerneldriver и usrdriver. kerneldriver развертывается в пространстве ядра в качестве модуля ядра. usrdriver развернут в пользовательском пространстве в качестве модуля сервиса. Логично, что usrdriver находится в составе сервиса. Однако для снижения затрат на взаимодействие usrdriver напрямую интегрирован в службу service.
Установка secDetector
Требования к программной и аппаратной части
Аппаратные требования
x86_64 или AArch64 процессоры
Емкость накопителя: 3 GB или более
Memory: 4 ГБ или более
Программная часть
Операционная система openScaler 22.03 LTS SP3 или новее
Подготовка тестовой ОС
Для использования на x86_64 сервер была установлена ОС openScaler 22.03 LTS SP3. Достаточно минимальной конфигурации в случае ознакомительного тестирования.
Установка secDetector
ОС openScaler 22.03 LTS SP3 является ОС на основе rpm-пакетов с поддержкой пакетного менеджера dnf.
Процесс установки выглядит следующим образом:
- Выполнить команду для загрузки и установки пакетов установки secDetector c помощью пакетного менеджера dnf:
dnf install secDetector secDetector-devel
- После установки secDetector вы получите следующие файлы, необходимые для развертывания службы secDetectord:
#Core framework of the kerneldriver of secDetector
/usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_core.ko
#Functional component of the kerneldriver of secDetector
/usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_kmodule_baseline.ko
/usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_memory_corruption.ko
/usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_program_action.ko
#Daemon process file of secDetector
/usr/bin/secDetectord
#SDK library file of secDetector
/usr/lib64/secDetector/libsecDetectorsdk.so
Настройка secDetector
Далее потребуется загрузить модули ядра.
- Сначала требуется подгрузить модуль ядра secDetector_core.ko – это basic framework of the kernel driver. Соответствующая команда выглядит следующим образом:
insmod /usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_core.ko
secDetector_core поддерживает параметр командной строки ringbuf_size. Вы можете указать значение этого параметра для управления размером буфера в канале передачи данных между драйвером ядра (kerneldriver) и службой secDetectord в user space пространстве. Для этого параметра можно задать целое число в диапазоне от 4 до 1024 в МБ. Значение по умолчанию равно 4. Значение должно быть кратно 2. Пример команды для выполнения:
insmod secDetector_core.ko ringbuf_size=128
- Загрузите функциональные модули драйвера ядра, которые развертываются в модульном режиме. Вы можете развернуть необходимые функциональные модули на основе framework или развернуть все модули. Команды выглядят следующим образом:
insmod /usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_kmodule_baseline.ko
insmod /usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_memory_corruption.ko
insmod /usr/lib/modules/5.10.0-182.0.0.95.os2203sp3.x86_64/extra/secDetector/secDetector_program_action.ko
Назначение модулей:
- secDetector_module_baseline.ko обнаруживает список модулей ядра и выполняет проверку на изменение памяти.
- secDetector_memory_corruption.ko обнаруживает изменения в памяти и выполняет проверку на изменение памяти.
- secDetector_program_action.ko обнаруживает поведение программы и проводит тесты поведения программы (program behavior probe).
Развертывание usrdriver и observer_agent
usrdriver и служба observer_agent были интегрированы в службу secDetectord. Следующая команда предназначена её запуска:
/usr/bin/secDetectord &
usrdriver обеспечивает проверку работы с файлами и управления процессами.
secDetectord поддерживает следующие параметры конфигурации:
Syntax: secDetectord [Option]
By default, secDetectord runs in the background, obtains data from probes, and forwards the data to subscribers.
Options:
-d Enter the debug mode in the foreground, and print the probe data on the console.
-s <size> Size of the eBPF buffer, in Mb. The default value is 4. The value of size ranges from 4 to 1024 and must be a power of 2. There are two independent buffers.
-t <topic> Events to be subscribed to. By default, all events are subscribed to. A topic is in bitmap format. For example, -t 0x60 subscribes to process creation and exit events at the same time. For details, see include/secDetector_topic.h.
SDK Deployment
По умолчанию библиотечные файлы SDK размещены в каталоге системной библиотеки. Вам нужно только указать ссылки на заголовочные файлы SDK в вашей программе.
Пример листинга команды с этими файлами:
# ll /usr/include/secDetector/
total 8
-rw-r--r-- 1 root root 829 Jan 24 21:18 secDetector_sdk.h
-rw-r--r-- 1 root root 1723 Jan 24 21:18 secDetector_topic.h
Использование secDetector
secDetector предоставляет SDK, то есть готовую библиотеку в виде подгружаемого .so модуля ядра. Пользователи могут интегрировать библиотеку динамической компоновки (DLL) в свои приложения, чтобы использовать secDetector через API. В этой главе описывается, как использовать SDK.
Использование
После установки пакета secDetector-devel в системе будут файлы libsecDetectorsdk.so, secDetector_sdk.h и secDetector_topic.h и они будут развернуты по пути к системной пользовательской библиотеке по умолчанию:
/usr/lib64/secDetector/libsecDetectorsdk.so
/usr/include/secDetector/secDetector_sdk.h
/usr/include/secDetector/secDetector_topic.h
- Убедившись, что путь include включен в приложение, разработанное с использованием C или C++, ссылайтесь на два заголовочных файла в приложении.
- Вызовите API-интерфейсы, предоставляемые SDK, для доступа к secDetector, обратившись к описанию функций API по ccылке secDetector API Reference.
Порядок работы по вызову функций API secDetector:
- Вызовите API подписки secSub, чтобы подписаться на нужные разделы.
- Вызовите API чтения сообщений secReadFrom в независимом потоке, чтобы прочитать сообщения из подписанных разделов в режиме блокировки.
- Если подписка secDetector не требуется, вызовите API secUnsub для отмены подписки. Используйте возвращаемое значение имени подписки subscription для её отмены (т.е. для завершения процедуры unsubscription).
Примеры использования
Смотрите пример кода на Python в репозитории кода secDetector.
- Посмотрите пример кода по следующей ссылке:
- В качестве альтернативы, загрузите пример кода из директории examples выполнив команду:
git clone https://gitee.com/openeuler/secDetector.git
Технические характеристики и ограничения
- Некоторые функции (например, переключатель безопасности в тестах модификации памяти, security switch in memory modification probes) зависят от аппаратной архитектуры. Они по-разному выполняются в разных архитектурах наборов команд.
- Размер буфера для передачи данных из ядра в пользовательский режим совместно используется тестами. Если буфер заполнен, вновь собранная информация о событии удаляется. Размер буфера варьируется от 4 до 1024 МБ и должен быть кратным 2.
- Служебный процесс secDetectord может запускаться пользователем root и не поддерживает несколько экземпляров. Программа, которая запускается не первой, завершает работу.
- Максимальное количество подключений по подписке пользователя – 5.
- После того, как пользователь подпишется на определенные разделы, для API чтения сообщений необходимо предоставить буфер. Сообщения, длина которых превышает размер буфера, будут обрезаны. Рекомендуется, чтобы длина буфера была больше или равна 4096.
- Длина строк символов описания, таких как имя файла и имя узла, ограничена. Если длина слишком велика, строки символов описания могут быть сокращены.
- Множественные службы secDetectord с несколькими подключениями для получения сообщений в рамках одного процесса приложения не поддерживаются. После успешной подписки для получения сообщений используется одно соединение. Вы можете подписаться на разные разделы только после того, как отпишетесь от подписки на разделы.
- Процесс secDetectord можно закрыть и выйти из него только после того, как все приложения будут отключены, то есть все темы будут отписаны.
- Некоторые функции (например, переключатель безопасности в датчиках изменения памяти) основаны на состоянии CPU сервера. Основная функция обнаружения заключается в обнаружении изменения состояния текущего CPU. Если изменение статуса других процессоров вовремя не синхронизировано с текущим CPU процессором, изменение статуса других процессоров обнаружено не будет.
Результаты
По результатам успешной установки ПО secDetector для ОС openScaler 22.03 LTS SP3 на x86_64 совместимый сервер можно сделать вывод, что данное ПО совместимо с ОС и такое решение может быть в дальнейшем успешно использовано для обеспечения обнаружения вторжений и дальнейшем реагировании на них для критически важной информационной инфраструктуры. Программное обеспечение secDetector сокращает затраты на разработку, одновременно улучшая обнаружение и реагирование для сторонних средств безопасности обучения для выполнения различного круга задач с применением cерверной ОС openScaler.