О методе машинного обучения для обнаружения аномалий в SQL-запросах

Математические основы компьютерной безопасности

121

УДК 004.94 DOI 10.17223/2226308X/10/46

О МЕТОДЕ МАШИННОГО ОБУЧЕНИЯ ДЛЯ ОБНАРУЖЕНИЯ АНОМАЛИЙ В SQL-ЗАПРОСАХ

А. И. Мурзина

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

Ключевые слова: машинное обучение, обнаружение аномалий, SQL-инъекции, кластеризация, рекуррентные нейронные сети.

На сегодняшний день SQL-инъекции являются одной из наиболее распространённых атак на веб-приложения [1], с помощью которых можно получить несанкционированный доступ к системам управления базами данных (СУБД). Этот вид атаки основывается на внедрении произвольного SQL-кода, который меняет логику запроса. Известные реальные методы обнаружения SQL-инъекций [2-4] используют признаки их классификации и соответствующие сигнатуры и, как правило, не защищают от всех векторов данной атаки. В настоящей работе предлагается метод, позволяющий обнаруживать нетипичные для конкретного приложения, взаимодействующего с СУБД, SQL-запросы, в том числе не зависящие от уже существующих типов SQL-инъекций. Такие запросы в дальнейшем называются аномалиями.

Предлагаемый метод работает в три этапа: формирование вектора признаков из разрешённых (валидных) SQL-запросов обучающей выборки; кластеризация этих запросов на основе вектора признаков; обучение LSTM-сети для классификации на основе результатов кластеризации. Основная идея состоит в том, что SQL-запросы обучающей выборки можно разделить на несколько классов так, что если новый проверяемый SQL-запрос не «похож» ни на один запрос из этих классов, то будем считать его аномальным. Степень «похожести» определяет сама нейронная сеть.

Вектор признаков формируется на основе SQL-запросов обучающей выборки для конкретного приложения. Каждый запрос формирует вектор признаков, где каждый элемент вектора — число от 0 до 1 — частота вхождения лексемы языка SQL в данный запрос. Если лексемы нет в новом запросе, но она есть в запросах выборки, то ей присваивается 0. В силу того, что не все лексемы языка SQL могут использоваться на практике, длина вектора признаков может отличаться для каждого конкретного приложения. Таким образом, по обучающей выборке SQL-запросов строится матрица размера m х n, где m — количество запросов, а n — количество уникальных лексем SQL в выборке.

Как правило, бизнес-логика приложения меняется не так часто, поэтому разные запросы к СУБД различаются пользовательскими параметрами, через ввод в которые и может быть проэксплуатирована SQL-инъекция. Данные запросы можно кластеризовать — разбить множество запросов на группы по схожим признакам. Для кластеризации применяется метод Mean-Shift [5], на вход которому поступает матрица из сформированных на предыдущем этапе векторов, а на выходе — вектор размера m, и для каждого вектора определён класс в виде числа.

Теперь, когда каждый запрос отнесён к какому-то классу, можно обучить LSTM-сеть, которая будет стараться отнести новый неклассифицированный запрос к одной из групп. LSTM (Long short-term memory) — вид архитектуры рекуррентных нейронных сетей (RNN) [6], который может запоминать зависимости между элементами входного

122

Прикладная дискретная математика. Приложение

вектора. На этапе обучения на вход данная нейронная сеть принимает вектор признаков и число — номер класса, к которому относится вектор.

На этапе классификации LSTM-сеть принимает вектор признаков нового запроса, а на выходе выдаёт два числа — номер класса, на который наиболее похож запрос, и число от 0 до 1 как вероятность того, что данный запрос принадлежит к этому классу.

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

ЛИТЕРАТУРА

1. OWASP Top 10 Application Security Risks — 2017. https://www.owasp.org/index.php/Top_ 10_2017-Top_10

2. Haifond W. G. J., ViegasJ., and Orso A. A classification of SQL injection attacks and countermeasures // Proc. ISSSE 2006, Washington, USA, Mar. 2006. https://pdfs. semanticscholar.org/81a5/02b52485e52713ccab6d260f15871c2acdcb.pdf

3. Rawat R. and Shrivastav S. K. SQL injection attack detection using SVM // Intern. J. Comput. Appl. 2012. V. 42. No. 13. P. 1-4.

4. Buehrer G. T., Weide B. W, and Siviiotti P. A. G. Using parse tree validation to prevent SQL injection attacks // Proc. SEM'05. N.Y.: ACM, 2005. P. 106-113.

5. Cheng Y. Mean shift, mode seeking, and clustering // IEEE Trans. Pattern Analysis Machine Intelligence. 1995. V. 17. Iss.8. P. 790-799.

6. Schmidhuber J. and Hochreiter S. Long short-term memory // Neural Computation. 1997. No. 9. P. 1735-1780.

УДК 004.94 DOI 10.17223/2226308X/10/47

МЕТОД ИДЕНТИФИКАЦИИ СОГЛАШЕНИЙ О ВЫЗОВЕ ФУНКЦИЙ

В БИНАРНЫХ ПРИЛОЖЕНИЯХ

М. А. Станчин, Н. В. Сороковиков

Предлагается метод определения соглашений о вызове функций в бинарных приложениях.

Ключевые слова: статический анализ, бинарные приложения, соглашение о вызове.

При статическом анализе бинарных приложений возникает задача определения соглашений о вызовах функций. Соглашением о вызове (calling convention) называется способ передачи параметров (аргументов) подпрограммам [1]. В известных средствах анализа бинарных приложений (например, Radare2, Angr, IDA Pro) эта задача решается с использованием встроенных инструментов, что, как правило, не позволяет использовать их в собственных разрабатываемых средствах анализа. В данной работе предлагается собственный метод анализа соглашений о вызове функций.

Для определения соглашения о вызове необходимо определить следующие параметры:

1) наличие регистров для передачи параметров в функции;

2) используемые регистры для передачи параметров в функции;

3) используемые области памяти;

4) мнемоника инструкции возврата.