Студопедия

КАТЕГОРИИ:


Архитектура-(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)

ЛЕКЦИЯ 14 Защита программ от изучения. Защита от отладки, защита от дизассемблирования, защита от трассировки по прерываниям

14.1. Классификация способов защиты

14.2. Защита от отладки и дизассемблирования

 

14.1. Классификация способов защиты

При проектировании и реализации систем защиты информации (СЗИ) практически всегда возникает задача защиты ее алгоритма. Атака на алгоритм СЗИ может быть пассивной (изучение) — без изменения алгоритма СЗИ и активной — с изменением алгоритма в соответствии с целью злоумышленника. Например, при анализе СЗИ, выполняющей операции криптографической защиты, успешная пассивная атака приводит к тому, что злоумышленнику становится полностью известен алгоритм шифрования и, возможно, часть ключевых элементов, локализованных в программе. При активной атаке на СЗИ от копирования возможно отключение механизмов проверки ключевого признака.

Будем считать, что человек, преследующий цель исследования логики работы СЗИ, является злоумышленником. Для решения своей задачи он располагает средством (субъектом компьютерной системы), которое для краткости будем называть отладчиком.

Задача защиты от изучения (исследования) сводится к решению двух взаимосвязанных задач:

• выявлению отладчика;

• направлению работы защищенной программы или отладчика по "неверному пути".

Атаки злоумышленника на логику работы СЗИ сводятся к декомпозиции программного кода на множество отдельных команд (инструкций), каждая из которых (либо группа инструкций) рассматривается отдельно. Условно такие атаки можно разделить на динамические — разбор по командам, сопряженный с выполнением программы (выполнением каждой рассматриваемой команды), и статические — декомпозиция всего кода программы, возможно, не сопряженная с ее прямым исполнением, основанная на анализе логики исполнения команд и логики вызовов различных функций (дизассемблирование). Не вдаваясь в подробности обоих процессов, отметим лишь существенно важные детали.

Программное средство злоумышленника (отладчик) работает в общей для него и изучаемой программы оперативной памяти, использует те же аппаратные ресурсы (например, процессор), непустое общее подмножество внешних событий программной среды (например, прерываний) — иначе говоря, работа отладчика оставляет в программно — аппаратной среде, общей с изучаемой программой, некоторые "следы". Кроме того, отладчик управляется человеком, который, как известно, реагирует на все гораздо медленнее, чем ЭВМ. Далее, управление работой отладчика может происходить через клавиатуру, а восприятие результатов — через экран.

Вполне понятно, что изучаемая программа может "мешать" работе отладчика, имея для этого все названные выше признаки. В данном случае представляется уместной аналогия из квантовой механики, когда наблюдатель либо существенно влияет на процесс в мире микрочастиц, либо должен быть так мал, что частицы будут влиять на него. И в том, и в другом случае реальная картина эксперимента искажается.

Злоумышленник должен наблюдать за изучаемой программой как можно "незаметнее", не оставлять следов своей деятельности, и его программное средство должно быть защищено от активного воздействия со стороны изучаемой программы. С другой стороны, разработчик защиты должен так строить ее, чтобы либо обнаруживать присутствие отладчика, либо не давать работать вообще никому, кроме себя, либо мешать восприятию результатов исследования.

14.2. Защита от отладки и дизассемблирования

Способы защиты от исследования можно разделить на четыре класса.

1. Влияние на работу отладочного средства через общие программные или аппаратные ресурсы. В данном случае наиболее известны:

• использование аппаратных особенностей микропроцессора (особенности работы очереди выборки команд, особенности реализации команд и т.д.);

• использование общего программного ресурса (например, общего стека) с отладочным средством и разрушение данных или кода отладчика, принадлежащих общему ресурсу, либо проверка использования общего ресурса только защищаемой программой (например, определение стека в области, критичной для выполнения защищаемой программы);

• переадресация обработчиков отладочных событий (прерываний) от отладочного средства к защищаемой программе.

Выделение трех групп защитных действий в данном классе не случайно, поскольку объективно существуют общие аппаратные ресурсы (и отладчик, и защищаемая программа в случае однопроцессорного вычислителя выполняются на одном и том же процессоре), общие программные ресурсы (поскольку и отладчик, и защищаемая программа выполняются в одной и той же операционной среде), наконец, отладчик создает специфичные ресурсы, существенные для его собственной работы (например, адресует себе отладочные прерывания).

2. Влияние на работу отладочного средства путем использования особенностей его аппаратной или программной среды. Например:

• перемещение фрагментов кода или данных с помощью контроллера прямого доступа к памяти;

• влияние на процесс регенерации оперативной памяти (на некотором участке кода регенерация памяти отключается, а затем опять включается — при нормальной работе никаких изменений нет, при медленном выполнении программы отладчиком она "зависает");

• переход микропроцессора в защищенный режим.

3. Влияние на работу отладчика через органы управления или/и устройства отображения информации.

Выдаваемая отладочными средствами информация анализируется человеком. Следовательно, дополнительный способ защиты от отладки — это нарушение процесса общения оператора и отладчика, а именно искажение или блокирование вводимой с клавиатуры и выводимой на терминал информации.

4. Использование принципиальных особенностей работы управляемого человеком отладчика. В данном случае защита от исследования состоит в навязывании для анализа избыточно большого объема кода (как правило, за счет циклического исполнения некоторого его участка).

Рассмотрим данный метод подробнее. Пусть имеется некоторое полноцикловое преобразование из N состояний ti: Т = t1, t2,..., tN (например, обычный двоичный счетчик либо рекуррента). Значение N выбирается не слишком большим. Например, для k-битового счетчика N = 2k. Участок кода, защищаемый от изучения, динамически преобразуется (шифруется) с использованием криптографически стойкого алгоритма на ключе ti, который выбирается случайно равновероятно из множества состояний Т.

Работа механизма защиты от исследования выглядит следующим образом. Программа полноциклового преобразования начинает работу с детерминированного или случайного значения. На установленном значении производится расшифрование зашифрованного участка кода. Правильность расшифрования проверяется подсчетом хеш — значения расшифрованного кода с использованием элементов, связанных с отладкой (стек, отладочные прерывания и др.). Хеш-функция должна с вероятностью 1 определять правильность расшифрования (для этого хеш — значение должно быть не менее k).

Предположим, что полноцикловое преобразование стартует с первого значения. Тогда при нормальном выполнении программы (скорость работы высокая) будет совершено i циклов алгоритма, после чего защищенный участок будет корректно исполнен. При работе отладчика, управляемого человеком, скорость выполнения программы на несколько порядков ниже, поэтому для достижения необходимого значения i будет затрачено значительное время.

Для численной оценки данного метода введем следующие значения. Предположим, что i в среднем равно N/2. Пусть w0 — время выполнения цикла алгоритма (установка текущего значения, расшифрование, проверка правильности расшифрования) в штатном режиме функционирования (без отладки);.w1 — время выполнения того же цикла в режиме отладки; z — предельное время задержки при штатной работе защищенной программы. Тогда N = z / w0. Затраты времени злоумышленника исчисляются средней величиной Тзл = Nw1/2. Для приблизительных расчетов w1/w0» 10000.

В ряде способов защиты от отладки идентификация отладчика и направление его по ложному пути происходят одновременно, в одном и том же фрагменте кода (так, при определении стека в области кода защищаемой программы при работе отладчика, использующего тот же стек, код программы будет разрушен). В других случаях ложный путь в работе программы формируется искусственно. Часто для этого используют динамическое преобразование программы (шифрование) во время ее исполнения.

Способ динамического преобразования заключается в следующем: первоначально в оперативную память загружается фрагмент кода, содержание части команд которого не соответствует тем командам, которые данный фрагмент в действительности выполняет; затем этот фрагмент по некоторому закону преобразуется, превращаясь в исполняемые команды, которые затем и выполняются.

Преобразование кода программы во время ее выполнения может преследовать три основные цели:

• противодействие файловому дизассемблированию программы;

• противодействие работе отладчика;

• противодействие считыванию кода программы в файл из оперативной памяти.

Перечислим основные способы организации преобразования кода программы.

1. Замещение фрагмента кода функцией от находящейся на данном месте команде и некоторых данных.

2. Определение стека в области кода и перемещение фрагментов кода с использованием стековых команд.

3. Преобразование кода в зависимости от содержания предыдущего фрагмента кода или некоторых условий, полученных при работе предыдущего фрагмента.

4. Преобразование кода в зависимости от внешней к программе информации.

5. Преобразование кода, совмещенное с действиями, характерными для работы отладочных средств.

Поясним кратко приведенные способы. Первый способ заключается в том, что по некоторому адресу в коде программы располагается, например, побайтовая разность между реальными командами программы и некоторой хаотической информацией, которая располагается в области данных. Непосредственно перед выполнением данного участка программы происходит суммирование хаотической информации с содержанием области кода и в ней образуются реальные команды.

Второй способ состоит в перемещении фрагментов кода программы в определенное место или наложении их на уже выполненные команды при помощи стековых операций.

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

Четвертый способ заключается в преобразовании кода программы на основе некоторой внешней информации, например считанной с ключевой дискеты некопируемой метки, машинно-зависимой информации или ключа пользователя. Это позволит исключить анализ программы, не имеющей ключевого носителя или размещенной на другом компьютере, где машинно-зависимая информация иная.

Пятый способ состоит в том, что вместо адресов отладочных прерываний помещается ссылка на процедуру преобразования кода программы. При этом либо блокируется работа отладчика, либо неверно преобразуется в исполняемые команды код программы.

Часто с отладочными прерываниями бывают совмещены сложные алгоритмы преобразования кода программы, которые при выполнении каждой команды производят преобразование последующей команды в исполняемую и предыдущей в хаотический код. Такой метод получил название "бегущая строка". Как правило, это прерывание int 1h (ONE STEP). Для успешного применения данного метода обязательно выполнение следующих условий:

невозможность переопределения функции, замещающей отладочное прерывание и выполняющей преобразование кода программы, на неиспользуемое прерывание;

отсутствие операций сравнения для определения факта работы под отладчиком.

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

Если нельзя избежать операции сравнения (например, чтобы нелегальная копия программы не "зависала"), то желательно сравнивать не контрольные числовые значения, а некоторые необратимые или сложнообратимые функции от них.

Важной задачей является защита от трассировки программы по заданному событию (своего рода выборочное исследование). В качестве защиты от трассировки по заданному событию (прерыванию) можно выделить ряд основных способов.

1. Пассивная защита — запрещение работы при переопределении обработчиков событий относительно заранее известного адреса.

2. Активная защита первого типа — замыкание цепочек обработки событий минуя программы трассировки.

3. Активная защита второго типа — программирование функций, исполняемых обработчиками событий, другими способами, не связанными с вызовом "штатных" обработчиков или обработчиков событий, которые в текущий момент не трассируются.

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

работа с ключевой меткой путем прямого программирования контроллера гибкого диска (активная защита второго типа);

определение одного из неиспользуемых прерываний для работы с диском (активная защита первого типа);

прямой вызов соответствующих функций в ПЗУ (BIOS) после восстановления различными способами их физического адреса (активная защита первого типа);

определение факта переопределения адреса прерывания на другую программу и невыполнение в этом случае дисковых операций (пассивная защита).

При операциях с жестким диском, как правило, используется прерывание int 13h. Для предотвращения трассировки программы по заданному прерыванию (в данном случае прерыванию int 13h) можно также использовать указанные выше способы, а именно:

переопределение исходного прерывания в BIOS на неиспользуемый вектор прерывания;

прямой вызов функций BIOS.

Прерывание int 1h относится к аппаратным прерываниям, вызываемым особым состоянием процессора. Данное состояние достигается установкой специального флага трассировки в регистре флагов. При этом после завершения выполнения каждой инструкции процессора автоматически вызывается прерывание int 1h (режим покомандного управления). Для того чтобы включение трассировки не воздействовало на саму программу — обработчик первого прерывания (в режиме обычной работы она состоит из одной команды iret), при вызове прерывания флаг трассировки автоматически сбрасывается. Поскольку при вызове прерывания регистр флагов автоматически сохраняется в стеке, а при окончании работы обработчик его автоматически восстанавливает, то после обработки прерывания управление возвращается к следующей трассируемой команде вновь с установленным флагом трассировки. Функционально это аналогично тому, что после каждой команды прикладной программы находится команда вызова первого прерывания. Выполнив покомандно цепочку int 13h и проанализировав исполняемые инструкции, можно легко определить точки входа в BIOS.

Часто недооценивается опасность трассировки по событиям операционной среды. В основном таким образом могут быть выделены следующие действия программ:

определение факта замены обработчиков событий на собственные функции (в частности, для защиты от отладчиков);

файловые операции, связанные со считываниями различных счетчиков или паролей, вычисление контрольных сумм и хеш-функций файлов;

файловые операции, связанные со считыванием заголовков и другой существенно важной информации в исполняемых файлах или загружаемых библиотеках.

Кроме того, в защищаемых программах, полученных при помощи распространенных компиляторов, в самом начале идет последовательность предопределенных событий операционной среды (для программ DOS — прерываний 21h). Этот факт позволяет в очень многих случаях при остановке на одном из этих прерываний считать код программы из оперативной памяти в незащищенном виде, поскольку к этому моменту антиотладочные средства обычно завершают свою работу.

 

<== предыдущая лекция | следующая лекция ==>
Виды денег. Деньги в своем развитии выступали в двух видах: | История педагогических идей и воспитательных практик
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 5206; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.03 сек.