Первый вопрос, который приходит на ум, когда мы читаем тему: «Предсказать, сможет ли запрос на SQL-инъекцию получить доступ к базе данных», — что такое SQL-инъекция? Таким образом, SQL-инъекция, также известная как SQLI, является распространенной атакой, в которой используется вредоносный код SQL для манипулирования серверной базой данных для доступа к информации, которая не предназначена для отображения. Эта информация может включать любое количество элементов, включая конфиденциальные данные компании, списки пользователей или личные данные клиентов. Следовательно, в этом примере мы будем предсказывать, является ли запрос, введенный пользователем, sql-инъекцией или нет, который может подключиться к базе данных.

Бизнес-проблема

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

Постановка задачи:

  1. Определите, какой запрос Sql является sql-инъекцией, а какой допустимым запросом.

2. Это может помочь организациям защитить свои данные и приложения от злоумышленников.

Использование машинного обучения в решении проблемы

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

Источник данных

Набор данных был загружен с https://www.kaggle.com/sajid576/sql-injection-dataset. Набор данных состоит из двух столбцов: 1. Запрос и 2. Ярлык.

Столбец Query имеет строковый тип и содержит SQL-запросы, тогда как столбец Label состоит из 1 и 0, где 1 символизирует запрос, являющийся инъекцией SQL, а 0 символизирует запрос, не являющийся SQL-инъекция.

Существующие подходы

Существует много существующих подходов к проблеме, некоторые из них перечислены ниже:

  1. Обнаружение атаки путем внедрения SQL-кода с помощью SVM

URL: https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.259.2515&re p=rep1&type=pdf

Резюме: В этой статье мы предсказываем, является ли запрос sql-инъекцией или нет, применяя алгоритм svm к заданному набору данных. Предлагаемый сол. То есть сначала токенизировать набор данных, обучить модель SVM, а затем делать прогнозы.

2. Подходы к машинному обучению для обнаружения атак путем внедрения SQL-кода.

ссылка: https://hrcak.srce.hr/file/367636

Резюме. В этой статье мы предсказываем, является ли запрос SQL-инъекцией или нет, применяя Gradient, Boosting Machine (GBM), Adaptive Boosting (AdaBoost), Extended Gradient Boosting Machine (XGBM) и Light. Машина повышения градиента (LGBM) на предварительно обработанном наборе данных. Предварительно обработанный набор данных создается следующим образом:

i) Мы рассматриваем функции, как показано в таблице ниже.

ii) Затем мы токенизируем каждую точку запроса, а затем создаем вектор, как показано ниже.

3. Обнаружение SQL-инъекций с помощью машинного обучения

url: https://www.revisageintec.net/index.php/revista/article/view/1939/1 264

Резюме. В этой статье мы предсказываем, является ли запрос sql-инъекцией или нет, применяя различные алгоритмы, такие как наивный байесовский классификатор, SVM, CNN, логистическая регрессия и пассивно-агрессивный классификатор. Автор в этой статье сначала предлагает токенизировать точки запроса для создания набора данных (например: синтаксический анализ «или 1 = 1–1» в «или», «1 = 1», «-», «1»), а затем примените вышеуказанные алгоритмы, чтобы классифицировать, является ли запрос sql-инъекцией или нет.

Улучшения

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

Я делаю это, потому что все виды символов имеют значение в запросах, и они учитываются, когда мы создаем функции, как показано в статье 2 выше. Также есть много ключевых слов или комбинаций слов, которые можно найти в SQL-инъекциях, и, следовательно, мы также токенизируем запросы, используя Bag of Words, чтобы получить токенизацию, упомянутую в статье 3.

Исследовательский анализ данных

Это одна из самых важных частей тематического исследования, потому что мы увидим, как каждый символ/символ может способствовать идентификации запроса как Sql Injection или нет.

Возможности:

  1. Одинарные кавычки ('')

2. Двойные кавычки ("")

3. Хэш (#)

4. Доллар($)

5. Скобки( () )

6. Квадратные скобки ([])

7. По курсу ( @ )

8. Двоеточие (:)

9. Точка с запятой(;)

10. равно(=)

11. Угловые скобки (‹›)

12. Вопросительный знак(?)

13. Каре (^)

14. Нижняя оценка (_)

15. Фигурные скобки ({})

16. Арифметические операторы (+,-,*,/)

17. Запятая(,)

18. Точка(.)

19. Однострочный комментарий (—)

20. Многострочный комментарий (/*)

21. Пробелы ( )

22. Процент (%)

23. Логические операторы (И, ИЛИ, НЕ, XOR, &&, ||, !)

24. Знаки препинания(!\"#$%&\'()*+,-.\/:;‹=›?@[\\]^_`{|}~)

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

25. Шестнадцатеричные числа (используется регулярное выражение = 0[xX][0–9a-fA-F]+\s )

26. Нуль

27. Цифры

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

28. Алфавиты

29. Мы построим облако слов запросов для каждой метки, чтобы увидеть, можем ли мы наблюдать определенные слова, присутствующие в каждом типе запроса.

Подход первого разреза

  1. Предварительная обработка:

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

2. EDA:

а. В EDA мы проверим дисбаланс классов.

б. Я также создам и проанализирую функции, как показано выше.

3. Моделирование:

я. Особенности:

1. Токенизировать каждый запрос для создания функций (набор слов в запросах).

2. Создайте функции на основе исследовательской работы 2, упомянутой выше.

ii. Примените алгоритмы машинного обучения, такие как логистическая регрессия, наивный байесовский метод, метод опорных векторов и XGBOOST, в Featureization(1).

III. Примените те же алгоритмы машинного обучения к функциям, которые мы создали в Featureization(2).

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

Используемые модели

Мы будем использовать 4 модели машинного обучения, а именно логистическую регрессию, SVM, наивный байесовский подход и XGBoost.

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

Код

  1. Создание признаков для моделей.

а. Пользовательские функции, которые мы проанализировали в разделе EDA.

б. Использование BoW (Bag of words) в запросах для создания функций unigram и bigram.

в. Сочетание всех характеристик.

д. Поскольку все функции являются числовыми, лучше, если мы масштабируем функции, модели лучше работают с масштабируемыми функциями.

е. Использование логистической регрессии с CV поиска по сетке для поиска наилучшего параметра.

Результаты из приведенного выше кода:

Матрица путаницы после обучения логистической регрессии с наилучшим найденным параметром.

Оценка F1: 0,905

ф. Использование SVM с CV Grid Search для поиска наилучшего параметра.

Результаты из приведенного выше кода:

Матрица путаницы после обучения SVM с наилучшим найденным параметром.

Оценка F1: 0,911.

г. Использование Наивного Байеса для поиска наилучшего параметра.

Результаты из приведенного выше кода:

Матрица путаницы после обучения наивному байесовскому методу с наилучшим найденным параметром.

Оценка F1: 0,97.

час Использование XGBoost с CV Grid Search для поиска наилучшего параметра.

Результаты из приведенного выше кода:

Матрица путаницы после обучения XGBoost с наилучшим найденным параметром.

Оценка F1: 0,995

Сравнение моделей

Мы видим, что XGBoost — лучшая модель с F1-Score 0,995. Мы также получаем очень высокий процент истинных положительных результатов, что означает, что вероятность блокировки SQL-инъекции высока.

Будущая работа

Мы также будем применять алгоритмы глубокого обучения, чтобы получить еще более высокий балл F1.

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

Атака путем внедрения SQL-кода Обнаружение с помощью SVM; Ромиль Рават и Шайлендра Кумар Шривастав; Международный журнал компьютерных приложений (0975–8887).

Комплекс подходов машинного обучения для обнаружения атак путем внедрения SQL-кода; Умар Фарук; ISSN 1846–6168 (печать), ISSN 1848–5588 (онлайн)

Обнаружение SQL-инъекций с помощью машинного обучения; С. С. Ананда Кришнан, Адхил Н. Сабу, Прия П. Саджан и А. Л. Шридип4; ISSN: 2237–0722, Vol. 11 №3 (2021)

Прикладной ИИ (https://www.appliedaicourse.com/)

Репозиторий на GitHub:



Линкедин:

www.linkedin.com/in/ayush-mittal26