Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
156
Добавлен:
10.05.2015
Размер:
10.64 Mб
Скачать

Шифрование кода программы как универсальный метод противодействия отладке и дизассемблированию

Рассмотренные выше приемы противодействия отладке и дизассемблированию имеют один серьезный недостаток – они привязываются либо к особенностям процессора, либо к особенностям отладчиков (дизассемблеров). Квалифицированные злоумышленники рано или поздно их обойдут.

Наиболее предпочтительным способом защиты ПО от отладки и дизассемблирования является способ, основанный на шифровании кода программы на некотором секретном ключе. При этом предъявляется требование того, чтобы секретность ключа не могла быть нарушена путем исследования кода программы и дискового пространства ПК. Таким образом, ключ не должен фигурировать ни в коде программы, а также не должен храниться ни в файле, ни в реестре, где он может быть обнаружен путем исследования работы программы различными средствами мониторинга.

Допустим, например, что секретный ключ расшифровывает рабочий код программы, а берется, из электронного ключа, либо представляет собой вводимую пользователем последовательность. В данном случае взлом становится очень трудоемким, а иногда и невозможным в приемлемые сроки. Затягивание времени взлома позволит все это время поддерживать объемы продаж.

Выделяют два способа шифрования кода программы – статическое и динамическое.

В первом случае модуль дешифровки отрабатывает только один раз, после чего исходный код будет полностью восстановлен. Такой подход имеет простую реализацию, но крайне неэффективен. Злоумышленник может снять дамб памяти в момент окончания работы модуля дешифровки. Это трудно сделать при динамической дешифровке, когда ни в какой момент времени код не будет расшифрован полностью. При вызове процедуры он расшифровывается, а при выходе – зашифровывается вновь.

Реализация простейшей процедуры шифрования / дешифрования кода программы может выглядеть следующим образом:

LEA SI,beginCrypt;

начало зашифрованного блока

Repeat:

Xor byte ptr [SI], 077h

INC SI

CMP SI, offset endCrypt

JNA Repeat

beginCrypt

……

endCrypt

При анализе зашифрованных блоков программы, дизассемблер выдаст неверные результаты.

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

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

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

Желательно, чтобы расшифровка кода велась на достаточно длинном ключе, а контроль корректности введенного ключа производился путем сравнения свертки данного ключа со сверткой эталонного ключа. При этом желательно, чтобы свертка не удовлетворяла свойству рассеивания. В этом случае злоумышленник, зная свертку, получает множество удовлетворяющих ей ключей. При этом нет никаких достаточно строгих критериев, позволяющих автоматически отличить ложные варианты ключей. Как правило, злоумышленник должен брать ключ, запускать программу, она «зависает», брать другой ключ и т.д. В этом случае нахождение верного ключа значительно усложняется. Таким образом, данный метод является достаточно стойким и ставит множество проблем перед злоумышленником

Лекция 31

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

Защита от разрушающих программных воздействий (РПВ)

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

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

Эти программы могут реализовать следующие функции:

  1. скрывать признаки своего присутствия в оперативной среде

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

  3. способны разрушать код иных программ в оперативной памяти КС

  4. способны переносить фрагменты информации из оперативной памяти в некие области внешней памяти, доступной злоумышленнику

  5. имеют потенциальную возможность исказить либо подменить выводящуюся во внешнюю память информацию.

РПВ делятся на следующие классы:

  1. Вирусы. Особенностью является направленность на самодублирование и деструктивные функции. Задача скрытия своего присутствия в ПА среде часто не ставится

  2. Программные «черви» - РПВ, основной функцией которых является самодублирование путем распространения в сетях, используя уязвимости прикладных систем и сетевых сервисов.

  3. «Троянские кони». Для этих программ не свойственно деструктивное воздействие. Данный класс РПВ часто относят к вирусам, однако, основной функцией РПВ данного класса, как правило, заключается в краже информации, например, номеров кредитных карт, либо в имитации сбоя ЭВМ, чтобы под видом ремонта злоумышленник мог получить к ней доступ. Основная особенность – ассоциирование либо выдача себя за часто используемое ПО либо сервисы.

  4. Логические люки. РПВ, представляющее собой недекларируемую возможность, внедренную на этапе проектирования кода в исходные тексты программного обеспечения.

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

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

Если РПВ присутствует в ПА среде и загружено в оперативную память, то при отсутствии для него активизирующего события деструктивные особенности этого РПВ невозможны.

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

Соседние файлы в папке ПАЗИ 622231