Формирование текстов SQL-запросов для правил обнаружения сетевых аномалий

14 июля 2026

ID 310970

Вы можете вручную формировать тексты SQL-запросов при создании или изменении правил обнаружения сетевых аномалий. Запросы предназначены для поиска, извлечения и анализа атрибутов протоколов, полученных в зарегистрированных сетевых сеансах. Атрибуты протоколов хранятся в отдельной базе данных на Сервере Kaspersky Industrial CyberSecurity for Networks. Для обращений к этой базе данных вам нужно формировать запросы на языке структурированных запросов (Structured Query Language, SQL), который поддерживает СУБД ClickHouse. Сведения о поддерживаемых запросах, с помощью которых выполняются действия для извлечения и анализа данных, см. в справке ClickHouse.

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

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

Основные функции и операторы, применяемые в SQL-запросах для правил обнаружения сетевых аномалий

Поля таблицы со сведениями о сетевых сеансах

В базе данных для хранения атрибутов протоколов таблица со сведениями о сетевых сеансах содержит строки с блоками данных (chunks), полученных в течение 15-секундных интервалов. Каждый зарегистрированный сетевой сеанс представлен в таблице в виде отдельных блоков данных и в рамках этих блоков данных требуется выполнять обращения в SQL-запросах.

Таблица со сведениями о сетевых сеансах содержит следующие поля, к которым возможны обращения в SQL-запросах:

  • session_id, тип UInt64 – уникальный идентификатор сетевого сеанса;
  • chunk_start_time, тип DateTime64(6, 'UTC') – время начала блока данных (chunk), относящихся к сетевому сеансу, с точностью до микросекунды;
  • partition_id, тип UInt64 – идентификатор партиции в блоке данных (chunk);
  • start_time, тип DateTime64(6, 'UTC') – время первого пакета в блоке данных (chunk) с точностью до микросекунды;
  • end_time, тип DateTime64(6, 'UTC') – время последнего пакета в блоке данных (chunk) с точностью до микросекунды;
  • sip, тип IPv4 – IP-адрес отправителя (Сторона 1);
  • dip, тип IPv4 – IP-адрес получателя (Сторона 2);
  • sport, тип UInt16 – порт отправителя (Сторона 1);
  • dport, тип UInt16 – порт получателя (Сторона 2);
  • smac, тип FixedString(17) – MAC-адрес отправителя (Сторона 1) в формате XX:XX:XX:XX:XX:XX;
  • dmac, тип FixedString(17) – MAC-адрес получателя (Сторона 2) в формате XX:XX:XX:XX:XX:XX;
  • smac_as_id, тип UInt64 – MAC-адрес отправителя (Сторона 1), преобразованный в 64-битное число;
  • dmac_as_id, тип UInt64 – MAC-адрес получателя (Сторона 2), преобразованный в 64-битное число;
  • sip_as_id, тип UInt64 – IP-адрес отправителя (Сторона 1), преобразованный в 64-битное число;
  • dip_as_id, тип UInt64 – IP-адрес получателя (Сторона 2), преобразованный в 64-битное число;
  • vlanid, тип UInt16 – VLAN-идентификатор;
  • ether_type, тип UInt16 – тип Ethernet-кадра (например, 2048 для IPv4);
  • ipv4_type, тип UInt8 – тип IPv4 (8-битное значение);
  • protocol, тип LowCardinality(String) – название протокола прикладного уровня в таблице (например, GenericDceRpc, Ssh);
  • transport_protocol, тип LowCardinality(String) – название протокола транспортного уровня в таблице (например, Tcp, Udp);
  • bytes_sent_delta, тип UInt64 – объем отправленных данных за период блока данных (chunk);
  • packets_sent_delta, тип UInt64 – количество отправленных пакетов за период блока данных (chunk);
  • bytes_received_delta, тип UInt64 – объем полученных данных за период блока данных (chunk);
  • packets_received_delta, тип UInt64 – количество полученных пакетов за период блока данных (chunk);
  • dpi_dns, тип Array(Map(String, String)) – структурированные данные о сетевых событиях в трафике по протоколу DNS;
  • dpi_dns_raw, тип Array(String) – данные в JSON-формате о сетевых событиях в трафике по протоколу DNS;
  • dpi_krb, тип Array(Map(String, String)) – структурированные данные о трафике по протоколу Kerberos;
  • dpi_krb_raw, тип Array(String) – данные в JSON-формате о трафике по протоколу Kerberos;
  • dpi_dcerpc, тип Array(Map(String, String)) – структурированные данные о трафике по протоколу DCE/RPC;
  • dpi_dcerpc_raw, тип Array(String) – данные в JSON-формате о трафике по протоколу DCE/RPC;
  • dpi_ldap, тип Array(Map(String, String)) – структурированные данные о трафике по протоколу LDAP;
  • dpi_ldap_raw, тип Array(String) – данные в JSON-формате о трафике по протоколу LDAP;
  • total_attributes, тип UInt32 MATERIALIZED – общее количество атрибутов в полях dpi_dns_raw, dpi_krb_raw, dpi_dcerpc_raw и dpi_ldap_raw;
  • dpi_attributes_raw, тип Array(String) MATERIALIZED – объединенный массив данных об атрибутах в JSON-формате.

Поля таблицы с данными для регистрации событий

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

  • Поля, обязательные для заполнения:
    • aggregation_id, тип String – уникальный идентификатор агрегации, идентифицирующий событие;
    • session_ids, тип Array(UInt64) – массив идентификаторов сетевых сеансов, связанных с событием;
    • timestamp, тип DateTime64(6, 'UTC') – дата и время первого появления события;
    • protocol, тип String – название протокола в таблице со сведениями о сетевых сеансах (например, Ssh).
  • Поля для сохранения в событиях адресной информации и других данных о сетевых взаимодействиях (необязательные для заполнения и указания в SQL-запросе):
    • sip, тип IPv4 – IP-адрес отправителя;
    • dip, тип IPv4 – IP-адрес получателя;
    • sport, тип UInt16 – порт отправителя;
    • dport, тип UInt16 – порт получателя;
    • smac, тип FixedString(17) – MAC-адрес отправителя в формате XX:XX:XX:XX:XX:XX;
    • dmac, тип FixedString(17) – MAC-адрес получателя в формате XX:XX:XX:XX:XX:XX;
    • smac_as_id, тип UInt64 – идентификатор адресного пространства для MAC-адреса отправителя;
    • dmac_as_id, тип UInt64 – идентификатор адресного пространства для MAC-адреса получателя;
    • sip_as_id, тип UInt64 – идентификатор адресного пространства для IP-адреса отправителя;
    • dip_as_id, тип UInt64 – идентификатор адресного пространства для IP-адреса получателя;
    • vlanid, тип UInt16 – VLAN-идентификатор;
    • ether_type, тип UInt16 – тип Ethernet-кадра;
    • ipv4_type, тип UInt8 – тип IPv4.
  • Произвольно названные поля для указания их значений в событиях с помощью переменной $extra.<paramName>.

Названия протоколов в таблице со сведениями о сетевых сеансах

Использование переменных

В текст SQL-запроса вы можете добавлять переменные следующих типов:

  • string – текстовая строка;
  • date – дата в формате ГГГГ-ММ-ДД;
  • time – время в формате чч:мм;
  • weekday – номер дня недели (1–7, где 1 это понедельник);
  • ip – адрес IPv4 в формате XXX.XXX.XXX.XXX;
  • port – номер порта (0-65535);
  • int – целое 64-битное число.

Для указания переменной и ее типа используйте запись вида {{param_name:param_type}}. Если тип переменной не указан (в записи вида {{param_name}}), по умолчанию применяется тип string. Добавленные переменные отображаются под текстом SQL-запроса в блоке параметров Используемые переменные. В этом блоке можно задать значение переменной или выбрать для нее справочник со значениями.

При добавлении переменных в SQL-запрос учитывайте, что максимальное количество переменных в SQL-запросе – 30.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!