РОССИЙСКАЯ ФЕДЕРАЦИЯ
ФЕДЕРАЛЬНАЯ СЛУЖБА ПО ИНТЕЛЛЕКТУАЛЬНОЙ СОБСТВЕННОСТИ |
(19)
RU
(11)
(13)
C1
|
Статус: | действует (последнее изменение статуса: 10.08.2024) |
Пошлина: | Установленный срок для уплаты пошлины за 3 год: с 22.12.2024 по 21.12.2025. При уплате пошлины за 3 год в дополнительный 6-месячный срок с 22.12.2025 по 21.06.2026 размер пошлины увеличивается на 50%. |
(52) СПК
G06N 3/08 (2024.01)
|
|
(21)(22) Заявка: 2023134434, 21.12.2023 (24) Дата начала отсчета срока действия патента: Дата регистрации: Приоритет(ы): (22) Дата подачи заявки: 21.12.2023 (45) Опубликовано: 30.07.2024 Бюл. № 22 (56) Список документов, цитированных в отчете о поиске: US 2021319113 A1, 14.10.2021. US 2022038474 A1, 03.02.2022. CN 113938309 A, 14.01.2022. CN 111917765 A, 10.11.2020. Адрес для переписки: |
(72) Автор(ы):
(73) Патентообладатель(и):
|
(54) Способ генерации состязательных примеров для сетевой системы обнаружения вторжений
(57) Реферат:
Изобретение относится к области информационных технологий, в частности к информационной безопасности, и может быть использовано для обучения систем обнаружения вторжений. Технический результат при генерации состязательных примеров для сетевой системы обнаружения вторжений заключается в повышении скорости поиска эффективных состязательных примеров. Технический результат достигается за счет того, что в способе генерации состязательных примеров для сетевой системы обнаружения вторжений дополнительно до тестирования в реальной промышленной системе управления проводят две проверки, а именно оценивают для каждого найденного состязательного примера допустимость возмущений, примененных к исходному примеру, по заданным допустимым значениям в выбранном признаковом пространстве, и по результату переходят к проверке зависимости признаков или не принимают найденный состязательный пример в качестве эффективного состязательного примера. Далее составляют матрицу зависимости признаков в сформированном признаковом пространстве, затем для каждого признака найденного состязательного примера, значение которого в исходном примере изменено, проверяют его зависимые признаки, определенные в матрице зависимости признаков, на изменение в исходном примере и по результату переходят к тестированию или не принимают в качестве эффективного состязательного примера. 2 ил.
Изобретение относится к области информационных технологий, в частности к информационной безопасности, и может быть использовано для обучения систем обнаружения вторжений (СОВ).
В рамках мероприятия «Методы обнаружения и противодействия атакам с внедрением закладок и зловредного кода в модели машинного обучения», разрабатываемого исследовательским центром доверенного искусственного интеллекта ИСП РАН, известны подходы к реализации состязательных атак в отношении моделей обнаружения вторжений. Настоящее изобретение также относится к области состязательного обучения, развивает предложенные центром доверенного искусственного интеллекта ИСП РАН подходы и описывает способ генерации примеров, реализующих состязательные атаки уклонения в отношении сетевой системы обнаружения вторжений.
Термины, используемые в тексте описания изобретения:
Система обнаружения вторжений (СОВ) - программная система, предназначенная для выявления несанкционированной и вредоносной активности в компьютерной сети или на отдельном узле.
Современный этап развития инфокоммуникационного пространства характеризуется экспоненциальным ростом объёмов передаваемых, обрабатываемых и хранимых данных. При этом повышается квалификация потенциальных киберпреступников, а также увеличивается количество преступлений в сфере информационной безопасности.
Задача анализа сетевого трафика с целью обнаружения компьютерных атак является одной из актуальных задач в области информационной безопасности. Для решения указанной задачи ведется разработка и внедрение систем обнаружения вторжений (СОВ), сигнатурных и несигнатурных. Недостатком сигнатурных СОВ является невозможность обнаружения новых, ранее неизвестных компьютерных атак. Для обнаружения новых атак оправдано использование несигнатурных СОВ, среди которых наиболее широкое распространение получают системы, основанные на применении методов машинного обучения.
Однако СОВ, основанные на машинном обучении, уязвимы в определенных аспектах. Моделью машинного обучения можно манипулировать посредством примеров входных данных, намеренно созданных злоумышленником. Атакующий, специальным образом подобрав пример входных данных, может заставить модель ошибаться: незначительное изменение примера входных данных приведёт к ошибке в ответе модели (классификатора) машинного обучения. Совокупность примеров входных данных модели, на которых модель ошибается, т.е. ошибочно классифицирует, называется состязательной выборкой. Возможность реализации состязательных атак создает потенциальную угрозу безопасности системы, основанной на машинном обучении.
Таким образом, проведение исследований в области состязательного обучения принципиально важно и актуально для обеспечения информационной безопасности. Разработка способов генерации состязательных примеров позволит смоделировать действия потенциального атакующего, которые могут привести к ошибке СОВ и тем самым позволят уклониться от обнаружения атаки, и выработать адекватные защитные механизмы.
Известен по патенту US20210067549A1 Способ обнаружения вторжения в компьютерную сеть и реагирования на него, включающий: генерацию набора обучающих состязательных данных, в который входят исходные примеры и состязательные примеры, посредством нарушения одного или нескольких исходных примеров с помощью интегрированной градиентной атаки для генерации состязательных примеров; кодирование исходной и состязательной выборок для генерации соответствующих исходных выборок и состязательных графовых представлений, основанных на агрегировании окрестностей узлов; обучение нейронной сети на основе графов для обнаружения аномальной активности в компьютерной сети с использованием состязательного набора обучающих данных и выполнение действия по обеспечению безопасности в ответ на обнаруженную аномальную активность.
Основным недостатком данного способа является обобщенное представление способа генерации состязательных примеров, основанное на применении так называемой «интегрированной градиентной атаки». Не раскрываются конкретные действия по получению состязательного примера из исходного примера; не указывается подмножество изменяемых признаков признакового пространства; не учитываются известные ограничения в области генерации признаков сессий сетевого трафика со стороны атакующего, например, невозможность прямого произвольного изменения значений признаков сессий сетевого трафика: длительности сессии, статистики длин пакетов, межпакетных задержек и др.
Наиболее близким по технической сущности и выполняемым функциям, выбранный в качестве прототипа, является Способ генерации состязательных примеров для промышленной системы управления по патенту US20210319113A1, включающий следующие шаги:
1) прослушивают генератором образцов трафик промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
2) формируют признаковое пространство из признаков: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета, а также из дополнительных признаков в зависимости от используемых сетевых протоколов в промышленной системе управления;
3) выполняют анализ трафика промышленной системы управления, извлекают признаки в соответствии с выбранным признаковым пространством на шаге 2;
4) создают и обучают классификатор машинного обучения на основе признаков, извлеченных на шаге 3;
5) преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием классификатора, созданного на шаге 4, и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 - исходный пример атаки;
x* - сформированный состязательный пример;
g(x) - вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) - расстояние между состязательным примером и исходным примером атаки;
dmax - максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
6) тестируют состязательный пример, созданный на шаге 5, в реальной промышленной системе управления, при этом, если состязательный пример успешно обходит систему обнаружения вторжений промышленной системы управления и сохраняет возможность атаки, он принимается в качестве эффективного состязательного примера, а если состязательный пример не может уклониться от системы обнаружения вторжений промышленной системы управления или сохранить возможность атаки, состязательный пример отбрасывают.
Недостатком способа-прототипа является низкая скорость поиска эффективных состязательных примеров (сохраняющих возможность атаки), поскольку каждый полученный на шаге 5 состязательный пример тестируют в реальной промышленной системе управления на шаге 6, является ли он эффективным состязательным примером. При этом в способе-прототипе не учитывается ограничение в области генерации признаков сессий сетевого трафика со стороны атакующего, а именно невозможность прямого произвольного и независимого изменения атакующим некоторых значений признаков: например, длительности сессии, статистики длин пакетов, межпакетных задержек и др., поскольку атакующий имеет доступ только к исходным отправляемым пакетам сетевого трафика, а расчёт вектора признаков соответствующей сетевой сессии осуществляется на стороне системы обнаружения вторжений.
Техническая проблема заключается в низкой скорости поиска эффективных состязательных примеров из-за необходимости тестирования каждого полученного состязательного примера в реальной промышленной системе управления.
Техническим результатом является повышение скорости поиска эффективных состязательных примеров.
Техническая проблема решается и технический результат реализуется за счет того, что в способе генерации состязательных примеров для сетевой системы обнаружения вторжений используют следующую последовательность действий:
- прослушивают генератором образцов трафик промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
- далее формируют признаковое пространство из признаков: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета, а также из дополнительных признаков в зависимости от используемых сетевых протоколов в промышленной системе управления;
- затем анализируют трафик промышленной системы управления, извлекают признаки в соответствии со сформированным признаковым пространством;
- после чего создают и обучают классификатор машинного обучения на основе признаков, полученных при анализе трафика;
- преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием созданного классификатора и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 - исходный пример атаки;
x* - сформированный состязательный пример;
g(x) - вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) - расстояние между состязательным примером и исходным примером атаки;
dmax - максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
- оценивают для каждого найденного состязательного примера допустимость возмущений, примененных к исходному примеру, по заданным допустимым значениям в выбранном признаковом пространстве, и если одно или более возмущений недопустимы, то не принимают найденный состязательный пример в качестве эффективного состязательного примера;
- составляют матрицу зависимости признаков в сформированном признаковом пространстве, помечая для каждой пары признаков, являются ли они зависимыми;
- для каждого найденного состязательного примера берут каждый признак, значение которого в исходном примере изменяется для получения состязательного примера, и для этого признака по матрице зависимости признаков берут все зависимые признаки, после чего проверяют, изменены ли в исходном примере эти зависимые признаки, и если один или более зависимых признаков не изменены, то не принимают найденный состязательный пример в качестве эффективного состязательного примера;
- затем тестируют созданный состязательный пример в реальной промышленной системе управления и по результату принимают либо не принимают в качестве эффективного состязательного примера.
Отличительной особенностью способа являются дополнительные проверки найденных состязательных примеров (проверка допустимости возмущений и проверка выполнения условий независимости признаков), осуществляемые перед этапом тестирования в реальной промышленной системе управления. Эти проверки выполняются быстрее, чем тестирование в реальной промышленной системе управления, они позволяют заранее отбросить неэффективные состязательные примеры и тем самым повысить скорость поиска эффективных состязательных примеров.
Проведенный анализ уровня техники позволил установить, что аналоги, характеризующиеся совокупностями признаков, тождественными всем признакам заявленного способа, отсутствуют. Следовательно, заявленное изобретение соответствует условию патентоспособности «новизна».
Перечисленная новая совокупность существенных признаков обеспечивает расширение возможностей способа прототипа за счет того, что дополнительные проверки найденных состязательных примеров заранее позволяют отбросить среди них неэффективные состязательные примеры.
Результаты поиска известных решений в данной и смежной областях техники с целью выявления признаков, совпадающих с отличительными от прототипов признаками заявленного изобретения, показали, что они не следуют явным образом из уровня техники. Из определенного заявителем уровня техники не выявлена известность влияния предусматриваемых существенными признаками заявленного изобретения на достижение указанного технического результата. Следовательно, заявленное изобретение соответствует условию патентоспособности «изобретательский уровень».
«Промышленная применимость» способа обусловлена технической возможностью реализации данного способа.
Заявленный способ поясняется чертежами:
фиг. 1 - блок-схема способа генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления.
фиг. 2 - схема генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления.
В блоке 1 (фиг. 1) прослушивают генератором образцов (фиг. 2, блок 2) трафик промышленной системы управления (фиг. 2, блок 3) для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления (фиг. 2, блок 4).
В блоке 2 (фиг. 1) размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки (фиг. 2, блок 5).
В блоке 3 (фиг. 1) формируют признаковое пространство из признаков: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета, а также из дополнительных признаков в зависимости от используемых сетевых протоколов в промышленной системе управления; (фиг. 2, блок 6).
В блоке 4 (фиг. 1) выполняют анализ трафика промышленной системы управления, извлекают признаки в соответствии со сформированным признаковым пространством (фиг. 2, блок 6).
В блоке 5 (фиг. 1) создают и обучают классификатор машинного обучения (фиг. 2, блок 7) на основе признаков (фиг. 2, блок 6), извлеченных в блоке 4 (фиг. 1).
В блоке 6 (фиг. 1) преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием классификатора (фиг. 2, блок 7), созданного в блоке 5 (фиг. 1).
В блоке 7 (фиг. 1) решают задачу оптимизации для получения состязательных примеров (фиг. 2, блок 8), при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 - исходный пример атаки;
x* - сформированный состязательный пример;
g(x) - вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) - расстояние между состязательным примером и исходным примером атаки;
dmax - максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
В блоке 8 (фиг. 1) оценивают для каждого найденного состязательного примера допустимость возмущений, примененных к исходному примеру (фиг. 2, блок 9), по заданным допустимым значениям в выбранном признаковом пространстве управления (фиг. 2, блок 10).
В блоке 9 (фиг. 1) проверяют: если одно или более возмущений недопустимы, то не принимают найденный состязательный пример в качестве эффективного состязательного примера (фиг. 2, блок 9).
В блоке 10 (фиг. 1) составляют матрицу зависимости признаков в сформированном признаковом пространстве, помечая для каждой пары признаков, являются ли они зависимыми (фиг. 2, блок 12).
В блоке 11 (фиг. 1) для каждого найденного состязательного примера берут каждый признак, значение которого в исходном примере изменяется для получения состязательного примера, и для этого признака по матрице зависимости признаков берут все зависимые признаки, после чего проверяют, изменены ли в исходном примере эти зависимые признаки (фиг. 2, блок 11).
В блоке 12 (фиг. 1) проверяют: если один или более зависимых признаков не изменены, то не принимают найденный состязательный пример в качестве эффективного состязательного примера (фиг. 2, блок 11).
В блоке 13 (фиг. 1) тестируют состязательный пример (фиг. 2, блок 13), созданный в блоке 7 (фиг. 1) и предварительно проверенный в блоках 9 и 12 (фиг. 1, эти проверки соответствуют блокам 9 и 11 фиг. 2), в реальной промышленной системе управления (фиг. 2, блок 3).
В блоке 14 (фиг. 1) проверяют условия, обходит ли состязательный пример систему обнаружения вторжений промышленной системы управления и сохраняет ли он возможность атаки. Если условия выполняются, то его принимают (фиг. 1, блок 15) в качестве эффективного состязательного примера (фиг. 2, блок 14), а если условия не выполняются, состязательный пример отбрасывают (фиг. 1, блок 16).
Заявленный способ подтвержден примером программы на языке программирования python с достигнутым заявленным результатом. В программе осуществляется построение классификатора и поиск состязательных примеров, далее найденные примеры проходят две дополнительные проверки - это соответствует дополнительным действиям в заявленном способе. Затем оценивается количество отброшенных состязательных примеров в этих дополнительных проверках. Ожидается, что дополнительное действие в заявленном способе позволит увеличить количество отброшенных неэффективных состязательных примеров, и, следовательно, повысить скорость поиска эффективных состязательных примеров, поскольку исключается необходимость тестирования каждого полученного состязательного примера в реальной промышленной системе управления. Указанный результат соответствует заявленному техническому результату.
Ниже представлено описание программы и выполняемых действий.
Загрузка необходимых библиотек:
import math
import pickle
from typing import List
from art.estimators.classification import SklearnClassifier
from art.attacks.evasion import HopSkipJump, SignOPTAttack
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, f1_score, precision_score, recall_score
from sklearn.model_selection import train_test_split
Далее моделируют шаг прослушивания генератором образцов трафика промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления. В примере размеченный трафик уже записан в файл «web_attacks_balanced.csv», затем его читают в программе. Данные в этом файле соответствуют подвыборке веб-атак публичного датасета CICIDS2017. В качестве исходных примеров атаки принимают записи с метками «1».
df = pd.read_csv('web_attacks_balanced.csv')
# Метки, соответствующие атакам, маркируются "1".
# Отсутствие атаки - "0".
df['Label'] = df['Label'].apply(lambda x: 0 if x == 'BENIGN' else 1)
Признаковое пространство формируют из следующих признаков:
• средняя длина пакета - 'Average Packet Size';
• скорость передачи - 'Flow Bytes/s';
• максимальная длина пакета - 'Max Packet Length';
• минимальный промежуток времени между пакетами в прямом направлении передачи - 'Fwd IAT Min';
• средняя длина пакета в прямом направлении передачи - 'Fwd Packet Length Mean';
• общая длина переданных в прямом направлении пакетов - 'Total Length of Fwd Packets';
• средний промежуток времени между пакетами - 'Flow IAT Mean';
• среднеквадратическое отклонение промежутка времени между пакетами в прямом направлении передачи - 'Fwd IAT Std';
• максимальная длина пакета в прямом направлении передачи - 'Fwd Packet Length Max';
• длина заголовка пакета в прямом направлении передачи - 'Fwd Header Length'.
В примере из признакового пространства исключены признаки: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, поскольку по этим признакам модель без ошибок определяет атаку, т.к. в публичном датасете CICIDS2017 действия атакующих моделировались с отдельных, фиксированных IP-адресов. Также из признакового пространства исключены признаки время передачи пакета и код назначения пакета, поскольку эти признаки отсутствуют в исходном датасете CICIDS2017. Исключение указанных признаков не влияет на общность полученных в примере выводов.
webattack_features = ['Average Packet Size',
'Flow Bytes/s',
'Max Packet Length',
'Fwd IAT Min',
'Fwd Packet Length Mean',
'Total Length of Fwd Packets',
'Flow IAT Mean',
'Fwd IAT Std',
'Fwd Packet Length Max',
'Fwd Header Length']
Просмотр выбранных признаков:
df[webattack_features]
Формирование целевого вектора обучающей выборки:
y = df['Label'].values
Формирование матрицы объектов-признаков обучающей выборки:
X = df[webattack_features].values
Просмотр размерности матрицы объектов-признаков и целевого вектора:
print(X.shape, y.shape)
(7267, 10) (7267,)
Разделение обучающей выборки на обучающую (X_train, y_train) и тестовую (X_test, y_test):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, shuffle=True, random_state=42)
Построение классификатора типа "случайный лес":
model = RandomForestClassifier(max_depth=5, n_estimators=5, max_features=3)
Обучение классификатора на обучающей выборке:
model.fit(X_train, y_train)
Формирование вектора предсказаний модели на тестовой выборке:
y_pred = model.predict(X_test)
Для оценки метрик качества модели используется следующая функция:
def print_metrics(y_eval: np.ndarray, y_pred: np.ndarray, average: str = 'binary') -> List[float]:
accuracy = accuracy_score(y_eval, y_pred)
precision = precision_score(y_eval, y_pred, average=average)
recall = recall_score(y_eval, y_pred, average=average)
f1 = f1_score(y_eval, y_pred, average=average)
print('Accuracy =', accuracy)
print('Precision =', precision)
print('Recall =', recall)
print('F1 =', f1)
Получение метрик качества модели model на исходной тестовой выборке:
print_metrics(y_test, y_pred)
Accuracy = 0.9708310401761144
Precision = 0.9611829944547134
Recall = 0.9420289855072463
F1 = 0.9515096065873742
Задача обучения состязательной системы обнаружения вторжений промышленной системы управления формулируется в виде задачи оптимизации согласно способу-прототипу. В примере эта задача решается с помощью реализации атаки HopSkipJump из состава библиотеки Adversarial Robustness Toolbox:
# Create ART classifier for scikit-learn RandomForestClassifier
art_classifier = SklearnClassifier(model=model)
# Create ART HopSkipJump attack
hsja = HopSkipJump(classifier=art_classifier, batch_size=64, targeted=False, norm=2, max_iter=50, max_eval=10000, init_eval=100, init_size=100, verbose=True)
# Generate adversarial samples with ART HopSkipJump attack
X_test_adv = hsja.generate(X_test)
Для проверки выводится один из найденных состязательных примеров с помощью реализации атаки HopSkipJump. В исходном примере изменены значения некоторых признаков, в результате чего модель «ошибается» и вместо класса «1» («атака») отвечает «0» («не атака»).
print('Пример строки исходной тестовой выборки:')
print(X_test[[12]])
pred = model.predict(X_test[[12]])
print('Предсказание модели для исходной тестовой выборки: ', pred[0])
Пример строки исходной тестовой выборки:
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 8.73000000e+02
0.00000000e+00 0.00000000e+00 1.93830033e+06 4.11052132e+06
0.00000000e+00 1.04000000e+02]]
Предсказание модели для исходной тестовой выборки: 1
print('Состязательный пример:')
print(X_test_adv[[12]])
y_pred_adv = model.predict(X_test_adv[[12]])
print('Предсказание модели для состязательного примера: ', y_pred_adv[0])
Состязательный пример:
[[1.3583954e-03 1.7022021e-01 5.1920599e-04 8.7300134e+02 0.0000000e+00
1.5627779e-03 1.9383004e+06 4.1105210e+06 2.2381141e-03 1.0400174e+02]]
Предсказание модели для состязательного примера: 0
Далее составляют матрицу зависимости признаков в сформированном признаковом пространстве, помечая для каждой пары признаков, являются ли они зависимыми (например, признак «средняя длина пакета» и признак «скорость передачи» являются зависимыми, а признак «IP-адрес источника» и признак «промежуток времени между пакетами» являются независимыми). Это действие в примере выполняют до первой проверки, чтобы не повторять действие далее внутри цикла.
# Матрица зависимости признаков
# Начальное заполнение
n = len(webattack_features)
dependency_matrix = np.zeros((n, n))
np.fill_diagonal(dependency_matrix, 1)
print(webattack_features)
print(dependency_matrix)
['Average Packet Size', 'Flow Bytes/s', 'Max Packet Length', 'Fwd IAT Min', 'Fwd Packet Length Mean', 'Total Length of Fwd Packets', 'Flow IAT Mean', 'Fwd IAT Std', 'Fwd Packet Length Max', 'Fwd Header Length']
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]
# Заполнение матрицы зависимости экспертами:
# 1. Average Packet Size и Flow Bytes/s являются зависимыми.
dependency_matrix[0][1] = dependency_matrix[1][0] = 1
# 2. Flow Bytes/s и Flow IAT Mean являются зависимыми.
dependency_matrix[1][6] = dependency_matrix[6][1] = 1
print(dependency_matrix)
[[1. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 1. 0. 0. 0. 0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 1. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]
Далее в цикле по всем примерам тестовой выборки осуществляют проверку, отличается ли метка класса исходного примера и состязательного примера (т.е. «обманывает» ли пример модель и является ли состязательным). И в случае отличия метки класса выполняются две дополнительные проверки согласно заявленному способу:
count = 0
discarded_1 = 0
discarded_2 = 0
epsilon = 0.001
for i in range(0, X_test.shape[0]):
if (model.predict(X_test[[i]]) != model.predict(X_test_adv[[i]])):
count += 1
errors_1 = []
# Первая проверка: изменения значений признаков должны быть допустимыми
if X_test_adv[[i]][0][0] < 0 or X_test_adv[[i]][0][0] > 65535:
errors_1.append(f'Недопустимое изменение признака Average Packet Size! Значение: {X_test_adv[[i]][0][0]}')
if X_test_adv[[i]][0][1] < 0:
errors_1.append(f'Недопустимое изменение признака Flow Bytes/s! Значение: {X_test_adv[[i]][0][1]}')
if X_test_adv[[i]][0][2] < 0 or X_test_adv[[i]][0][2] > 65535 or (X_test_adv[[i]][0][2] - int(X_test_adv[[i]][0][2]) > epsilon):
errors_1.append(f'Недопустимое изменение признака Max Packet Length! Значение: {X_test_adv[[i]][0][2]}')
if X_test_adv[[i]][0][3] < 0:
errors_1.append(f'Недопустимое изменение признака Fwd IAT Min! Значение: {X_test_adv[[i]][0][3]}')
if X_test_adv[[i]][0][4] < 0 or X_test_adv[[i]][0][4] > 65535:
errors_1.append(f'Недопустимое изменение признака Fwd Packet Length Mean! Значение: {X_test_adv[[i]][0][4]}')
if X_test_adv[[i]][0][5] < 0:
errors_1.append(f'Недопустимое изменение признака Total Length of Fwd Packets! Значение: {X_test_adv[[i]][0][5]}')
if X_test_adv[[i]][0][6] < 0:
errors_1.append(f'Недопустимое изменение признака Flow IAT Mean! Значение: {X_test_adv[[i]][0][6]}')
if X_test_adv[[i]][0][7] < 0:
errors_1.append(f'Недопустимое изменение признака Fwd IAT Std! Значение: {X_test_adv[[i]][0][7]}')
if X_test_adv[[i]][0][8] < 0 or X_test_adv[[i]][0][8] > 65535:
errors_1.append(f'Недопустимое изменение признака Fwd Packet Length Max! Значение: {X_test_adv[[i]][0][8]}')
if X_test_adv[[i]][0][9] < 0 or (X_test_adv[[i]][0][9] - int(X_test_adv[[i]][0][9]) > epsilon):
errors_1.append(f'Недопустимое изменение признака Fwd Header Length! Значение: {X_test_adv[[i]][0][9]}')
if len(errors_1) > 0:
discarded_1 += 1
print('Состязательный пример отброшен в тесте допустимости изменений, не является эффективным!')
print('Ошибки:', errors_1)
print(f'Строка {i} исходной тестовой выборки: {X_test[[i]]}')
print(f'Строка {i} с состязательным примером: {X_test_adv[[i]]}\n')
else:
# Вторая проверка: если изменено значение какого-то признака, то должны быть изменены и все зависимые признаки
# Определение измененных признаков
changed_features = [0] * n
epsilon
for j in range(0, n):
if (abs(X_test[[i]][0][j] - X_test_adv[[i]][0][j]) > epsilon):
changed_features[j] = 1
# Цикл по всем измененным признакам
for k in range(0, n):
if changed_features[k] == 1:
# Если k-й признак изменен, то должны быть изменены и все зависимые признаки из строки dependency_matrix[k]
all_changed = True
for x in range(0, n):
if dependency_matrix[k][x] == 1 and changed_features[x] != 1:
all_changed = False
break
if not all_changed:
discarded_2 += 1
print('Состязательный пример отброшен в тесте изменения всех зависимых признаков, не является эффективным!')
print(f'Изменён признак {webattack_features[k]}, вместе с ним должен быть изменён признак {webattack_features[x]}, однако в состязательном примере этот признак не изменён.')
print(f'Исходный пример: {X_test[[i]]}')
print(f'Состязательный пример: {X_test_adv[[i]]}')
print(f'Изменённые признаки в состязательном примере: {changed_features}')
print(f'Индексы зависимых признаков: {dependency_matrix[k]}\n')
break
print('Результаты первой проверки.')
print(f'Всего состязательных примеров: {count}.')
print(f'Из них примеров с недопустимыми возмущениями, отброшены в первом тесте: {discarded_1}.')
print(f'Среди прошедших первый тест примеров не прошли второй тест, отброшены во втором тесте: {discarded_2}.')
Первая проверка соответствует проверке допустимости возмущений, примененных к исходному примеру для получения состязательного примера. Для этого для каждого признака в выбранном признаковом пространстве задают область допустимых значений (например, для признака «средняя длина пакета» задают область допустимых значений от 0 до 65535) и проверяют, все ли значения признаков найденного состязательного примера попадают в соответствующие области допустимых значений. Если значение какого-то признака состязательного примера не попадает в область допустимых значений (например, получен состязательный пример со значением признака «средняя длина пакета», равным -1 или 99999), то состязательный пример не принимают в качестве эффективного состязательного примера.
Такая проверка выполняется быстрее, чем тестирование в реальной промышленной системе управления.
Отброшенный пример после первой проверки:
Состязательный пример отброшен в тесте допустимости изменений, не является эффективным!
Ошибки: ['Недопустимое изменение признака Max Packet Length! Значение: 0.0011815321631729603', 'Недопустимое изменение признака Fwd Header Length! Значение: 31.99871253967285']
Строка 0 исходной тестовой выборки: [[ 0. 0. 0. 0. 0. 0. 50. 0. 0. 32.]]
Строка 0 с состязательным примером: [[1.1163703e-03 1.0681561e-01 1.1815322e-03 1.4809787e-03 1.2348837e-03
3.0222472e-03 5.0002239e+01 0.0000000e+00 4.8477112e-04 3.1998713e+01]]
Вторая проверка соответствует проверке выполнения условий независимости признаков, значения которых изменяются в исходном примере для получения состязательного примера. Берут каждый следующий признак, значение которого в исходном примере изменяется для получения состязательного примера; в матрице зависимости признаков для этого признака берут все зависимые признаки; проверяют, изменены ли в исходном примере эти зависимые признаки.
Если не все зависимые признаки изменены, значит, такой состязательный пример невозможно реализовать на практике, нет смысла проверять такой пример в реальной промышленной системе управления, он точно не будет являться эффективным состязательным примером.
Такая проверка тоже выполняется быстрее, чем тестирование в реальной промышленной системе управления.
Отброшенный пример после второй проверки:
Состязательный пример отброшен в тесте изменения всех зависимых признаков, не является эффективным!
Изменён признак Flow Bytes/s, вместе с ним должен быть изменён признак Average Packet Size, однако в состязательном примере этот признак не изменён.
Исходный пример: [[ 0. 0. 0. 0. 0. 0. 61. 0. 0. 32.]]
Состязательный пример: [[9.1894530e-04 5.3478539e-02 0.0000000e+00 3.1047015e-04 0.0000000e+00
1.3102189e-04 6.0999420e+01 6.7939161e-04 2.9472448e-04 3.2000328e+01]]
Изменённые признаки в состязательном примере: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
Индексы зависимых признаков: [1. 1. 0. 0. 0. 0. 1. 0. 0. 0.]
Следует отметить, что даже при условии изменения всех зависимых признаков необходимо проверить, точно ли соответствует изменение одного признака изменениям всех зависимых признаков. Для этого необходимо знать точные аналитические выражения зависимостей каждого признака от других признаков, что не представляется возможным. Поэтому в таких случаях, как и в способе-прототипе, состязательный пример для окончательной проверки, является ли он эффективным, отправляется на следующий шаг и тестируется в реальной промышленной системе управления.
В результате выполнения этих двух дополнительных проверок в примере отброшены неэффективные состязательные примеры:
Результаты первой проверки.
Всего состязательных примеров: 541.
Из них примеров с недопустимыми возмущениями, отброшены в первом тесте: 136.
Среди прошедших первый тест примеров не прошли второй тест, отброшены во втором тесте: 3.
Выводы.
При генерации состязательных примеров согласно способу-прототипу обнаружен 541 состязательный пример. После выполнения дополнительного действия - проверки допустимости возмущений, примененных к исходному примеру, по заданным допустимым значениям в выбранном признаковом пространстве - отброшено 136 найденных состязательных примеров как неэффективных.
Далее, после выполнения дополнительных действий - составления матрицы зависимости признаков в сформированном признаковом пространстве и проверки изменения всех зависимых признаков - отброшено ещё 3 состязательных примера как неэффективных.
Таким образом, 139 состязательных примеров отброшены на этапе предварительных проверок, без необходимости тестирования найденных состязательных примеров в реальной промышленной системе управления. Поскольку эти предварительные проверки выполняются за несколько процессорных команд и не требуют более длительных операций формирования сетевых пакетов, отправки пакетов по сети, приёма пакетов на стороне системы обнаружения вторжений, сбора пакетов в сессии, расчёта значений признаков, классификации сессии моделью машинного обучения (все эти действия должны быть выполнены на этапе тестирования в реальной промышленной системе управления), то очевидно, что такие предварительные проверки выполняются быстрее, чем тестирование в реальной промышленной системе управления.
Следовательно, за счет исключения необходимости тестирования каждого полученного состязательного примера в реальной промышленной системе управления повышается скорость поиска эффективных состязательных примеров. Указанный результат соответствует заявленному техническому результату.
Формула изобретения
Способ генерации состязательных примеров для сетевой системы обнаружения вторжений, включающий следующие последовательности действий,
прослушивают генератором образцов трафик промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
формируют признаковое пространство из признаков: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета, а также из дополнительных признаков в зависимости от используемых сетевых протоколов в промышленной системе управления;
анализируют трафик промышленной системы управления, извлекают признаки в соответствии со сформированным признаковым пространством;
создают и обучают классификатор машинного обучения на основе признаков, полученных при анализе трафика;
преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием созданного классификатора и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 – исходный пример атаки;
x* – сформированный состязательный пример;
g(x) – вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) – расстояние между состязательным примером и исходным примером атаки;
dmax – максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
тестируют созданный состязательный пример в реальной промышленной системе управления и по результату принимают либо не принимают в качестве эффективного состязательного примера;
отличающийся тем, что до тестирования в реальной промышленной системе управления дополнительно оценивают для каждого найденного состязательного примера допустимость возмущений, примененных к исходному примеру, по заданным допустимым значениям в выбранном признаковом пространстве, и по результату переходят к проверке зависимости признаков или не принимают найденный состязательный пример в качестве эффективного состязательного примера; составляют матрицу зависимости признаков в сформированном признаковом пространстве; для каждого признака найденного состязательного примера, значение которого в исходном примере изменено, проверяют его зависимые признаки, определенные в матрице зависимости признаков, на изменение в исходном примере и по результату переходят к тестированию или не принимают в качестве эффективного состязательного примера.