Как стать автором
Обновить

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

Время на прочтение6 мин
Количество просмотров12K
Всего голосов 23: ↑20 и ↓3+22
Комментарии17

Комментарии 17

А зачем вам сверточная сеть? Сверточные сети для объектов обладающих локальной корреляцией (изображение/звук/и.т.д.). А вы на её вход подаете какой-то ембеддинг (если я правильно понял).
Скорее всего если вы будете использовать однослойную полносвязную сеть результат будет не хуже.

Наверное это была попытка выразить мысль что важна последовательность токенов чтобы произвести атаку. Наверное тут правильнее это было в GRU/LSTM обернуть что-бы иметь ограниченный контекст по токенам.

Я увидел в статье Яна Лекуна (https://arxiv.org/pdf/1502.01710.pdf), что он применяет свёрточную нейросеть для распознавания естественных языков на уровне символов, поэтому подумал, что для формальной выборки свёртки тоже могут подойти. А в статье Юна Кима (https://arxiv.org/pdf/1408.5882.pdf) увидел многоканальную CNN для классификации предложений. Более того, Джейсон Браунли тоже использовал CNN для классификации текстов (https://machinelearningmastery.com/develop-word-embedding-model-predicting-movie-review-sentiment/). Поэтому выбор пал на CNN

В статье идет сравнение с устаревшими на тот момент подходами. Если вы откроете бенчмарки, то найдете что в те годы были подходы которые выдавали точность не хуже.
В статье был явный акцент на то что «Вот так они тоже умеют». И да, на тот момент это был прикольный факт.
По современным меркам у этих подходов вообще все не очень.
Ну и «machinelearningmastery» это неплохой список примеров. Но не рефенс того «как надо делать продуктовую систему».
А вообще, на будущее, в современном мире ML любая статья старше двух лет должны вызывать подозрения. Писал как-то об этом.

Кроме того, ваше явное отличие в структуре данных от регулярного языка. И что у вас оно применим — надо доказывать.
Я бы начал с более простых/более подходящих сетей;)

Так и вашей статье уже больше 2 лет, пора обновить.

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

Но есть нюанс: окно свертки "видит" только часть текста. В качестве решения можно добавить какие-нибудь слои, которые будут подсказывать нейросети на какое место текста сейчас "смотрит" окно. В данном случае Embedding добавляет к токенам слов гармонический сигнал, который вычисляется из положения слова в сообщении.

Если я не прав, то автор меня, надеюсь, поправит

Есть вопросы по машинному обучению:

  1. Что есть входные данные для модели. Что за 64 элемента, как они выглядят? Пример бы помог разобраться.

  2. Как собирали датасет? С помощью BruteXSS и SQLmap? И можно посмотреть на датасет?

  3. В матрице ошибок 64 элемента, а в таблице с количеством элементов тестовой выборки - 500. Почему так?

  4. У вас одна единственная ошибка в матрице ошибок, метрики близки к единице. Надо покупать вашу модель. А вы сами знаете слабые места модели? Как поведёт себя в отношении других инструментов атак, какова обобщающая способность?

Будет здорово, если откроете код. Jupyter-блокнот с комментариями и ссылка на него в Google Colab. Это снимет многие вопросы и даст обратную связь по существу.

По оформлению и пояснениям выглядит так, что вы готовы к научной публикации. Идея на перспективу: найти подходящий публичный датасет, повторить исследование на нём, опубликовать статью на paperswithcode и проверить модель в честном, открытом, публичном бою.

Статья отличная, ставлю плюс. Приятно видеть такие исследования в песочнице, успехов!

  1. Входные данные при обучении, валидации или тестировании - это выборка размером в 64 элемента из пулов размера 400, 100 и 500 соответственно. Но при экспорте модели может подаваться на вход как 1 элемент, так и несколько сразу. По поводу примеров полезных нагрузок злоумышленника: здесь на хабре проходит авто-санация (sanitizing) вводимого, так что в полезную нагрузку атак не вставить))). Поэтому пока выложу скрин с примером

    Пример полезных нагрузок
    Пример полезных нагрузок
  2. Я искал в репозиториях kaggle и гитхабов примеры полезных нагрузок, дополнял их примерами реальных атак с разных форумов и использовал burp cheat sheet xss и SQLmap xml, чтобы увидеть каркас запросов в разных субд. По поводу шаблонизаторов - они все похожи, что Jinja2,FreeMarker, Smarty, Twig, поэтому модель можно обучить одним или примесью нескольких из них

  3. В матрице ошибок 64 элемента, так как это выборка случайных 64 полезных нагрузок из пула, размером в 500 элементов. Естественно seed установлен так, чтобы выборка всегда была разной.

  4. Да, слабые места, конечно, есть. Слой Текстовой Векторизации перегружен callback-функцией, которая реализует обработку входных данных. Злоумышленник может использовать различные кодировки, чтобы остаться незамеченным. Поэтому в callback функции надо получше отлавливать такие моменты, я просто с кодировками плохо знаком, а то tplmap иногда западает

По поводу исходников и датасетов: я выложу их, ток немного причешу код, так как он не очень pythonic way получился, я в основном системным программированием занимался на C++. Это моя вторая попытка писать нейронки. По поводу paperswithcode спасибо за наводку, это что-то типа Hugging face?

Мило. А как эта штука ведёт себя не на инъекциях, а на обычных, валидных комментариях? Каков процент ложноположительной реакции?

Редко случается FP ошибка и то только если в тексте специально указывать ключевые слова, очень близкие по контексту к вероятной атаке

А какой перформанс? Требуется ли GPU?

Не требуется, всё обучалось на процессоре Intel Core i7 2.5GHz. Видеокарты у меня нет

Статья неплохая, автору плюсик в карму за то, что не побоялся написать статью и своем исследовании.

НО есть вопросы к реализации и данным:

1) Как уже спросили выше, что есть входные данные? Это http-запрос или что-то иное? Из каких источников собирался датасет?

2) Какое у вас соотношение классов в выборках для модели? В реальном мире на 99.(9)% легитимного трафика будет приходиться 0.(1)% вредоносного трафика, то есть задача МО переходит из классификации в поиск аномалий, поэтому стандартные методы классификации могут давать больше FP сработок.

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

  1. Входные данные - это параметры методов HTTP, которые лексикографически проверяются моделью. Датасет собирался из открытых источников

  2. Я старался сделать равномерное перемешивание, чтобы метрики не перекосило. А вот с поисками аномалий я не знаком, поэтому спасибо за наводку - ознакомлюсь

Хорошее исследование вопроса! Понятно даже мало посвященным.

Но, после прочтения статьи, возник вопрос: а сколько такая реализация даёт нагрузки? Насколько она отказоустойчива?

Например: злоумышленник начинает вести ддос атаку с целью вывести из строя микросервис, параллельно с этим делая sql инъекции.

Как на это отреагирует система?

Возможно, у меня не хватает в данной теме понимания, поэтому было бы здорово, если бы вы осветили данный вопрос.

"Ослабить" систему защиты флудом (чтобы она не распознала sql-инъекцию) не получится. Скорее всего замедлится время ответа микросервиса или он вовсе упадёт

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории