Обзор программного комплекса мониторинга аномальных процессов

Описание программного комплекса мониторинга аномальных процессов (ПКМАП)

Предисловие

Активности в операционной системе могут быть самыми разнообразными. Это может быть и запуск нового процесса или потока, и обращение к файловой системе, и выделение памяти, и многое другое. Могут возникнуть ситуации, когда (вследствие действий злоумышленника и\или программной\аппаратной ошибки) эта активность становится аномальной, то есть поведение системы начинает отличаться от ожидаемого. Запуск неизвестного процесса на этапе эксплуатации изделия, потребление процессом необычно большого количества памяти, установка сетевых соединений, которых быть не должно в системе - всё это примеры аномальной активности, возможно требующие внимания со стороны пользователя или разработчика.

Потребители ЗОСРВ «Нейтрино» имеют доступ к достаточно большому арсеналу средств, обеспечивающих надежность и безопасность системы. Среди них системы контроля целостности компонентов, встроенные средства защиты информации, средство обнаружения потенциально опасных программ (антивирус) и средства обеспечения высокой готовности (отказоустойчивости). Однако, в контексте мониторинга аномальных активностей их становится недостаточно. Это подтолкнуло нас к разработке программного комплекса мониторинга аномальных процессов (ПК МАП). В его основу лежат механизмы сбора и анализа состояния системы, а также технологии машинного обучения.

Сбор информации об активности процессов

В ЗОСРВ «Нейтрино» имеется большое количество способов получения информации об активности процессов. Схематически они показаны на рисунке:

activity_structure.png
Рисунок 1. Способы получения информации об активности

Трассировка событий

В составе ЗОСРВ «Нейтрино» имеется диагностическая версия микроядра ( procnto-instr), которая обладает развитым механизмом трассировки и протоколирования событий. Он позволяет отслеживать взаимодействие между ядром ОС и любым активным потоком или процессом. Это могут быть, например, вызовы ядра, изменение состояний потоков, прерывания, и многое другое.

Механизм получения информации об активности процессов является следующим. Диагностическое ядро, а также системные вызовы и прикладной код, генерируют трассировочные события по различным операциям, которые автоматически копируются в набор буферов, сгруппированных в циклическом связном списке. Как только количество событий в буфере достигает определённого значения, ядро информирует утилиту сбора данных о заполнении буфера. После получения данных, утилита выполняет их фильтрацию и интерпретацию, чтобы подготовить эти данные к анализу.

Использование диагностического ядра может повлиять на производительность системы. Хотя падение производительности может составлять всего несколько процентов, по сравнению с версией ядра без этого механизма, его использование на “боевом” железе часто применяется для накопления диагностической информации о работе системы.

Менеджер процессов и потоков

В качестве источника информации об активности процессов также может использоваться виртуальная файловая система /proc. В сравнении с трассировкой она не влияет на производительность целевой системы, но позволяет получать некоторые данные для анализа. В этом случае мы получаем значительно меньшее количество информации, нежели в случае с использованием диагностического ядра, но этого вполне достаточно, чтобы оценить состояние того или иного процесса.

Таким образом, операционная система позволяет привилегированному процессу получать информацию об активности процессов и потоков в системе. Программный комплекс мониторинга аномальных процессов использует виртуальную файловую систему /proc и собирает следующую информацию:

Помимо перечисленных источников информации об активности, ими также может выступать сетевой стек (анализ сетевого трафика), дисковая подсистема (операции чтения/записи), или, например, подсистема ввода (анализ действий пользователя). Вариантов действительно много.

Машинное обучение на встраиваемых системах

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

В настоящий момент ситуация с машинным обучением на встраиваемых системах в парадигме edge-computing (когда данные обрабатываются не на серверах, а непосредственно на встраиваемых устройствах) в целом весьма грустная. Чаще всего предлагаются закрытые решения для конкретного набора оборудования, что существенно ограничивает их применимость. Кроме того, речь идёт чаще всего только о применении обученной нейросети для анализа данных (инференс) на встраиваемых системах, но не про обучение нейронной сети (это всё равно выносится за пределы этих устройств).

Одним из фреймворков, который мог бы функционировать целиком и полностью на встраиваемых системах, без необходимости задействовать дополнительные вычислительные мощности (edge-computing), является кроссплатформенная библиотека с открытым исходным кодом interference. Библиотека реализует интерференционную модель нейронной сети, которая принципиально отличается от большинства классических моделей нейронных сетей. Структура нейронных сетей в этой модели максимально приближена к структуре биологических нейронных сетей в головном мозге человека. Нейрон в этой модели представляет собой самоорганизующийся объект, а его обучение происходит за счёт перемещения рецепторов под действием нейромедиатора, который выделяется синапсами (как в биологическом нейроне). Сигнал подаётся последовательно, распределённо по времени, при этом количество данных обучения получается значительно меньше по сравнению с классическими моделями (что позволяет экономить память) – необходимо хранить только координаты рецепторов в конечный момент времени и длины их траекторий. Для успешной классификации данных достаточно одного нейрона на один класс. Ещё одной важной особенностью является то, что нейронные сети этой модели можно легко дообучать, без необходимости начинать обучение с нуля.

Интерференционная модель нейронной сети зарекомендовала себя в решении задач распознавания изображений, но в силу своей универсальности может быть применена и к задаче динамического анализа, в частности, для обнаружения аномалий в наборе данных.

Другим важным аспектом является то, что библиотека написана на чистом C++ без дополнительных зависимостей, что обуславливает скорость работы и простоту ее портирования. В библиотеке реализована система вычислительных бэкендов, которая позволяет переключаться между разными способами производить вычисления, а также реализовывать новые - под специфичные вычислители. К ним на уровне архитектуры могут относиться OpenGL [ES], OpenCL, специализированные DSP и др. Это позволяет переносить вычислительную нагрузку на GPU и другие специализированные устройства.

Состав комплекса

Программный комплекс состоит из следующих компонентов:

Структура amon представлена на следующей схеме:

amon_structure.png
Рисунок 2. Структура amon

На схеме представлены следующие компоненты:

Особенности комплекса

Особенностями программного комплекса являются:

Сценарий использования

Схематически сценарий использования представлен на картинке:

usage_structure.png
Рисунок 3. Сценарий использования ПК МАП

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

После окончания обучения комплекс переключается в режим анализа активности. При обнаружении аномальной активности, информация о ней будет сохранена в лог и может быть прочитана различными способами. Если обнаруженная активность на самом деле не является аномальной, администратор имеет возможность дообучить нейронную сеть и принять эту активность как доверенную без переобучения всей сети. Также поддерживается автоматическое выполнение сценариев при обнаружении аномальной активности.

Поддерживается большое количество способов взаимодействия с сервисом amon (через менеджер ресурсов /dev/amon). Основное взаимодействие осуществляется через утилиту amoncfg. С помощью утилиты cat можно вывести журнал обнаруженных аномалий. Также существует открытое API, которое позволяет разработать собственное клиентское приложение, взаимодействующее с сервисом amon.

Тематические ссылки

amon, amoncfg, interference




Предыдущий раздел: Программный комплекс монитринга аномальных процессов