Kaspersky MLAD

Раздел для документов по Kaspersky MLAD

Kaspersky MLAD: Установка системы

Информация, приведенная на данной странице, является разработкой команды pre-sales и/или ICS community и НЕ является официальной рекомендацией вендора

Официальная документация по данному разделу приведена в Онлайн-справке на продукт: https://support.kaspersky.ru/mlad/6.0/247959

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


Программные и аппаратные требования

Актуальные программные и аппаратные требования для установки Kaspersky MLAD указаны в официальной справочной документации https://support.kaspersky.ru/mlad/6.0/247961.

Процесс установки операционной системы производится в соответсвтвии с документацией производителя и не описывается в данном документе.

После установки операционной системы необходимо установить пакеты Docker и Docker-compose. Для этого можно воспользоваться документацией с официального сайта Docker или инструкцией ниже.

# Удаление существующих пакетов:
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

# Добавление официального GPG-ключа Docker:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Добавление репозитория:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

# Установка пакетов
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Добавление текущего пользователя в группу docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

# Проверка работы
docker run hello-world

Установка MLAD в интерактивном режиме

1. Распакуйте архив Kaspersky_MLAD_X.0.0.X_ru-RU_en-US.tar.xz, входящий в состав комплекта поставки:

tar xf Kaspersky_MLAD_<номер версии>.0.0.<номер сборки>_ru-RU_en-US.tar.xz

2. Перейдите в директорию mlad-release-X.0.0-X>:

cd mlad-release-<номер версии>.0.0-<номер сборки>

3. Запустите установку Kaspersky MLAD:

sudo ./mladctl install

4. Следуйте указаниям мастера установки программы.

Установка Kaspersky MLAD будет прервана, если целостность архива программы нарушена. Для получения корректного архива программы обратитесь к специалистам "Лаборатории Касперского".


Установка MLAD в неинтерактивном режиме

1. Распакуйте архив Kaspersky_MLAD_X.0.0.X_ru-RU_en-US.tar.xz, входящий в состав комплекта поставки:

tar xf Kaspersky_MLAD_<номер версии>.0.0.<номер сборки>_ru-RU_en-US.tar.xz

2. Перейдите в директорию mlad-release-X.0.0-X>:

cd mlad-release-<номер версии>.0.0-<номер сборки>

3. Запустите установку Kaspersky MLAD:

sudo ./mladctl install -q -e accept -f <полный путь к директории для установки программы> -d <полный путь к дистрибутиву программы>

-q означает, что программа будет установлена в неинтерактивном режиме. При установке программы в неинтерактивном режиме Kaspersky MLAD создает первого пользователя программы с ролью системного администратора и задает ему имя пользователя и пароль по умолчанию.

-e accept означает, что вы принимаете условия Лицензионного соглашения. Согласие с условиями Лицензионного соглашения является обязательным условием для установки программы. Если вы не указываете ключ -e accept, установка программы будет прервана.

Прочитать текст Лицензионного соглашения можно в текстовых файлах license_ru.txt и license_en.txt, которые расположены в директории legal.

-f <полный путь к директории для установки программы> - установка программы в указанную директорию. Директория для установки Kaspersky MLAD должна быть пустой или отсутствовать. В последнем случае она будет создана автоматически при установке. В имени директории используйте строчные буквы латинского алфавита, цифры и нижнее подчеркивание.

Если ключ -f не указан, программа будет установлена в директорию по умолчанию /opt/kaspersky/mlad. Если эта директория уже существует, она должна быть пустой.

-d <полный путь к дистрибутиву программы> - установка сборки программы из дистрибутива, расположенного в указанной директории.

При необходимости добавьте к команде установки следующие ключи:
--nointegrity — отключение проверки целостности файлов архива программы при установке.
--autostart — автоматический запуск Kaspersky MLAD после установки.

Первый запуск MLAD

1. Запустите MLAD следующей командой в терминале:

sudo mladctl start

Остановка MLAD выполняется следующей командой в терминале: sudo sudo mladctl stop. При остановке программа запоминает статусы служб. При запуске программы работа служб будет восстановлена с прежними статусами.

2. Откройте веб-интерфейс MLAD в поддерживаемом браузере Google Chrome версии 107 или выше. Для этого введите адрес сервера в адресную строку. На странице входа укажите адрес электронной почты в качестве имени пользователя и введите пароль. 

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

Если использовалать установка в неинтерактивном режиме, используйте логин и пароль по умолчанию:
Login: test@admin.com
Password: admin

Kaspersky MLAD: Создание активов

1.            Описание задачи

Kaspersky MLAD позволяет пользователю создавать дерево активов для своего проекта как вручную через веб-интерфейс программы, так и автоматизировано путем ипорта файла активов.

Данный документ описывает процесс создания/изменения активов в Kaspersky MLAD при помощи Excel-таблиц.

Цель использования данного инструмента – ускорить и упростить процесс создания или изменения активов в Kaspersky MLAD.

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

image.png

2.            Реализация задачи

Первым шагом необходимо в MLAD перейти в Меню администратора, затем в Активы. Нажмите кнопку Экспортировать Активы и теги в файл XLSX.

image.png

Будет скачан файл mlad_structure.xlsx. Откройте его в MS Excel. В появившемся уведомлении нажмите Да.

image.png

Во вкладке directory_types отображаются существующие типы активов. Здесь же можно создать собственные типы активов. Описания полей можно увидеть, наведя мышку на название столбца. Ниже на скриншоте показан процесс добавления двух новых типов активов.

image.png

В поле directory_type укажите название нового типа активов. Поля parameter_label являются не обязательными для заполнения, в них вы можете указать опциональные параметры, которые будут иметь все активы данного типа (например, год выпуска, или рабочее напряжение). В поле description можно задать краткое описание для данного типа активов. Поле directory_type_id не заполняется вручную.

Во вкладке directories можно создать или изменить активы. Ниже на скриншоте показан процесс добавления двух новых активов на основе созданных типов активов:

image.png

В поле directory_type выберите тип создаваемого актива. В поле directory_type_row укажите номер строки, который этот тип имеет во вкладке directory_types (несмотря на то, что в описании столбца указано «не заполнять»). В нашем случае это строки 9 и 10.

В поле directory_name укажите название нового актива.

В поле parent необходимо выбрать имя родителя. Если наш актив располагается в корне дерева, то родителя указывать не нужно. В противном случае просто скопируйте имя нужного актива из столбца directory_name. Если ваш актив находится глубже в структуре дерева, то необходимо здесь указать путь до родительского актива в формате «Родитель 1; Родитель 2; …; Непосредственный родитель». Если в выпадающем списке нужных родителей нет, удалите выпадающий список и заполните поле вручную.

В поле parent необходимо указать номер строки родителя из этой же вкладки (несмотря на то, что в описании столбца указано «не заполнять»). В примере выше, если родителем является Станция 1, то нужно указать его номер строки – 23.

Поля directory_id и parent_id вручную заполнять не нужно.

Во вкладке tags создаются новые или редактируются существующие теги. На скриншоте ниже показан пример создания трех новых тегов (new_tag_1, new_tag_2, new_tag_3).

image.png

В столбце tag_id необходимо продолжить нумерацию после последнего существующего тега для всех новых тегов (несмотря на то, что в описании столбца указано «не заполнять»). Нумерация не обязательно должна быть непрерывной, вы можете задавать id по своему усмотрению, но у каждого тега в активах MLAD должен быть свой уникальный id.

В поле tag_description указывается описание / проектное наименование тега, с которым он потом будет отображаться в инструментах MLAD.

В поле parent необходимо указать путь до родительского актива по тому же принципу, как мы уже сделали это во вкладке directories.

В поле parent_row укажите номер строки родительского актива во вкладке directories (несмотря на то, что в описании столбца указано «не заполнять»). В нашем случае это строки 24 и 25.

Поле parent_id вручную заполнять не нужно.

Остальные поля заполняются по желанию / необходимости.

После заполнения файла сохраните его и вернитесь в MLAD в раздел активов.

image.png

Нажмите кнопку Импортировать активы и теги из файла XLSX. В появившемся окне выберите ваш файл с активами для загрузки остальные настройки как показано на скриншоте ниже:

image.png

После чего нажмите кнопку Сохранить. Если импорт прошел успешно, появится зеленая плашка с соответствующим уведомлением, и в вашем дереве активов появятся новые активы и теги.

image.png

Данные теги доступны для использования во всех инструментах MLAD, в том числе в моделях, разметках и коннекторах.

Kaspersky MLAD: Импорт исторических данных

1.            Описание задачи

После создания дерева активов в Kaspersky MLAD, для обучения моделей и проведения исторического инференса потребуется достаточная выборка исторических данных. Данные можно накопить в процессе работы программы при наличии подключения к источнику данных, например, по протоколу OPC UA. Но если у вас уже есть накопленная выборка, то наиболее быстрым и предпочтительным способом является импорт данных при помощи встроенного HTTP-коннектора.

Данный документ описывает процесс настройки HTTP-коннектора и импорта данных из csv-файла при помощи POST-запросов. 

Для передачи csv-файла в MLAD можно использовать стандартную утилиту, например, curl. В данном документа также описан процесс импорта при помощи инструмента csv2http (предоставляется по запросу).

Для работы потребуется операционная система Linux (в данном документе используется Debian 13).

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

image.png

2.            Реализация задачи

Первым шагом необходимо в MLAD перейти в Меню администратора -> Системные параметры -> HTTP Connector. Здесь рекомендуется отключить использование TLS-соединения, чтобы упростить процесс настройки Kaspersky MLAD и ввод  его в эксплуатацию. Если в дальнейшем по соображениям безопасности потребуется перейти на HTTPS-соединение, здесь же можно включить TLS-обратно и подгрузить необходимые сертификаты.

image.png

После этого необходимо запустить HTTP-коннектор в Службах.

image.png

Теперь мы можем отправлять данные в MLAD в виде csv файлов через POST-запросы. Более подробно настройка HTTP-коннектора и загрузка данных описаны в руководстве пользователя.

Csv-файл должен иметь следующую структуру:

метка времени; имя тега; значение тега

Метка времени должна быть в формате %Y-%m-%dT%H:%M:%S (или %Y-%m-%d %H:%M:%S).

Имя тега должно соответствовать имени тега в активах MLAD.

Если значение тега содержит дробную часть, используйте точку при отделении целой и дробной частей.

Файл не должен содержать заголовочную строку (строку с названием столбцов).

Пример содержимого файла:

2026-01-12 08:00:00;Tag1;11.10
2026-01-12 08:00:00;Tag2;37
2026-01-12 11:00:00;Tag1;12.10
2026-01-12 11:00:00;Tag2;38

Пример отправки CSV-файла в MLAD через curl по протоколу методом POST на порт 4999 сервера Kaspersky MLAD:

curl -F "file=@<имя файла>.csv" -X POST "http://<IP-адрес или доменное имя сервера Kaspersky MLAD>:4999/upload"

Не рекомендуется загружать файлы размером более 10-20 МБ. Это может привести к потере отдельных точек данных при загрузке. Если вы хотите загрузить большой csv-файл (что весьма вероятно), необходимо разбить его на более мелкие файлы и загрузить их по очереди с небольшой задержкой. Можно использовать, к примеру, такой скрипт (запускается из директории, в которой находятся csv-файлы:

#!/bin/bash
# Укажите адрес вашего сервера
SERVER_URL="localhost:4999/upload"
# Перебор всех csv-файлов в директории
for file in *.csv; do
    # Завершение скрипта, если csv-файлы не найдены
    [ -e "$file" ] || { echo "No CSV files found."; exit 0; }
    echo "Uploading $file to $SERVER_URL ..."
    # Отправка файла в MLAD через POST-запрос
    curl -X POST -F "file=@$file" "$SERVER_URL"
    sleep 0.5
    echo
done

Kaspersky MLAD будет добавлять часовой пояс, указанный в настройках программы к меткам времени, указанным в csv-файле. Имейте это в виду при подготовке файла для импорта.

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

Альтернативно можно использовать утилиту csv2http (предоставляется по запросу), которая автоматически подготавливает файл для загрузки в соответствии с настройками и загружает его. Для ее запуска на машине потребуется установленный docker и docker-compose (можно запускать на машине с MLAD).

image.png

Перед началом использования утилиты необходимо загрузить локальный docker-образ (укажите корректный путь до tar-файла):

docker load -i /home/mlad-user/Downloads/csv2http/csv2http_docker_image.tar

Утилита запускается при помощи скрипта в корневой директории ./run.sh
Для остановки утилиты используется скрипт ./stop.sh

Вы можете изменить настройки программы в файле csv2http.yml. После изменения параметров необходимо остановить и заново запустить утилиту. Ключевые настройки, на которые нужно обратить внимание:

hours_from_GMT - количество часов, указанных в данном параметре должно соответствовать часовому поясу, заданному в настройках MLAD.
tabular - если значение данного параметра равно false, то данные формат csv должен соответствовать формату, описанному выше (метка времени; имя тега; значение тега), если значение true, то файл должен иметь табличную форму, как показано в следующем примере:

timestamp param1 param2 param3 param4
2025-12-28T00:00:00 70 53 49 66
2025-12-28T00:01:00 71 52 49 66
2025-12-28T00:02:00 70 53 49 66
2025-12-28T00:03:00 71 53 49 66
2025-12-28T00:04:00 70 52 49 66
2025-12-28T00:05:00 70 52 49 66
2025-12-28T00:06:00 70 53 49 66

timestamp_position - номер столбца, содержащего метки времени (нумерация начинается с 0). Релевантно только в табличном режиме, при переключении в стандартный режим закомментируйте эту строку.
tag_position - номер столбца, содержащего имена тегов (нумерация начинается с 0). Релевантно только в стандартном режиме, при переключении в табличный режим закомментируйте эту строку.
value_position - номер столбца, содержащего значения тегов (нумерация начинается с 0). Релевантно только в стандартном режиме, при переключении в табличный режим закомментируйте эту строку.
skip_lines - количество строк в начале файла, которое вы хотите пропустить при обработке. Полезно, если файл содержит дополнительную информацию в начале.
has_header - значение true, если используется табличный режим. При переключении в стандартный режим укажите false.
timestamp_format - укажите формат меток времени, используемый в вашем файле, например, '%Y-%m-%dT%H:%M:%S' или '%d-%b-%y %H:%M:%S'
field_separator
- укажите разделитель, который используется в вашем csv-файле.
url - укажите ip или доменное имя вашего сервера MLAD. Если MLAD расположен на этой же машине, используйте значение по умолчанию 'http://host.docker.internal:4999/upload'.

Поместите ваш csv-файл в директорию ./work/csv:

image.png

Утилита периодически сканирует данную директорию на предмет новых файлов и обрабатывает их. Обработанные фалы помещаются в директорию ./work/staging, после чего загружаются в MLAD стандартными средствами и удаляются. Если директория staging больше не содержит файлов, значит загрузка завершена.

Вы можете подключиться к журналу работы утилиты для траблшутинга загрузки. Для этого используйте следующую команду:

docker logs csv2http-smb2mlad1
используйте флаг -f, если вы хотите отслеживать новые записи в журнале

Если загрузка файлов завершилась досрочно (например, скриптом ./stop.sh), и вы хотите загрузить файлы заново, то вам необходимо удалить все файлы из директорий ./work/csv и ./work/staging, а также удалить файл ./work/offset.txt.

Kaspersky MLAD: Настройка подключения по OPC UA - устарело

Подготовка на стороне источника данных (SCADA/ПЛК):

1. Убедитесь, что на контроллере или SCADA-сервере запущен и корректно работает сервер OPC UA.

image.png

2. Рекомендуется: Проверить доступность и читаемость тегов с помощью стороннего OPC UA-клиента (например, UAExpert). Это позволяет локализовать проблемы на стороне источника данных.

image.png

3. Определите и запишите полные Node Id всех переменных (тегов), которые планируется передавать в Kaspersky MLAD.

image.png

Настройка в Kaspersky MLAD:

1. Создание ассетов (Assets)
В проекте MLAD в разделе Assets создайте теги, которые будут соответствовать переменным OPC UA сервера. Каждому ассету необходимо присвоить уникальный Идентификатор (ID). Именно этот ID будет использоваться для привязки к входящим данным.

image.png

2. Создание файла конфигурации сопоставления
Создайте текстовый файл в формате 
TXT, который описывает соответствие между узлами OPC UA сервера и ID ассетов в MLAD. Это основной файл конфигурации для коннектора.

Пример содержимого файла 

{

  "opc_variables": [

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.TI001",

      "tag_type": "float",

      "id": 20

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.TI002",

      "tag_type": "float",

      "id": 21

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.TI003",

      "tag_type": "float",

      "id": 22

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.TI004",

      "tag_type": "float",

      "id": 23

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.FI001",

      "tag_type": "float",

      "id": 24

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.PI001",

      "tag_type": "float",

      "id": 25

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.PI002",

      "tag_type": "float",

      "id": 26

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.PI003",

      "tag_type": "float",

      "id": 27

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.LI001",

      "tag_type": "float",

      "id": 28

    },

    {

      "nodeid": "ns=2;s=Application.PLC_PRG.FI002",

      "tag_type": "float",

      "id": 29

    }

  ]

}

3. Настройка OPC UA Connector

В веб-интерфейсе администратора MLAD перейдите в раздел Системные параметры -> OPC UA Connector.

image.png

    4. Запуск коннектора
    Сохраните конфигурацию и запустите OPC UA Connector. В интерфейсе коннектора должен отобразиться статус «Подключено» (Connected), а в логах — отсутствие ошибок подключения и подписки.

    image.png


    5. Верификация и визуализация данных

    image.png

    Kaspersky MLAD: Использование внутреннего API

    1.            Назначение документа

    Данный документ описывает процесс подключения к внутреннему API Kaspersky MLAD для получения данных (значения тегов, информацию об инцидентах и артефакты работы моделей).

    2.            Общая информация

    На момент написания данной инструкции в Kaspersky MLAD не реализован официальный внешний API, через который можно было бы забирать данные во внешние системы. Тем не менее в системе присутствует API, используемый внутренними сервисами, к которому так же можно подключиться извне.

    ВНИМАНИЕ: Описываемый в данном документе механизм подключения не является официальным функционалом Kaspersky MLAD, и производитель не несет ответственности при его использовании для коммуникации с внешними системами.

    3.            Конфигурация

    image.png

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

    Ниже будут приведены примеры скриптов python для подобных запросов. Но перед этим потребуется несколько предварительных шагов.

    Извлечение хеша пароля

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

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

    - Открываем страницу логина в MLAD
    - Открываем "инструменты разработчика / developer tools" (F12 или правой кнопкой мыши в любом месте страницы -> "Просмотреть код / Inspect")
    - В инструментах разработчика открываем вкладку "Network" / "Сеть"
    - Вверху вкладки ставим "галочку" "Preserve log", иначе не увидите нужных запросов
    - Авторизуемся под нашим пользователем
    - Ищем в логе запрос авторизации (/api/authorize/)
    - В "payload" будет искомый нами пароль, который мы можем использовать для авторизации в вызывающем API "скрипте".
    - Пароль будет в виде хеша, например: "7DFcwe0I6Ult8w422gQgWg2TPUXKPYXlkRFlWvhkrPKAs8kfWcInbHo7UYiKMVYUa/rHQ7K7GtEvP8S2ZLJQAw=="
    - Используем этот хеш в переменной ‘USER_PASSWORD’в основном скрипте

    Поиск нужных UUID

    Нужные нам UUID моделей и вообще любых элементов можно посмотреть в веб-интерфейсе MLAD.

    Выберите нужный предиктивный элемент в дереве проекта:

    image.png

    После этого можно скопировать UUID из адресной строки:

    image.png

    Аналогично, можно узнать номер нужного тега:

    image.png

    Запрос значений тегов и предиктов через API

    Ниже приведен пример скрипта для запроса значений тегов и артефактов работы моделей:

    # импортируем нужные модули
    import requests
    import json
    import logging
    import time
    from datetime import datetime

    # учетная запись пользователя, от имени которого происходит подключение
    USER_EMAIL = test@admin.com
    # пароль в хешированном виде – см. инструкцию по извлечению хеша пароля выше
    USER_PASSWORD = "z24y0qIWIn/zfnbI8YJlO3K+E38GcKtY8kRTyU2moNagGLUABgl9HeJrHWWblGdOE9cNmey2s3szM0Iy3v9l4w==" #hashed password
    # IP адрес или имя хоста Kaspersky MLAD
    MLAD_HOST = "192.168.179.131"

    requests.packages.urllib3.disable_warnings()

    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    logging.info(f"{20*'-'}START{20*'-'}")

    auth_response = requests.post(
    url=f'https://{MLAD_HOST}/api/authorize/',
    json={
    'username': USER_EMAIL,
    'password': USER_PASSWORD,
    },
    verify=False,
    )
    logging.info(json.dumps(auth_response.json(), indent=4))

    # timestamp - момент времени, от которого все будет рассчитываться, задается в миллисекундах
    # для отправки запроса в реальном времени можно брать текущую метку времени:
    # int(time()*1000)

    timestamp_string = '2026-03-12 12:00:00'
    timestamp_format = '%Y-%m-%d %H:%M:%S'
    timestamp_obj = datetime.strptime(timestamp_string, timestamp_format)
    timestamp_ms = int(timestamp_obj.timestamp() * 1000)
    logging.info(f'{timestamp_obj} = {timestamp_ms} ms')

    # period (ms)- Период, за который планируется достать данные из истории в миллисекундах. На странице истории выбирается из выпадающего списка.
    # если мы хотим значение за конкретную метку времени, то можно поставить значение значительно ниже дискретности, с которой приходят данные, например, 10мс
    # interval (ms) - интервал группировки (ресемпл) данных. Если данные приходят очень часто, то позволит группировать данные по окнам
    # Если мы хотим получать одно значение раз в 5 минут, но не знаем точные метки времени, можно отправлять запрос каждые (T<5min) минут и указать период равный T. В таком случае будет возвращаться либо одно значение, либо ни одного.
    # timestamp_position - Позиционирование центра времени, т.к. timestamp - обычно `center` т.е. значения будут браться по обе стороны от него.
    # Т.е. если мы говорим "дай данные за 1 минуту", значит возьмутся 30 секунд до заданного timestamp и 30 секунд после. В целом можно не менять.
    # element_uuid_list - UUID элементов моделей, чьи артефакты необходимо получить наравне с тегами

    request_data = {
    'period': 300000,
    'interval': 150000,
    'tag_id_list': [76], # список с номерами тегов – можно посмотреть во вкладке Активы
    'timestamp_position': 'center',
    'timestamp': timestamp_ms,
    # element_uuid_list – список с UID моделей, из которых мы хотим брать предсказания для тегов из списка tag_id_list. Можно посмотреть в адресной строке браузера после выбора соответствующей модели в веб-интерфейсе – см инструкцию выше
    'element_uuid_list': [
    'ca6e5966-1c7f-11f1-8bb3-72a1019c5619'
    ],
    }

    history_data = requests.post(
    url=f'https://{MLAD_HOST}/api/trends/',
    json=request_data,
    verify=False,
    headers={
    'Token': auth_response.json()['token'],
    }
    )

    logging.info(json.dumps(history_data.json(), indent=4))

    # Пример вывода:
    # 2026-03-13 13:25:29 - INFO - 2026-03-12 12:00:00 = 1773306000000 ms
    # 2026-03-13 13:25:29 - INFO - {
        # "REAL": {
            # "76": [
                # {
                    # "timestamp": 1773306080000000000,
                    # "y": 997.8019959509448
                # }
            # ]
        # },
        # "PRED": {
            # "ca6e5966-1c7f-11f1-8bb3-72a1019c5619": {
                # "76": [
                    # {
                        # "timestamp": 1773306080000000000,
                        # "y": 1002.8917846679688
                    # }
                # ]
            # }
        # },
        # "DIFF": {
            # "ca6e5966-1c7f-11f1-8bb3-72a1019c5619": {
                # "76": [
                    # {
                        # "timestamp": 1773306080000000000,
                        # "y": 0.002571807693983069
                    # }
                # ],
                # "ca6e5966-1c7f-11f1-8bb3-72a1019c5619": [
                    # {
                        # "timestamp": 1773306080000000000,
                        # "y": 0.6879152193599999
                    # }
                # ]
            # }
        # },
        # "tags_order": [
            # 76
        # ],
        # "tag_independent": [
            # "ca6e5966-1c7f-11f1-8bb3-72a1019c5619"
        # ]
    # }

    #- REAL - Измеренные (реальные) значения по запрошенным тегам
    #- PRED - Предсказания значения тегов, сделанные конкретными элементами модели (сгруппированные по UUID элементам модели)
    #- DIFF - Артефакты элементов модели, так же сгруппированы по UUID элемента модели. Могут внутри содержать как артефакты по тегам, так и собственные
    #- RULE - Артефакты элементов типа "Правило"
    #- tags_order - порядок тегов, нужно для UI.
    #- tag_independent - перечисление всех артефактов, нужно для UI.

    #Некоторых ключей может не быть, если при заданных параметрах, не окажется данных.
    Запрос инцидентов через API

    Пример кода для запроса инцидентов:

    start_date = datetime(2024, 1, 1, 0, 0, 0).isoformat()
    end_date = datetime(2024, 12, 31, 23, 59, 59).isoformat()
    incidents = requests.get(
        f'https://mlad/api/incidents/external?start_date={start_date}&end_date={end_date}',
        verify=False,
        headers={
            'Token': auth_response.json()['token'],
        },
    )

    Kaspersky MLAD: Модуль Event Processor (EP)

    1.            Назначение документа

    Данный документ предназначается для общего ознакомления с функционалом модуля Процессор События программного продукта Kaspersky MLAD и его основными инструментами. При этом данный документ не описывает детальную настройку Процессора Событий и процесс работы с событийными данными для решения конкретных задач.

    2.            Kaspersky MLAD - типы входных данных

    Вне зависимости от того, какой тип коннектора или интерфейса вы используете для передачи данных в Kaspersky MLAD, в общем и целом, система предполагает работу с двумя принципиально разными типами входных данных

    image.png

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

    Но в любом случае, речь выше идет о данных вида «метка времени» - «значение».

    Что если вам необходимо выявлять аномалии не во временных рядах, но в потоке событий от одного или множества источников? Например, от POS-терминалов, банкоматов, потребителей электроэнергии, систем SIEM и так далее. Очевидно, что в данном случае мы имеем дело уже с другим типом данных, а именно с событийными данными. Такие данные помимо метки времени могут содержать (и обычно содержат) несколько дополнительных параметров и свойств, чаще всего категориальных, а не числовых, как во временных рядах. Например, событие от POS-терминала может содержать идентификатор события, ID терминала, номер транзакции, результат операции, дополнительный контекст и т.д.

    Для работы с событийными данными и последовательностями событий в Kaspersky MLAD есть отдельный модуль, который называется Процессор Событий (Event Processor). Данный модуль входит в состав базовой поставки, но для его работы требуется отдельная лицензия.

    image.png

    3.            Описание работы модуля EP

    Как было указано выше, основным предназначением Процессора Событий является работа с событийными данными и последовательностями событий.

    Очевидно, что для работы с событийными данными, которые содержат большое количество категориальных полей и метаданных, не подходят классические нейронные сети, которые применяются в модуле выявления аномалий. Поэтому в Процессоре Событий используется особый тип нейросетей, которые называются нейросемантические сети, а также продвинутые методы статистического анализа. Для их работы не требуется предварительное обучение или загрузка, скажем, всего перечня POS-терминалов из примера выше в систему. Обучение происходит «на лету».

    За анализ событий и выявление аномалий в событийных данных в Процессоре Событий отвечают так называемые Мониторы Данных. Тип используемого Монитора зависит от решаемой задачи. Основные типы уже включены в состав модуля.

    image.png

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

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

    В EP для решения подобных задач (задач выявления необычных или аномальных событий) существует базовый монитор.

    image.png

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

    ChatGPT Image Oct 2, 2026, 01_02_38 PM.png

    Теперь каждый раз, когда у нас будет прилетать новое событие с новым для нас значением поля UserHost, мы будем получать срабатывание монитора. И будет выдано соответсвующее уведомление (например, передача события в SIEM или в смежную систему через API).

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

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

    Для решения подобного класса задач существует свой тип монитора:

    image.png

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

    Для этого в EP существуют дополнительные сущности, которые называются Головы Внимания. Они позволяют задать предмет внимания, на котором будет фокусироваться монитор, и условия по отдельным параметрам события.

    image.png

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

    Далее при создании Монитора мы указываем голову внимания, с которой он будет работать.

    image.png

    После активации монитор будет отслеживать входящий поток событий и выявлять аномалии по времени активности для каждого хоста.

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

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

    image.png

    Для этого мы создаем голову внимания, которая фокусируется на потребителях и изучает данные об их электропотреблении.

    image.png

    И далее создаем монитор для выявления статистических аномалий с использованием данной головы внимания

    image.png

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

    4.            Заключение

    Инструменты процессора событий позволяют решать предметные задачи, стоящие перед пользователями системы. Функционал Мониторов событий и голов внимания не ограничивает их применение определенным кругом задач, так что они могут использоваться в абсолютно разных сценариях. В дальнейшем перечень мониторов внимания будет расширяться, в том числе под требования Заказчиков.


    Kaspersky MLAD: Интеграция с KICS for Networks

    1.            Описание задачи

    Данный документ описывает процесс интеграции MLAD с KICS for Networks для двухстороннего обмена данными.

    Цель данной интеграции – обеспечить Kaspersky MLAD необходимыми потоковыми данными без прямого подключения к процессу, а также для обогащения (при необходимости) событийной базы KICS for Networks данными об инцидентах, зарегистрированных в Kaspersky MLAD.

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

    image.png

    Клиент OPC UA подключается и получает данные от ПЛК. Span-трафик данной коммуникации передается в KICS for Networks. Kaspersky MLAD подключается KICS for Networks для двухстороннего обмена данными:

    1.    Передача параметров процесса в виде тегов из KICS for Networks в MLAD.

    2.    Передача информацию об инцидентах из MLAD в KICS for Networks.

    Протокол OPC UA выбран для примера. Приведенные ниже инструкции актуальны для любого промышленного протокола, парсинг которого поддерживается в KICS for Networks.

    Процесс настройки клиента OPC UA и ПЛК, а также настройка KICS, не являются частью интеграции и не описаны в данном документе. Для упрощения будем считать, что коммуникация уже установлена. KICS for Networks развернут и настроен и передача SPAN-трафика в KICS обеспечена.

    2.            Реализация задачи

    В KICS for Networks перечень тегов, полученных в результате парсинга промышленных протоколов, можно найти в разделе Контроль процесса.

    Обратите внимание, что для появления новых тегов в списке, необходимо, чтобы KICS производил парсинг протоколов в момент установления соединения между клиентом и сервером (в нашем случае между клиентом и сервером OPC UA). Если включить парсер протоколов уже после того, как коммуникация между клиентом и сервером установлена, новые теги не будут добавлены в список.

    image.png

    На скриншоте выше видны теги OPC UA, полученные от ПЛК Regul, а также теги из других протоколов, которые распарсил KICS for Network.

    Следующим шагом необходимо перейти в раздел Коннекторы и нажать кнопку Добавить коннектор.

    image.png

    Выберите тип коннектора Generic, задайте название и пароль, а также укажите адрес сервера KICS for Network и узла, на котором будет размещаться коннектор (в нашем примере это один и тот же сервер). Укажите пользователя.

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

    image.png

    Заполните все поля аналогично тому, как вы делали при создании коннектора.

    image.png

    После скачивания нового zip-архива сохраните его, он понадобится нам для настройки коннектора KICS в MLAD.

    Откройте веб-интерфейс, перейдите в меню администрирования, далее в раздел Системные параметры, настройки KICS connector. Здесь вам потребуется загрузить zip-файл, который вы получили из KICS ранее, и введите пароль, который вы указали при создании файла свертки.

    image.png

    Если вы хотите передавать в KICS событий об инцидентах о выявленных аномалиях, включите переключатель Отправлять сообщения в Kaspersky Industrial CyberSecurity for Networks.

    Обратите внимание, что в разделе Активы нужных нам тегов сейчас нет, и создавать их не нужно, в отличие от обычного процесса загрузки данных в MLAD.

    Вернитесь в основное меню, раздел Сервисы, далее Коннекторы и запустите коннектор KICS.

    image.png

    После установления подключения (вы можете проверить это в KICS for Networks в разделе Коннекторы), вернитесь в раздел Активы, обновите страницу и убедитесь, что новые теги появились в списке.

    image.png

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

    Обратите внимание, что теги, автоматически созданные в активах, получают свои id в соответствии с идентификаторами, которые эти теги имели в KICS for Network.

    image.png

    Если в активах MLAD уже были теги с такими же id, данные теги будут перезаписаны! Имейте это в виду при планировании активов.

    В разделе Мониторинг можно убедиться, что данные по новым тегам поступают в MLAD.

    image.png

    Если вы активировали передачу сообщений из MLAD в KICS for Networks, то после возникновения инцидентов в результате работы моделей, вы сможете увидеть соответствующие событий в KICS for Networks в разделе События.

    image.png

    image.png

    Kaspersky MLAD: Интеграция с KUMA по Syslog

    1.            Описание задачи

    Данный документ описывает процесс настройки Kaspersky MLAD для интеграции с KUMA по протоколу Syslog.

    Цель данной интеграции – обеспечить передачу событий безопасности из Kaspersky MLAD в SIEM систему для обеспечения мер информационной безопасности в инфраструктуре клиента.

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

    image.png

    2.            Реализация задачи

    Первым шагом необходимо настроить CEF-коннектор в составе Kaspersky MLAD на передачу событий безопасности в SIEM-систему.

    Для этого перейдите в Меню администратора, затем в Системные параметры, затем в настройки CEF-коннектора.

    Здесь вам необходимо активировать переключатель Отправлять журналы событий информационной безопасности на Syslog-сервер, указать тип транспорта (TCP или UDP), указать адрес и порт Syslog-сервера. Если вы планируете использовать защищенное TLS-соединение, то вам необходимо также загрузить сертификат/закрытый ключ клиента и CA-сертификат для верификации серверной стороны.

    image.png

    После этого перейдите в основное меню, далее в Службы, затем в раздел Коннекторы. Запустите службу CEF connector, или перезапустите ее, если вы вносили изменения в настройки.

    image.png

    На этом настройка со стороны MLAD закончена.

    В KUMA перейдите в раздел Ресурсы, затем Коллекторы.

    image.png

    В состав поставки KUMA входит предварительно настроенный коллектор [OOTB] Syslog CEF. Создайте копию на основе данного коллектора и перейдите в его настройки. Основные настройки подключения задаются на вкладке Транспорт.

    image.png

    Укажите тип протокола, интерфейс и порт, на котором KUMA будет принимать подключение по Syslog. Убедитесь, что настройки подключения в MLAD совпадают с настройками в данной вкладке.

    Настройки остальных вкладок не влияют на прием сообщений Syslog. Во вкладке Парсинг событий вы можете настроить, как будут парситься события Syslog, полученные от MLAD. Для этого вам предварительно необходимо создать соответствующий парсер. Процесс создания и настройки парсера описан в документации на KUMA, и в данном документе не затрагивается,

    После завершения настройки вам сначала будет необходимо будет создать соответствующий сервис.

    image.png

    Для этого необходимо выполнить предложенную команду (через sudo) на машине с KUMA.

    image.png

    Если сервис уже существует, то после завершения настройки перейдите во вкладку Проверка параметров и нажмите кнопку Сохранить и перезапустить сервисы.

    image.png

    Перейдите в раздел Активные сервисы и убедитесь, что ваш сервис коллектора Syslog запущен.

    image.png

    Вернитесь в MLAD и произведите какое-нибудь системное действие, например, выйдите и снова войдите в систему.

    Далее выберите свой активный сервис в KUMA и нажмите кнопку Перейти к событиям.

    image.png

    Cделайте дефолтный SQL-запрос. Вы увидите в списке событие безопасности от MLAD.

    image.png