Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Основные положения информационной безопасности

Защита программных средств от исследований

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

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

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

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

Существует несколько методов противодействия дизассемблированию:

  • • шифрование;
  • • архивация;
  • • использование самогенерирующихся кодов;
  • • «обман» дизассемблера.

Архивацию можно рассматривать как простейшее шифрование. Причем архивация может быть объединена с шифрованием. Комбинация таких методов позволяет получать надежно закрытые компактные программы. Зашифрованную программу невозможно дизассемблировать без расшифрования. Зашифрование (расшифрование) программ может осуществляться аппаратными средствами или отдельными программами. Такое шифрование используется перед передачей программы по каналам связи или при хранении ее на внешних запоминающих устройствах. Дизассемблирование программ в этом случае возможно только при получении доступа к расшифрованной программе, находящейся в оперативной памяти перед ее выполнением. Другой подход к защите от дизассемблирования связан с совмещением процесса расшифрования с процессом выполнения программ. Если расшифрование всей программы осуществляется блоком, получающим управление первым, то такую программу расшифровать довольно просто. Гораздо сложнее расшифровать и дизассемблировать программу, которая поэтапно расшифровывает информацию, и этапы разнесены по ходу выполнения программы. Задача становится еше более сложной, если процесс расшифрования разнесен по тексту программы.

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

Под «обманом» дизассемблера понимают такой стиль программирования, который вызывает нарушение правильной работы стандартного дизассемблера за счет нестандартных приемов использования отдельных команд, нарушения общепринятых соглашений. «Обман» дизассемблера осуществляется несколькими способами:

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

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

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

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

Для противодействия трассировке программы в ее состав вводятся следующие механизмы:

  • • изменение среды функционирования;
  • • модификация кодов программы;
  • • «случайные» переходы.

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

Классификация средств исследования программ

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

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

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

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

Помимо этих двух основных инструментов исследования можно использовать:

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

Методы защиты программ от исследования

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

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

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

  • • инициализатор;
  • • зашифрованную секретную часть;
  • • деструктор (деинициализатор).

Инициализатор должен обеспечивать выполнение следующих функций:

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

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

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

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

Для большей надежности инициализатор может быть частично зашифрован и по мере выполнения может дешифровать сам себя.

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

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

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

Общая характеристика средств нейтрализации компьютерных вирусов

Наиболее распространенным средством нейтрализации являются антивирусные программы (антивирусы). Антивирусы, исходя из реализованного в них подхода к выявлению и нейтрализации вирусов, принято подразделять на следующие группы:

  • • детекторы;
  • • фаги;
  • • вакцины;
  • • прививки;
  • • ревизоры;
  • • мониторы.

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

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

Фаги выполняют функции, свойственные детекторам, но кроме того, «излечивают» инфицированные программы посредством «выку-сывания» вирусов из их тел.

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

Классификация методов защиты от компьютерных вирусов

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

  • • регламентацию проведения работ на ЭВМ;
  • • применение программных средств защиты;
  • • использование специальных аппаратных средств.

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

Фильтрация. Заключается в использовании программ-сторожей для обнаружения попыток выполнить несанкционированные действия.

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

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

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

  • • входной контроль новых программ;
  • • сегментация информации на магнитном диске;
  • • защита операционной системы от заражения;
  • • систематический контроль целостности информации.
 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 

Популярные страницы