Главная страница
Навигация по странице:

  • Глава 5. Защита исходных текстов программного обеспечения

  • Глава 6. Идентификация и аутентификация субъектов

  • Рис. 6.1. Внешний вид идентификаторов iButton

  • Табл. 6.1. Некоторые модификации устройства iButton

  • Бесконтактные радиочастотные карты prоximity

  • Рис. 6.2. Карты proximity

  • Пластиковые карты

  • Рис. 6.3. Пластиковые карты Ase фирмы Athena

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


    Скачать 4.72 Mb.
    НазваниеВведение. Защита программного обеспечения от несанкционированного использования с помощью программноаппаратных средств
    АнкорЛекции
    Дата19.11.2022
    Размер4.72 Mb.
    Формат файлаdoc
    Имя файлаLektsii_PASOIB.doc
    ТипДокументы
    #797594
    страница7 из 12
    1   2   3   4   5   6   7   8   9   ...   12
    Глава 4. Эмуляторы процессоров. Использование эмуляторов для взлома и защиты программного обеспечения.
    Взломщик, получив листинг программы посредством дизассемблирования или в отладчике, видит знакомые инструкции процессора. Скорость взлома защиты во многом зависит от того, насколько он хорошо знаком с данным процессором. Именно против этого факта направлена рассматриваемая защита.

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

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

    Для затруднения разбора и понимания эмулятора злоумышленником можно придумать много способов.

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

    2. Код процедур для эмуляции можно зашифровать или сжать, а потом восстанавливать на лету по одной команде самим эмулятором.

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

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

    Следует отметить также, что эмуляторы x86 позволяют обойти очень многие механизмы противодействия отладке, которые используются производителями. В связи с этим, эмуляторы являются мощным оружием двух сторон – злоумышленников и разработчиков систем защиты. Против эмуляторов бесполезны многие противоотладочные приемы, в них широко используется усиление отладочных и отслеживающих механизмов. Эмуляторы позволяют отвязывать ПО от электронных ключей, эмулируя их на программном уровне. Наиболее мощные дизассемблеры (IDA) позволяют подгрузить логику любого виртуального эмулятора, используемого разработчиком.

    Для разработчика главная задача – усложнение архитектуры виртуального процессора до такой степени, чтобы его анализ требовал высокой квалификации взломщика и был чрезвычайно трудоемким и утомительным. Наиболее сложным является анализ многопоточных виртуальных машин с динамическим набором команд и множеством циклов выборки и декодирования.
    Глава 5. Защита исходных текстов программного обеспечения
    Как правило, передача исходных текстов разработанного ПО является обязательным условием заказчика и закрепляется в контракте. Однако, зачастую разработчик не хочет передавать такого рода информацию для того, чтобы защитить используемые алгоритмы, защитить свою интеллектуальную собственность. Открытость исходных текстов программ, вообще говоря, – понятие очень размытое. Очень сложен ответ на вопрос – что более открыто: бинарная программа в 1 килобайт или 1.000.000 строк исходников без адекватной структуры и документации.

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

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

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

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

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

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

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

    Ловушка 1. Данная методология основана на совмещении разнотипных данных в одном аргументе. Допустим, если значение аргумента < n, то он – число, иначе – указатель на функцию. В данном случае необходима тщательная продуманность реализации. Вторым недостатком таких ловушек является то, что они отрицательно сказываются на переносимости программ под другие платформы. Их можно использовать только тогда, когда переносимость не требуется.

    Ловушка 2. Использование в программе необычных конструкций. Например, с точки зрения С++, перестановка индекса и имени массива ничего не меняет: buff[666], 666[buff]. Человека же можно поймать на такую запись.

    Ловушка 3. Использование пробелов при объявлении макроса. Например

    1) Запись Define x(a,b) a+b - Определяет макрос x(a,b) – сумма аргументов.

    2) Define x (a,b) a+b – макрос x, заменяющий последовательность (a,b) последовательностью a+b.

    При защитах, подобных тем, что представлены в данном разделе, затраты на анализ чужих исходных текстов сравнимы или даже превышают коммерческую ценность заложенных в них алгоритмов. Модификация же этих программ – практически бесполезное занятие: внесенные изменения способны порождать ошибки в непредсказуемых местах и в непредсказуемом количестве.
    Глава 6. Идентификация и аутентификация субъектов

    6.1. Идентификация и аутентификация пользователей с использованием технических устройств

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

    • идентификаторы iButton (Touch Memory);

    • бесконтактные радиочастотные карты proximity;

    • пластиковые карты;

    • ключи e-Token.

    У

    стройства идентификации iButton
    Устройства iButton являются разработкой американской компании Dallas Semiconductor (www.ibutton.com). Внешний вид данных устройств представлен на рис. 6.1.

    Рис. 6.1. Внешний вид идентификаторов iButton
    iButton представляет собой энергонезависимую память, размещенную в металлическом корпусе, с одним сигнальным контактом и одним контактом земли. Корпус, по виду напоминающий миниатюрную батарею, имеет диаметр 16,25 мм и толщину 3,1 или 5,89 мм - в зависимости от модификации прибора. В структуре iButton можно выделить следующие основные блоки.

    1. Постоянное запоминающее устройство (ПЗУ), которое хранит 64-разрядный код, состоящий из 1 байтового кода типа прибора, 48-битового уникального серийного номера (используемого для идентификации владельца) и 8-битовой контрольной суммы. Содержимое ПЗУ уникально и не может быть изменено в течение всего срока службы прибора.

    2. Оперативное запоминающее устройство. В одной из модификации iButton оперативная память аппаратно защищена от несанкционированного доступа.

    3. Встроенная миниатюрная литиевая батарейка со сроком службы не менее 10 лет, обеспечивающая питанием все блоки устройства.

    Табл. 6.1. Некоторые модификации устройства iButton

    Тип iButton

    Объем ОЗУ, байт

    Чтение

    Запись

    Примечание

    DS1990

    -

    +

    -




    DS1990A

    -

    +

    -




    DS2400

    -

    +

    -




    DS1992

    128

    +

    +




    DS1993

    512

    +

    +




    DS1994

    512

    +

    +

    Часы реального времени

    DS1991

    3x32

    +

    +

    Защищенная страница

    DS1995

    2048

    +

    +




    DS1996

    8192

    +

    +




    DS1982

    128

    +

    -




    DS1985

    2048

    +

    -




    DS1986

    8192

    +

    -




    DS1920

    -

    +

    -

    Термометр

    Достоинствами устройств iButton является их невысокая стоимость и простота использования.

    Недостатками устройств iButton являются:

    1. Сравнительно низкая скорость передачи информации.

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

    Устройства iButton главным образом используются для идентификации пользователей в системах управления физическим доступом в помещения, доступом к ПК. Аутентификация пользователей в этом случае происходит другими средствами, не связанными с iButton (ввод пароля с клавиатуры, набор кодовой комбинации на кодовом замке и т.п.).
    Бесконтактные радиочастотные карты prоximity

    Бесконтактные радиочастотные карты proximity (рис. 6.2) срабатывают на расстоянии и не требуют четкого позиционирования, что обеспечивает их устойчивую работу и удобство использования, высокую пропускную способность. Для срабатывания карточки ее достаточно просто поднести на некоторое расстояние к считывателю.



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

    Иногда этот тип карточек обозначают термином "Hands Free" - "Свободные руки". Нередко идентификаторы Proximity изготавливают в виде брелков.

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

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

    Расстояние считывания пассивных карточек - от 10 до 70 см в зависимости от типа считывателя. Активные бесконтактные карточки обеспечивают дальность считывания 1 - 2м, однако наличие незаменяемой батарейки приводит к их удорожанию и уменьшению срока службы. Поэтому чаще всего на практике используются пассивные бесконтактные карточки. Срок их службы практически неограничен.

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

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

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

    Пластиковая карта представляет собой пластину размерами 85,6х53,9х0,76мм, изготовленную из специальной, устойчивой к механическим и термическим воздействиям пластмассы (рис. 6.3).





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

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

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

    В картах со штрих кодом в качестве идентифицирующего элемента используется штрих-код. Широкое распространения данные карты получили при идентификации товаров в магазинах.

    Карты с магнитной полосой используют магнитную полосу для хранения информации. Магнитная полоса располагается на обратной стороне карты и состоит из трех дорожек. Первые две из них предназначены для хранения идентифицирующей информации, на третьей дорожке можно записывать информацию. Для стандартных считывающих устройств магнитная полоса изготавливается шириной 12,7мм (0,5 дюйма) и располагается на расстоянии 4мм от края карточки. Из-за невысокой надежности многократной записи, такие карты для записи не практикуются и практикуются только для считывания информации.

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

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

    Карты с памятью представляют собой переходный вариант от карт-счетчиков к картам с микропроцессором. Это перезаписываемая карта, в которой приняты меры, повышающие ее защищенность от атак злоумышленников. Объем памяти – от 32 байт до 16 Кб. Эта память может быть реализована в виде ППЗУ, которое допускает однократную запись и многократное считывание, или в виде энергонезависимой памяти, допускающей многократную запись и многократное считывание.

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

    Карты с микропроцессором (называемые также интеллектуальными картами или смарт-картами) представляют собой по сути дела компьютеры в миниатюре, содержащие в себе такие компоненты, как:

    1. Микропроцессор (CPU), предназначенный для обработки и защиты информации, хранящейся на карточке.

    2. Постоянная память ROM, в которой записано программное обеспечение карты, ее операционная система.

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

    4. Энергонезависимая память (EEPROM), в которой размещаются данные по используемым ключам, электронным кошелькам и другие сведения, изменяемые довольно редко.

    5.Система ввода-вывода.

    Архитектура карт с микропроцессором представлена на рис. 6.4.


    1   2   3   4   5   6   7   8   9   ...   12


    написать администратору сайта