Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #58, СЕНТЯБРЬ 2005 г.

Защити свои приложения

Илья Рабинович

Спецвыпуск: Хакер, номер #058, стр. 058-034-4


Кстати, по умолчанию DEP включен только для компонентов операционной системы. Для программ сторонних разработчиков он выключен! Почему? Да потому что огромное количество программ выполняют свой код в куче или стеке, и часто даже без ведома самих разработчиков! Как такое может быть? Да очень просто! При сабклассинге библиотека ATL помещает специальную функцию-переходник в кучу или стек и ставит на нее адрес обработчика оконной функции. В итоге при любом вызове оконной функции, перехваченной таким образом, сначала вызывается переходник в куче или стеке, который, в свою очередь, вызывает обработчик оконной функции, уже написанный разработчиком. И таких программ довольно много (навскидку, из известных - VMWare).

Если же процессор не обладает NX/XD-битом, то тут дело совсем плохо: как все только что убедились, защита от переполнения буфера от Microsoft тянет хоть на что-то только при наличии NX/XD-бита. Без него предыдущий пример был бы еще проще и "return-into-libc"-технологии были бы не нужны. Ставим обработчик ошибок SEH на заранее найденную инструкцию jmp [esp+8]-, и шелл-код зашуршал своими байтиками и опкодами в обход всех защит. И отсюда следует....

Щит №5: защита от сторонних разработчиков

Рассмотрим наиболее известные продукты - DefencePlus, Cisco Security Agent, StackDefender, OverflowGuard - в обратном порядке (по возрастанию уровня сложности программ порядок именно такой).

OverflowGuard защищает только сервисы Microsoft Windows. Защита строится на неисполняемости стека и кучи. Правда, в отсутствие NX/XD-бита эта неисполняемость достается дорого - ценой производительности системы. Именно поэтому OverflowGuard защищает только сервисы: чем меньше защищаемых приложений, тем меньше падение производительности. Защита декларируется от return-into-libc, но проверить это на практике очень тяжело. Прогнать тесты на софте, который защищает систему ТАК, практически нереально. Кроме того, если учесть, что акценты атак на переполнение буфера сегодня смещаются в сторону программ не от Microsoft, эта программа вообще ни от чего, собственно, не защищает.

Cisco Security Agent базируется на перехвате вызовов функций, то есть если наш шелл-код вызывает функцию StartService, этот вызов будет перехвачен обработчиком от Cisco и проанализирован на адрес возврата из функции. Этот адрес должен лежать внутри модуля, и перед ним должна быть инструкция call [что-нибудь] или jmp [что-нибудь].

Эти проверки обходятся также элементарно. Достаточно при вызове функций, перехваченных CSA, подставлять не свой адрес возврата, а адрес конструкции:

call [неважно_что]/jmp [неважно_что]

fake_addr: <-этот адрес мы подставляем как адрес возврата!

Назад на стр. 058-034-3  Содержание  Вперед на стр. 058-034-5