Современные
информационные технологии /4. Информационная безопасность
Шадхин В.Е., Колесник
А.В., Кажукало В.С.
Черкасский государственный технологический университет
Методы защиты программного обеспечения от исследования
Для
защиты программ от исследования необходимо применять методы защиты от
исследования файла с ее исполняемым кодом, хранящемся на внешнем носителе, а
также методы защиты исполняемого кода, загружаемого в оперативную память для
выполнения этой программы.
В
первом случае защита может быть основана на шифровании секретной части
программы, а во втором - на блокировании доступа к исполняемому коду программы
в оперативной памяти со стороны отладчиков. Кроме того, перед завершением
работы защищаемой программы должен обнуляться весь ее код в оперативной памяти.
Это предотвратит возможность несанкционированного копирования из оперативной
памяти дешифрованного исполняемого кода после выполнения защищаемой программы.
Таким
образом, защищаемая от исследования программа должна включать следующие компоненты:
-
инициализатор;
-
зашифрованную секретную
часть;
-
деструктор
(деициниализатор).
Инициализатор
должен обеспечивать выполнение следующих функций:
-
сохранение параметров
операционной среды функционирования (векторов прерываний, содержимого регистров
процессора и т.д.);
-
запрет всех внутренних и
внешних прерываний, обработка которых не может быть запротоколирована в
защищаемой программе;
-
загрузка в оперативную
память и дешифрование кода секретной части
-
программы;
-
передача управления
секретной части программы.
Секретная часть программы предназначена для выполнения основных целевых
функций программы и защищается шифрованием для предупреждения внесения в нее
программной закладки.
Деструктор
после выполнения секретной части программы должен выполнить следующие действия:
-
обнуление секретного
кода программы в оперативной памяти;
-
восстановление
параметров операционной системы (векторов прерываний, содержимого регистров
процессора и т.д.), которые были установлены до запрета неконтролируемых
прерываний;
-
выполнение операций,
которые невозможно было выполнить при запрете неконтролируемых прерываний;
-
освобождение всех
незадействованных ресурсов компьютера и завершение работы программы.
Для
большей надежности инициализатор может быть частично зашифрован и по мере
выполнения может дешифровать сам себя.
Дешифроваться
по мере выполнения может и секретная часть программы.
Такое
дешифрование называется динамическим дешифрованием исполняемого кода. В этом
случае очередные участки программ перед непосредственным исполнением
расшифровываются, а после исполнения сразу уничтожаются.
Для
повышения эффективности защиты программ от исследования необходимо внесение в
программу дополнительных функций безопасности, направленных на защиту от
трассировки. К таким функциям можно отнести:
-
периодический подсчет
контрольной суммы области оперативной памяти, занимаемой защищаемым исходным
кодом; сравнение текущей контрольной суммы с предварительно сформированной
эталонной и принятие необходимых мер в случае несовпадения;
-
проверку количества
занимаемой защищаемой программой оперативной памяти; сравнение с объемом, к
которому программа адаптирована, и принятие необходимых мер в случае
несоответствия;
-
контроль времени
выполнения отдельных частей программы;
-
блокировку клавиатуры на
время отработки особо секретных алгоритмов.
Для
защиты программ от исследования с помощью дизассемблеров можно использовать и
такой способ, как усложнение структуры самой программы с целью запутывания
злоумышленника, который дизассемблирует эту программу. Например, можно
использовать разные сегменты адреса для обращения к одной и той же области
памяти. В этом случае злоумышленнику будет трудно догадаться, что на самом деле
программа работает с одной и той же областью памяти.
Литература:
1.
Рихтер Дж. Windows для профессионалов:
создание эффективных Win32- приложений
с учетом специфики 64-разрядной Windows / Пер. с англ. - 4-е изд. - СПб: Питер; М:
Издательско-торговый дом "Русская Редакция", 2005.-752 с: ил.
2.
Колесников К.В., Шадхин В.Е. Проектирование системы
защиты програмного кода от скрытого сканирования // Вісник ХНУ. – 2008. – №5. – с. 83-85.
3. Тимченко А.А.,
Колесников К.В., Шадхин В.Е. Системный анализ критериев и параметров
проектирования системы защиты// Радіоелектронні і комп’ютерні системи. – 2006. – №2.
– С.63-65.
4.
Мартино Х. Методы защиты от дизассемблеров. Пер. с англ.
- СПб: Питер; М.: Издательско-торговый дом "Русская редакция", 2002.
- 284 с: ил.
5.
Коваль И.
Как написать компьютерный вирус: практика программирования на ассемблере /СПб:
Символ Плюс, 2000.-189 с.
6.
Девянин П. Н. и др. Теоретические основы компьютерной безопасности: Учеб. пособие для
вузов. - М.: Радио и связь, 2000. - 192 с: ил.