Современные информационные технологии /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 с: ил.