ВВЕДЕНИЕ 4
1. SQL-ИНЪЕКЦИИ 6
1.1. Основные понятия 6
1.2. Разновидности SQL-инъекций 7
1.2.1 UNION SQL-инъекция 7
1.2.2 Boolean-based blind SQL-инъекция 7
1.2.3 Error-based SQL-инъекция 8
1.2.4 Stacked queries SQL-инъекция 8
1.2.5 Time-based blind SQL-инъекция 8
1.3. Методы решения задачи обнаружения SQL-инъекций 8
2. СБОР И ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА ДАННЫХ 14
2.1. Сбор данных 14
2.1.1 Генерация нормальных запросов 14
2.1.2 Генерация вредоносных запросов 15
2.1.3 Трассировка сервера баз данных 19
2.2 Предварительная обработка данных 21
3 АНАЛИЗ ДАННЫХ И РАСПОЗНАВАНИЕ НЕЙРОННЫМИ СЕТЯМИ ... 24
3.1. Нейросетевые алгоритмы 24
3.1.1. Нейронные сети прямого распространения 26
3.1.2. Радиально-базисные нейронные сети 27
3.1.3. Самоорганизующиеся карты Кохонена 28
3.2 Использование нейросетевых алгоритмов для обнаружения SQL-
инъекций в среде Matlab 29
3.2.1 Использование нейронных сетей прямого распространения 29
3.2.2 Использование радиально-базисных нейронных сетей 37
3.2.3 Использование самоорганизующихся карт Кохонена 43
3.3 Анализ результатов 45
ЗАКЛЮЧЕНИЕ 49
СПИСОК ЛИТЕРАТУРЫ 50
ПРИЛОЖЕНИЕ 52
П.1. Скрипты Python для генерации легитимных запросов к БД. 52
П. 2. Скрипт Matlab для чтения векторов параметров с текстового файла 57
П.3. Скрипт Matlab для обучения нейронной сети прямого распространения 58
П. 4. Скрипт Matlab для обучения радиально-базисной нейронной сети.. 59
П. 5. Скрипт Matlab для обучения самоорганизующихся карт Кохонена. 59
П. 6. Скрипт Matlab для симуляции нейронной сети прямого распространения и радиально-базисной нейронной сети 59
П. 7. Скрипт Matlab для симуляции самоорганизующихся карт Кохонена 61
П. 8. Исходный код сайта, осуществляющий подключение к СУБД и позволяющий выполнять SQL-инъекции 62
П. 9. SQL-скрипт и скалярные функции вычисляющие вектора параметры для обучения нейронной сети
Сегодня интернет стал обязательной частью общества, а количество сайтов с каждым днем растет все с большей скоростью. Веб-сайты позволяют отыскать почти всю необходимую информацию. В процессе развития веб-технологий пришлось столкнуться с большим объемом однотипной информации. В частности, появилась необходимость хранить информацию о пользователях ресурса. Такой информацией могут являться, например, пароли, конфиденциальные данные, служебная информация, личные данные. Это привело к тому, что веб-приложения стали оснащаться подключением к серверу баз данных, которые берут на себя работу по хранению, записи и предоставлению по первому требованию необходимой информации, если у пользователя есть на это права.
Для работы с одним из видов баз данных был разработан специальный язык структурированных запросов. Таким языком является SQL (Structured Query Language). Пользователь веб-ресурса формирует, так называемый, SQL-запрос и отправляет его в систему управления базами данных (СУБД). Далее СУБД отправляет ответ пользователю на его запрос или изменяет содержимое базы данных.
Однако пользователи могут получить несанкционированный доступ к информации, которая не должна быть им доступна. Одним из таких способов получения информации является SQL-инъекция, где вместо нормального запроса формируется модифицированный вредоносный запрос. Стоит отметить, что такую атаку реализовать очень просто и ее может осуществить почти любой злоумышленник. К тому же существуют распространенные в свободном доступе программы, которые осуществляют данную атаку в автоматическом режиме. Таким образом, существует острая необходимость в разработке средств защиты баз данных от таких атак.
Целью работы является анализ эффективности использования нейронных сетей для обнаружения атак вида SQL-инъекция и выбор наилучшей архитектуры.
Поставленная цель требует решения следующих задач:
• получить набор экспериментальных данных, в которые входят большое количество сгенерированных нормальных и вредоносных запросов;
• реализовать алгоритмы нейронных сетей;
• определить, вычислить и выгрузить числовые параметры, которые позволят идентифицировать нормальный и вредоносный запрос. Получить их из экспериментальных данных, для обучения и тестирования нейронных сетей;
• оценить точность распознавания атак и выбрать наиболее эффективный для решения задачи распознавания вариант нейронной сети среди рассмотренных.
Для решения данных задач будет использоваться учебная БД Adventure Works 2014, которая будет развернута в СУБД Microsoft SQL Server Express 2017. Для генерации SQL-инъекций будет использована утилита SQLMAP. Будет написан сайт на php, сервер для которого будет развернут с помощью Apache. Рассмотрение нейронных сетей и анализ экспериментальных данных будет проводится в среде Matlab.
1. Получен большой набор экспериментальных данных, состоящий из 100000 нормальных и 100000 вредоносных запросов. Нормальные запросы генерировались скриптом, написанным на языке Python. Вредоносные запросы генерировались при помощи SQLMAP.
2. Реализованы алгоритмы нейронных сетей:
• нейронная прямого распространения;
• радиально-базисная нейронная сеть;
• самоорганизующиеся карты Кохонена.
3. Были написаны скрипты, которые определяют следующие основные параметры сгенерированных запросов, для обучения и тестирования нейронных сетей:
• относительное число буквенных символов;
• относительное число числовых символов;
• относительная длина запроса без пробелов;
• относительное число спецсимволов.
4. Получен наилучший вариант нейронной сети среди рассмотренных -
нейронная сеть прямого распространения со следующей конфигурацией:
• функция активации - logsig;
• функция активации выходного слоя - purelin;
• функция контроля ошибок - mse;
• число слоев - 2;
• число нейронов на слой - 10;
• функция обучения - trainlm.
Данная конфигурация имеет процент ошибок 1 рода - 0,009%, процент ошибок 2 рода - 0,01% при времени обучения - 2 м 7 с.