Что такое Шелл-код / Shellcode


Шелл-код(Shellcode) (от англ. shell – оболочка и code — код) — двоичный исполняемый код, обычно передающий управление командному процессору, например

  • '/bin/sh' Unix shell, command.com

в MS-DOS и

  • cmd.exe

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

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

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


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

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

Для прохождения через все эти меры направленные против вторжения, взломщики используют:

  • шифрование;
  • самомодифицирующийся код;
  • полиморфный код;
  • алфавитно-цифровой код.