К.п.н. Тунгатарова А.Т., магистрант Рахмалы Ф.Р.

Таразский государственный университет имени М.Х.Дулати

 

ИСПОЛЬЗОВАНИЕ SHELL-КОДА ДЛЯ ЗАЩИТЫ ОТ ВЗЛОМА ОПЕРАЦИОННОЙ СИСТЕМЫ

 

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

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

- атаки на уровне операционной системы;

- атаки на уровне сетевого программного обеспечения;

- атаки на уровне систем управления базами данных.

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

Успех реализации алгоритма хакерской атаки в значительной степени зависит от архитектуры и конфигурации конкретной операционной системы, а также от надежности методов защиты от взлома, используемых пользователем. Одним из таких  методов является метод, основанный на использовании Shell-кода.

Shell-код – это двоичный исполняемый код, который обычно передаёт управление командному процессору, например «/bin/sh» в Unix shell, «command.com» в MS-DOS и «cmd.exe» в операционных системах Microsoft Windows. Shell-код  внедряется в другую программу и исполняется в ходе атаки на обнаруженную в ней уязвимость. Длина shell-кода ограничена, поэтому при написании кода необходимо учесть его эффективность и направленность на решение узкой задачи.

Shell-код пишется для каждой комбинации аппаратной платформы и операционной системы. Существует множество образцов shell-кода для платформ Wintel, Solaris на процессорах SPARC и x86, а также для разных версий Linux. Имеются разнообразные инструменты, предназначенные для генерации и анализа shell-кода. К числу лучших относятся nasm, gdb, objdump, ktrace, strace и readelf.

Для написания shell-кода необходимо знание языка С и свободное владение языком ассемблера для платформы, на которой он будет исполняться. При этом нужно учесть, что рекомендуется писать и проводить отладку shell-кода сначала на C, а уже потом переводить на язык ассемблера. Это позволит сосредоточиться на системных вызовах, а не на специфике ассемблера, поскольку значительная часть shell-кода зависит от операционной системы, так как в разных операционных системах используются различные системные вызовы.

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

Целью любого эксплойта для Windows является перехват управления регистром EIP (счетчиком команд) и запись в него адреса отправленного shell-кода, который выполнит ту или иную программу в системе. Для того, чтобы код работал в разных версиях операционной системы, можно установить обработчик исключений, который будет автоматически определять версию и возвращать подходящий shell-код. Возможность работы на нескольких платформах намного перевешивает неудобства, связанные с дополнительной длиной кода.

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

 

Литература:

1. Проскурин, В.Г. Защита в операционных системах / В.Г. Проскурин, С.В. Крутов, И.В. Мацкевич. – М.: Радио и связь, 2000.

2. Безбогов, А.А. Безопасность операционных систем: учебное пособие / А.А. Безбогов, А.В. Яковлев, Ю.Ф. Мартемьянов. – М. : "Издательство Машиностроение-1", 2007. – 220 с.

3. Джеймс Фостер, при участии Майка Прайса. Техника взлома: сокеты, эксплойты, shell_код: Пер. с англ. Слинкина А. А. – М.: ДМК_пресс, 2006. – 784 с.