РОССИЙСКАЯ ФЕДЕРАЦИЯ
ФЕДЕРАЛЬНАЯ СЛУЖБА ПО ИНТЕЛЛЕКТУАЛЬНОЙ СОБСТВЕННОСТИ |
(19)
RU
(11)
(13)
C1
|
Статус: | может прекратить свое действие (последнее изменение статуса: 11.12.2024) |
Пошлина: | Установленный срок для уплаты пошлины за 3 год: с 10.12.2023 по 09.12.2024. При уплате пошлины за 3 год в дополнительный 6-месячный срок с 10.12.2024 по 09.06.2025 размер пошлины увеличивается на 50%. |
(52) СПК
G06F 21/55 (2023.05); G06N 20/10 (2023.05)
|
|
(21)(22) Заявка: 2022132242, 09.12.2022 (24) Дата начала отсчета срока действия патента: Дата регистрации: Приоритет(ы): (22) Дата подачи заявки: 09.12.2022 (45) Опубликовано: 10.10.2023 Бюл. № 28 (56) Список документов, цитированных в отчете о поиске: US 2021/0319113 A1, 14.10.2021. Mohammed Baz "SEHIDS: Self Evolving Host-Based Intrusion Detection System for IoT Networks", опубл. 29.08.2022 на 35 страницах [найдено 26.05.2023], размещено в Интернет по адресу URL: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9460002/pdf/sensors-22-06505.pdf. US 2017/0223037 A1, 03.08.2017. US 2014/0376427 A1, 25.12.2014. CN 111709034 A, 25.09.2020. RU 2738460 C1, 14.12.2020. Адрес для переписки: |
(72) Автор(ы):
(73) Патентообладатель(и):
|
(54) Способ генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления
(57) Реферат:
Настоящее техническое решение относится к области вычислительной техники. Технический результат заключается в повышении вариативности значений выбранных признаков для повышения вероятности генерации эффективных состязательных примеров, позволяющих уклониться от обнаружения атаки со стороны системы обнаружения вторжений. Технический результат достигается за счёт того, что при генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления полученные данные, имеющие то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, дополнительно пропускают через сетевое устройство с MTU, отличным от MTU промышленной системы управления. 2 ил.
Изобретение относится к области информационных технологий, в частности к информационной безопасности, и может быть использовано для обучения систем обнаружения вторжений (СОВ).
В рамках мероприятия «Методы обнаружения и противодействия атакам с внедрением закладок и зловредного кода в модели машинного обучения», разрабатываемого исследовательским центром доверенного искусственного интеллекта ИСП РАН, известны подходы к реализации состязательных атак в отношении моделей обнаружения вторжений. Настоящее изобретение также относится к области состязательного обучения, развивает предложенные центром доверенного искусственного интеллекта ИСП РАН подходы и описывает способ генерации примеров, реализующих состязательные атаки уклонения в отношении системы обнаружения вторжений промышленной системы управления.
Термины, используемые в тексте описания изобретения:
Система обнаружения вторжений (СОВ) – программная система, предназначенная для выявления несанкционированной и вредоносной активности в компьютерной сети или на отдельном узле.
Сетевые устройства – электронные устройства, необходимые для работы компьютерной сети, например: маршрутизатор, коммутатор, концентратор, коммутационная панель и др.
MTU (maximum transmission unit) – максимальный полезный блок данных одного пакета, который может быть передан сетевым устройством (сетью промышленной системы управления как совокупностью сетевых устройств) без фрагментации.
Сейчас большое внимание во всем мире уделяется информационной безопасности, в частности, безопасности промышленных систем управления. Для решения данных проблем ведется разработка и внедрение систем обнаружения вторжений, сигнатурных и несигнатурных. Недостатком сигнатурных СОВ является невозможность обнаружения новых, ранее неизвестных компьютерных атак. Для обнаружения новых атак оправдано использование несигнатурных СОВ, среди которых наиболее широкое распространение получают системы, основанные на применении методов машинного обучения.
Однако СОВ промышленных систем управления, основанные на машинном обучении, уязвимы в определенных аспектах. Моделью машинного обучения можно манипулировать посредством выборок, намеренно созданных злоумышленником. Атакующий, специальным образом подобрав пример входных данных, может заставить модель ошибаться: незначительное изменение примера входных данных приведёт к ошибке в ответе модели (классификатора) машинного обучения. Совокупность примеров входных данных модели, на которых модель ошибается, т.е. ошибочно классифицирует, называется состязательной выборкой. Возможность реализации состязательных атак создает потенциальную угрозу безопасности системы, основанной на машинном обучении.
Таким образом, проведение исследований в области состязательного обучения принципиально важно и актуально для обеспечения информационной безопасности. Разработка способов генерации состязательных примеров позволит смоделировать действия потенциального атакующего, которые могут привести к ошибке СОВ и тем самым позволят уклониться от обнаружения атаки, и выработать адекватные защитные механизмы.
Известен по патенту US20210067549A1 Способ обнаружения вторжения в компьютерную сеть и реагирования на него, включающий: генерацию набора обучающих состязательных данных, в который входят исходные примеры и состязательные примеры, посредством нарушения одного или нескольких исходных примеров с помощью интегрированной градиентной атаки для генерации состязательных примеров; кодирование исходной и состязательной выборок для генерации соответствующих исходных выборок и состязательных графовых представлений, основанных на агрегировании окрестностей узлов; обучение нейронной сети на основе графов для обнаружения аномальной активности в компьютерной сети с использованием состязательного набора обучающих данных и выполнение действия по обеспечению безопасности в ответ на обнаруженную аномальную активность.
Основным недостатком данного способа является обобщенное представление способа генерации состязательных примеров, основанное на применении так называемой «интегрированной градиентной атаки». Не раскрываются конкретные действия по получению состязательного примера из исходного примера; не указывается подмножество изменяемых признаков признакового пространства; не учитываются известные ограничения в области генерации признаков сессий сетевого трафика со стороны атакующего, например, невозможность прямого произвольного изменения значений признаков сессий сетевого трафика: длительности сессии, статистики длин пакетов, межпакетных задержек и др.
Наиболее близким по технической сущности и выполняемым функциям, выбранный в качестве прототипа, является Способ генерации состязательных примеров для промышленной системы управления по патенту US20210319113A1, включающий следующие шаги:
1) прослушивают генератором образцов трафик промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
2) выполняют анализ трафика промышленной системы управления, извлекают признаки, включающие IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета;
3) создают и обучают классификатор машинного обучения на основе признаков, извлеченных на шаге 2;
4) преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием классификатора, созданного на шаге 3, и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 – исходный пример атаки;
x* – сформированный состязательный пример;
g(x) – вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) – расстояние между состязательным примером и исходным примером атаки;
dmax – максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
5) тестируют состязательный пример, созданный на шаге 4, в реальной промышленной системе управления, при этом если состязательный пример успешно обходит систему обнаружения вторжений промышленной системы управления и сохраняет возможность атаки, он принимается в качестве эффективного состязательного примера, а если состязательный пример не может уклониться от системы обнаружения вторжений промышленной системы управления или сохранить возможность атаки, состязательный пример отбрасывают.
Недостатком способа-прототипа является ограниченная вариативность значений признаков выбранного авторами признакового пространства, поскольку этап прослушивания трафика промышленной системы управления выполняется при конкретных настройках сети, а не в широком диапазоне допустимых настроек сети. Следствием поиска состязательных примеров в условиях ограниченной области определения признаков является относительно невысокая вероятность нахождения таких состязательных примеров.
Техническая проблема заключается в низкой вероятности нахождения состязательных примеров по причине ограниченной вариативности значений выбранных признаков.
Техническим результатом является повышение вариативности значений выбранных признаков для повышения вероятности генерации эффективных состязательных примеров, позволяющих уклониться от обнаружения атаки со стороны СОВ.
Техническая проблема решается и технический результат реализуется за счет того, что в способе генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления используют следующую последовательность действий:
- прослушивают генератором образцов трафика через сетевое устройство с MTU промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
- далее анализируют трафик промышленной системы управления, извлекают признаки, включающие IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета;
- после чего создают и обучают классификатор машинного обучения на основе признаков, полученных при анализе трафика;
- преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием созданного классификатора и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 – исходный пример атаки;
x* – сформированный состязательный пример;
g(x) – вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) – расстояние между состязательным примером и исходным примером атаки;
dmax – максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
- затем тестируют созданный состязательный пример в реальной промышленной системе управления и по результату принимают либо не принимают в качестве эффективного состязательного примера.
Отличительной особенностью способа является то, что полученные данные, имеющие то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, дополнительно пропускают через сетевое устройство с MTU, отличным от MTU промышленной системы управления.
Прохождение сессии сетевого трафика через устройство с MTU, отличным от MTU промышленной системы управления, например, MTU было 1520 байт, а сессия сетевого трафика дополнительно пропускается через устройство с MTU 400 байт, приводит к изменению распределения длин пакетов в сессии, межпакетных задержек, длительности сессии, скорости поступления пакетов, характеристик указанных распределений и др. Таким образом достигается повышение вариативности значений признаков исходных примеров, расширяется область поиска, повышается вероятность нахождения состязательных примеров и эффективных состязательных примеров. При этом важным фактом при реализации заявляемого способа является учет известных ограничений в области генерации признаков сессий сетевого трафика со стороны атакующего, а именно невозможность прямого произвольного изменения значений отдельных признаков сессий сетевого трафика, т.к. модификация значений признаков сессии сетевого трафика атакующим выполняется дополнительным действием, реализуемым на практике – пропуском трафика через сетевое устройство с другим MTU.
Проведенный анализ уровня техники позволил установить, что аналоги, характеризующиеся совокупностями признаков, тождественными всем признакам заявленного способа, отсутствуют. Следовательно, заявленное изобретение соответствует условию патентоспособности «новизна».
Перечисленная новая совокупность существенных признаков обеспечивает расширение возможностей способа прототипа за счет того, что сессии сетевого трафика, соответствующие состязательным примерам, дополнительно пропускают через сетевое устройство с MTU, отличным от MTU промышленной системы управления.
Результаты поиска известных решений в данной и смежной областях техники с целью выявления признаков, совпадающих с отличительными от прототипов признаками заявленного изобретения, показали, что они не следуют явным образом из уровня техники. Из определенного заявителем уровня техники не выявлена известность влияния предусматриваемых существенными признаками заявленного изобретения на достижение указанного технического результата. Следовательно, заявленное изобретение соответствует условию патентоспособности «изобретательский уровень».
«Промышленная применимость» способа обусловлена технической возможностью реализации данного способа.
Заявленный способ поясняется чертежами:
фиг. 1 – блок-схема способа генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления.
фиг. 2 – схема генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления.
В блоке 1 (фиг. 1) прослушивают генератором образцов (фиг. 2, блок 2) трафик промышленной системы управления (фиг. 2, блок 3) для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления (фиг. 2, блок 4).
В блоке 2 (фиг. 1) полученные в блоке 1 (фиг. 1) данные дополнительно пропускают через сетевое устройство (фиг. 2, блок 1) с MTU, отличным от MTU промышленной системы управления (фиг. 2, блок 3), в результате чего размеры пакетов этих данных становятся отличными от размеров пакетов в промышленной системе управления.
В блоке 3 (фиг. 1) размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки (фиг. 2, блок 5).
В блоке 4 (фиг. 1) выполняют анализ трафика промышленной системы управления, извлекают признаки (фиг. 2, блок 6), включающие IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета.
В блоке 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, блок 8), созданный в блоке 7 (фиг. 1), в реальной промышленной системе управления (фиг. 2, блок 3).
В блоке 9 (фиг. 1) проверяют условия, обходит ли состязательный пример систему обнаружения вторжений промышленной системы управления и сохраняет ли он возможность атаки. Если условия выполняются, то его принимают (фиг. 1, блок 10) в качестве эффективного состязательного примера (фиг. 2, блок 9), а если условия не выполняются, состязательный пример отбрасывают (фиг. 1, блок 11).
Заявленный способ подтвержден примером программы на языке программирования python с достигнутым заявленным результатом. В программе осуществляется построение классификатора и поиск состязательных примеров для данных, полученных на основе трафика промышленной системы управления с MTU, равным 1520 – эти данные соответствуют прототипу, и данных, полученных из трафика промышленной системы управления и дополнительно пропущенных через сетевое устройство с MTU, равным 400 – эти данные соответствуют дополнительному действию в заявленном способе. Затем производится сравнение количества обнаруженных состязательных примеров. Ожидается, что дополнительное действие в заявленном способе позволит увеличить количество обнаруженных эффективных состязательных примеров, и, следовательно, повысить вероятность генерации эффективных состязательных примеров, позволяющих уклониться от обнаружения атаки со стороны СОВ. Указанный результат соответствует заявленному техническому результату.
Ниже представлено описанием программы и выполняемых действий.
Загрузка необходимых библиотек:
import math
import pickle
from typing import List
import numpy as np
import pandas as pd
from sklearn import model_selection
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, , precision_score, recall_score
from sklearn.model_selection import train_test_split
Далее прослушивают трафик через сетевое устройство с MTU промышленной системы управления (1520 байт) для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные. В примере размеченные полученные данные записывают в файл 'Results_1520.csv' и затем читают в программе. Метки, соответствующие атакам (признак 'GlobalLabel'), размечены как "Attack", метки, означающие отсутствие атаки – "Benign". На основе этих данных создается датафрейм df_1520:
df_1520 = pd.read_csv('Results_1520.csv')
Перевод номинальных значений признака 'GlobalLabel' в датафрейме df_1520 в цифровые ("Attack" переводится в "1", "Benign" – в "0"):
df_1520['GlobalLabel']
= df_1520['GlobalLabel'].apply(lambda x: 0 if x == 'Benign' else 1)
Создание признака 'Packet Time', равного 1 / 'Flow Packets/s' и умножение его на 100000 для получения значения, превышающего 1:
df_1520['Packet Time'] = df_1520['Flow Packets/s'].apply(lambda x: 100000/x)
Удаление точек в значениях признаков 'Source IP' и 'Destination IP':
df_1520['Source IP'] = df_1520['Source IP'].apply(lambda x: x.replace('.',''))
df_1520['Destination IP'] = df_1520['Destination IP'].apply(lambda x: x.replace('.',''))
Выбор признаков:
• IP-адрес источника - 'Source IP';
• номер порта источника - 'Source Port';
• IP-адрес назначения - 'Destination IP';
• номер порта назначения -'Destination Port';
• промежуток времени между пакетами -'Flow IAT Mean';
• время передачи пакета - 'Packet Time':
webattack_features = ['Source IP',
'Source Port',
'Destination IP',
'Destination Port',
'Flow IAT Mean',
'Packet Time']
Просмотр выбранных признаков:
df_1520[webattack_features]
Source IP | Source Port | Destination IP | Destination Port | Flow IAT Mean | Packet Time | |
0 | 8314919850 | 60514 | 1721803 | 443 | 1.634757e+05 | 16155.244716 |
1 | 8314919850 | 60516 | 1721803 | 443 | 5.279682e+05 | 50841.377774 |
2 | 8314919850 | 60628 | 1721803 | 443 | 7.404261e+05 | 71194.815457 |
3 | 8314919850 | 60630 | 1721803 | 443 | 1.372046e+06 | 131239.151936 |
4 | 8314919850 | 60786 | 1721803 | 443 | 1.007281e+06 | 95132.083668 |
... | ... | ... | ... | ... | ... | ... |
17941 | 8314919850 | 54480 | 1721803 | 443 | 3.237820e+04 | 2698.183333 |
17942 | 8314919850 | 54650 | 1721803 | 443 | 8.489444e+02 | 80.426316 |
17943 | 8314919850 | 54652 | 1721803 | 443 | 5.656823e+05 | 53590.957786 |
17944 | 8314919850 | 54734 | 1721803 | 443 | 5.591972e+05 | 52976.573547 |
17945 | 8314919850 | 54816 | 1721803 | 443 | 1.038160e+04 | 865.133333 |
17946 rows × 6 columns
Формирование целевого вектора обучающей выборки:
y = df_1520['GlobalLabel'].values
Формирование матрицы объектов-признаков обучающей выборки:
X = df_1520[webattack_features].values
Просмотр размерности матрицы объектов-признаков и целевого вектора:
print(X.shape, y.shape)
(17946, 6) (17946,)
Разделение обучающей выборки на обучающую (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)
Построение классификатора типа "случайный лес":
RFmodel = RandomForestClassifier(max_depth=5, n_estimators=5, max_features=3)
Обучение классификатора на обучающей выборке:
RFmodel.fit(X_train, y_train)
Формирование вектора предсказаний модели на тестовой выборке:
y_pred = RFmodel.predict(X_test)
Получение матрицы ошибок модели RFmodel на исходной тестовой выборке:
matrix = confusion_matrix(y_test, y_pred)
print(matrix)
array([[1731, 61],
[ 178, 2517]])
Функция, осуществляющая вычисление и вывод метрик качества:
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)
Вывод метрик качества модели RFmodel на исходной тестовой выборке:
print_metrics(y_test, y_pred)
Accuracy = 0.9467350122576331
Precision = 0.9763382467028704
Recall = 0.9339517625231911
F1 = 0.954674758202162
Поиск состязательных примеров согласно способу-прототипу.
Формирование начального состояния состязательной выборки:
X_test_evasion_attack = X_test.copy()
Задача обучения состязательной системы обнаружения вторжений промышленной системы управления формулируется в виде задачи оптимизации согласно способу-прототипу. Из тестовой выборки берутся все сессии с меткой "атака", на которых модель не ошибается. Оптимизационная задача в настоящем примере для простоты решается методом перебора: для каждой сессии перебором изменяется значение признака "Packet Time" (от исходного до исходного+500). Если получилось изменить ответ классификатора, такой пример считается состязательным. Все состязательные примеры выводятся. Изменение значения признака "Packet Time" на практике может осуществляться внесением задержки на физическом уровне, поэтому такое изменение сохраняет действие атаки и обнаруженные представленным образом состязательные примеры являются эффективными состязательными примерами.
for i in range(0, X_test.shape[0]):
if (y_test[i] == 1) and (RFmodel.predict(X_test[[i]]) == 1):
X_test_attack = X_test[[i]]
j = math.ceil(X_test[i, 5])
for Packet_Time in range(j, j + 500):
X_test_attack[0, 5] = Packet_Time
pred = RFmodel.predict(X_test_attack)
if pred[0] < 1:
print(i, Packet_Time)
X_test_evasion_attack[i, 5] = Packet_Time
break
61 53083
261 22362
400 22362
598 22362
745 53083
831 22362
893 22362
948 22362
987 22362
1003 22362
1128 22362
1257 22362
1475 22362
1592 53083
1681 22362
1827 53343
1839 22362
1851 22362
1887 22362
2202 2800
2378 22362
2421 22362
2578 22362
2725 1720
2851 53083
2978 22362
3018 22362
3033 53343
3041 22362
3135 53083
3247 22362
3488 53083
3551 53083
3555 22362
3701 2800
3852 22362
3918 53083
4055 22362
4100 22362
4117 22362
4118 53083
4237 22362
4265 22362
4291 22362
4295 53343
4377 22362
4444 22362
4452 53343
4463 53083
Общее количество обнаруженных эффективных состязательных примеров (согласно способу-прототипу) – 49.
Сравнение предсказаний модели для одного из векторов исходной тестовой выборки и состязательного примера:
print("Пример строки исходной тестовой выборки:")
print(X_test[[61]])
pred = RFmodel.predict(X_test[[61]])
print("Предсказание модели для исходной тестовой выборки: ", pred[0])
print("Состязательный пример:")
print(X_test_evasion_attack[[61]])
y_pred_evasion_attack = RFmodel.predict(X_test_evasion_attack[[61]])
print("Предсказание модели для состязательного примера: ", y_pred_evasion_attack[0])
Пример строки исходной тестовой выборки:
[[' 8314919850' 39372 ' 1721803' 443 557563.11111111 52821.76845083388]]
Предсказание модели для исходной тестовой выборки: 1
Состязательный пример:
[[' 8314919850' 39372 ' 1721803' 443 557563.11111111 53083]]
Предсказание модели для состязательного примера: 0
Состязательный пример "обманывает" модель: при сохранении свойства атаки классификатор изменил ответ с 1 ("атака") на 0 ("не атака").
Формирование вектора предсказаний модели на тестовой выборке с добавленными состязательными примерами:
y_pred_evasion_attack = RFmodel.predict(X_test_evasion_attack)
Получение матрицы ошибок модели RFmodel на тестовой выборке с добавленными состязательными примерами:
matrix = confusion_matrix(y_test, y_pred_evasion_attack)
matrix
array([[1731, 61],
[ 227, 2468]])
Вывод метрик качества модели RFmodel на тестовой выборке с добавленными состязательными примерами:
print_metrics(y_test, y_pred_evasion_attack)
Accuracy = 0.9358145754401604
Precision = 0.9758797943851325
Recall = 0.9157699443413729
F1 = 0.9448698315467076
Качество модели снизилось, поскольку состязательные примеры, добавленные в тестовую выборку, "обманывают" модель.
Далее выполняются шаги, соответствующие дополнительному действию в заявленном способе.
Полученные из трафика промышленной системы управления данные, имеющие то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, дополнительно пропускают через сетевое устройство с MTU, равным 400 байтам, и отличным от MTU промышленной системы управления, равным 1520 байтам. В примере размеченные полученные данные записывают в файл 'Results_400.csv' и затем читают в программе. Метки, соответствующие атакам (признак 'GlobalLabel'), размечены как "Attack", отсутствие атаки – "Benign". На основе этих данных создается датафрейм df_400:
df_400 = pd.read_csv('Results_400.csv')
Перевод номинальных значений признака 'GlobalLabel' в датафрейме df_400 в цифровые ("Attack" переводится в "1", "Benign"- в "0"):
df_400['GlobalLabel'] = df_400['GlobalLabel'].apply(lambda x: 0 if x == 'Benign' else 1)
Создание признака 'Packet Time', равного 1 / 'Flow Packets/s' и умножение его на 100000 для получения значения, превышающего 1:
df_400['Packet Time'] = df_400['Flow Packets/s'].apply(lambda x: 100000/x)
Удаление точек в значениях признаков 'Source IP' и 'Destination IP':
df_400['Source IP'] = df_400['Source IP'].apply(lambda x: x.replace('.',''))
df_400['Destination IP'] = df_400['Destination IP'].apply(lambda x: x.replace('.',''))
Просмотр признаков webattack_features датафрейма df_400:
df_400[webattack_features]
Source IP | Source Port | Destination IP | Destination Port | Flow IAT Mean | Packet Time | |
0 | 8314919850 | 60514 | 1721803 | 443 | 1.634757e+05 | 16155.244716 |
1 | 8314919850 | 60516 | 1721803 | 443 | 5.279682e+05 | 50841.377774 |
2 | 8314919850 | 60628 | 1721803 | 443 | 7.404261e+05 | 71194.815457 |
3 | 8314919850 | 60630 | 1721803 | 443 | 1.372046e+06 | 131239.151936 |
4 | 8314919850 | 60786 | 1721803 | 443 | 1.007281e+06 | 95132.083668 |
... | ... | ... | ... | ... | ... | ... |
9725 | 8314919850 | 54480 | 1721803 | 443 | 3.237820e+04 | 2698.183333 |
9726 | 8314919850 | 54650 | 1721803 | 443 | 8.489444e+02 | 80.426316 |
9727 | 8314919850 | 54652 | 1721803 | 443 | 5.656823e+05 | 53590.957786 |
9728 | 8314919850 | 54734 | 1721803 | 443 | 5.591972e+05 | 52976.573547 |
9729 | 8314919850 | 54816 | 1721803 | 443 | 1.038160e+04 | 865.133333 |
9730 rows × 6 columns
Формирование целевого вектора обучающей выборки:
y_400 = df_400['GlobalLabel'].values
Формирование матрицы объектов-признаков обучающей выборки:
X_400 = df_400[webattack_features].values
Просмотр размерности матрицы объектов-признаков и целевого вектора:
print(X_400.shape, y_400.shape)
(9730, 6) (9730,)
Разделение обучающей выборки на обучающую (X_400_train, y_400_train) и тестовую (X_400_test, y_400_test):
X_400_train, X_400_test, y_400_train, y_400_test = train_test_split(X_400, y_400, test_size=0.25, shuffle=True, random_state=42)
Построение классификатора типа "случайный лес":
RFmodel_400 = RandomForestClassifier(max_depth=5, n_estimators=5, max_features=3)
Обучение классификатора на обучающей выборке:
RFmodel_400.fit(X_400_train, y_400_train)
Формирование вектора предсказаний модели на тестовой выборке:
y_400_pred = RFmodel_400.predict(X_400_test)
Получение матрицы ошибок модели RFmodel_400 на исходной тестовой выборке:
matrix = confusion_matrix(y_400_test, y_400_pred)
print(matrix)
array([[1167, 64],
[ 28, 1174]])
Вывод метрик качества модели RFmodel_400 на исходной тестовой выборке:
print_metrics(y_400_test, y_400_pred)
Accuracy = 0.9621866009042335
Precision = 0.9483037156704361
Recall = 0.9767054908485857
F1 = 0.962295081967213
Поиск состязательных примеров.
Формирование начального состояния состязательной выборки:
X_400_test_evasion_attack = X_400_test.copy()
Из тестовой выборки берутся все сессии с меткой "атака", на которых модель не ошибается. Для каждой сессии перебором изменяется значение признака "Packet Time" (от исходного до исходного+500). Если получилось изменить ответ классификатора, такой пример считается состязательным. Все состязательные примеры выводятся.
for i in range(0, X_400_test.shape[0]):
if (y_400_test[i] == 1) and (RFmodel_400.predict(X_400_test[[i]]) == 1):
X_400_test_attack = X_400_test[[i]]
j = math.ceil(X_400_test[i, 5])
for Packet_Time in range(j, j + 500):
X_400_test_attack[0, 5] = Packet_Time
pred = RFmodel_400.predict(X_400_test_attack)
if pred[0] < 1:
print(i, Packet_Time)
X_400_test_evasion_attack[i, 5] = Packet_Time
break
40 26658
117 26658
186 26658
217 26658
231 26658
280 26658
321 26658
353 26658
355 2981
475 26658
500 26658
525 53758
552 26658
571 2252
581 26658
637 26658
652 53758
689 26658
720 2252
736 26658
934 26658
935 2981
941 26658
1032 26658
1184 26658
1226 26658
1229 26658
1243 2252
1287 26658
1291 26658
1605 26658
1644 26658
1655 26658
1704 26658
1778 2981
1799 26658
1856 26658
1868 26658
1889 26658
1916 26658
1953 26658
1975 26658
1984 26658
1991 26658
2014 26658
2017 3554
2039 26658
2091 26658
2187 26658
2197 26658
2265 26658
2278 26658
2320 26658
2327 26658
2331 26658
2353 26658
2365 26658
2371 26658
2410 26658
2425 26658
Общее количество обнаруженных эффективных состязательных примеров после выполнения дополнительного действия заявленного способа – 60.
Сравнение предсказаний модели для одного из векторов исходной тестовой выборки и состязательного примера:
print("Пример строки исходной тестовой выборки:")
print(X_400_test[[40]])
pred_400 = RFmodel_400.predict(X_400_test[[40]])
print("Предсказание модели для исходной тестовой выборки: ", pred_400[0])
print("Состязательный пример:")
print(X_400_test_evasion_attack[[40]])
y_400_pred_evasion_attack = RFmodel_400.predict(X_400_test_evasion_attack[[40]])
print("Предсказание модели для состязательного примера: ", y_400_pred_evasion_attack[0])
Пример строки исходной тестовой выборки:
[[' 8314919850' 42692 ' 1721803' 443 280166.66666667 26542.105274403366]]
Предсказание модели для исходной тестовой выборки: 1
Состязательный пример:
[[' 8314919850' 42692 ' 1721803' 443 280166.66666667 26658]]
Предсказание модели для состязательного примера: 0
Состязательный пример "обманывает" модель: при сохранении свойства атаки классификатор изменил ответ с 1 ("атака") на 0 ("не атака").
Формирование вектора предсказаний модели на тестовой выборке с добавленными состязательными примерами:
y_400_pred_evasion_attack = RFmodel_400.predict(X_400_test_evasion_attack)
Получение матрицы ошибок модели RFmodel_400 на тестовой выборке с добавленными состязательными примерами:
matrix = confusion_matrix(y_400_test, y_400_pred_evasion_attack)
print(matrix)
array([[1167, 64],
[ 88, 1114]])
Вывод метрик качества модели RFmodel_400 на тестовой выборке с добавленными состязательными примерами:
print_metrics(y_400_test, y_400_pred_evasion_attack)
Accuracy = 0.9375256884504727
Precision = 0.9456706281833617
Recall = 0.9267886855241264
F1 = 0.9361344537815126
Качество модели снизилось, поскольку состязательные примеры, добавленные в тестовую выборку, "обманывают" модель.
Выводы.
При генерации состязательных примеров согласно способу-прототипу обнаружено 49 эффективных состязательных примеров. После выполнения дополнительного действия заявленного способа, а именно дополнительного пропуска трафика через сетевое устройство с MTU, отличным от MTU промышленной системы управления, удалось обнаружить ещё 60 эффективных состязательных примеров. Общее количество обнаруженных эффективных состязательных примеров в заявленном способе составило 109 примеров.
Дополнительное действие в заявленном способе – пропуск трафика через сетевое устройство с MTU, отличным от MTU промышленной системы управления – приводит к большей вариативности значений признаков исходных примеров, расширяет область поиска, повышает вероятность нахождения состязательных примеров и эффективных состязательных примеров.
Формула изобретения
Способ генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления, включающий следующие последовательности действий:
прослушивают генератором образцов трафик через сетевое устройство с максимальным полезным блоком данных одного пакета (MTU), который передают протоколом без фрагментации промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
выполняют анализ трафика промышленной системы управления, извлекают признаки, включающие IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета;
создают и обучают классификатор машинного обучения на основе признаков, полученных при анализе трафика;
преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием созданного классификатора и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 – исходный пример атаки;
x* – сформированный состязательный пример;
g(x) – вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) – расстояние между состязательным примером и исходным примером атаки;
dmax – максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
тестируют созданный состязательный пример в реальной промышленной системе управления и по результату принимают либо не принимают в качестве эффективного состязательного примера;
отличающийся тем, что полученные данные, имеющие то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, дополнительно пропускают через сетевое устройство с MTU, отличным от MTU промышленной системы управления.