Подход для обнаружения вредоносного HTTP-трафика с помощью глубокого обучения, дополнения данных и рефакторинга меток.

  • Автор записи:
  • Рубрика записи:Блог

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

Недавно был разработан новый метод обнаружения вредоносного HTTP-трафика, основанный на фреймворке HTTPSmell (относится к перехвату некоторых сетевых атак, запущенных с использованием протокола HTTP) и наборе данных XSS, полученном с GitHub, который автоматически применяет модель глубокого обучения с высокой способностью к обобщению даже при небольшом наборе обучающих данных. Такой подход позволяет добиваться положительных результатов от полуконтролируемой модели, которая использует неконтролируемое увеличение данных (UDA — unsupervised data augmentation) и основанный на обходе библиотек ключевых слов (KLA — keywords library avoidance) метод, который обеспечивает более высокий уровень охвата сценариев, с увеличенной степенью обобщения и эффективностью обнаружения в небольших обучающих выборках. Большинство существующих моделей обнаружения тяжёлые, ресурсоёмкие или имеют низкую эффективность обнаружения, что затрудняет интеграцию и обслуживание. В реалистичной корпоративной среде точность HTTPSmell может достигать 96,77% при выявлении сложных и продвинутых кибератак, сохраняя при этом постоянный объем памяти всего в 60 МБ и пропускную способность до 27 Кбит/с.


Традиционные стратегии обнаружения аномалий создают правила на основе обычного поведения — любое из тех, которое нарушает правила, будет идентифицировано, как проведение атаки. Однако этот вид стратегии похож на механизм «белого списка» в том, что все правила заранее устанавливаются в определённом диапазоне. Как только пользователь создаёт неожиданный, но рабочий (хоть и похожий на подозрительный) трафик, стратегия обнаружения будет ошибочно оценивать его, как вредоносный. В стратегии нового метода, на первый взгляд вроде всё просто — она работает на базе статистической и поведенческой классификаций, которые в основном выполняются с использованием машинного обучения. В частности, на первом этапе извлекаются требуемые характеристики нормального поведения пользователей на сайте. Затем набор данных вводится в модель для машинного обучения. Наконец, полученная модель используется для обнаружения аномалий в общем потоке. Хотя точность некоторых методов обнаружения вредоносного сетевого трафика очень высока (при наличии хороших актуализированных наборов данных), результаты во многих других случаях могут быть значительно снижены, так как сейчас злоумышленники используют различные методы атак, генерируя разнообразный стиль поведения. Поэтому для обучения большинства существующих моделей по обнаружению аномалий часто требуется большое количество образцов трафика. Многие сценарии испытывают недостаток истинных данных, а поэтому их способность к обобщению обнаружения вредоносных аномалий обычно слаба в реальных сценариях, и такой входящий поток с обфускациями может обходить модель обнаружения. А вот эффективный сбор образцов вредоносного трафика, особенно с частью полезной нагрузки, является весьма нетривиальной сложной задачей.


Кроме того, данные о трафике, собранные в реальных условиях, могут не иметь надёжных меток. Это приведёт к ошибке метки, соответствующей предлагаемой функции/признаку, что приведёт к ослаблению способности обобщения и неправильному переобучению. Для решения этой проблемы разработчики предложили аугментацию данных, как эффективный метод генерации большего количества обучающих выборок на основе небольшого количества наборов данных. Это позволило улучшить алгоритм извлечения признаков. Точнее, технология аугментации может позволить нейронным сетям извлекать текстовые функции, такие, как ключевые слова, порядок слов и семантические ассоциации, с помощью меньшего количества входящих данных. Хотя эта технология для текста способствует модели машинного обучения в извлечении ею семантических ассоциативных характеристик, такие данные в HTTP, как, например, «script», «select» и «for» не могут принять способ замены синонимов для дополнения, подобно обычному текстовому запросу. После того, как эта обучающие массивы будут расширены с помощью традиционных методов дополнения текстовых данных, они будут отправлены на сервер, для рефакторинга меток с использованием кооперативного полуконтролируемого алгоритма. Таким образом, влияние неправильно маркированной информации на модель может быть устранено, а тем самым повышена точность окончательной классификации.


Вредоносный HTTP-трафик делится на три категории:

— SQL-инъекция;

— межсайтовый скриптинг (XSS);

— обход каталога.


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

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

Обход каталога позволяет злоумышленникам получать доступ к закрытым каталогам или выполнять команды за пределами корневого (публичного) каталога веб-сервера.


Поскольку полезная нагрузка большинства веб-атак находится во вводимом пути запроса для адресной строки браузера или отправки данных для формы (как правило, обратной связи), их сначала необходимо проанализировать для корректного формирования выборок. Для правильного анализа данных в выборке необходима предварительная обработка, поэтому вначале выполняются следующие обязательные шаги: (1) Поскольку наиболее распространёнными являются запросы «Post» и «Get», то надо извлечь путь запроса из запроса Get и данные формы из запроса Post. (2) Выполнить декодирование URL-адреса со всеми строчными символами, удалением пробелов и других недопустимых символов в извлечённых данных, для получения окончательных образцов.


Далее, для эффективной обработки текстовых данных, текст сначала делится на большое количество независимых единиц. Известно, что любой текст обычно делится на отдельные символы. Поскольку в сложных запросах много различных символов, не относящихся к алфавиту, то только отдельные, в конечном итоге, будут отражать распределение и частоту в ключевых словах/фразах, что приведёт к переобучению в окончательном прогнозе модели. Поэтому важно сегментировать образцы на основе единицы слова, чтобы установить семантическую связь между словами. Пороговое значение частоты использования ключевых слов в неопасном трафике будет отличаться, а поэтому для выходных данных модели будет являться установленное их значение из библиотеки ключевых слов. Чтобы правильно сформировать алгоритм генерации такой библиотеки и получить нужные образцы ключевиков, сначала все запросы разбиваются на списки строк. Далее все отдельные лишние символы удаляются, чтобы получить общий набор списка всех ключевиков. Количество обычного неопасного веб-трафика в реальных сценариях намного больше, чем вредоносного, а поэтому сохраняются только ключевые слова с частотой более 90%.


Чтобы правильно распознать SQL-инъекцию, надо сосредоточиться на её признаках: то есть, если в запрашиваемых данных присутствует SQL-запрос, то это, скорее всего, вредоносный запрос. Соответственно, общие инструкции SQL-запроса могут быть записаны как ключевые слова (аналогично, общие инструкции в XSS-атаке и обходе каталогов также могут быть записаны как ключевые слова). Однако при ручной записи ключевых слов веб-трафика возникают следующие проблемы: во-первых, количество ключевых слов веб-трафика огромно, стоимость записи вручную высока, а скорость отзыва низкая. Во-вторых, поскольку техника атаки и нагрузка на неё постоянно меняются, некоторые ключевые слова могут быть перепутаны, и их невозможно будет записать вручную. Например, пробел заменяется на «%09», «union» заменяется на <!—  / ∗ !%55NiOn  ∗ /—>, а «select» заменяется на <!—  /∗ !%53eLEct  ∗ /  —> (  <!—  https://www.********.com?id=1’%09or%091=1%09/∗!%55NiOn∗/%09/∗!%53eLEct∗/%091, group_concat (user, password) %09from%09users#   —>).


Рабочее решение, которое было применено разработчиками метода, заключается в анализе лексических структур сетевого трафика на основе обучающих выборок, автоматическом извлечении нейросетью различных комбинаций последовательности символов и построении библиотеки ключевых слов. тут необходимо применять N-граммы (последовательность из n-количества элементов. С семантической точки зрения это может быть последовательность звуков, слогов, слов или букв) для анализа ключевых слов в тексте, что позволяет эффективно получать информацию о частотном распределении байтов и последовательности их следования. Несмотря на то, что анализируется содержание и последовательность высокочастотных слов, легко получить большое количество бессмысленных слов, а вычислительные затраты на поиск ключевых слов большой длины очень высоки (например, «union» — это ключевое слово, а затем такие вариации, как «Ni», «NiO» и «iOn» также будут выделяться в качестве ключевых слов — что в общем-то справедливо, так как они могут присутствовать в таком видев поисковых запросах, особенно химической направленности).


В результате информация, полученная на основе отчётов о веб-трафике, может быть разделена на значимые слова, и следует учитывать различные специальные символы, извлекая подстроку между двумя специальными символами в одно слово, чтобы упростить процесс сегментации. Между тем, слова, извлекаемые таким образом, часто имеют реальную семантику в веб-трафике. Соответственно, 28 заметных символов в веб-трафике (включая пробел, точку, запятую, а также ∼/# ’”<>+- ∗={}()[]:; ?!-&@)) используются в качестве основы для сегментации характерных признаков. Например, при использовании допустимого пути запроса <!—  ******.com?<script>xss_javascript.js</script> —>, новые данные после сегментации примут такой вид: <!— httpsmell cfm script xss javascript js script —>. Как видно из примера, будут сегментированы ключевые слова, тесно связанные с семантикой XSS, такие как script и javascript.


После извлечения ключевых слов и создания библиотеки, к обучающим образцам применяется метод дополнения данных. Ключевое понимание этого метода заключается в том, что вредоносные запросы неизбежно содержат специальные ключевые слова, поэтому можно сохранить эти ключевики и случайным образом заменить неключевые слова в образцах, чтобы расширить их. В большинстве случаев обучающие образцы часто собираются в одной и той же сети/целевой среде, а атакующие симуляции часто используют автоматический режим атаки. Например, такие слова, как «password», «username» или «passwd», часто присутствуют в большом количестве обучающих образцов и существуют в форме переменных в обычном запросе одновременно. В конце концов, если эти образцы не будут заменены адекватно путём добавления шума, утверждения с «password» и другие вариации в обычных образцах запроса будут распознаны как вредоносные. Изменение других символов, помимо ключевых слов, помогает улучшить обобщающую способность модели. Предложенный метод улучшения данных достаточно универсален, чтобы его можно было применять к другим типам сетевых атак.


По сравнению с классическими методами машинного обучения, такими как наивный байесовский (NB) и свёрточные нейронные сети (CNN) лучше работают в больших наборах данных и не требуют извлечения признаков вручную. CNN обычно включают следующие слои: слой внедрения, свёрточный слой, слой объединения и полностью связанный слой в классификации текста.


Слой встраивания в TextCNN может отображать слова в виде набора векторов. Для всех слов в наборе данных каждое слово можно охарактеризовать как вектор, который составляет матрицу встраивания M. Между тем, каждая строка в M является вектором слова. Функция свёрточного слоя в TextCNN заключается в извлечении локальных признаков текста и объединении признаков, полученных с помощью ядер свёртки разных размеров, для формирования многомерного вектора признаков. Слой объединения нацелен на извлечение основных признаков и получение окончательного вектора признаков из выходных данных свёрточного слоя. Входные данные полностью связанного слоя представляют собой одномерный вектор, сформированный после операции объединения, который выводится через функцию активации. Кроме того, для предотвращения переобучения добавляется слой исключения.


Захват локальных признаков — основная идея свёрточных нейронных сетей. Для текста локальные признаки — это скользящие окна, состоящие из нескольких слов, похожие на N -граммы. Это значительно помогает объединять и фильтровать признаки N -грамм для получения семантической информации на разных уровнях абстракции. На практике TextCNN, основанный на такой нейронной сети, имеет хорошую производительность при классификации текста.


Другая модель, используемая в HTTPSmell, — это UDA, неконтролируемый метод улучшения данных и полуконтролируемый подход к обучению, представленный командой Google в 2020 году. Применяя алгоритм дополнения к малому объёму маркированных и большому объёму немаркированных данных, он обучает модель глубокого обучения, которая превосходит те, что были обучены с большим количеством маркированных данных. HTTPSmell объединяет UDA с моделью TextCNN для обнаружения вредоносных HTTP-атак.


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