Абстрактный

Машинное обучение в настоящее время является важным подходом, используемым в качестве защитного слоя от угроз кибербезопасности, особенно при атаках DDoS. Чтобы построить надежную модель, которая может эффективно обнаруживать атаки и угрозы, нам нужно сосредоточиться на этапе предварительной обработки, в частности, на методах выбора функций. давайте сравним четыре разных подхода: одномерный выбор, важность признаков, рекурсивное исключение признаков с перекрестной проверкой и теоретико-игровые подходы к выбору признаков «SHAP».

Введение

DDoS-атаки

Распределенные атаки типа «отказ в обслуживании» «DDoS» — это систематическая атака, нацеленная на корпоративные серверы или сеть с огромным количеством запросов, которые превышают вычислительную мощность сервера, вызывая отказ сервера, а иногда и всю сеть.

Выбор функции

Машинное обучение состоит из нескольких этапов, которые называются жизненным циклом машинного обучения. Мы сосредоточимся на шаге выбора функции. Поскольку используемые данные представляют собой данные высокой размерности, чтобы избежать ловушки данных высокой размерности, известной как проклятие размерности. Итак, нам нужно Уменьшить эти размеры научно обоснованным подходом. Поскольку эти многомерные данные могут считаться вводящими в заблуждение для модели. Методы выбора признаков являются важным подходом к рассмотрению, поскольку они помогут нам полагаться только на наиболее важные признаки, что поможет сократить необходимое время и вычислительные затраты для решаемой задачи. Это также помогает повысить производительность в средствах точности и эффективности.

Существует множество методов выбора признаков. Мы сосредоточимся на: одномерном выборе, важности признаков, матрице корреляции с тепловыми картами и аддитивных объяснениях Шепли «SHAP» (Lundberg, 2018) для выбора признаков.

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

Набор данных

Используемый набор данных включает помеченные образцы трафика от 12 современных DDoS-атак (NTP, DNS, LDAP, MSSQL, NetBIOS, SNMP, SSDP, UDP, UDP-Lag, WebDDoS, SYN, TFTP) в дополнение к безвредному трафику.

Набор данных можно найти здесь:

DDoS 2019 | Наборы данных | Исследования | Канадский институт кибербезопасности | УНБ

Методы выбора функций

Теперь мы увидим, как выполнить их все, а сравнение будет в последней части.

Одномерный отбор

Целью использования этого метода является выбор лучших k-признаков на основе статистических тестов.

Выберите K-best:

Он просто сохраняет лучшие k-функции и удаляет все остальные.

from sklearn.feature_selection import SelectKBest
# apply SelectKBest class to extract top 10 best features
bestfeatures = SelectKBest(score_func=f_classif, k=10)
fit = bestfeatures.fit(xtrain, ytrain)
dfscores = pd.DataFrame(fit.scores_) #getting scores
dfcolumns = pd.DataFrame(xtrain.columns) #getting columns
# creating dataframe with two columns
featureScores = pd.concat([dfcolumns, dfscores], axis=1)
featureScores.columns = ['Specs', 'Score']
featureScores.nlargest(10).plot(kind='barh') # plot the largest 10

Важность функции

Выберите функции, которые больше влияют на модели машинного обучения. Я реализую две техники, используя технику дополнительных деревьев и деревья решений.

Дополнительные деревья:

Один из ансамблевых методов работает с агрегированием результатов нескольких моделей деревьев, построенных случайным образом из обучающего набора данных. Использование важности Джини для расчета важности функции. Он подходит для каждого дерева решений во всем наборе данных лучше, чем загрузочная реплика, и случайным образом выбирает точку разделения для разделения узлов.

Применяя его к данным, он дает 65 важных функций. но я покажу только первые 10 важных функций.

from sklearn.ensemble import ExtraTreesClassifier
# Applying Extratrees classifier
model = ExtraTreesClassifier()
model.fit(xtrain, ytrain)
# Plot the 10 important features
feat_importances = pd.Series(model.feature_importances_, index=xtrain.columns)
feat_importances.nlargest(10).plot(kind='barh')
plt.show()

Классификатор дерева решений

Дерево решений для важности признаков на основе примесей, взвешенных для каждого входного признака, или вычисление важности входных признаков с использованием важности Джини. Применив его к данным, он дает 26 важных функций из 78 функций. Я решил использовать только лучшие 10 функций.

from sklearn.tree import DecisionTreeClassifier
# Apply DecisionTree Classifier
clf_d = DecisionTreeClassifier(criterion="entropy",random_state=0)
clf_d.fit(x_train,y_train)
important_feature = clf_d.feature_importances_
#plot features importance
plt.bar([x for x in range(len(important_feature))], important_feature)
plt.show()

Итак, я решил получить индексы объектов, чтобы иметь возможность отобразить их позже.

#sort features importance to obtain index of features
sorted_importance_feature_index=np.argsort(important_feature)[::-1]
sorted_importance_feature_index
Output:
array([13, 65, 47, 77, 68, 43, 34, 72, 51, 35, 20, 54, 26, 39, 52, 62, 16, 61, 66, 23, 22, 50, 33, 21, 67,  0, 53, 55, 69, 70, 71, 73, 19, 18, 17, 74, 15, 14, 75, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1, 24, 25, 64, 58, 49, 48, 56, 46, 45, 44, 57, 42, 41, 40, 76, 27, 37, 36, 59, 60, 63, 32, 31, 30, 29, 28, 38], dtype=int64)

Рекурсивное устранение признаков с перекрестной проверкой «RFECV»

Базовая модель исключения рекурсивных функций (RFE) — это подход к выбору функций, который соответствует модели машинного обучения и удаляет самую слабую функцию или набор самых слабых функций до тех пор, пока не будет достигнуто указанное количество функций. он ранжирует функции по атрибутам модели (coef_) или (feature_importances_) и, рекурсивно удаляя несколько функций в цикле, RFE «пытается устранить зависимости и коллинеарность, которые могут существовать в модели».

RFE требует указать ограниченное количество сохраняемых функций, однако это часто неизвестно заранее, поскольку наша основная задача — определить, сколько функций допустимо. Чтобы решить эту проблему и найти оптимальное количество функций, перекрестная проверка используется с RFE для оценки различных подмножеств функций и автоматического выбора набора функций с наилучшей оценкой.

RFECV обнаружил, что наиболее оптимальное количество признаков — 10.

from sklearn.feature_selection import RFECV 
from sklearn.linear_model import LinearRegression
# Apply RFECV on LinearRegression classifier
regressor = LinearRegression()
feature_selector = RFECV(regressor)

fit = feature_selector.fit(xtrain,ytrain)
# getting the optimal features
optimal_feature_count = feature_selector.n_features_ # which is 10
feature_selector.get_support(indices=True)
# output: array([10, 28, 38, 39, 40, 41, 42, 43, 64, 65], dtype=int64)
#plot the important features
feat_importances = pd.Series(feature_selector.ranking_, index=xtrain.columns)
feat_importances.nsmallest(20).plot(kind='barh')
plt.show()

Нанеся на график функции, мы обнаружим, что первые 10 функций имеют самые высокие оценки рейтинга.

Аддитивные значения SHAPLEY (SHAP)

Понимание того, как эта функция способствует прогнозированию модели, и интерпретация шагов модели черного ящика — важный шаг для улучшения этапа прогнозирования. Достигнув момента, когда мы можем понять причину решения, принятого моделью, мы можем интерпретировать всю теневую работу модели.

SHAP — это подход к объяснению результатов любой модели машинного обучения. «Цель SHAP — объяснить предсказание экземпляра x путем вычисления вклада каждого признака в предсказание» Молнар (2022).

Вы можете прочитать больше о SHAP здесь. Добро пожаловать в документацию SHAP — последняя документация SHAP

Мы использовали SHAP Summaryplot для интерпретации функций и их влияния на модель. SHAP необходимо применять к модели, чтобы понять, как каждая функция влияет на модель. Я применил классификатор Catboost.

import shap
from catboost import CatBoostClassifier
# Fitting the classifier
model = CatBoostClassifier(iterations = 500, learning_rate = 0.05, eval_metric = 'F1', verbose = False, random_state = 42)
model.fit(xtrain, ytrain, verbose=False,  plot=False)
# Applying shap
explainer = shap.Explainer(model) #getting the explanation
shap_values = explainer(xtrain) # calculating the values
#plotting the summary
shap.summary_plot(shap_values, features = xtrain, feature_names = xtrain.columns, max_display = 90)

Из этого рисунка видно, что есть некоторые особенности, что его высокие значения относятся к положительному классу, а более низкие значения относятся к отрицательному классу, и наоборот. И другие с нейтральным воздействием.

Интерпретируя график, я решил выбрать функции, которые, по моему мнению, повлияют на модель нужным нам образом («Максимальная длина пакета Fwd», «min_seg_size_forward», «Входящие», «Количество флагов URG», «Флаги Fwd PSH»). ', 'Средний расход IAT').

Было всего 6 функций, которые я решил использовать.

Классификатор CatBoost

Я решил использовать только один классификатор «Catboost Classifier», чтобы провести справедливое сравнение и иметь возможность сосредоточиться только на методах важности функции.

CatBoost основан на деревьях решений с градиентным усилением. В процессе обучения последовательно строится набор деревьев решений. Каждое последующее дерево строится с меньшими потерями по сравнению с предыдущими деревьями. Мы можем управлять количеством деревьев по начальным параметрам.

Он использует детектор переобучения, чтобы избежать проблем с переоснащением. Когда детектор срабатывает, деревья перестают строиться, и именно поэтому мы использовали эту технику ансамбля, особенно из-за нашего дисбаланса набора данных.

from catboost import CatBoostClassifier
model = CatBoostClassifier(iterations = 500, learning_rate = 0.05, eval_metric = 'F1', verbose = False, random_state = 42)

Сравнение четырех техник

Будут использоваться следующие показатели («Оценка точности», «Оценка F1», «Время прогнозирования на запись данных» и «Матрица путаницы»).

Матрицы путаницы:

Наиболее важные функции

Наиболее часто встречающимися пятью функциями среди всех используемых методов являются: («Флаги FWD PSH», «Средняя длина пакета BWD», «Минимальная длина пакета BWD», «Входящие», «Счетчик флагов URG»).

Заключение

Вы должны выбрать лучшую модель, которая будет реализована для такого рода задач. но я считаю, что время предсказания очень важно в проблемах, связанных с кибербезопасностью. Итак, мой совет — использовать SHAPLEY Additive Values ​​(SHAP), так как он требует наименьшего времени. если вы попробовали другой набор функций или добавили еще две функции, результаты могут быть лучше, но вы потеряете привилегию времени.

Наконец, эта работа сделана только в исследовательских целях, я надеюсь, что она может быть вам полезна.

Подтверждение

Я очень благодарен своим товарищам по команде, г-же Лобне Эласаид, г-ну Рагабу Годаху и г-ну Абдалле Рашеду. Мы работали вместе, чтобы выполнить эту работу.

Рекомендации

[1] Араужо, П., Сильва, А., Младший, Н., Кабрини, Ф., Сантос, А., Гельфи, А., и Кофуджи, С. (2021). Влияние методов выбора признаков на классификацию DDoS-атак с использованием XGBoost. Журнал Коммуникаций

[2] Бхаттачарья Д. (2016). DDoS-атаки. КПР Пресс. https://doi.org/10.1201/b20614

[3] Бузубаа, К., Тахер, Ю., и Нсири, Б. (2022). Прогнозирование DOS-DDOS-атак: сравнение производительности основных стратегий выбора функций. Международный журнал инженерных тенденций и технологий, 70 (1), 299–312. https://doi.org/10.14445/22315381/ijett-v70i1p235

[4] ДДоС 2019 | Наборы данных | Исследования | Канадский институт кибербезопасности | УНБ. Unb.ca. (2022). Получено 12 апреля 2022 г. с https://www.unb.ca/cic/datasets/ddos-2019.html.

[5] Гупта, А. (2020). Методы выбора признаков в машинном обучении. Аналитика Видья. Получено 13 апреля 2022 г. с https://www.analyticsvidhya.com/blog/2020/10/featureselection-techniques-in-machine-learning/.

[6] Ли, К. (2017). Показатели важности функций для древовидных моделей — Часть I. Средняя. Получено 13 апреля 2022 г. с https://medium.com/the-artificial-impostor/feature-importance-measures-for-tree-models-part-i-47f187c1a2c3.

[7] Лундберг, С. (2018). Аддитивные объяснения Шепли. Получено: 23 февраля 2022 г. https://shap.readthedocs.io/en/stable/

[8] Молнар, К. (2022). Интерпретируемое машинное обучение (2-е изд.).

[9] Полат, Х., Полат, О., и Четин, А. (2020). Обнаружение DDoS-атак в программно-определяемых сетях с помощью методов выбора функций и моделей машинного обучения. Устойчивое развитие, 12(3), 1035. https://doi.org/10.3390/su12031035

[10] СайСиндхуТеджа, Р., и Шьям, Г. (2021). Эффективный выбор функций на основе метаэвристического алгоритма и рекуррентная нейронная сеть для обнаружения DoS-атак в среде облачных вычислений. Прикладные мягкие вычисления. https://doi.org/10.1016/j.asoc.2020.106997