Как стать автором
Обновить
50.67
СВД ВС
Надежность. Безопасность. Реальное время

12 + 8 шагов к мониторингу аномальной активности в ОС Нейтрино

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров460


Активности в операционной системе могут быть самыми разнообразными. Это может быть запуск нового процесса или потока, обращение к файловой системе, выделение памяти и многое другое.


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


Подробнее о мониторинге написано в одной из наших статей — Мониторинг аномальной активности в операционной системе «Нейтрино».


В этой статье мы рассмотрим пример практического использования монитора аномалий в ОС Нейтрино.


Вступление


В комплект поставки ОСРВ "Нейтрино" 2024 войдёт набор компонентов для мониторинга аномальной активности, а именно:


  • amon — основной сервис мониторинга активности процессов в Нейтрино, осуществляющий сбор и анализ данных, выявление аномалий.
  • amonctl — утилита управления сервисом amon.
  • amongui — графический интерфейс amon.
  • amon-operator-kernel-kernel.so — модуль оператора данных, собирающий и анализирующий информацию об активности процессов из ядра Нейтрино.

Пример использования amon в консольном интерфейсе:


Шаг 0. Для начала необходимо запустить сервис.


# amon -v &      
                                                                          
Configuration file loaded  
Running kernel operator...  
Loading analyzer...  
Using structure without learning data...  
Model name  : amon neural network  
Model desc  : neural net structure for amon  
Model ver   : 1.1  
Neuron count: 7  

Kernel operator init done

Шаг 1. Для управления amon необходима утилита amonctl. Рассмотрим возможные параметры для amonctl:


# amonctl -h  

amonctl - intellectual anomaly monitor control utility  
Usage: amonctl [params]  
-h                    -  show help  
-S                    -  show summary  
-P                    -  show captured objects list  
-A                    -  show anomaly list  
-p                    -  show information about object, see for -c and -o options to choose  
object  
-a aid                -  show information about anomaly  
-L                    -  switch to learning mode  
-R                    -  switch to recognition mode  
-c                    -  if using -L, -R or -p option, specify object class id  
-o                    -  if using -L, -R or -p option, specify object id  
-l aid                -  learn anomaly with specified id

Шаг 2. Мы можем просмотреть общую информацию о состоянии системы. Для этого выполним команду:


# amonctl -S

amon summary  

------------------------------------------------------------  
                                                 **********  
                                                 **********  
                                                 **********  
                                                 **********  
                                                 **********  
                                                 **********  
                                                 **********  
                                                 **********  
                                                 **********  
                                                 **********  
------------------------------------------------------------  

Current system trust value: 100%  
Objects captured: 38  
Alerts captured: 0  
Processing time: 7 ms

Получим вывод, на котором мы видим, что:


  • Уровень доверия в системе составляет 100% (потому что данных обучения ещё нет ни для одного объекта анализа);
  • Обрабатываются (captured) 38 объектов;
  • Получено 0 предупреждений;
  • Время обработки — 7 мс.

Шаг 3. Для того, чтобы изучить объекты, которые обрабатываются сервисом amon в данный момент, необходимо выполнить команду:


# amonctl -P

=============================================================================== 
Object ID   Object name           Class ID  Class name  Status  Trust Deviation    
315420      bin/login             0         kernel      NO DATA 0.00  0.00000      
303127      bin/login             0         kernel      NO DATA 0.00  0.00000      
307225      bin/login             0         kernel      NO DATA 0.00  0.00000      
274458      bin/login             0         kernel      NO DATA 0.00  0.00000      
                ...
286744      usr/sbin/dhcp.client  0         kernel      NO DATA 0.00  0.00000      
389152      usr/sbin/inetd        0         kernel      NO DATA 0.00  0.00000      
217105      usr/sbin/mcd          0         kernel      NO DATA 0.00  0.00000      
380955      usr/sbin/sshd         0         kernel      NO DATA 0.00  0.00000      
557093      usr/sbin/sshd         0         kernel      NO DATA 0.00  0.00000

Здесь перечислены поля (слева направо):


  • идентификатор объекта — oid (Object ID),
  • имя объекта (Object name),
  • идентификатор класса — cid (Class ID),
  • имя класса (Class name),
  • статус (Status),
  • уровень доверия (Trust),
  • значение отклонения (Deviation).

Значение поля "Status" — "NO DATA" говорит о том, что система ещё не обучена. Для того, чтобы обучить её, выполним следующий шаг.


Шаг 4. Для обучения необходимо запустить режим обучения на некоторое время.


# amonctl -L  
All objects switched to learning mode

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


Шаг 5. Через некоторое время после обучения мы можем перевести систему в режим анализа активности.


# amonctl -R  
All objects switched to recognition mode

Теперь снова посмотрим состояние системы:


# amonctl -S

amon summary

------------------------------------------------------------

                                       *********************
                                       *********************
                                       *********************
                                       *********************
                                       *********************
                                       *********************
                                       *********************
                                       *********************
                                       *********************
------------------------------------------------------------

Current system trust value: 99.9942%
Objects captured: 38
Alerts captured: 0
Processing time: 15 ms

Текущий уровень доверия составляет 99.9942% и теперь он будет меняться в зависимости от отклонения текущего состояния системы от доверенного.


Шаг 6. После обучения посмотрим показатели ещё раз. Снова выведем список анализируемых процессов:


# amonctl -P

================================================================================
Object ID  Object name          Class ID Class name  Status    Trust   Deviation 
315420     bin/login            0        kernel      ANALYZING 100.00  0.00000   
303127     bin/login            0        kernel      ANALYZING 100.00  0.00000   
307225     bin/login            0        kernel      ANALYZING 100.00  0.00000   
274458     bin/login            0        kernel      ANALYZING 100.00  0.00000   
                    ...
286744     usr/sbin/dhcp.client 0        kernel      ANALYZING 100.00  0.00000   
389152     usr/sbin/inetd       0        kernel      ANALYZING 100.00  0.00000   
217105     usr/sbin/mcd         0        kernel      ANALYZING 100.00  0.00000   
380955     usr/sbin/sshd        0        kernel      ANALYZING 100.00  0.00000   
1368086    usr/sbin/sshd        0        kernel      ANALYZING 100.00  0.00000

Можно обратить внимание, что теперь все объекты находятся в статусе ANALYZING.


Для того чтобы просмотреть детально информацию по каждому объекту, например для процесса /usr/sbin/sshd с oid: 1368086, необходимо выполнить команду:


# amonctl -o1368086  -p

Object ID:                                   1368086  
Object name:                                 usr/sbin/sshd  
Object classname:                            kernel [ID 0]  
Trust value:                                 100 / 100  
Deviation value:                             0  
 Deviation reasons information                 
   Process memory alloc anomaly             0  
   Opened channels count anomaly            0  
   Opened file descriptors anomaly          0  
   Used timers anomaly                      0  
   Used CPU time anomaly                    0  
   Thread stack anomaly                     0  
   Used libraries anomaly                   0  
Parameters info:  
{  
   "common": {  
       "cpu_load": "0.00",  
       "hash": "19999331",  
       "mem_code": "4595712",  
       "mem_data": "167936",  
       "mem_heap": "184320",  
       "mem_load": "0.93",  
       "mem_other": "0",  
       "mem_stack": "24576",  
       "mem_total": "4972544",  
       "name": "usr/sbin/sshd",  
       "num_chancons": "1",  
       "num_fdcons": "7",  
       "num_timers": "0",  
       "pid": "1368086"  
   },  
   "libs": [  
       {  
           "hash": "19999616",  
           "mem_data": "8192",  
           "name": ""  
       },  
       {  
           "hash": "69999530",  
           "mem_data": "20480",  
           "name": ""  
       },  
       {  
           "hash": "19999521",  
           "mem_data": "24576",  
           "name": ""  
       },  
       {  
           "hash": "19999426",  
           "mem_data": "114688",  
           "name": ""  
       }  
   ],  
   "threads": [  
       {  
           "mem_stack": "24576",  
           "name": "thread 0"  
       }  
   ]  
}

Здесь выводится информация об отклонении параметров от состояния, на котором была обучена система, список анализируемых параметров, в данном случае это, например, информация:


  • об используемой памяти,
  • о совместно-используемых библиотеках,
  • о созданных потоках,
  • ...

Шаг 7. Попробуем теперь спровоцировать систему сгенерировать оповещение об аномалии. Запустим в Нейтрино калькулятор (/usr/photon/bin/phcalc). Поскольку во время обучения он не запускался, его активность покажется системе подозрительной.


Для того, чтобы просмотреть список обнаруженных аномалий, необходимо выполнить команду:


# amonctl -A

============================================================================================
Alert ID Object name                         Timestamp              Trust value  Reason    
1        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:40    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
2        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:41    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
3        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:42    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
4        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:43    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
5        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:44    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
6        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:45    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
7        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:46    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
8        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:47    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
9        [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:48    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
10       [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:49    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
11       [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:50    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly
12       [1712171] usr/photon/bin/phcalc     20.12.2024 23:09:51    0.000000     Process memory alloc anomaly, Opened channels count anomaly, Opened file descriptors anomaly, Used CPU time anomaly, Thread stack anomaly

В этом списке находятся оповещения об аномалиях, которые были сгенерированы amon после того, как мы запустили неизвестный (с точки зрения amon) процесс phcalc.


Здесь мы видим поля:


  • идентификатор аномалий (Alert ID),
  • имя объекта (Object name),
  • время возникновения (Timestamp),
  • значение уровня доверия (Trust value),
  • причина по которой активность сочтена аномальной (Reason).

Каждой обнаруженной аномалии присваивается свой идентификатор, который называется идентификатором аномалии aid (Alert ID).


В таблице мы можем увидеть, что для одного и того же процесса usr/photon/bin/phcalc генерируется несколько оповещений об аномалии.


Для примера рассмотрим оповещение об аномалии с aid 12.


Шаг 8. Чтобы просмотреть подробную информацию об этой аномалии:


# amonctl -a 12

Здесь содержится информация о состоянии процесса в момент возникновения аномалии.


Шаг 9. Для того, чтобы в дальнейшем система не определяла калькулятор как аномалию, дообучим её:


# amonctl -l 12                                                                          
Amon accepted anomaly with id 12

Шаг 10. Теперь если вывести информацию о состоянии системы (amonctl -S) и открыть калькулятор, то доверие не будет падать.


Шаг 11. Для того, чтобы откатить amon к необученному состоянию:


# rm -rf /usr/share/amon/amon-operator-kernel-structure-learned.json

Пример использования amon в графическом интерфейсе:


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


Шаг 0. Запустим amon и amongui:


# amon -v &
# amongui &


Шаг 1. Обучим amon на некоторой активности:


# amonctl -L  
All objects switched to learning mode

Через некоторое время после обучения переведём систему в режим анализа активности:


# amonctl -R  
All objects switched to recognition mode


Шаг 2. На главной странице мы видим те же поля что и при вызове amonctl -S:


  • текущий уровень доверия и история изменения,
  • общая девиация,
  • количество проанализированных объектов,
  • количество обнаруженных аномалий,
  • задержку.

Шаг 3. Для того, чтобы просмотреть общую информацию о процессах, анализируемых в системе в данный момент, необходимо перейти во вкладку "Объекты".



Для просмотра подробной информации по каждому процессу необходимо кликнуть по нужному объекту.



Здесь мы может переключаться между вкладками "Состояние" и "Параметры".
На вкладке "Состояние" выводится подробная информация об объекте, такая как:


  • ID объекта,
  • имя объекта,
  • класс объекта,
  • отклонение поведения,
  • отклонения захваченных параметров.

На вкладке "Параметры" выводится информация об отклонении параметров от состояния, на котором была обучена система, список анализируемых параметров:


  • об используемой памяти,
  • о совместно-используемых библиотеках,
  • о созданных потоках,
  • и др.


Шаг 4. Перейдём во вкладку "Оповещения":



Шаг 5. Попробуем спровоцировать систему сгенерировать оповещение об аномальной активности, для этого в терминале запустим калькулятор (usr/photon/bin/phcalc). Теперь пронаблюдаем за генерацией оповещений.



Кликнув по объекту можно просмотреть более подробную информацию о девиации параметров.


Шаг 6. Для того, чтобы дообучить систему, передадим утилите управления параметр -l с идентификатором аномалии (aid), из поля обозначенного #:


# amonctl -l 1

После этого такое поведение приложения не будет приниматься за аномалию.


Шаг 7. Остаётся последняя вкладка "Параметры", на которой можно настроить стиль оформления приложения и изменить параметры сервиса amon.



Заключение


В данной статье был рассмотрен самый простой пример взаимодействия с amon. Этого должно быть достаточно для начала работы и экспериментов с ним.


Amon обладает собственным модульным и гибким API, что позволяет расширять его возможности, добавляя новые операторы данных, а также разрабатывать клиентские приложения, подключаемые к сервису.


Документация к Нейтрино редакции 2024 будет содержать материалы о разработке операторов данных и клиентских приложений.


Подписывайтесь на наш канал, чтобы быть в курсе свежих новостей

Теги:
Хабы:
+4
Комментарии3

Публикации

Информация

Сайт
www.kpda.ru
Дата регистрации
Дата основания
Численность
51–100 человек
Местоположение
Россия
Представитель
Игорь Дерябин

Истории