Интеграции В данном разделе описаны инструкции по интеграции KICS и MLAD с различными системами Интеграция KICS for Networks API KICS for Networks Использование Kaspersky Industrial CyberSecurity for Networks API В Kaspersky Industrial CyberSecurity for Networks реализован интерфейс прикладного программирования, который обеспечивает доступ к функциям программы для сторонних приложений. В комплект поставки Kaspersky Industrial CyberSecurity for Networks входит пакет с описаниями спецификаций для представления данных в запросах к серверу REST API.  Сервер REST API функционирует на компьютере Сервера Kaspersky Industrial CyberSecurity for Networks и обрабатывает запросы с использованием архитектурного стиля взаимодействия REST. Обращения к серверу REST API выполняются по протоколу HTTPS. Вы можете настроить параметры сервера REST API в разделе  Параметры  →  Серверы подключений  (в том числе заменить используемый по умолчанию самоподписанный сертификат на доверенный). Для представления данных в запросах и ответах используется формат JSON. Документация с описанием запросов на основе архитектурного стиля REST публикуется в виде онлайн-справки на странице Kaspersky Online Help . ОТКРЫТЬ ДОКУМЕНТАЦИЮ С ОПИСАНИЕМ ЗАПРОСОВ К СЕРВЕРУ REST API, версия 3 ОТКРЫТЬ ДОКУМЕНТАЦИЮ С ОПИСАНИЕМ ЗАПРОСОВ К СЕРВЕРУ REST API, версия 4 Примеры использования Рассмотрим пример использования API для локального экспорта данных об устройствах из KICS for Networks. Для начала нужно создать коннектор, с типом Generic и именем, например, GetDeviceAll , указать пароль и адрес сервера, узел размещения коннектора в нашем случае будет такой же, как и адрес сервера (Рисунок 1). После создания коннектора у вас скачается файл свертки, который будет называться как коннектор_GetDeviceAll.zip. Рисунок 1 – Создание коннектора Далее необходимо создать директории для корректной работы кода. Впишите команды ниже последовательно: cd mkdir GetDeviceAll && cd GetDeviceAll mkdir connector && cd connector && cp /opt/kaspersky/kics4net-connectors/libexec/default_connectors_registrar.py default_connectors_registrar.py Далее в папку connector необходимо положить файл свертки коннектор_GetDeviceAll.zip, который мы получили при создании коннектора и распаковать его в эту директорию командой: unzip -d коннектор_GetDeviceAll коннектор_GetDeviceAll.zip Далее необходимо зарегистрировать коннектор командой: sudo python3 default_connectors_registrar.py create Далее необходимо выполнить действия показанные на Рисунке 2: ввести имя коннектора GetDeviceAll, ввести полный путь до файла свертки коннектор_GetDeviceAll.zip (/home//GetDeviceAll/connector/коннектор_GetDeviceAll.zip), ввести пароль, который вы указывали при создании коннектора в веб-интерфейсе и согласиться с запуском службы коннектора GetDeviceAll. Рисунок 2 – Регистрация коннектора После этого статус коннектора в KICS for Networks поменяется с “Ожидает регистрации” на “Работает” Рисунок 3 – Статус работы коннектора в Веб-консоли Теперь можно перейти к написанию кода, который будет взаимодействовать с KICS for Networks по API. Код будет писаться на Python, но вы можете использовать любой удобный для вас язык  Для начала напишем класс подключения к API сервера: import logging import json import requests from requests.exceptions import RequestException from time import sleep class KicsApiClient: def __init__(self, metadata_path, cert_path, key_path): self.metadata_path = metadata_path self.cert_path = cert_path self.key_path = key_path self.base_url = None self.token = None self._initialize() def _initialize(self): with open(self.metadata_path, 'r', encoding='utf-8') as f: metadata = json.load(f) self.base_url = metadata.get('serverUri', '').rstrip('/') if not self.base_url.endswith('/kics/api'): self.base_url += '/kics/api' logging.info(f"Базовый URL API: {self.base_url}") self._authenticate() def _authenticate(self): url = f"{self.base_url}/auth/token?grant_type=certificate" resp = requests.post( url, cert=(self.cert_path, self.key_path), verify=False ) resp.raise_for_status() self.token = resp.json().get('access_token') if not self.token: raise ValueError("Аутентификация не удалась: токен не получен") logging.info("Аутентификация успешна") def _post_query(self, path, payload, offset=0, limit=1000, delay=1): all_items = [] headers = { 'Authorization': f'Bearer {self.token}', 'Content-Type': 'application/json' } while True: body = payload.copy() body.update({'offset': offset, 'limit': limit}) url = f"{self.base_url}{path}" try: resp = requests.post(url, headers=headers, json=body, verify=False) resp.raise_for_status() except RequestException as e: logging.error(f"Ошибка запроса к {url}: {e}") if hasattr(e, 'response') and e.response is not None: try: logging.error(f"Текст ответа: {e.response.text}") except: pass raise try: json_resp = resp.json() except ValueError: break data = json_resp.get('values') or json_resp.get('elements') if not data: break all_items.extend(data) logging.info(f"Получено {len(data)} записей из {path}, всего: {len(all_items)}") if len(data) < limit: break offset += limit sleep(delay) return all_items Теперь добавим в этот класс функции которые будут вызываться в классе экспорта данных: def get_device_applications(self): return self._post_query('/v4/device-apps/query', {}) def get_device_patches(self): return self._post_query('/v4/device-patches/query', {}) def get_device_users(self): return self._post_query('/v4/device-users/query', {})  Перейдем к написанию класса, который будет отвечать за экспорт данных из KICS for Networks по API и будет конвертировать полученные данные в csv файл: import csv class CsvExporter: @staticmethod def export_dicts(items, filename): if not items: logging.warning(f"Нет данных для файла {filename}") return fieldnames = set() for item in items: fieldnames.update(item.keys()) fieldnames = sorted(fieldnames) headers_rus = [RUSSIAN_HEADERS.get(fn, fn) for fn in fieldnames] with open(filename, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f, delimiter=';') writer.writerow(headers_rus) for item in items: row = [item.get(fn, '') for fn in fieldnames] writer.writerow(row) logging.info(f"Экспортировано {len(items)} записей в {filename}") В этом классе используется глобальная переменная RUSSIAN_HEADERS, которая хранит в себе ключ - значение, для перевода ключей на русский язык:  RUSSIAN_HEADERS = { 'Id': 'Идентификатор', 'id': 'Идентификатор', 'DeviceId': 'Идентификатор устройства', 'device': 'Устройство', 'ApplicationName': 'Название приложения', 'name': 'Имя', 'fullName': 'Полное имя', 'ApplicationVersion': 'Версия приложения', 'PatchVersion': 'Версия патча', 'UserName': 'Имя пользователя', 'description': 'Описание', 'Domain': 'Домен', 'groups': 'Группы', 'isDisabled': 'Отключен', 'isLockedOut': 'Заблокирован', 'lastSeen': 'Последний вход', 'canChangePassword': 'Можно сменить пароль', 'mustChangePassword': 'Требуется смена пароля', 'passwordNeverExpires': 'Пароль не истекает', 'sid': 'SID', 'source': 'Источник', 'installedOn': 'Установлено на', 'version': 'Версия', 'vendor': 'Производитель', 'program': 'Программа', 'size': 'Размер', } Почти все готово! Осталось написать main, который объединит в себе весь функционал нашего кода: import os import sys def main(): BASE_DIR = os.path.dirname(os.path.abspath(__file__)) META = os.path.join(BASE_DIR, 'connector', 'коннектор_GetDeviceAll', 'metadata.json') CERT = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.crt' KEY = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.key' for path in (META, CERT, KEY): if not os.path.exists(path): logging.error(f"Не найден файл: {path}") sys.exit(1) client = KicsApiClient(META, CERT, KEY) apps = client.get_device_applications() patches = client.get_device_patches() users = client.get_device_users() CsvExporter.export_dicts(apps, 'DeviceApplications.csv') CsvExporter.export_dicts(patches, 'DevicePatches.csv') CsvExporter.export_dicts(users, 'DeviceUsers.csv') if __name__ == '__main__': main() Отлично! Код готов, теперь необходимо перенести файл GetDeviceAll.py в папку GetDeviceAll любым известным вам способом. В конечном счете директория должна выглядеть вот так: └─./home/ ├─ ./GetDeviceAll │ ├─ ./connector │  │  ├─ . /коннектор_GetDeviceAll.zip │  │  ├─ ./default_connectors_registrar.py │  │  └─ ./коннектор_GetDeviceAll │  │ ├─ ./certificates.pfx │  │ ├─ ./metadata.json │  │ └─ ./webserver.pem └ └─ ./GetDeviceAll.py Далее в консоли перейдем в директорию GetDeviceAll командой: cd /home/  И запустить файл GetDeviceAll.py командой: sudo python3 GetDeviceAll.py В итоге мы получили 3 файла DeviceApplications.csv, DevicePatches.csv, DeviceUsers.csv которые находятся в этой же директории GetDeviceAll. Рисунок 4 – Вывод логов скрипта по экспорту данных Рисунок 5 – Результат работы скрипта P.S. Полный код :) import os import sys import json import logging import requests import csv from requests.exceptions import RequestException import urllib3 from time import sleep urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) logging.basicConfig( format='%(asctime)s %(levelname)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO ) RUSSIAN_HEADERS = { 'Id': 'Идентификатор', 'id': 'Идентификатор', 'DeviceId': 'Идентификатор устройства', 'device': 'Устройство', 'ApplicationName': 'Название приложения', 'name': 'Имя', 'fullName': 'Полное имя', 'ApplicationVersion': 'Версия приложения', 'PatchVersion': 'Версия патча', 'UserName': 'Имя пользователя', 'description': 'Описание', 'Domain': 'Домен', 'groups': 'Группы', 'isDisabled': 'Отключен', 'isLockedOut': 'Заблокирован', 'lastSeen': 'Последний вход', 'canChangePassword': 'Можно сменить пароль', 'mustChangePassword': 'Требуется смена пароля', 'passwordNeverExpires': 'Пароль не истекает', 'sid': 'SID', 'source': 'Источник', 'installedOn': 'Установлено на', 'version': 'Версия', 'vendor': 'Производитель', 'program': 'Программа', 'size': 'Размер', } class KicsApiClient: def __init__(self, metadata_path, cert_path, key_path): self.metadata_path = metadata_path self.cert_path = cert_path self.key_path = key_path self.base_url = None self.token = None self._initialize() def _initialize(self): with open(self.metadata_path, 'r', encoding='utf-8') as f: metadata = json.load(f) self.base_url = metadata.get('serverUri', '').rstrip('/') if not self.base_url.endswith('/kics/api'): self.base_url += '/kics/api' logging.info(f"Базовый URL API: {self.base_url}") self._authenticate() def _authenticate(self): url = f"{self.base_url}/auth/token?grant_type=certificate" resp = requests.post( url, cert=(self.cert_path, self.key_path), verify=False ) resp.raise_for_status() self.token = resp.json().get('access_token') if not self.token: raise ValueError("Аутентификация не удалась: токен не получен") logging.info("Аутентификация успешна") def _post_query(self, path, payload, offset=0, limit=1000, delay=1): all_items = [] headers = { 'Authorization': f'Bearer {self.token}', 'Content-Type': 'application/json' } while True: body = payload.copy() body.update({'offset': offset, 'limit': limit}) url = f"{self.base_url}{path}" try: resp = requests.post(url, headers=headers, json=body, verify=False) resp.raise_for_status() except RequestException as e: logging.error(f"Ошибка запроса к {url}: {e}") if hasattr(e, 'response') and e.response is not None: try: logging.error(f"Текст ответа: {e.response.text}") except: pass raise try: json_resp = resp.json() except ValueError: break data = json_resp.get('values') or json_resp.get('elements') if not data: break all_items.extend(data) logging.info(f"Получено {len(data)} записей из {path}, всего: {len(all_items)}") if len(data) < limit: break offset += limit sleep(delay) return all_items def get_device_applications(self): return self._post_query('/v4/device-apps/query', {}) def get_device_patches(self): return self._post_query('/v4/device-patches/query', {}) def get_device_users(self): return self._post_query('/v4/device-users/query', {}) class CsvExporter: @staticmethod def export_dicts(items, filename): if not items: logging.warning(f"Нет данных для файла {filename}") return fieldnames = set() for item in items: fieldnames.update(item.keys()) fieldnames = sorted(fieldnames) headers_rus = [RUSSIAN_HEADERS.get(fn, fn) for fn in fieldnames] with open(filename, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f, delimiter=';') writer.writerow(headers_rus) for item in items: row = [item.get(fn, '') for fn in fieldnames] writer.writerow(row) logging.info(f"Экспортировано {len(items)} записей в {filename}") def main(): BASE_DIR = os.path.dirname(os.path.abspath(__file__)) META = os.path.join(BASE_DIR, 'connector', 'коннектор_GetDeviceAll', 'metadata.json') CERT = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.crt' KEY = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.key' for path in (META, CERT, KEY): if not os.path.exists(path): logging.error(f"Не найден файл: {path}") sys.exit(1) client = KicsApiClient(META, CERT, KEY) apps = client.get_device_applications() patches = client.get_device_patches() users = client.get_device_users() CsvExporter.export_dicts(apps, 'DeviceApplications.csv') CsvExporter.export_dicts(patches, 'DevicePatches.csv') CsvExporter.export_dicts(users, 'DeviceUsers.csv') if __name__ == '__main__': main() Настройка передачи событий из KICS for Networks (версий 4.3 и 4.5) в KUMA Настройка интеграции выполняется в два этапа: сначала создается и настраивается коллектор в KUMA, затем создается коннектор в KICS for Networks. Настройка KUMA Перейдите в раздел «Ресурсы» и откройте вкладку «Коллекторы». Нажмите кнопку «+ Создать». В открывшемся окне укажите название коллектора. Рекомендуется использовать наименование продукта, тип подключения и порт (например, KICS_for_Networks_TCP\5160), чтобы в дальнейшем легко идентифицировать коллектор. На вкладке «Транспорт» укажите тип соединения (протокол) и порт, который будет использоваться для приема событий от источника. На вкладке «Парсинг событий» - «Настройки парсинга» выберите соответствующий нормализатор для обработки входящих событий. На вкладке «Маршрутизация» добавьте ранее созданные коррелятор и хранилище. Подробнее о развертывании этих компонентов см. в Справке по KUMA. На вкладке «Проверка параметров» нажмите кнопку «Сохранить и создать сервис». После создания коллектора скопируйте сгенерированную команду и выполните её в терминале сервера KUMA с правами администратора для развертывания сервиса. Настройка KICS for Networks Перейдите в раздел «Параметры» - «Коннекторы» и нажмите кнопку «+ Добавить коннектор». В карточке нового коннектора заполните поля: Тип коннектора: SIEM. Имя коннектора: Произвольное наименование. Адрес сервера: IP-адрес узла, на котором развернут сервер KICS for Networks. Узел размещения коннектора: Server. Пользователь программы: Учетная запись администратора KICS for Networks. Адрес SIEM-сервера: IP-адрес узла, на котором развернут сервер KUMA. Номер порта: Порт, указанный при настройке коллектора KUMA (см. п. 4 раздела «Настройка KUMA»). Транспортный протокол: Протокол, указанный при настройке коллектора KUMA (см. п. 4 раздела «Настройка KUMA»). Нажмите кнопку «Сохранить». Убедитесь, что в свойствах созданного коннектора параметры имеют следующие значения: Включен: Да. Статус: Работает. Если значения отличаются, проверьте выполненные настройки и перезапустите коннектор (выполните последовательность «Выключить» - «Включить»). Перейдите в раздел «Параметры» - «Типы событий». Выберите типы событий, которые необходимо передавать в KUMA, и активируйте для них отправку через созданный коннектор. Проверка передачи событий В интерфейсе KUMA перейдите в раздел «События» и выполните опрос источников. Убедитесь в наличии событие об успешной аутентификации коннектора, которое должно появиться в момент его создания в KICS for Networks. Воспроизведите событие безопасности, например, запустите тестовый вирус на узле, который интегрирован с KICS for Networks. Убедитесь, что сработал модуль постоянной защиты KICS for Nodes (детектирование события на стороне источника). В интерфейсе KUMA снова перейдите в раздел «События» и выполните опрос. Убедитесь, что воспроизведенное событие безопасности успешно доставлено и отображается в KUMA. Интеграция KICS for Nodes Интеграция KICS for Nodes и KICS for Networks + EDR основные возможности и руководство по настройке Kaspersky Industrial CyberSecurity for Networks (KICS for Networks) предоставляет нативную интеграцию с KICS for Nodes , благодаря чему предоставляется возможность получать телеметрию с конечных узлов за счет интеграции с Kaspersky Endpoint Agent и выполнять функции реагирования на конечном узле (изоляция устройство от сети, запрет запуска, поместить на карантин). KEA – это отдельное лицензируемое ПО, которое устанавливается на каждый конечный узел. Возможности интеграции KICS for Networks предоставляет единую консоль для хранения и просмотра событий в сети и на конечных узлах, поскольку KEA-агент передает телеметрию с узла в сервер KICS for Networks. В карточке инцидента в KICS for Networks при возникновении инцидента на конечном узле возникает построение цепочки атаки по телеметрии с этого конечного узла. Предоставляется возможность точечного реагирования: отправить файл на карантин, запретить запуск, изолировать узел. В KICS for Networks есть возможность отслеживать актуальность лицензий KICS for Nodes из единого окна. Настройка интеграции KICS for Networks и KICS for Nodes Интеграция осуществляется через интерфейс KICS for Networks. Для этого необходимо следующие шаги: Шаг 1. Переходим во вкладку «Параметры» и выбираем раздел «Серверы подключений»; Шаг 2. Нажимаем кнопку «Добавить сервер интеграции с Kaspersky Endpoint Agent» (см. пример на Рисунке 1). Примечание: В роли сервера, который будет получать телеметрию с KEA-агента, может выступать как сервер, так и любой сенсор KICS for Networks. Важно, чтобы между конечным узлом, с которого будет передаваться информация и сервером/сенсором KICS for Networks был настроен маршрут и разрешены соответствующие порты и протоколы (TLS, порт 8081). Рисунок 1 - Добавление сервера интеграции Шаг 3. Далее нам предоставляется возможность выбрать узел, на который будет приходить телеметрия с KEA-агента. Например, мы можем выбрать узел «Server» или сенсор «sensor_1» (см. на примере Рисунка 2). Рисунок 2 - Создание сервера интеграции Шаг 4. Нажимаем кнопку «Создать новый сертификат» (см. Рисунок 3). Примечание: Если необходимо дополнительно осуществлять проверку сертификата клиента (конечного узла), то, помимо нажатия кнопки «Создать новый сертификат», необходимо активировать переключатель «Проверять сертификаты клиентов» и кнопку «Сохранить». Рисунок 3 - Создание сервера интеграции Шаг 5. После нажатия кнопки «Создать новый сертификат» отобразятся сведения о сертификате. Необходимо нажать кнопку «Сохранить». Шаг 6. В результате в источниках появится выбранный узел (сервер или сенсор) KICS for Networks и будет указан IP-адрес его интерфейса MGMT, куда в последствии будут направляться данные от конечных узлов. Далее необходимо настроить KEA-агент на конечных узлах, для этого необходимо получить свертку сертификата от узла, на котором развернут сервер интеграции KICS for Networks. Выбираем сервер интеграции. Нажимаем кнопку «Включить» и далее кнопку «Получить файл свертки для клиентов» (см. Рисунок 4). Рисунок 4 - Создание файла свертки для клиентов Шаг 7. Сервер интеграции изменит свой статус на «Включен» и осуществит загрузку zip-архива с вложенным файлом server.cer. После чего необходимо доставить загруженный zip-архив на конечные узлы с установленным KEA-агентом. Есть несколько способов настройки интеграции на стороне узла, и мы рассмотрим каждый из них подробнее ниже. Примечание: Если ранее был активирован переключатель «Проверять сертификаты клиентов», то для обеспечения подлинности клиентского сертификата, нужно указать пароль при формировании файла свертки. Нажать кнопку «Создать файл свертки». Шаг 8 . Переходим к настройке интеграции на стороне конечных узлов с KICS for Nodes и KEA. Есть два способа: через web-консоль KSC и локально из командной строки. 1 способ: настройка интеграции через web-консоль KSC Важным условием является наличие установленных KEA-агентов на каждом конечном узле, а также на сервере администрирования KSC установлен web-плагин KEA. В веб-консоли KSC переходим в раздел «Устройства – Политики и профили политик». Выбрать политику для KEA (см. Рисунок 5). Рисунок 5 - Начало настройки "Политики и профилей политики" Далее переходим на вкладку « Параметры программы – Серверы сбора телеметрии». Выбираем пункт «Интеграция с KICS for Networks» . После чего необходимо активировать переключатель «Принудительно» , если он не активирован. Отметить чекбокс «Включить интеграцию с KICS for Networks» . В графе «Адрес сервера» указать адрес сервера интеграции. Остальные настройки оставить по умолчанию. Нажать кнопку «Добавить новый TLS-сертификат» (см. Рисунок 6) – для этого нажимаем кнопку «Обзор». Выбрать файл TLS-сертификата server.cer (предварительно извлечь его из архива). После чего отобразятся данные TLS-сертификата и нажимаем кнопку «ОК», после кнопку «Сохранить» . Рисунок 6 - Настройка интеграции с KICS for Networks 2 способ: настройка локально из командной строки на конечном узле (для Windows систем) Если отсутствует сервер администрирования KSC, то настройку можно осуществить локально. Для этого переносим сертификат server.cer из файла свертки сервера интеграции KICS for Networks. Открываем командную строку и вводим (см. пример наи Рисунке 7): cd C:\Program Files (x86)\Kaspersky Lab\Endpoint Agent\ agent.exe --message-broker=enable --type=kics --tls=yes --servers=ip-адрес сервера, настроенный как сервер интеграции Networks:8081 --pinned-certificate="путь до файла server.cer" Рисунок 7 - Пример ввода команды По умолчанию время синхронизации (sync_priod) составляет 300 секунд. Чтобы сократить его, например, до 60 секунд нужно ввести команду: agent --message-broker=enable --type=kics –-sync-period=60 где --message-broker=  - обязательный параметр. Позволяет включить, выключить и отобразить статус отправки телеметрии в направлении сервера.   Для того, чтобы проверить корректноcть настроек нужно ввести команду: agent –-message-broker=show 2 способ: настройка локально из командной строки на конечном узле (для Linux систем) Если отсутствует сервер администрирования KSC, то настройку можно осуществить локально. Для этого переносим сертификат server.cer из файла свертки сервера интеграции KICS for Networks. Открываем командную строку и вводим (см. пример наи Рисунке 8): kics-control --add-kics4networks-server-certificate путь до файла server.cer Рисунок 8 - Пример ввода команды Указать адрес сервера KICS for Networks и перезапустить задачу интеграции: kics-control --set-settings 23 Endpoints.item_0001.Address=1 ip-адрес сервера, настроенный как сервер интеграции Networks Далее запускаем команды, чтобы перезапустить сервер: kics-control --stop-task 23 kics-control --start-task 23 Шаг 9. Для того, чтобы проверить интеграцию KEA с KICS for Networks, переходим в веб-интерфейс KICS for Networks и посмотреть свойства актива, на котором установлен KEA, проверить наличие информации о KEA и KICS for Nodes на узле (см. пример на Рисунке 9). Рисунок 9 - Пример интеграции Интеграция MLAD Инструкция по настройке приема данных от OPC UA сервера в Kaspersky MLAD Подготовка на стороне источника данных (SCADA/ПЛК): 1. Убедитесь, что на контроллере или SCADA-сервере запущен и корректно работает сервер OPC UA. 2. Рекомендуется:  Проверить доступность и читаемость тегов с помощью стороннего OPC UA-клиента (например, UAExpert). Это позволяет локализовать проблемы на стороне источника данных. 3. Определите и запишите полные  Node Id  всех переменных (тегов), которые планируется передавать в Kaspersky MLAD. Настройка в Kaspersky MLAD: 1. Создание ассетов (Assets) В проекте MLAD в разделе  Assets  создайте теги, которые будут соответствовать переменным OPC UA сервера. Каждому ассету необходимо присвоить уникальный  Идентификатор (ID) . Именно этот ID будет использоваться для привязки к входящим данным. 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 . В поле  Точка подключения  укажите URL-адрес вашего OPC UA сервера (например,  opc.tcp://192.168.88.160:48010 ). В блоке  Конфигурационный файл загрузите подготовленный TXT -файл сопоставления. Важно:  При необходимости настройте параметры безопасности соединения (Security Policy и Mode) и учетные данные (логин и пароль), если сервер OPC UA требует аутентификации. 4. Запуск коннектора Сохраните конфигурацию и запустите  OPC UA Connector . В интерфейсе коннектора должен отобразиться статус  «Подключено» (Connected) , а в логах — отсутствие ошибок подключения и подписки. 5. Верификация и визуализация данных Перейдите в раздел  Мониторинг  для проверки поступления необходимых данных Интеграция Kaspersky MLAD с KICS for Networks 1. Описание задачи Данный документ описывает процесс интеграции MLAD с KICS for Networks для двухстороннего обмена данными. Цель данной интеграции – обеспечить Kaspersky MLAD необходимыми потоковыми данными без прямого подключения к процессу, а также для обогащения (при необходимости) событийной базы KICS for Networks данными об инцидентах, зарегистрированных в Kaspersky MLAD . Ниже приведена упрощенная схема подключения, используемая в описываемой в данном документе интеграции. Клиент 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 ). Если включить парсер протоколов уже после того, как коммуникация между клиентом и сервером установлена, новые теги не будут добавлены в список. На скриншоте выше видны теги OPC UA , полученные от ПЛК Regul , а также теги из других протоколов, которые распарсил KICS for Network . Следующим шагом необходимо перейти в раздел Коннекторы и нажать кнопку Добавить коннектор. Выберите тип коннектора Generic , задайте название и пароль, а также укажите адрес сервера KICS for Network и узла, на котором будет размещаться коннектор (в нашем примере это один и тот же сервер). Укажите пользователя. После создания коннектора автоматически начнется скачивание zip -архива с файлом сверки коннектора. Если вы хотите создать новый файл, з айдите в настройки созданного коннектора и нажмите на кнопку Получить новый файл свертки . Заполните все поля аналогично тому, как вы делали при создании коннектора. После скачивания нового zip -архива сохраните его, он понадобится нам для настройки коннектора KICS в MLAD . Откройте веб-интерфейс, перейдите в меню администрирования, далее в раздел Системные параметры , настройки KICS connector . Здесь вам потребуется загрузить zip -файл, который вы получили из KICS ранее, и введите пароль, который вы указали при создании файла свертки. Если вы хотите передавать в KICS событий об инцидентах о выявленных аномалиях, включите переключатель Отправлять сообщения в Kaspersky Industrial CyberSecurity for Networks . Обратите внимание, что в разделе Активы нужных нам тегов сейчас нет, и создавать их не нужно, в отличие от обычного процесса загрузки данных в MLAD . Вернитесь в основное меню, раздел Сервисы , далее Коннекторы и запустите коннектор KICS . После установления подключения (вы можете проверить это в KICS for Networks в разделе Коннекторы ), вернитесь в раздел Активы , обновите страницу и убедитесь, что новые теги появились в списке. Обратите внимание, что в списке появились все теги, которые присутствовали в KICS for Networks , включая теги из других протоколов. Лишние теги можно удалить. Обратите внимание, что теги, автоматически созданные в активах, получают свои id в соответствии с идентификаторами, которые эти теги имели в KICS for Network . Если в активах MLAD уже были теги с такими же id , данные теги будут перезаписаны! Имейте это в виду при планировании активов. В разделе Мониторинг можно убедиться, что данные по новым тегам поступают в MLAD . Если вы активировали передачу сообщений из MLAD в KICS for Networks , то после возникновения инцидентов в результате работы моделей, вы сможете увидеть соответствующие событий в KICS for Networks в разделе События . Интеграция Kaspersky MLAD с KUMA по Syslog 1. Описание задачи Данный документ описывает процесс настройки Kaspersky MLAD для интеграции с KUMA по протоколу Syslog . Цель данной интеграции – обеспечить передачу событий безопасности из Kaspersky MLAD в SIEM систему для обеспечения мер информационной безопасности в инфраструктуре клиента. Ниже приведена упрощенная схема подключения, используемая в описываемой в данном документе интеграции. 2. Реализация задачи Первым шагом необходимо настроить CEF -коннектор в составе Kaspersky MLAD на передачу событий безопасности в SIEM -систему. Для этого перейдите в Меню администратора , затем в Системные параметры , затем в настройки CEF -коннектора . Здесь вам необходимо активировать переключатель Отправлять журналы событий информационной безопасности на Syslog -сервер , указать тип транспорта ( TCP или UDP ), указать адрес и порт Syslog -сервера. Если вы планируете использовать защищенное TLS -соединение, то вам необходимо также загрузить сертификат/закрытый ключ клиента и CA -сертификат для верификации серверной стороны. После этого перейдите в основное меню, далее в Службы, затем в раздел Коннекторы . Запустите службу CEF connector , или перезапустите ее, если вы вносили изменения в настройки. На этом настройка со стороны MLAD закончена. В KUMA перейдите в раздел Ресурсы , затем Коллекторы . В состав поставки KUMA входит предварительно настроенный коллектор [ OOTB ] Syslog CEF . Создайте копию на основе данного коллектора и перейдите в его настройки. Основные настройки подключения задаются на вкладке Транспорт . Укажите тип протокола, интерфейс и порт, на котором KUMA будет принимать подключение по Syslog . Убедитесь, что настройки подключения в MLAD совпадают с настройками в данной вкладке. Настройки остальных вкладок не влияют на прием сообщений Syslog . Во вкладке Парсинг событий вы можете настроить, как будут парситься события Syslog , полученные от MLAD . Для этого вам предварительно необходимо создать соответствующий парсер. Процесс создания и настройки парсера описан в документации на KUMA , и в данном документе не затрагивается, После завершения настройки вам сначала будет необходимо будет создать соответствующий сервис. Для этого необходимо выполнить предложенную команду (через sudo ) на машине с KUMA. Если сервис уже существует, то после завершения настройки перейдите во вкладку Проверка параметров и нажмите кнопку Сохранить и перезапустить сервисы . Перейдите в раздел Активные сервисы и убедитесь, что ваш сервис коллектора Syslog запущен. Вернитесь в MLAD и произведите какое-нибудь системное действие, например, выйдите и снова войдите в систему. Далее выберите свой активный сервис в KUMA и нажмите кнопку Перейти к событиям. C делайте дефолтный SQL -запрос. Вы увидите в списке событие безопасности от MLAD . Интеграция KICS for Networks и SD-WAN: варианты совместного применения Kaspersky Industrial CyberSecurity for Networks (KICS for Networks)  поддерживает интеграцию с  Kaspersky SD-WAN , что позволяет расширить возможности мониторинга и защиты промышленных сетей. В таком режиме KICS for Networks получает зеркалированный трафик с удаленных площадок через устройства Customer Premise Equipment (CPE) SD-WAN. Архитектура «Транспорт SPAN» Данная схема предполагает передачу трафика промышленных сетей с географически распределенных объектов в KICS for Networks через защищенные каналы SD-WAN. Принцип работы: Устройства CPE  на удаленных площадках получают зеркалированный трафик через сетевые коммутаторы. Трафик шифруется и передается на принимающие CPE-устройства, расположенные в одной сети с узлами KICS for Networks. Принимающие CPE выполняют роль шлюза SD-WAN (если требуется маршрутизация через шлюз) и передают трафик на сетевые интерфейсы KICS for Networks. Идентификация трафика Для корректного определения источника трафика используется VLAN (IEEE 802.1q). Каждому устройству CPE назначается уникальный VLAN-ID, который должен совпадать с настройками на узле KICS for Networks. Ограничения режима интеграции Не более 100 точек мониторинга на один узел. Общее количество точек мониторинга в системе — не более 100. Архитектура с использованием CPE в качестве TAP-устройств Если на удаленной площадке нет возможности зеркалировать трафик через коммутаторы, CPE SD-WAN могут выступать в роли TAP-устройств, захватывая и передавая трафик в KICS for Networks. Дополнительные варианты применения SD-WAN 1. Вариант «Транспорт» Используется для организации защищенных каналов связи между компонентами сети Kaspersky Industrial Cyber Security и охватывает решения: KICS for Networks KICS for Nodes Kaspersky Security Center Kaspersky Unified Monitoring and Analysis Platform (KUMA) Kaspersky Machine Learning for Anomaly Detection (MLAD) Такая схема обеспечивает безопасный обмен данными в управляющей сети. 2. Вариант «Растянутый коммутатор» Позволяет объединить географически распределенные объекты в единую защищенную сеть, обеспечивая безопасное взаимодействие между ними. Заключение Все описанные варианты интеграции KICS for Networks и SD-WAN могут комбинироваться в зависимости от задач проекта. Это позволяет гибко настраивать защиту промышленной инфраструктуры, обеспечивая безопасность и контроль трафика на всех уровнях. Если требуется индивидуальная конфигурация, рекомендуется обратиться к документации или специалистам Kaspersky для оптимального развертывания решений.