Код оболочки
Материал из Википедии — свободной энциклопедии
Код оболочки, шелл-код (англ. 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 примеры кода консоли
- http://www.vividmachines.com/shellcode/shellcode.html (англ.) Учебник по windows и linux кодам консоли содержащий пошаговые примеры
- http://www.enderunix.org/docs/en/sc-en.txt (англ.) Разработка кода консоли постижима