К.п.н. Тунгатарова А.Т., магистрант Рахмалы
Ф.Р.
Таразский государственный университет имени М.Х.Дулати
ИСПОЛЬЗОВАНИЕ 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 с.