Что такое шелл-код? Понятие термина шелл-код
Шелл-кодом (shellcode) называется исполняемый двоичный код, обычно передающий управление командному процессору, например command.com в MS-DOS и cmd, '/bin/sh' Unix shell. Шелл-код может использоваться как полезная нагрузка эксплойта, которая обеспечивает хакеру доступ к командной оболочке в системе.
Если эксплуатируется удаленная уязвимость, шелл-код может открывать заданный заранее TCP порт уязвимой машины, через который будет производиться последующий доступ к командной оболочке. Данный код называют привязывающим к порту. Если же шелл-код осуществляет подключение к порту компьютера атакующего, что делается с целью обхода сетевого экрана, то обычно такой код называют обратной оболочкой.
Принцип работы шелл-кода
Шелл-код в основном внедряется в память программы, после чего на него передается управление путем переполнения стека, либо при переполнения буфера, либо в результате использования атаки форматной строки. Управление передается путем перезаписи адреса возврата в стеке адресом внедренного кода, изменения обработчиков прерываний, либо перезаписи адресов вызываемых функций. Результат – выполнение шелл-кода, открывающего командную строку для дальнейшего использования.
Обнаружение шелл-кода
Хакеры пишут шелл-коды использую методы, скрывающие их атаку. Часто они пытаются узнать, как системы обнаружения вторжения (СОВ) определяют их входящие атаки. Типичная СОВ просматривает входящие пакеты с целью найти структуру, специфичную для шелл-кода. Если СОВ находит такую структуру, то пакет ликвидируется еще до достижения своей цели. Минус СОВ в том, что она не может осуществить действительно качественный поиск, в противном случае он займет массу времени и замедлит соединение в сетью Интернет.
Почти всегда шелл-код содержит строку с именем оболочки. Все пакеты, который содержат такую строку, рассматриваются СОВ как подозрительные.