КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Базовые методы противодействия отладчикам
Методы защиты Противодействие отладке затрудняет злоумышленнику трассировку программы, а значит локализацию кода модуля защиты и его исследование. Методы борьбы с отладчиками можно подразделить на следующие группы [6]. 1. Использование триков (ловушек) для отладчиков, с помощью которых возможно выявить наличие последнего в оперативной памяти, и прекратить работу программы, либо затруднить процесс отладки. 2. Выявление наличия отладчика в оперативной памяти и последующая его нейтрализация, используя различные «дыры», допущенные при реализации отладчиков, либо внедренные разработчиком отладчика сознательно. 3. Использование недокументированных команд и недокументированных возможностей процессора. Защита от отладчиков реального режима Работа данных отладчиков построена на использовании двух аппаратных прерываний: int 1, с помощью которого выполняется пошаговое исполнение программы, и int 3, с помощью которого в код отлаживаемой программы внедряются точки останова (breakpoints). При трассировке программы отладчиком задействуется регистр флагов, а именно флаг трассировки TF (восьмой бит регистра флагов при нумерации с нуля), однако, непосредственная его проверка внутри программы для обнаружения отладчика может оказаться безрезультатной, так как большинство отладчиков эмулируют «чистый» регистр отладки. Основываясь на данных фактах, приведём примеры нескольких триков для отладчиков реального режима. Трик 1 Данная ловушка помогает выяснить реальное содержимое трассировочного флага TF в условиях эмуляции его отладчиком. Ловушка основана на том, что вследствие аппаратной особенности реализации процессора INTEL после исполнения инструкции pop ss прерывание int 1 не может быть вызвано, и отладчик «не замечает» и пропускает следующую за данной командой инструкцию. Таким образом, следующая за pop ss инструкция исполняется на реальном процессоре, а не под отладкой. Выяснить действительное содержание трассировочного флага в данном случае можно следующим образом.
Трик 2 Для противодействия отладчикам реального режима можно перехватывать в защищаемой программе прерывание int 1 и использовать его для собственных нужд, либо для ссылки на механизм защиты. Тогда при попытке отладки программы она будет либо некорректно работать, либо будет передавать управление модулю защиты, который, например, будет выводить на экран сообщение о невозможности продолжения работы. Механизм защиты может выглядеть следующим образом.
Точки останова реализуются отладчиками реального режима следующим образом. 1. В код программы вставляется вместо точки останова код 0xCC, а значение памяти, которое находилось по его адресу, запоминается отладчиком. 2. Когда программа встречает команду с кодом 0xCC, она вызывает исключительную ситуацию 0x3h (int 3). При этом в стеке запоминается регистр флагов, указатель текущего кодового сегмента (CS), указатель команд IP, запрещаются прерывания (очищается флаг FI). 3. После выполнения действий п.2 программа поступает в монопольное распоряжение отладчика. 4. Обычно, при входе в отладчик последний сохраняет текущие значения всех регистров программы в стеке либо присваивает своим локальным переменным. Таким образом, установка точки останова требует непосредственной модификации кода программы (0xCC), вынуждая отладчик изменить соответствующий байт программы. Система защиты может попытаться обнаружить факт изменения кода программы и прекратить ее исполнение. Используя данный факт, для защиты от установки точек останова можно применить следующие подходы. 1. Зашифровать код программы на некотором ключе, зависящем от контрольной суммы исполняемого кода. При изменении кода программы расшифровка будет неверна и исполнение программы нарушится. 2. Установить из программы вершину стека в нуль. Так как стек ОС растет сверху вниз (к нижним адресам памяти), то когда процессор встретит точку прерывания, установленную отладчиком, то попытается в первую очередь сохранить регистр флагов в стеке, однако сделать этого не сможет, так как стек исчерпан. В данном случае ОС завершит некорректно работающее приложение с ошибкой. Защита от отладчиков защищённого режима Особенностью отладчиков защищённого режима является возможность полной их изоляции от выполняемой программы. В связи с этим, задача обнаружения отладчика в памяти стандартными средствами значительно усложняется. Особенностью защищенного режима является введение специализированных регистров DR0 – DR7, предназначенных для отладочных целей (таких, как установка точек останова, в том числе на обращение к определённым адресам памяти и др.). Один из способов противодействия отладчикам защищённого режима заключается в манипулировании регистрами отладки DR0-DR7. Для противодействия отладчикам защищённого режима можно через определённые, достаточно малые интервалы времени производить очистку данных регистров. Cледует отметить, что рассмотренные приёмы защиты от отладчиков не являются универсальными. Они являются всего лишь результатом особенностей архитектуры процессора и инструментов отладки. Данные особенности ограничены, а их принципы исчислимы. Трики можно обойти, если злоумышленник знает о них. Если же злоумышленник не знаком с некоторым триком, то какие-то критические моменты, вызванные срабатыванием трика, могут его насторожить, и при повторной прогонке этого участка кода взломщик обойдет эту ловушку. Преимущества защиты от отладки с помощью перечисленных методов в том, что трики между собой не связаны, их можно очень легко применять. Недостатками данных методов является то, что они предназначены для защиты только от начинающих взломщиков, профессионалы их обойдут. Трики, как правило, включаются в программу по правилу «чем больше, тем лучше» и от их исключения логика работы программы не меняется. В некоторых случаях совокупный размер кодов триков сравним с размером программы.
Дата добавления: 2014-01-11; Просмотров: 1944; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |