Активности в операционной системе могут быть самыми разнообразными. Это может быть запуск нового процесса или потока, обращение к файловой системе, выделение памяти и многое другое.
Могут возникнуть ситуации, когда (вследствие действий злоумышленника и\или программной\аппаратной ошибки) эта активность становится аномальной, то есть поведение системы начинает отличаться от ожидаемого. Запуск неизвестного процесса на этапе эксплуатации изделия, потребление процессом необычно большого количества памяти, установка сетевых соединений, которых не должно быть в системе — всё это примеры аномальной активности, возможно требующие внимания со стороны пользователя или разработчика.
Подробнее о мониторинге написано в одной из наших статей — Мониторинг аномальной активности в операционной системе «Нейтрино».
В этой статье мы рассмотрим пример практического использования монитора аномалий в ОС Нейтрино.
Вступление
В комплект поставки ОСРВ "Нейтрино" 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 будет содержать материалы о разработке операторов данных и клиентских приложений.
Подписывайтесь на наш канал, чтобы быть в курсе свежих новостей