Изобретение относится к области информационных технологий, в частности к информационной безопасности, и может быть использовано для обучения систем обнаружения вторжений (СОВ).
В рамках мероприятия «Методы обнаружения и противодействия атакам с внедрением закладок и зловредного кода в модели машинного обучения», разрабатываемого исследовательским центром доверенного искусственного интеллекта ИСП РАН, известны подходы к реализации состязательных атак в отношении моделей обнаружения вторжений. Настоящее изобретение также относится к области состязательного обучения, развивает предложенные центром доверенного искусственного интеллекта ИСП РАН подходы и описывает способ генерации примеров, реализующих состязательные атаки уклонения в отношении сетевой системы обнаружения вторжений с учетом доменных ограничений.
Термины, используемые в тексте описания изобретения:
Система обнаружения вторжений (СОВ) - программная система, предназначенная для выявления несанкционированной и вредоносной активности в компьютерной сети или на отдельном узле.
Задача анализа сетевого трафика компьютерных сетей с целью обнаружения признаков вторжений является одной из наиболее актуальных задач в области информационной безопасности. Для решения указанной задачи среди систем обеспечения информационной безопасности выделяют отдельный класс - системы обнаружения вторжений (СОВ). Такие системы могут быть сигнатурными (основанными на заранее заданных правилах обнаружения) и несигнатурными. Недостатком сигнатурных СОВ является невозможность обнаружения новых, ранее неизвестных компьютерных атак. Для обнаружения новых атак оправдано использование несигнатурных СОВ, среди которых наиболее широкое распространение получают системы, основанные на применении методов машинного обучения.
Однако СОВ, основанные на машинном обучении, уязвимы в определенных аспектах. Известны состязательные атаки, целью которых является противодействие моделям машинного обучения. Одной из наиболее разработанных состязательных атак является атака уклонения, при реализации которой злоумышленник так подбирает примеры входных данных, что модель начинает ошибаться при классификации таких состязательных примеров. Совокупность примеров входных данных модели, на которых модель ошибается, т.е. ошибочно классифицирует, называется состязательной выборкой. Возможность реализации состязательных атак создает потенциальную угрозу безопасности системы, основанной на машинном обучении.
Таким образом, проведение исследований в области состязательного обучения принципиально важно и актуально для обеспечения информационной безопасности. Разработка новых и развитие существующих способов генерации состязательных примеров позволит смоделировать действия потенциального атакующего, которые могут привести к ошибке СОВ и тем самым позволят уклониться от обнаружения атаки, и выработать адекватные защитные механизмы.
Известен по патенту US 20210319113 A1 Способ генерации состязательных примеров для промышленной системы управления, включающий: прослушивание генератором образцов трафика промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления; разметку полученных данных и принятие размеченных аномальных данных в качестве исходных примеров атаки; формирование признакового пространства из признаков: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета, а также из дополнительных признаков в зависимости от используемых сетевых протоколов в промышленной системе управления; анализ трафика промышленной системы управления; извлечение признаков в соответствии с ранее выбранным признаковым пространством; создание и обучение классификатора машинного обучения на основе извлеченных признаков; преобразование задачи обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием обученного классификатора; решение задачи оптимизации для получения состязательных примеров; тестирование состязательных примеров в реальной промышленной системе управления, при этом если состязательный пример успешно обходит систему обнаружения вторжений промышленной системы управления и сохраняет возможность атаки, он принимается в качестве эффективного состязательного примера, а если состязательный пример не может уклониться от системы обнаружения вторжений промышленной системы управления или сохранить возможность атаки, состязательный пример отбрасывают.
Основным недостатком данного способа является низкая скорость поиска эффективных состязательных примеров (сохраняющих возможность атаки), поскольку каждый полученный состязательный пример тестируют в реальной промышленной системе управления, является ли он эффективным состязательным примером. При этом в указанном способе не учитывается ограничение в области генерации признаков сессий сетевого трафика со стороны атакующего (доменное ограничение), а именно невозможность прямого произвольного и независимого изменения атакующим некоторых значений признаков: например, длительности сессии, статистики длин пакетов, межпакетных задержек и др., поскольку атакующий имеет доступ только к исходным отправляемым пакетам сетевого трафика, а расчёт вектора признаков соответствующей сетевой сессии осуществляется на стороне системы обнаружения вторжений.
Наиболее близким по технической сущности и выполняемым функциям, выбранный в качестве прототипа, является Способ генерации состязательных примеров для сетевой системы обнаружения вторжений по патенту RU 2823895, включающий следующие шаги:
1) прослушивают генератором образцов трафик промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
2) формируют признаковое пространство из признаков: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета, а также из дополнительных признаков в зависимости от используемых сетевых протоколов в промышленной системе управления;
3) анализируют трафик промышленной системы управления, извлекают признаки в соответствии со сформированным признаковым пространством;
4) создают и обучают классификатор машинного обучения на основе признаков, полученных при анализе трафика;
5) преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием созданного классификатора и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 - исходный пример атаки;
x* - сформированный состязательный пример;
g(x) - вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) - расстояние между состязательным примером и исходным примером атаки;
dmax - максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
6) оценивают для каждого найденного состязательного примера допустимость возмущений, примененных к исходному примеру, по заданным допустимым значениям в выбранном признаковом пространстве, и если одно или более возмущений недопустимы, то не принимают найденный состязательный пример в качестве эффективного состязательного примера;
7) составляют матрицу зависимости признаков в сформированном признаковом пространстве, помечая для каждой пары признаков, являются ли они зависимыми;
8) для каждого найденного состязательного примера берут каждый признак, значение которого в исходном примере изменяется для получения состязательного примера, и для этого признака по матрице зависимости признаков берут все зависимые признаки, после чего проверяют, изменены ли в исходном примере эти зависимые признаки, и если один или более зависимых признаков не изменены, то не принимают найденный состязательный пример в качестве эффективного состязательного примера;
9) тестируют созданный состязательный пример в реальной промышленной системе управления и по результату принимают либо не принимают в качестве эффективного состязательного примера.
Недостатком способа-прототипа является реализация проверки зависимости признаков: для каждого признака, значение которого в исходном примере изменяется для получения состязательного примера, по матрице зависимости признаков берут все зависимые признаки, после чего проверяют, изменены ли в исходном примере эти зависимые признаки, и если один или более зависимых признаков не изменены, то не принимают найденный состязательный пример в качестве эффективного состязательного примера. Практика анализа сетевого трафика показывает, что увеличение значения одного признака может повлечь как увеличение, так и уменьшение значения зависимого признака. Например, увеличение скорости передачи (признак 'Flow Bytes/s') приводит к уменьшению длительности сессии (признак 'Flow Duration'). В способе-прототипе проверяется только наличие зависимости, и не учитывается направление зависимости, т.е. в способе-прототипе в матрице зависимости может быть или «0» - нет зависимости, или «1» - есть зависимость.
Здесь и далее под направлением зависимости двух признаков будет пониматься пропорциональность этих признаков, т.е. как изменение величины одного признака влияет на величину другого признака.
Таким образом, часть состязательных примеров, прошедших проверку изменения всех зависимых признаков без учета направления зависимости, могут оказаться неэффективными состязательными примерами. Например, состязательный пример, в котором состязательной атакой будет увеличено значение признака 'Flow Bytes/s', а также увеличено значение признака 'Flow Duration', в большинстве реальных случаев не соответствует практике и может быть заранее отброшен как неэффективный. Однако в способе-прототипе все такие примеры будут отправлены на этап тестирования в реальной промышленной системе управления, что снижает скорость поиска эффективных состязательных примеров.
Техническая проблема заключается в низкой скорости поиска эффективных состязательных примеров из-за необходимости тестирования всех состязательных примеров, для которых выполнено условие изменения всех зависимых признаков без учёта направления зависимости.
Техническим результатом является повышение скорости поиска эффективных состязательных примеров.
Техническая проблема решается и технический результат реализуется за счет того, что в способе генерации состязательных примеров для сетевой системы обнаружения вторжений используют следующую последовательность действий:
- прослушивают генератором образцов трафик промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
- далее формируют признаковое пространство из признаков: 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, блок 13).
В блоке 12 (фиг. 1) для каждого найденного состязательного примера берут каждый признак, значение которого в исходном примере изменяется для получения состязательного примера, и для этого признака по матрице зависимости признаков берут все зависимые признаки, после чего проверяют, изменены ли в исходном примере эти зависимые признаки, а по матрице направлений зависимости признаков проверяют, в правильном ли направлении изменены эти зависимые признаки (фиг. 2, блок 11).
В блоке 13 (фиг. 1) проверяют: если один или более зависимых признаков не изменены или изменены не в правильном направлении, то не принимают найденный состязательный пример в качестве эффективного состязательного примера (фиг. 2, блок 11).
В блоке 14 (фиг. 1) тестируют состязательный пример (фиг. 2, блок 14), созданный в блоке 7 (фиг. 1) и предварительно проверенный в блоках 9 и 12 (фиг. 1, эти проверки соответствуют блокам 9 и 13 фиг. 2), в реальной промышленной системе управления (фиг. 2, блок 3).
В блоке 15 (фиг. 1) проверяют условия, обходит ли состязательный пример систему обнаружения вторжений промышленной системы управления и сохраняет ли он возможность атаки. Если условия выполняются, то его принимают (фиг. 1, блок 16) в качестве эффективного состязательного примера (фиг. 2, блок 15), а если условия не выполняются, состязательный пример отбрасывают (фиг. 1, блок 17).
Заявленный способ подтвержден примером программы на языке программирования 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(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)
Обучение классификатора на обучающей выборке:
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.972482113373693
Precision = 0.9530685920577617
Recall = 0.9565217391304348
F1 = 0.9547920433996383
Задача обучения состязательной системы обнаружения вторжений промышленной системы управления формулируется в виде задачи оптимизации согласно способу-прототипу. В примере эта задача решается с помощью реализации атаки 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» («не атака»).
count = 0
for i in range(0, X_test.shape[0]):
if (model.predict(X_test[[i]]) != model.predict(X_test_adv[[i]])):
if (count == 3):
break
print('Пример строки исходной тестовой выборки:')
print(X_test[[i]])
pred = model.predict(X_test[[i]])
print('Предсказание модели для исходной тестовой выборки: ', pred[0])
print('Состязательный пример:')
print(X_test_adv[[i]])
y_pred_adv = model.predict(X_test_adv[[i]])
print('Предсказание модели для состязательного примера: ', y_pred_adv[0])
count += 1
Пример строки исходной тестовой выборки:
[[9.41250000e+01 7.67929392e+01 3.83000000e+02 1.06100000e+03
9.57500000e+01 3.83000000e+02 1.40079843e+06 2.76883782e+06
3.83000000e+02 1.36000000e+02]]
Предсказание модели для исходной тестовой выборки: 1
Состязательный пример:
[[9.4079437e+01 7.6804680e+01 3.8295074e+02 1.0610132e+03 9.5898224e+01
3.8300073e+02 1.4007985e+06 2.7688375e+06 3.8297214e+02 1.3371452e+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.]]
Далее выполняют дополнительное действие согласно заявленному способу - составляют матрицу направлений зависимости признаков в сформированном признаковом пространстве, помечая для каждой пары зависимых признаков направление зависимости. Если зависимость прямая (при увеличении значения одного признака должно увеличиваться и значение другого признака, а при уменьшении - уменьшаться), то в матрице направлений зависимости признаков указывают «1». Если зависимость обратная - указывают «-1». Если направление не известно, указывают «0».
# Матрица направлений зависимости признаков
n = len(webattack_features)
direction_matrix = np.zeros((n, n))
np.fill_diagonal(direction_matrix, 1)
# Заполнение матрицы направлений зависимости экспертами:
# 1. При увеличении Flow Bytes/s значение признака Flow IAT Mean уменьшается.
# Прямая зависимость = 1, обратная зависимость = -1
direction_matrix[1][6] = direction_matrix[6][1] = -1
print(direction_matrix)
[[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 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
discarded_3 = 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('Состязательный пример отброшен в тесте №1 допустимости изменений, не является эффективным!')
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] != 0):
# Если k-й признак изменен, то должны быть изменены и все зависимые признаки из строки dependency_matrix[k]
# Кроме того, изменение должно быть в правильном направлении
all_changed = True
all_changed_in_right_direction = True
for x in range(0, n):
if dependency_matrix[k][x] == 1 and changed_features[x] == 0:
all_changed = False
break
if not all_changed:
discarded_2 += 1
print('Состязательный пример отброшен в тесте №2 изменения всех зависимых признаков, не является эффективным!')
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
for x in range(0, n):
k_sign = int(np.sign(X_test[[i]][0][k] - X_test_adv[[i]][0][k]))
x_sign = int(np.sign(X_test[[i]][0][x] - X_test_adv[[i]][0][x]))
if direction_matrix[k][x] != 0 and direction_matrix[k][x] != k_sign * x_sign:
all_changed_in_right_direction = False
break
if all_changed and not all_changed_in_right_direction:
discarded_3 += 1
print('Состязательный пример отброшен в тесте №3 изменения всех зависимых признаков в правильном направлении, не является эффективным!')
print(f'Изменены признаки: sign_of_delta({webattack_features[k]}) = {k_sign}, sign_of_delta({webattack_features[x]}) = {x_sign}, неверное направление изменения {k_sign * x_sign}, верное = {direction_matrix[k][x]}.')
print(f'Исходный пример: {X_test[[i]]}')
print(f'Состязательный пример: {X_test_adv[[i]]}')
print(f'Изменённые признаки в состязательном примере: {changed_features}')
print(f'Индексы зависимых признаков: {dependency_matrix[k]}')
print(f'Индексы направлений зависимости признаков: {direction_matrix[k]}\n')
break
print(f'Всего состязательных примеров: {count}.')
print(f'Прошли первый тест: {count - discarded_1}, отброшено: {discarded_1}.')
print(f'Прошли второй тест: {count - discarded_1 - discarded_2}, отброшено: {discarded_2}.')
print(f'Прошли третий тест: {count - discarded_1 - discarded_2 - discarded_3}, отброшено: {discarded_3}.')
print(f'Итого. Сколько примеров прошли все тесты: {count - discarded_1 - discarded_2 - discarded_3} из {count}.')
Первая проверка соответствует проверке допустимости возмущений, примененных к исходному примеру для получения состязательного примера. Для этого для каждого признака в выбранном признаковом пространстве задают область допустимых значений (например, для признака «средняя длина пакета» задают область допустимых значений от 0 до 65535) и проверяют, все ли значения признаков найденного состязательного примера попадают в соответствующие области допустимых значений. Если значение какого-то признака состязательного примера не попадает в область допустимых значений (например, получен состязательный пример со значением признака «средняя длина пакета», равным -1 или 99999), то состязательный пример не принимают в качестве эффективного состязательного примера.
Отброшенный пример после первой проверки:
Состязательный пример отброшен в тесте №1 допустимости изменений, не является эффективным!
Ошибки: ['Недопустимое изменение признака Fwd Header Length! Значение: 32.00895690917969']
Строка 0 исходной тестовой выборки: [[ 0. 0. 0. 0. 0. 0. 50. 0. 0. 32.]]
Строка 0 с состязательным прмером: [[1.3839682e-03 1.0105978e-02 0.0000000e+00 5.7033986e-01 0.0000000e+00
2.8175680e-04 5.0001137e+01 3.0839513e-04 3.2860313e-03 3.2008957e+01]]
Вторая проверка соответствует проверке выполнения условий независимости признаков, значения которых изменяются в исходном примере для получения состязательного примера. Берут каждый следующий признак, значение которого в исходном примере изменяется для получения состязательного примера; в матрице зависимости признаков для этого признака берут все зависимые признаки; проверяют, изменены ли в исходном примере эти зависимые признаки.
Если не все зависимые признаки изменены, значит, такой состязательный пример невозможно реализовать на практике, нет смысла проверять такой пример в реальной промышленной системе управления, он точно не будет являться эффективным состязательным примером.
Отброшенный пример после второй проверки:
Состязательный пример отброшен в тесте №2 изменения всех зависимых признаков, не является эффективным!
Изменён признак Flow Bytes/s, вместе с ним должен быть изменён признак Average Packet Size, однако в состязательном примере этот признак не изменён
Исходный пример: [[ 0. 0. 0. 0. 0. 0. 46. 0. 0. 32.]]
Состязательный пример: [[3.6679153e-04 5.3491507e-02 4.4871580e-05 5.9712323e-04 0.0000000e+00
0.0000000e+00 4.5999592e+01 1.0921564e-03 1.8318021e-04 3.2000244e+01]]
Изменённые признаки в состязательном примере: [0, 1, 0, 0, 0, 0, 0, 1, 0, 0]
Индексы зависимых признаков: [1. 1. 0. 0. 0. 0. 1. 0. 0. 0.]
Третья проверка соответствует дополнительному действию в заявленном способе - проверке изменения зависимых признаков в правильном направлении. Берут каждую пару признаков, значение которых в исходном примере изменяется для получения состязательного примера; в матрице направлений зависимости признаков для этой пары признаков берут правильное направление изменения («1» - прямая зависимость, «-1» - обратная зависимость, «0» - неизвестная зависимость) и проверяют, в таком ли направлении изменились значения признаков.
Если значения признаков изменились не в правильном направлении, значит, такой состязательный пример невозможно реализовать на практике, нет смысла проверять такой пример в реальной промышленной системе управления, он точно не будет являться эффективным состязательным примером.
Такая проверка тоже выполняется быстрее, чем тестирование в реальной промышленной системе управления.
Отброшенный пример после третьей проверки:
Состязательный пример отброшен в тесте №3 изменения всех зависимых признаков в правильном направлении, не является эффективным!
Изменены признаки: sign_of_delta(Flow Bytes/s) = -1, sign_of_delta(Flow IAT Mean) = -1, неверное направление изменения 1, верное = -1.0.
Исходный пример: [[ 0. 0. 0. 0. 0. 0. 61. 0. 0. 32.]]
Состязательный пример: [[1.2649945e-03 5.3364515e-02 6.4950560e-05 1.4739779e-03 9.5450727e-04
0.0000000e+00 6.1001163e+01 1.1493649e-03 4.2777654e-04 3.2000790e+01]]
Изменённые признаки в состязательном примере: [1, 1, 0, 1, 0, 0, 1, 1, 0, 0]
Индексы зависимых признаков: [1. 1. 0. 0. 0. 0. 1. 0. 0. 0.]
Индексы направлений зависимости признаков: [ 0. 1. 0. 0. 0. 0. -1. 0. 0. 0.]
Следует отметить, что даже при условии изменения всех зависимых признаков и при условии их изменения в правильном направлении необходимо проверить, точно ли соответствует изменение одного признака изменениям всех зависимых признаков. Для этого необходимо знать точные аналитические выражения зависимостей каждого признака от других признаков, что не представляется возможным. Поэтому в таких случаях, как и в способе-прототипе, состязательный пример для окончательной проверки, является ли он эффективным, отправляется на следующий шаг и тестируется в реальной промышленной системе управления.
В результате выполнения проверок в примере отброшены неэффективные состязательные примеры:
Всего состязательных примеров: 554.
Прошли первый тест: 22, отброшено: 532.
Прошли второй тест: 7, отброшено: 15.
Прошли третий тест: 5, отброшено: 2.
Итого. Сколько примеров прошли все тесты: 5 из 554.
Выводы
При генерации состязательных примеров согласно способу-прототипу обнаружены 554 состязательных примера. После выполнения первой проверки - проверки допустимости возмущений, примененных к исходному примеру, по заданным допустимым значениям в выбранном признаковом пространстве - отброшены 532 найденных состязательных примера как неэффективные.
Далее, после выполнения второй проверки - составления матрицы зависимости признаков в сформированном признаковом пространстве и проверки изменения всех зависимых признаков - отброшены ещё 15 состязательных примеров как неэффективные.
Далее, на этапе третьей проверки, после выполнения дополнительных действий - составления матрицы направлений зависимости признаков в сформированном признаковом пространстве и проверки изменения всех зависимых признаков в правильном направлении - отброшены ещё 2 состязательных примера как неэффективные.
Таким образом, на этапе третьей проверки отброшены 2 примера, без необходимости тестирования найденных состязательных примеров в реальной промышленной системе управления. Поскольку третья проверка выполняется за несколько процессорных команд и не требует более длительных операций формирования сетевых пакетов, отправки пакетов по сети, приёма пакетов на стороне системы обнаружения вторжений, сбора пакетов в сессии, расчёта значений признаков, классификации сессии моделью машинного обучения (все эти действия должны быть выполнены на этапе тестирования в реальной промышленной системе управления), то очевидно, что такая предварительная проверка выполняется быстрее, чем тестирование в реальной промышленной системе управления.
Следовательно, за счет исключения необходимости тестирования некоторых состязательных примеров в реальной промышленной системе управления (отброшенных по результатам третьей проверки) повышается скорость поиска эффективных состязательных примеров. Указанный результат соответствует заявленному техническому результату.
название | год | авторы | номер документа |
---|---|---|---|
Способ генерации состязательных примеров для сетевой системы обнаружения вторжений | 2023 |
|
RU2823895C1 |
Способ генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления | 2022 |
|
RU2805014C1 |
Система и способ анализа входящего потока трафика | 2023 |
|
RU2812087C1 |
Способ генерации универсального входного сигнала для нейросетевых детекторов компьютерных вторжений в межмашинных сетях | 2018 |
|
RU2702274C1 |
Способ защиты систем управления транспортных средств от вторжений | 2019 |
|
RU2737229C1 |
СПОСОБ ОБНАРУЖЕНИЯ УДАЛЕННЫХ АТАК НА АВТОМАТИЗИРОВАННЫЕ СИСТЕМЫ УПРАВЛЕНИЯ | 2004 |
|
RU2264649C1 |
СПОСОБ ОТСЛЕЖИВАНИЯ, ОБНАРУЖЕНИЯ И ИДЕНТИФИКАЦИИ ИНТЕРЕСУЮЩИХ ОБЪЕКТОВ И АВТОНОМНОЕ УСТРОЙСТВО C ЗАЩИТОЙ ОТ КОПИРОВАНИЯ И ВЗЛОМА ДЛЯ ИХ ОСУЩЕСТВЛЕНИЯ | 2021 |
|
RU2789609C1 |
СПОСОБ ОБНАРУЖЕНИЯ УДАЛЕННЫХ АТАК НА АВТОМАТИЗИРОВАННЫЕ СИСТЕМЫ | 2006 |
|
RU2321052C2 |
СПОСОБ ЗАЩИТЫ ИНФОРМАЦИОННО-ВЫЧИСЛИТЕЛЬНОЙ СЕТИ ОТ ВТОРЖЕНИЙ | 2019 |
|
RU2705773C1 |
Способ выявления аномалий в работе сети автоматизированной системы | 2020 |
|
RU2738460C1 |
Изобретение относится к вычислительной технике. Технический результат заключается в повышении скорости поиска эффективных состязательных примеров. Технический результат достигается за счет того, что в способе генерации состязательных примеров для сетевой системы обнаружения вторжений дополнительно до тестирования в реальной промышленной системе составляют матрицу направлений зависимости признаков в сформированном признаковом пространстве, затем для каждого признака найденного состязательного примера, значение которого в исходном примере изменено, проверяют его зависимые признаки, определенные в матрице зависимости признаков, соответствует ли направление изменения этих зависимых признаков правильному направлению, заданному в матрице направлений зависимости, и по результату переходят к тестированию или не принимают в качестве эффективного состязательного примера. 2 ил.
1. Способ генерации состязательных примеров для сетевой системы обнаружения вторжений, включающий следующие последовательности действий:
прослушивают генератором образцов трафик промышленной системы управления для получения данных, имеющих то же распределение, что и обучающие данные, используемые системой обнаружения вторжений промышленной системы управления, размечают полученные данные и принимают размеченные аномальные данные в качестве исходных примеров атаки;
формируют признаковое пространство из признаков: IP-адрес источника, номер порта источника, IP-адрес назначения, номер порта назначения, промежуток времени между пакетами, время передачи пакета и код назначения пакета, а также из дополнительных признаков в зависимости от используемых сетевых протоколов в промышленной системе управления;
анализируют трафик промышленной системы управления, извлекают признаки в соответствии со сформированным признаковым пространством;
создают и обучают классификатор машинного обучения на основе признаков, полученных при анализе трафика;
преобразуют задачу обучения системы обнаружения вторжений промышленной системы управления в задачу оптимизации с использованием созданного классификатора и решают задачу оптимизации для получения состязательных примеров, при этом задача оптимизации состоит в следующем:
x* = arg min g(x) и
d(x*, x0) < dmax,
где x0 – исходный пример атаки;
x* – сформированный состязательный пример;
g(x) – вероятность того, что пример x* будет определён как аномальный пример (пример атаки);
d(x*, x0) – расстояние между состязательным примером и исходным примером атаки;
dmax – максимальное евклидово расстояние, разрешенное промышленной системой управления, указывающее на то, что состязательный пример не оказывает вредоносного воздействия, если расстояние превышено;
оценивают для каждого найденного состязательного примера допустимость возмущений, примененных к исходному примеру, по заданным допустимым значениям в выбранном признаковом пространстве и по результату переходят к проверке зависимости признаков или не принимают найденный состязательный пример в качестве эффективного состязательного примера;
составляют матрицу зависимости признаков в сформированном признаковом пространстве;
для каждого признака найденного состязательного примера, значение которого в исходном примере изменено, проверяют его зависимые признаки, определенные в матрице зависимости признаков, на изменение в исходном примере и по результату переходят к тестированию или не принимают в качестве эффективного состязательного примера;
тестируют созданный состязательный пример в реальной промышленной системе управления и по результату принимают либо не принимают в качестве эффективного состязательного примера,
отличающийся тем, что до тестирования в реальной промышленной системе управления дополнительно
составляют матрицу направлений зависимости признаков в сформированном признаковом пространстве;
для каждого признака найденного состязательного примера, значение которого в исходном примере изменено, проверяют его зависимые признаки, определенные в матрице зависимости признаков, соответствует ли направление изменения этих зависимых признаков правильному направлению, заданному в матрице направлений зависимости, и по результату переходят к тестированию или не принимают в качестве эффективного состязательного примера.
Способ генерации состязательных примеров для сетевой системы обнаружения вторжений | 2023 |
|
RU2823895C1 |
Способ генерации состязательных примеров для системы обнаружения вторжений промышленной системы управления | 2022 |
|
RU2805014C1 |
US 20210319113 A1, 14.10.2021 | |||
US 20200005133 A1, 02.01.2020 | |||
US 20220038474 A1, 03.02.2022. |
Авторы
Даты
2025-05-05—Публикация
2024-11-01—Подача