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

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

1. Аутентификация с устройств, не имеющих возможности подключения смарт-карт / USB-ключей (КПК, смартфоны и др.).

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

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

4. Аутентификация по голосовому каналу (например, удаленное управление банковским счетом).

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

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

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

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

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: