Шелл-код

Материал из Hack Wiki

Перейти к: навигация, поиск

Код оболочки, шелл-код (англ. shellcode) — это двоичный исполняемый код, который обычно передаёт управление консоли, например '/bin/sh' Unix shell, command.com в MS-DOS и cmd.exe в операционных системах Microsoft Windows. Код оболочки может быть использован как полезная нагрузка эксплойта, обеспечивая взломщику доступ к командной оболочке (англ. shell) в компьютерной системе.

При эксплуатации удаленной уязвимости шелл-код может открывать заранее заданый порт TCP уязвимого компьютера, через который будет осуществляться дальнейший доступ к командной оболочке, такой код называется привязывающим к порту (англ. port binding shellcode). Если шелл-код осуществляет подключение к порту компьютера атакующего, что производится с целью обхода брандмауэра или NAT, то такой код называется обратной оболочкой (англ. reverse shell shellcode).


[править] Принцип работы

Шелл-код обычно внедряется в память эксплуатируемой программы, после чего на него передается управление путём переполнения стека, или при переполнении буфера в куче, или используя атаки форматной строки. Передача управления шелл-коду осуществляется перезаписью адреса возврата в стеке адресом внедрённого шелкода, перезаписью адресов вызываемых функций или изменением обработчиков прерываний. Результатом этого является выполнение шелл-кода, который открывает командную строку для использования взломщиком. [править] Обнаружение

Взломщики пишут шелл-коды часто используя приёмы, скрывающие их атаку. Они часто пытаются выяснить как системы обнаружения вторжений (СОВ) распознают любую входящую атаку. Типичная СОВ обычно просматривает все входящие пакеты в поисках структуры специфичной для шелл-кода (часто большой массив невыполняющихся кодов (NOP-ов)); если она находит такую структуру, пакет уничтожается до того, как он достигнет его целевого приложения. Слабая позиция СОВ в данном случае состоит в том, что она не осуществляет действительно хороший поиск иначе он займёт слишком много времени и таким образом замедлит соединение с интернетом.

Шелл-код почти всегда содержит строку с именем оболочки. Все входящие пакеты содержащие такую строку всегда рассматриваются как подозрительные в глазах СОВ. Также, некоторые приложения не принимают неалфавитно-цифровой ввод (они не принимают что-либо, кроме a-z, A-Z, 0-9, и несколько других символов.)

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

[править] См. также

   * Переполнение буфера
   * Переполнение кучи
   * Компьютерная безопасность
   * Ассемблер


[править] Ссылки

   * http://www.phrack.org/phrack/49/P49-14 (англ.) Классическое введение в переполнение стека и создание кода оболочки
   * http://www.shellcode.com.ar/docz/bof/Writing_shellcode.html (англ.) Введение в разработку кода консоли
   * http://www.metasploit.com/shellcode.html (англ.) Содержит x86 и не-x86 примеры кода консоли и интерфейс для автоматической генерации кода консоли и кодирования
   * http://www.shellcode.org/ (англ.) Содержит x86 и не-x86 примеры кода консоли
   * Steve Hanna Shellcoding for Linux and Windows Tutorial with example windows and linux shellcode (англ.) (2004). Проверено 30 сентября 2007.
   * Designing Shellcode Demystified (англ.).