Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #91, ИЮЛЬ 2006 г.

Мастерская бравого хакера

Крис Касперски

Хакер, номер #091, стр. 091-116-6


Правильно спроектированный shell-код работает на всех версиях операционных систем, для которых он предназначен, однако в последнее время все чаще и чаще приходится сталкиваться с «пионерством», которое привязано к фиксированным адресам и функционирует только под определенной сборкой Linux-ядра или заранее заданным сервис-паком, наложенным на Windows.

*nix-подобные системы в этом плане менее изменчивы, и проблема «фиксированных адресов» здесь практически сведена на нет. Обычно shell-код вызывает необходимые ему функции через системные вызовы, интерфейс с которыми обеспечивается прерыванием INT 80h или дальним вызовом по адресу 0007h:00000000h, что позволяет shell-коду функционировать под всей линейкой осей, для которых он предназначен. Тем не менее, определенные системные вызовы в различных версиях ядер реализованы неодинаково, что порождает проблемы совместимости. К счастью, базовый набор системных вызовов остается единым для всех осей, и грамотно спроектированный exploit поражает как Linux, так и BSD.

Заключение

Последние версии *nix'ов оснащены довольно мощными защитными механизмами: неисполняемым стеком, рандомизатором адресного пространства и т.д. Обычным exploit'ом такую штуку уже не пробить, а потому техника написания shell-кодов в ближайшем будущем обещает круто измениться, но прежде чем бросаться на неисполняемый стек, необходимо разобраться в существующих exploit'ах, что мы сейчас и попытались сделать.

Назад на стр. 091-116-5  Содержание