50511

Теория информационной безопасности и методология защиты информации. Методические указания

Книга

Коммуникация, связь, радиоэлектроника и цифровые приборы

Защита ПО от несанкционированного использования с помощью электронных ключей HSP Защита ПО от несанкционированного использования с помощью электронных ключей HSP Цель Познакомиться на практике с методами и средствами программно-аппаратной защиты программ и данных на примере электронных ключей HSP. Научиться программировать под электронные ключи HSP с использованием PIфункций для защиты программ от НСД. Программно-аппаратные средства Компьютерная лаборатория с ЛВС; электронные ключи HSP: HSP4 Stndrd HSP4 Memo HSP4 Time HSP4 Net;...

Русский

2014-01-25

2.41 MB

54 чел.

Министерство образования и науки Российской Федерации

КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

им. А.Н. ТУПОЛЕВА

И.В. Аникин, А.С. Катасев, М.А. Кривилев

Методические указания к выполнению

лабораторных работ

Казань 2008

УДК 075.8

И.В. Аникин, А.С. Катасев, М.А. Кривилев Теория информационной безопасности и методология защиты информации // Лабораторный практикум. Казань: Изд-во Казан. гос. техн. ун-та, 2008 с.    .

ISBN

В данном лабораторном практикуме рассматриваются лабораторные работы по дисциплине «Программно-аппаратная защита информации». Предназначено для студентов очной формы обучения специальностей 090104 «Комплексная защита объектов информатизации». Может быть использовано для проведения лабораторных занятий по одноименной дисциплине специальности 090103 «Организация и технология защиты информации».

Табл.      Ил.     Библиогр.:     назв.

ISBN                     @ Изд-во Казан. гос. техн. ун-та, 2008

                              @ И.В. Аникин, А.С. Катасев, М.А. Кривилев, 2008


Оглавление

[1] Введение

[2] Методика проведения лабораторных занятий

[2.1] Методические указания к выполнению лабораторных работ

[2.2] Лабораторная работа № 1. «Защита ПО от несанкционированного использования с помощью электронных ключей HASP»

[2.3]
Лабораторная работа № 2. «Исследование моделей защит ПО. Изучение средств динамического исследования ПО на примере отладчика SoftIce. Защита от отладчиков»

[2.4] Лабораторная работа № 3 «Статические методы изучения и нейтрализации защитных механизмов. Знакомство с техникой дизассемблирования программных продуктов на примере Ida Pro. Защита ПО от средств статического исследования»

[2.5]
Лабораторная работа № 4 «Защита автоматизированных систем от НСД средствами СЗИ НСД Secret Net»

[3]
ПРИЛОЖЕНИЯ

[3.1] Приложение 1. «Пример оформления титульного листа отчёта»

[3.2] Приложение 2. «Список рекомендуемой литературы»


Введение

Данный лабораторный практикум предназначен для студентов, обучающихся по специальности 090104 (075400) – «Комплексная защита объектов информатизации». Лабораторные работы могут быть использованы и для студентов специальности 090103 (075300) – «Организация и технология защиты информации».

Содержание практикума ориентировано на знакомство студентов с современными программно-аппаратными средствами защиты программ и данных – защиты ПО от несанкционированного использования и исследования, защиты автоматизированных систем от НСД к информации.


Методика проведения лабораторных занятий

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

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

  •  титульный лист;
  •  постановку задачи исследования;
  •  пример выполнения лабораторной работы;
  •  письменные ответы на контрольные вопросы.


Методические указания к выполнению лабораторных работ

Лабораторная работа № 1. «Защита ПО от несанкционированного использования с помощью электронных ключей HASP»

Цель

Познакомиться на практике с методами и средствами программно-аппаратной защиты программ и данных на примере электронных ключей HASP. Научиться программировать под электронные ключи HASP с использованием API-функций для защиты программ от НСД.

Программно-аппаратные средства

Компьютерная лаборатория с ЛВС; электронные ключи HASP: HASP4 Standard, HASP4 Memo, HASP4 Time, HASP4 Net; утилиты: HASP Envelope, HASP Edit, Aladdin Diagnostic; HASP API.

Теоретический материал

ОБЩИЕ СВЕДЕНИЯ

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

Устройство HASP разработано фирмой Aladdin и представляет собой небольшое микроэлектронное устройство размером со спичечный коробок, подключаемое обычно к параллельному порту (есть также USB-варианты ключей HASP).

Все ключи HASP (кроме версии USB) построены на чипах ASIC (Application Specific Integrated Circuit). ASIC микросхема защищена от декомпиляции, что позволяет говорить о высокой стойкости аппаратного обеспечения к взлому. Модели USB уникальны в том, что они содержат микроконтроллер, поддерживающий тот же уровень защиты.

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

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

ПРИНЦИПЫ РАБОТЫ КЛЮЧЕЙ HASP

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

Защита основывается на присутствии корректного ключа HASP в системе. При заказе ключей в компании Aladdin разработчик ПО получает ключи HASP со встроенной информацией о разработчике. Эта информация используется для того, чтобы отличать ключи разных производителей. Код разработчика – это уникальный код, который компания Aladdin присваивает каждому разработчику ПО. Этот код прожигается на чипе ASIC, чтобы не допустить декомпиляции. Таким образом, повышается степень защищенности приложений.

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

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

  1.  С использованием механизма шифрования, основывающемся на присутствии ключа.
  2.  Проверка специфичного для ключа ID-номера.
  3.  С использованием функций памяти ключа.

Использование механизма шифрования

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

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

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

Проверка ID-номера HASP

Каждый ключ HASP имеет свой уникальный ID-номер. Защищаемое приложение может проверять данный номер. Ключи HASP со встроенными ID-номерами помогают различать пользователей ПО. Проверяя данный номер, всегда можно точно сказать, присутствует ли конкретный ключ в системе или нет.

Использование функций памяти ключа

Все ключи HASP (кроме HASP Standard) содержат внутреннюю память. Эту память можно использовать, чтобы:

  1.  Контролировать доступ к модулям ПО или различным приложениям.
  2.  Присваивать уникальный ID-номер каждому пользователю.
  3.  Распространять демонстрационные версии, которые могут быть активированы ограниченное количество раз.
  4.  Сохранять пароли, код программы, переменные или данные.

МОДЕЛИ ЭЛЕКТРОННЫХ КЛЮЧЕЙ HASP4

Семейство электронных ключей HASP4 включает в себя следующие модели.

  1.  HASP4 Standard.
  2.  HASP4 Memo.
  3.  HASP4 Time.
  4.  HASP4 Net.

HASP4 Standard

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

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

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

HASP4 Memo

HASP4 Memo соединяет в себе высокий уровень безопасности на основе алгоритмов шифрования и гибкость использования 496 байтов памяти. Базовым отличием данного типа ключей от HASP4 Standard является наличие встроенной в них энергонезависимой памяти (EEPROM), доступной для чтения и записи во время выполнения защищенной программы. Кроме того, каждый ключ имеет свой уникальный 32-битовый ID-номер, который позволяет идентифицировать конкретного пользователя продукта.

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

HASP4 Time

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

HASP4 Time обладают всеми возможностями HASP4 Memo. HASP4 Time содержит 512 байт памяти и уникальный ID-номер для каждого ключа.

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

HASP4 Net

HASP4 Net поддерживает всю функциональность HASP4 Memo и предназначены для защиты ПО в сетевых средах. Можно подсоединить один ключ HASP4 Net к любой сетевой станции, чтобы защитить ПО от тиражирования и одновременно ограничить число рабочих мест (лицензий), на которых ПО используется одновременно.

МЕТОДЫ ЗАЩИТЫ ПО С ПОМОЩЬЮ HASP

HASP Envelope

HASP Envelope (с использованием пристыковочного механизма) – это базовый метод защиты. Данный тип защит относится к автоматическим и предназначен для защиты уже готового исполняемого кода программ (DOS или WINDOWS приложений) без вмешательства в исходный текст программы. Таким способом могут быть защищены СОМ и ЕХЕ файлы.

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

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

  1.  Проверяется наличие электронного ключа и считывание из него требуемых параметров.
  2.  Проверка «ключевых» условий и выработка решения.

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

В случае их ложности, загрузка и расшифровка тела программы в память не производится. Обычно после этого выполняются некоторые маскирующие действия, выдается сообщение об ошибке (вида «HASP not found») и защищенное приложение заканчивает свое выполнение.

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

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

FAS

FAS (Full Authorization System) система полного управления доступом позволяет защищать несколько приложений с использованием лишь одного ключа HASP. Эта система позволяет настроить параметры и условия, при которых будет исполняться каждое приложение.

С помощью FAS возможно следующее.

  1.  Установить количество запусков приложения (HASP4 Memo и HASP4 Net). Эта опция полезна для распространения демо-версий программ.
  2.  Установить дату окончания действия лицензии (HASP4 Time). Эта опция полезна при передаче приложений в аренду.
  3.  Установить количество станций, на которых приложение сможет исполняться (HASP4 Net).

HASP API

Если требуется защитить разрабатываемое приложение, можно использовать механизм внедрения с применением HASP API. Так как API одновременно зашифрован и защищен, этот метод также очень надежен.

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

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

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

Недостатком защиты с помощью API функций является отсутствие защиты исполняемого кода программы от изучения. Но защита от изучения реализована в пристыковочном механизме HASP Envelope. Именно поэтому рекомендуется одновременно использовать HASP Envelope и HASP API.

Все функции HASP API для локальных ключей вызываются через функцию hasp(), которая имеет следующий синтаксис:

hasp(Service, SeedCode, LptNum, Pass1, Pass2, Par1, Par2, Par3, Par4)

Service – номер вызываемой функции (и соответствующей ей операции).

LptNum – номер параллельного порта, к которому подключен HASP (если 0, то драйвер его ищет автоматически, 1 – LPT1, 2 – LPT2, 3 – LPT3, 201-255 – определенный ключ HASP для порта USB).

SeedCode – значение, ранее посылаемое в функцию отклика HASP. Сейчас осталось только для NetHASP для указания времени простоя. Используется для обеспечения обратной совместимости ключей.

Pass1, Pass2 – пароли для HASP. Они посылаются для всех функций, кроме проверки наличия ключа в системе.

Par1, Par2, Par3, Par4 – параметры, через которые значения передаются в HASP и которые изменяются в зависимости от выбранной функции.

Для сетевых ключей HASP API вызываются через функцию hasp(), имеющую следующий синтаксис:

hasp(Service, SeedCode, ProgNum, Pass1, Pass2, Par1, Par2, Par3, Par4)

Все параметры аналогичны параметрам локальных ключей.

ProgNum – номер, присвоенный приложению, в памяти HASP4 Net.

Допустимые значения параметра Service см. Приложение 1.

Примечание

Более подробно о методах защиты с помощью HASP, а также использовании сервисов HASP API и возвращаемых ими значениях, читайте в файле-приложении к лабораторной работе (из каталога \FOR_READING\):

Aladdin_Knowledge_Systems_Руководство_программиста_HASP4_Версия_11_2002.pdf

Подробное описание API-функций HASP содержится в файле:

HASP_API.hlp

Файлы для шифрования и реализации защиты HASP Envelope (из каталога \DATA\):

BIGNum.exe

MD5.txt

Драйвер и утилиты HASP находятся в каталоге:

\DATA\SOFT\

Библиотека HASP находится в каталоге:

\DATA\LIBRARY\

Пример программных реализаций защиты с помощью HASP:

\DATA\RELEASE\

ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ № 1

Название работы

Электронные ключи HASP.

Задание (не забудьте оформить отчет)

Примечание

Пароли доступа к ключам hasp:

Код ключа: RAOMG

Пароль №1: 21746.

Пароль №2: 5538.

Код ключа: IXGGR

Пароль №1: 32113.

Пароль №2: 21797.

Код ключа: DEMOMA

Пароль №1: 15417.

Пароль №2: 9632.

  1.  Работа с утилитой Aladdin Diagnostic. Данная утилита позволяет определять ключи HASP.
    1.  Подключить к LPT порту ключ HASP4.
    2.  Запустить утилиту Aladdin Diagnostic и попытаться диагностировать на ЭВМ ключ HASP. Вначале – любой, потом – демонстрационный, потом с заданным кодом доступа (верным и неверным). Какова реакция системы на данные действия (внесите в отчет)? Внесите в отчет верные пароли к ключам HASP, которые вы использовали.

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

  1.  В полях Password-1 и Password-2 ввести пароли.

  1.  Какие функции доступны для HASP4 Standard (внести в отчет)?
    1.  Введите в поле SeedCode произвольное значение и получите отклик аппаратной функции ключа при посылке в нее данного значения. Сколько двойных слов возвращает данная функция (внести в отчет)?
    2.  Получите отклик ключа HASP на произвольные 6 значений SeedCode. Возвращенные значения внесите в отчет.
    3.  Зашифруйте с помощью ключа HASP4 Standard любую фразу и расшифруйте ее. Результаты шифрования и шифруемую фразу внесите в отчет.

  1.  Извлеките HASP4 Standard из ПК и подключите к нему HASP4 Time. Какие дополнительные функции добавились при этом?
    1.  Исследуйте работу функций HASP4 Time с датой и временем. Получите текущую дату и время. Измените эти параметры на другие. Внесите эти данные и использованные команды в отчет.
    2.  Исследовать работу с энергонезависимой памятью HASP4 Time. Прочитать байт из памяти ключа по адресу 1 (внести в отчет). Записать по этому адресу значение 100. Осуществить чтение заново и убедиться, что данное значение записалось. Использованные при этих операциях команды внести в отчет.
    3.  Прочитать из памяти блок длиной 20 байт начиная с адреса 1. Записать туда выражение «Ключ_доступа–МОНИТОР». Осуществить чтение заново и убедиться, что данное выражение записалось.
    4.  Каков номер ID Вашего электронного ключа HASP (внести в отчет)?
  2.  Работа с утилитой HASP Edit. Данная утилита позволяет подготовить ключи HASP к распространению и внести в них необходимые данные.
    1.  Подключить электронный ключ HASP4 Time к ЭВМ и запустить утилиту HASP Edit for Win32.

  1.  Создать новую сессию и ввести корректные коды доступа.
    1.  Познакомиться с основными функциями HASP4 Time, предлагаемые HASP Edit. Внесите их в отчет.
    2.  Получите ID номер HASP4 Time.
    3.  Вызовите функцию установки даты и времени HASP4 Time. Соответствуют ли данные установки компьютерным? Установите дату и время HASP4 Time реальным.

  1.  Открыть меню Encoding. Зашифровать с помощью HASP файл MD5.txt, в качестве выходного файла указать бинарный файл MD5_1, изучить содержимое обоих файлов. Зашифрован ли файл?
    1.  Расшифровать зашифрованный файл и изучить его содержимое. Корректно ли расшифрован файл?
    2.  Набрать в строке Keyboard некоторое выражение и зашифровать его. Изучить содержимое зашифрованного файла. Расшифровать его.
    3.  Заменить бинарный вывод на текстовый и повторить пункты 3.6-3.8. В чем особенность зашифрованных файлов в данном случае (внести в отчет)?
    4.  Вызвать меню COMPATIBILITYRETURN CODES и изучить отклики HASP на различные посылаемые в качестве параметров значения.

  1.  Исследуйте функцию работы с защищенной энергонезависимой памятью ключа HASP4 Time (меню HASP TOOLSHASP MEMORYMEMOHASP). Запишите туда некоторый секретный ключ, который должен будет контролироваться защищаемой программой.

  1.  Работа с утилитой HASP Envelope. Данная утилита обеспечивает пакетный (пристыковочный) режим защиты исполняемого кода ПО от несанкционированного использования.
    1.  Подключить электронный ключ HASP4 Time к ПК и запустить утилиту HASP Envelope.
    2.  Нажмите кнопку HASP WIZARD.
    3.  В качестве защищаемого файла выбрать BIGNum.exe, в качестве выходного – BIGNum_1.exe.

  1.  Выбрать опцию STAND-ALONE HASP ONLY.
    1.  Ввести код доступа к HASP.
    2.  Присвоить программе номер 1 и указать, что она может использоваться до 1 января следующего года.

  1.  Задать функцию проверки наличия HASP один раз в секунду.

  1.  Произвести защиту программы и записать конфигурацию в память HASP.
    1.  Произвести запуск программы BIGNum.exe с HASP и без него. Убедиться в том, что без HASP программа становится не работоспособной.
    2.  Запустить программу с HASP, затем извлечь его. Проследить за реакцией программы (внести в отчет).
    3.  Изменить компьютерную дату, например, на год вперед или назад и запустить защищенную программу. Будет ли она работать (внести ответ в отчет)? Вернуть реальную дату.
    4.  Изменить дату в самом ключе HASP на 2 января следующего года или более позднюю и запустить защищенную программу. Будет ли она работать (внести ответ в отчет)? Вернуть реальную дату. Для установки даты (или времени) используйте программу HASP TEST. Введите дату (или время) и нажмите кнопку SetDate (или SetTime).
    5.  Изучить в меню OPTIONS главного меню возможные опции защиты. Прокомментировать их (внести в отчет).
    6.  Изучить опции DATAHASP и попытаться зашифровать – расшифровать файлы на данном ключе.
  2.  Использование HASP API. Данные API функции позволяют разработчику самому реализовать те или иные механизмы защиты.
    1.  Изучите принцип работы API-функций для программирования под HASP. Используя теоретический материал данной лабораторной работы, определите вызовы функций локальных и сетевых ключей, определите доступные сервисы, возвращаемые значения функций.
    2.  Написать программу на каком-либо языке программирования, реализующую некоторые простейшие действия (внести в отчет), например, калькулятор, загрузчик файлов, текстовый редактор и т.п.
    3.  Продумать и реализовать систему защиты вашей программы с использованием HASP API и ключа HASP любого типа (внести тип использованного ключа в отчет). Минимальные требования: система защиты должна проверять присутствие электронного ключа HASP, определять тип ключа, размер доступной памяти у ключа, действительный номер LPT. Остальные сервисы используйте на ваше усмотрение. Программа должна работать только при наличии электронного ключа HASP. При отсутствии ключа программа должна выдавать сообщение об ошибке, типа «HASP not found». Внесите в отчет сервисы функции hasp(), использованные вами в системе защиты. Библиотеки API функций HASP находятся в каталоге \DATA\LIBRARY\.
    4.  Внести листинг вашей программы с подробными комментариями в отчет. Продемонстрировать работу программы и объяснить принцип ее действия. Пример реализации находится в каталоге \DATA\RELEASE\.

Примечание

При реализации программы на языке MS Visual C++ 6.0 необходимо следующее.

  1.  Подключить заголовочный файл hasp.h в раздел #include.
  2.  В меню PROJECTSETTINGS во вкладке LINK в разделе OBJECT/LIBRARY MODULES добавить записи hasp32b.obj и haspms32.obj.


ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 1

Название работы

Электронные ключи HASP.

Цель

Познакомиться на практике с методами и средствами программно-аппаратной защиты программ и данных на примере электронных ключей HASP. Научиться программировать под электронные ключи HASP с использованием API-функций для защиты программ от НСД.

Выполнил

Студент гр. № ______

ФИО ________________________________________________________

Отчет

  1.  Утилита HASP Diagnostics.

Реакция системы: __________________________________________________

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________.

Использованные ключи и пароли к HASP: _____________________________

__________________________________________________________________

__________________________________________________________________.

  1.  Утилита HASP Test.

Для ключа HASP4 Standard доступны функции: _________________________

__________________________________________________________________

__________________________________________________________________.

Функция отклика возвращает ______ двойных слов.

Отклик ключа HASP4 Standard на произвольные 6 значений SeedCode:

1)  2)

3)  4)

5)  6)

Шифруемая фраза: _________________________________________________.

Результат шифрования: _____________________________________________.

Дополнительные функции HASP4 Time: _______________________________

__________________________________________________________________.

Текущая дата: ______________. Использовалась команда: ________________.

Новая дата: ________________. Использовалась команда: ________________.

Значение байта памяти по адресу 1 ключа HASP4 Time: __________________.

Команда на чтение: _______________. Команда на запись: _______________.

ID-номер HASP4 Time: ___________________.

  1.  Утилита HASP Edit.

HASP Edit предлагает следующие основные функции для HASP4 Time:

__________________________________________________________________

__________________________________________________________________.

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

__________________________________________________________________

__________________________________________________________________.

  1.  Утилита HASP Envelope.

Реакция программы, защищенной HASP Envelope, на извлечение ключа:

__________________________________________________________________.

При изменении компьютерной даты на более позднюю, чем разрешено, программа: _______________________________________________________.

При изменении даты в HASP4 Time на более позднюю, чем разрешено, программа: _______________________________________________________.

В меню OPTIONS главного меню возможны следующие опции защиты:

_________________________________________________________________

_________________________________________________________________

_________________________________________________________________.

  1.  Использование HASP API.

Программа реализует: ______________________________________________.

Использовался ключ: ______________________.

В системе защиты были использованы сервисы: ________________________

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________

Листинг программы на языке ________________:

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Что такое электронный ключ?
  2.  Что представляет собой устройство HASP?
  3.  Какие существуют варианты реализации ключей HASP?
  4.  Какие возможности защиты самого ключа и защищаемого им приложения предоставляет система HASP?
  5.  В чем преимущества использования системы HASP?
  6.  Объясните принцип функционирования ключей HASP.
  7.  Что из себя представляют код разработчика и пароли HASP? Для каких целей они служат?
  8.  Какими методами можно проверить присутствие корректного ключа? Опишите каждый из них.
  9.  Какие основные модели включает в себя семейство ключей HASP4? В чем их основные сходства и различия?
  10.  Что представляет собой механизм защиты HASP Envelope?
  11.  Как изменяется порядок запуска программы, защищенной системой HASP Envelope?
  12.  Какие достоинства и недостатки у пристыковочного механизма защиты ПО?
  13.  Для чего служит система полного управления доступом FAS?
  14.  В чем суть защиты ПО с использованием механизма внедрения?
  15.  Какие достоинства и недостатки у защиты с помощью HASP API?


ПРИЛОЖЕНИЕ 1. СЕРВИСЫ HASP4

Доступны следующие основные сервисы (номера, подставляемые вместо Service) для ключей HASP4 Standard, HASP4 Memo, HASP4 Time.

1 – IsHasp. Проверяет подключение к компьютеру ключа HASP.

5 – HaspStatus. Проверяет тип подключенного к компьютеру ключа HASP. Определяет, к какому порту подключен ключ. Проверяет объем памяти ключа HASP. Проверяет версию API.

60 – HaspEncodeData. Шифрует посылаемые на подключенный ключ HASP4 данные. Используется совместно с сервисом HaspDecodeData для проверки того, подсоединен ли определенный ключ HASP4 к порту.

61 – HaspDecodeData. Дешифрует посылаемые на подключенный ключ HASP4 данные. Используется совместно с сервисом HaspEncodeData для проверки того, подсоединен ли определенный ключ HASP4 к порту.

Сервисы памяти, доступные для ключей HASP4 Memo и HASP4 Time (используемая область составляет 496 байт).

3 – ReadWord. Считывает из памяти HASP одно слово данных.

4 – WriteWord. Записывает в память HASP одно слово данных.

6 – HaspID. Получает ID-номер HASP.

50 – ReadBlock. Считывает из памяти HASP блок данных.

51 – WriteBlock. Записывает в память HASP блок данных.

Сервисы времени, дополнительно доступные для ключей HASP4 Time.

Сервисы 74-77 используются для получения доступа к 16-байтной памяти ключа HASP4 Time.

Сервисы 3, 4, 50 и 51 используются для получения доступа к 496-байтной памяти ключа HASP4 Time.

70 – SetTime. Установка часов ключа HASP4 Time на заданное время.

71 – GetTime. Получает время от ключа HASP4 Time.

72 – SetDate. Устанавливает часы ключа HASP4 Time на заданную дату.

73 – GetDate. Получает дату от ключа HASP4 Time.

74 – WriteByte. Записывает в память ключа HASP4 Time один байт.

75 – ReadByte. Считывает из памяти ключа HASP4 Time один байт.

76 – WriteBlock. Записывает в память ключа HASP4 Time блок данных.

77 – ReadBlock. Считывает из памяти ключа HASP4 Time блок данных.

78 – GetHaspID. Получает ID-номер ключа HASP4 Time.

Сетевые сервисы, доступны исключительно для HASP4 Net.

40 – LastStatus. Проверяет статус последнего вызова. Этот сервис используется после каждого вызова процедуры hasp().

42 – Login. Запрашивает разрешение HASP LM на активирование приложения. Если вы не используете сервис 85 или 96, данный сервис должен являться первым вызовом процедуры hasp().

43 – Logout. Запрашивает HASP LM на завершение сессии.

44 – ReadWord. Считывает одно слово данных из памяти HASP4 Net.

45 – WriteWord. Записывает одно слово данных в память HASP4 Net.

46 – HaspID. Получает ID-номер HASP4 Net.

48 – IdleTime. Устанавливает максимальное время простоя станций.

52 – ReadBlock. Считывает блок данных из памяти HASP4 Net.

53 – WriteBlock. Записывает блок данных в память HASP4 Net.

85 – SetConfigFilename. Задает имя файла конфигурации HASP4 Net.

88 – HaspEncodeData. Шифрует посылаемые на подключенный ключ HASP4 Net данные. Используется совместно с сервисом DecodeData для проверки, подсоединен ли к порту определенный ключ HASP4 Net.

89 – HaspDecodeData. Дешифрует посылаемые на подключенный ключ HASP4 Net данные. Используется совместно с сервисом HaspEncodeData для проверки того, подсоединен ли к порту определенный ключ HASP4.

96 – SetServerByName. Устанавливает имя HASP LM, к которому приложение будет осуществлять дальнейшие подключения.


Лабораторная работа № 2. «Исследование моделей защит ПО. Изучение средств динамического исследования ПО на примере отладчика SoftIce. Защита от отладчиков»

Цель

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

Программно-аппаратные средства

Компьютерная лаборатория, отладчик SoftIce, программа для исследования: WinZip 7.0.

Теоретический материал

ОБЩИЕ СВЕДЕНИЯ

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

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

Реализация второй – выяснении путем исследования программы ключевой информации, требуемой при регистрации (см. Таблица 1).

Таблица 1. Угрозы и их реализация.

Угроза для модуля защиты ПО от несанкционированного использования

Возможная реализация угрозы

Угроза нарушения функциональности модуля защиты

Отключение модуля защиты

Обход модуля защиты

Угроза раскрытия ключевой информации

Выяснение ключевой информации злоумышленником путем исследования программы

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

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

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

Модуль защиты занимает достаточно малый объем в общей совокупности кода программы. Задача ручного поиска блока модуля защиты размером 100-200 байт в общем коде программы, занимающем сотни мегабайт, без использования специализированных средств  в принципе не решаема за приемлемое время.

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

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

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

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

Основными методами обратного проектирования являются отладка и дизассемблирование программ. При этом используются следующие средства.

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

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

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

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

Таким образом, классификацию средств обратного проектирования ПО можно представить в виде следующей схемы (см. Рис. 1).

Рис. 1. Классификация средств обратного проектирования.

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

Отлов злоумышленником вызова WinAPI функций при взломе ПО

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

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

Пример

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

Установка точки прерывания по вызову некоторой API функции в отладчике SoftIce осуществляется с помощью команды bpx адрес или bpx имя_API_функции. Удаление точки установка – с помощью команды bc имя_API_функции. Например, для установки точки прерывания по выводу стандартного окна сообщения, можно попытаться воспользоваться командой bpx MessageBoxA.

В коде программы вызов API функции представляется в виде CALL Имя_API_функции, ее аргументы передаются через стек в обратной последовательности. Возвращаемое значение передается, зачастую, через регистр EAX (если оно одно).

При вызове из программы функции MessageBoxA(hWnd,lpText,LpCaption,uType), она может откомпилироваться, например, в следующий код.

push 20; передача аргумента uType

push 00400010;  передача аргумента lpCaption

push 0044003E; передача аргумента lpText

push ebx; передача аргумента hWnd

call User32!MessageBoxA; вызов функции MessageBoxA.

При отлове WinAPI функций необходимо учитывать тип приложения и ОС. Win32 API функции имеют, как правило, на конце приставку A, а Win16 без A. Это позволяет злоумышленнику сократить набор отлавливаемых функций.

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

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

MessageBoxA(hWnd,lpText,LpCaption,uType) – вывод на экран стандартного окна сообщения (например, сообщения об ошибочной регистрации).

MessageBoxIndirectA(lpMsgBoxParams) – вывод вариантов окна, с различными кнопками (retry, abort, ignore).

GetDlgItemTextA(hDlg,nIDDlgItem,lpString,nMaxCount) – использует-ся для чтения информации, введенной пользователем в окне TEdit. В качестве параметров указываются дескриптор диалогового окна, идентификатор элемента управления в окне, буфер для записи читаемого сообщения, длина сообщения.

GetWindowTextA(hWnd,lpString,nMaxCount) – чтение информации, введенной пользователем в окне TEdit. В качестве параметра указывается дескриптор окна, буфер для чтения сообщения и его длина.

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

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

hmemcpy(lpMemTarget,lpMemSource,nBytes) используется Windows для копировании участков памяти, а значит может использоваться и при копировании идентификатора из введенного окна. Отлавливать и исследовать программу по вызову данной функции будет сложнее для начинающих крэкеров, но возможно, если иметь в этом навык. Сложность здесь представляет то, что, как правило, точка останова будет находиться очень глубоко в программе и потребуется потратить определенные усилия, прежде чем злоумышленник доберется собственно до места вызова процедуры проверки корректности ключа. Прежде, чем дойти до этой точки, придется выходить из очень многих вложенных процедур. Следует отметить, что точка прерывания по данной функции в отладчике ставится злоумышленником строго после ввода произвольного ключа в окне ввода, так как данная функция вызывается самой системой Windows при нажатии любой клавиши, но только самой системой Windows (для копирования информации в окно).

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

В некоторых случаях, пока пользователь не введет верный код, кнопка ОК окна регистрации вообще неактивна, тогда использование прерываний по функциям MessageBoxA, MessageBoxIndirectA, GetDlgItemTextA,  GetWindowTextA бесполезно. В данном случае злоумышленник вынужден пользоваться hmemcpy.

ОТЛАДЧИК SOFTICE

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

Из всех существующих для Windows – платформ, наибольшей популярностью пользуется SoftICE фирмы Numega. Его преимуществом является то, что SoftICE работает в 0-м кольце защиты. Обычно ОС имеет права полного доступа ко всем остальным выполняемым программам, так как она работает в 0-м кольце (наиболее привилегированном), системные задачи выполняются в 1-м и 2-м кольцах, а приложения в 3-м (наименее привилегированном). Частично осуществлять управление запущенными приложениями можно из 1-ого и 2-ого кольца защиты, именно так работает большинство отладчиков из крупных пакетов для разработки программ.

Разработчики из Numega подошли к делу более профессионально и создали SoftIce – отладчик, который работает в 0-м кольце защиты (для этого он загружается до загрузки ядра ОС Windows) и позволяет полностью контролировать не только все выполняемые системой задачи, но и саму OC Windows.

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

Основы работы с SoftIce

SoftIce запускается в любое время при работе системы с помощью комбинации клавиш Ctrl+D. Выход из отладчика осуществляется по функциональной клавише F5.

Отладчик содержит следующие окна:

  1.  Окно регистров. Включается и выключается по команде wr. В данном окне отображается содержимое регистров процессора.
  2.  Окно данных. (располагается под окном регистров). В данном окне выводится содержимое некоторого участка памяти в шестнадцатеричном и текстовом виде с некоторого адреса. В данном окне можно вывести информацию, содержащуюся начиная с конкретного адреса или с адреса, указанного в некотором регистре. Вывод осуществляется по команде db адрес или db регистр. Окно включается и выключается командой wd.
  3.  Окно кода. В данном окне отображается дизассемблированный текст исследуемой программы. Выделенная строка указывает на команду, которая будет выполнена на следующем шаге. В нижней части окна показано, в каком модуле мы в данный момент находимся. Включается и выключается окно с помощью команды wc.
  4.  Самое нижнее окно – окно команд SoftICE.

Пошаговое исполнение программы реализуется с помощью функциональной клавиши F8.

По клавише F12 программа выполняется до тех пор, пока не встретит команду RET, после чего выполнение программы прерывается, и управление снова передается отладчику. Клавиша F12 очень полезна при входе в подпрограмму командой CALL. Можно пропустить пошаговое выполнение данной программы с помощью F12 и начать пошаговое исполнение начиная с команды, следующей за командой RET.

По команде F10 осуществляется выполнение команды без входа в нее (например, выполняется полностью команда CALL, а вход в нее не производится).

SoftIce позволяет пользователю устанавливать точки останова в отлаживаемой программе. При этом, точка останова может быть установлена как по конкретному адресу, так и на вызове некоторой API функции Windows. Точка останова устанавливается по команде bpx адрес или bpx имя API функции. Удаление точек останова реализуется по команде bc. Для удаления всех точек останова используется команда bc *.

Примечание

Более подробно об отладчике SoftIce и командах ассемблера читай в файлах-приложениях к лабораторной работе:

SoftIce_v_3_2_Руководство_пользователя_1999.pdf

Pirogov_Disassembling_Code_IDA_Pro_and_SoftICE_2006.chm

ASM.chm

Зубков_Assembler_Язык_неограниченных_возможностей_1999.chm

Рудаков_Финогенов_Язык_ассемблера_уроки_программирования_2001.djvu

Описание стандартных API функций Windows см. в файле-приложении:

Win32.hlp

ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ № 2

В связи с тем, что при выполнении данной лабораторной работы не требуется каких либо уникальных возможностей SoftIce связанных с отладкой, все задания можете выполнять любым удобным для вас отладчиком, например, приложенным к лабораторной работе Olly Debugger 1.10, имеющим более удобный интерфейс.

Помочь в выполнении лабораторной работы вам помогут файлы-приложения с описанием стандартных API функций Windows и руководство пользователя по работе с SoftIce (каталог \FOR_READING\):

Win32.hlp

SoftIce_v_3_2_Руководство_пользователя_1999.pdf

  1.  Установить программу WinZip 7.0 (из каталога \DATA\WinZip_7_0\).
  2.  Запустить программу WinZip и нажать кнопку «Enter Registation Code...», в результате чего откроется окно регистрации.
  3.  Запустить SoftIce и установить точки прерывания на вызов окна сообщений Win32. На какие функции вы установили точки прерывания (внесите эти функции в отчет)?
  4.  Ввести в окне регистрации произвольное имя и пароль и запустить регистрацию программы. Для облегчения выполнения лабораторной работы рекомендуется задать в имя и пароль осмысленными символами (внесите имя и пароль в отчет).
  5.  В каком модуле прервалось выполнение процедуры регистрации (имя модуля видно в окне SoftIce)? На вызове какой API функции прервалось выполнение программы (MessageBoxA или MessageBoxIndirectA)? Внесите имя модуля и API функции в отчет.
  6.  Внесите в отчет адрес памяти, по которому осуществлялся вызов API функции (по которому стоит команда CALL)? Для ответа на данный вопрос вам, возможно, придется заново запустить команду регистрации. Воспользуйтесь командой F12 для прогона подпрограммы API функции и получения адреса памяти ее вызова.
  7.  Внесите в отчет содержимое регистров ESI при выходе из API функции.
  8.  После возврата в основную программу из API функции, продолжить ее пошаговое выполнение до команды RET (адрес 0167:00426940)
  9.  Внесите в отчет содержимое регистров ESI и EBX.
  10.  Чему равно содержимое памяти по адресам, хранящимся в регистрах ESI и EBX. Каково содержимое памяти (первые 10 байт)? Внесите эти данные в отчет.
  11.  Сделайте выводы относительно содержимого памяти, что там хранится? Внесите эту информацию в отчет.
  12.  Далее попытаемся проанализировать регистрационную защиту архиватора WinZip 7.0. При выполнении задания будем пользоваться точками прерывания по чтению информации, введенной пользователем в диалоговом окне регистрации (GetDlgItemTextA). Установите точку прерывания на вызов функции GetDlgItemTextA.
  13.  Выполнить процедуру регистрации WinZip.
  14.  По какому адресу вызывается функция GetDlgItemTextA? (команда CALL). Внесите адрес в отчет.
  15.  Какая информация (аргументы) передается в данную функцию, и чему равны значения данных аргументов? Внесите эту информацию в отчет.
  16.  В какой регистр записывается адрес хранения идентификатора пользователя? Внесите в отчет адрес и регистр.
  17.  Каково значение данного регистра при выходе из процедуры чтения информации? Вывести содержимое памяти по содержимому этого регистра на экран и удостовериться в правильности этой гипотезы.
  18.  Найти сразу же в программном коде (чуть ниже) место вызова аналогичной функции, предназначенной для чтения регистрационного номера. Каков адрес вызова данной функции? Внесите адрес в отчет.
  19.  В какой регистр записывается адрес хранения введенного регистрационного номера пользователя? Внесите адрес в отчет.
  20.  Каково значение данного регистра при выходе из процедуры чтения информации? Внести это значение в отчет. Вывести содержимое памяти по содержимому этого регистра на экран и удостовериться в правильности этой гипотезы.
  21.  В пошаговом режиме выполнить чтение идентификатора пользователя и регистрационного номера.
  22.  Что по вашему мнению осуществляют команды по адресам 0167:00408049 и 0167:00408053 (с точки зрения WinZip)? Внесите эти сведения в отчет. Смоделировать на компьютере ситуацию, когда эти условия не выполняются.
  23.  Перейти к пошаговому исследованию процедуры по адресу 00407B4B (вызов CALL 00407B4B по адресу 0167:0040805С). Что по вашему мнению осуществляет данная процедура? При ответе руководствоваться командами, следующими за данным вызовом. Внесите эти сведения в отчет.
  24.  Что осуществляется с точки зрения WinZip командой по адресу 0167:00407B58? При ответе на вопрос руководствоваться предварительно запомненной информацией (в том числе относительно адреса 47D928). Внесите эти сведения в отчет.
  25.  Какие аргументы передаются в процедуру (CALL 00407E31), вызываемую по адресу 0167:00407B83? Указать их значения и назначение в отчете.
  26.  Какая информация и в каких регистрах передается в процедуру (CALL 00407CC6), вызываемую по адресу 0167:00407C16? Внесите эти сведения в отчет. Проанализировать код, следующий за вызовом данной процедуры (адреса памяти 0167:00407C1B – 0167:00407C2A).
  27.  Какие аргументы подаются на вход процедуры (CALL 00457900), вызываемой по адресу 0167:00407C2A, каковы значения данных аргументов, что находится по соответствующим адресам? Сделать вывод о том, что делает данная процедура. Внесите эти сведения в отчет.
  28.  Можете ли вы сказать регистрационный код программы? Внесите его в отчет.
  29.  Зарегистрировать WinZip.


ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №
2

Название работы _____________________________

Цель

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

Выполнил

Студент гр. № ______

ФИО ________________________________________________________

Отчет

  1.  При первом запуске программы WinZip точки прерывания были установлены на функции: ____________________________________________

__________________________________________________________________.

  1.  При первой регистрации были заданы

имя пользователя: ___________,

пароль: ____________.

  1.  Процедура регистрации прервалась в модуле: ___________________,

на вызове API функции: _____________________________________________.

  1.  Вызов API функции осуществляется по адресу памяти: ___________.
  2.  Содержимое регистра ESI при выходе из API функции: __________.
  3.  Перед командой RET, находящейся по адресу 0167:00426940, содержимое регистров

ESI _____________,

EBX ____________.

  1.  Содержимое памяти по адресу, указанному

в регистре ESI ______________,

в регистре EBX _____________.

  1.  Можно сделать вывод, что

по адресу: ____________ находится: __________________________________,

по адресу: ____________ находится: __________________________________.

  1.  Функция GetDlgItemTextA вызывается по адресу: _______________.
  2.  В функцию GetDlgItemTextA передаются следующие аргументы и их значения:

_________ = _________,

_________ = _________, …

  1.  Адрес хранения идентификатора пользователя: ____________.

Адрес хранения записан в регистр: _______.

  1.  После выхода из процедуры GetDlgItemTextA, значение регистра с адресом хранения идентификатора стало равно: ________.
  2.  Адрес вызова функции, чтения регистрационного номера: ________.
  3.  Адрес хранения регистрационного номера, введенного пользователем, хранится в регистре: ______.
  4.  Значение регистра, с адресом хранения регистрационного номера, при выходе из процедуры GetDlgItemTextA, равно ______________.
  5.  Команда по адресу 0167:00408049 выполняет действие:

__________________________________________________________________,

команда по адресу 0167:00408053 выполняет действие:

__________________________________________________________________,

  1.  Процедура, находящаяся по адресу 00407B4B выполняет действие:

__________________________________________________________________,

Это следует из того, что _____________________________________________

__________________________________________________________________.

  1.  Команда по адресу 0167:00407B58 выполняет действие:

__________________________________________________________________.

  1.  В процедуру CALL 00407E31, вызываемую по адресу 0167:00407B83 передаются следующие аргументы и их значения:

_________ = _________,

_________ = _________, …

Вывод. Среди аргументов передается _________________________________.

  1.  В процедуру (CALL 00407CC6), вызываемую по адресу 0167:00407C16 передаются следующие аргументы и их значения:

_________ = _________,

_________ = _________, …

  1.  На вход процедуры (CALL 00457900), вызываемой по адресу 0167:00407C2A передаются следующие аргументы и их значения:

_________ = _________,

_________ = _________, …

Данная процедура выполняет: ________________________________________.

  1.  Регистрационный код программы = ___________________________.

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Каковы основные угрозы программному продукту защищенному от несанкционированного использования вводом ключевой информации? Опишите их.
  2.  Какие задачи решает злоумышленник в процессе реализации угроз программному продукту?
  3.  Что понимают под обратным проектированием?
  4.  Для чего служат отладчики?
  5.  Для чего служат мониторы событий?
  6.  Для чего служат дизассемблеры?
  7.  Для чего служат редакторы кода?
  8.  Какова классификация средств обратного проектирования?
  9.  Опишите приемы, используемые злоумышленником при отладке и дизассемблировании ПО.
  10.  Для каких целей используют перехват Win API с помощью средств отладки?
  11.  Какие API-функции может перехватывать злоумышленник, с целью обнаружения ключевой информации?
  12.  Каковы особенности отладчика SoftIce?


Лабораторная работа № 3 «Статические методы изучения и нейтрализации защитных механизмов. Знакомство с техникой дизассемблирования программных продуктов на примере Ida Pro. Защита ПО от средств статического исследования»

Цель

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

Программно-аппаратные средства

Компьютерная лаборатория, дизассемблер IDA Pro 5.1, редактор кода Hiew 7.1., программа для исследования: Ida__0x1.com.

Теоретический материал

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

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

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

Выделяют два способа шифрования кода программы – статическое и динамическое.

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

Реализация простейшей процедуры шифрования/расшифрования кода программы может выглядеть примерно так:

LEA SI, beginCrypt;

начало зашифрованного блока

Repeat:

Xor byte ptr [SI], 077h;

в цикле зашифровываем

INC SI;

каждый байт кода, начиная с

CMP SI, offset endCrypt;

beginCrypt и заканчивая endCrypt,

JNA Repeat;

на ключе 077h

beginCrypt

шифруемый код

endCrypt

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

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

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

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

ИНТЕРАКТИВНЫЙ ДИЗАССЕМБЛЕР IDA PRO

Одним из способов изучения программного обеспечения в условиях отсутствия исходных текстов является дизассемблирование процесс перевода двоичных команд процессора в удобочитаемые мнемоники этих команд.

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

Достаточно часто одна инструкция имеет несколько различных кодов операций. Например, инструкция ADD AX, 1 может быть ассемблирована в следующие коды микропроцессора x86:

05 01 00

83 C0 01

81 C3 01 00

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

Например:

исходная программа

ассемблированный текст

дизассемблированный текст

MOV BX, Label_1

JMP BX

Label_1:

BB0001

FFE3

MOV BX, 0100h

JMP BX

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

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

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

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

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

Примером автономного дизассемблера является SOURCER, а интерактивного – IDA.

Интерактивный дизассемблер IDA Pro предназначен для дизассемблирования кода программы в мнемонические инструкции на языке ассемблера.

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

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

Автономные дизассемблеры типа плохо справляются с анализом большого, порядка нескольких мегабайт, файла, а с шифрованным кодом не справляется вообще. Интерактивные дизассемблеры позволяют решить эту проблему. В IDA Pro реализован удобный C-подобный внутренний язык написания скриптов (IDC), позволяющий реализовать многие полезные действия (например, осуществлять дешифровку зашифрованного участка кода).

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

PatchByte([Сегмент, Смещение], Значение); – заменить данные, находящиеся по адресу [Сегмент, Смещение] на Значение.

Byte([Сегмент, Смещение]) – получить значение по адресу [Сегмент, Смещение].

^ – обозначение функции XOR (побитовое сложение по модулю 2).

for(Начальное значение; Условие; Шаг) – цикл, изменяющий значение счетчика цикла от Начального значения на величину Шага до тех пор, пока выполняется Условие.

auto a – определение счетчика цикла с именем a.

Описание остальных команд IDC вы можете найти в файле-помощи IDA.

Примечание

Более подробно об интерактивном дизассемблере IDA и как с ним работать, читайте в приложениях к лабораторной работе (каталог \FOR_READING\):

Касперски_Образ_мышления_IDA_О_дизассемблировании_программ_Отрывки_из_книги_1999.pdf

ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ № 3

Исследуемая программа Ida__0x1.com находятся в каталоге \DATA\. Перед исследованием, желательно сделать ее копию в другой каталог.

Дизассемблер IDA Pro находится в каталоге \DATA\SOFT\ida_5_1\. Программа требует предварительной установки. После установки вы можете запустить ее: idag.exe.

Для исследования программы Вы также будите использовать редактор кода Hiew. Он находится в каталоге \DATA\SOFT\Hiew71\. Программа не требует установки и запускаются: hiew32.exe.

При выполнении лабораторной работы, вам также могут помочь книги и справочники (из каталога \FOR_READING\):

ASM.chm

Зубков_Assembler_Язык_неограниченных_возможностей_1999.chm

Рудаков_Финогенов_Язык_ассемблера_уроки_программирования_2001.djvu

О возможностях дизассемблера IDA Pro и его командах, читайте в книгах:

Касперски_Образ_мышления_IDA_О_дизассемблировании_программ_Отрывки_из_книги_1999.pdf

Pirogov_Disassembling_Code_IDA_Pro_and_SoftICE_2006.chm

Предварительное изучение программы Ida__0x1.com

  1.  В консольном режиме (ПУСК>ВЫПОЛНИТЬ>cmd) запустить программу IDA__0X1.COM и внешне изучить механизм ее работы. Внести описание работы программы в отчет.

  1.  Далее проведем предварительное исследование кода программы. Запустите редактор кода Hiew. Загрузите в него программу IDA__0X1.COM. Режимы отображения данных в Hiew переключаются нажатием клавиши Enter, либо F4.
  2.  Внесите в отчет дизассемблированный код программы. Для этого в режиме дизассемблера (F4>Decode) можете воспользоваться комбинацией клавиш ALT+P, для сохранения текущего окна в файл (для этого укажите выходной файл), либо в буфер обмена (для этого укажите вместо имени файла знак «*»).

  1.  Руководствуясь дизассемблированным текстом программы внести в отчет точный адрес окончания работы программы (способ, который чаще всего применяется для COM-файлов – использование команды RETN).
  2.  Исследовать код программы в режиме Text (F4>Text). Удалось ли вам обнаружить текстовую строку, выводимую программой на экран, среди кода? Какой можно сделать вывод? Внесите эту информацию в отчет.

  1.  Предварительное изучение завершено. Далее необходим более детальный анализ кода программы, с целью обнаружения механизма защиты, скрывающего от исследователя текстовую строку, выводимую программой на экран. Для этого нужно привести код к виду, более удобному для анализа. Откройте и внимательно изучите файл, приложенный к лабораторной работе (каталог \DATA\): IDA__0X1.html. К этому виду код был приведен при помощи интерактивного дизассемблера IDA Pro.

Изучение возможностей IDA Pro и анализ программы Ida__0x1.com

  1.  Запустить интерактивный дизассемблер IDA Pro в режиме графического интерфейса (файл idag.exe). Загрузить в IDA Pro (FILE>OPEN>Ida__0x1.com) файл IDA__0X1.COM и дизассемблировать его как DOS COM-файл. Для этого, после открытия окна «Load a new file» выделите первую строку. Укажите также загрузочный сегмент (Loading Segment) равный 0x00001000. 

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

  1.  Изучите интерфейс IDA. Исследуйте каждую информационную вкладку и возможности, предоставляемые IDA для анализа загруженной программы. Щелкните по каждой вкладке:

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

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

Самая нижняя – строка состояния – отображает информацию о ходе работы по дизассемблированию программы:

  1.  Если Ida приняла код за данные, не дизассемблировав его, то нужно указать ей, что данные являются командами. Для переключения отображения кода в виде команд либо данных, выделяйте соответствующий код и нажимайте C (команда), либо D (данные). Тоже самое можно проделать при помощи контекстного меню.

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

  1.  Переместитесь при помощи графической панели в область неуверенно распознанного кода.

У вас отобразится примерно следующее. Это и есть весь дизассемблированный код, с которым самостоятельно смогла разобраться IDA. Как видим, многие данные еще не проанализированы.

  1.  Здесь и далее вам придется использовать справочники по языку ассемблера и прерываниям ДОС, а также файл, который вы изучили выше, с уже проанализированным кодом. Внесите в отчет, листинг команд находящихся по адресам seg000:0100-seg000:0103. Прокомментируйте их. Для чего они нужны?
  2.  По какому адресу выполняется переход с адреса seg000:0103? Сообщите об этом IDA. Для этого перейдите к окну перекрестных ссылок (VIEW>OPEN SUBVIEWS>CROSS REFERENCES, либо щелчком на кнопке с соответствующим изображением).

С помощью контекстного меню, либо клавишей Ins, добавьте перекрестную ссылку на определенный вами адрес.

  1.  После выполнения предыдущего пункта IDA должна была автоматически проанализировать дальнейший код.

Если вы не получили аналогичного кода и IDA восприняла код по адресу seg000:0105 как команды

то поставьте курсор на адрес seg000:0105 и, нажав кнопку D, укажите, что это данные (db).

Затем поставьте курсор на адрес seg000:0106 и укажите, что этот код является командой. Для этого нажмите клавишу C и вы получите то, что требуется.

  1.  Произвести анализ кода по адресам seg000:0106-seg000:0112. Каков смысл данного участка кода? В чем его назначение? Что делают данные команды? Внесите эту информацию в отчет.
  2.  Что делает цикл, расположенный по адресам seg000:010C-seg000:0110? Сколько раз он повторяется? Внесите эту информацию в отчет.
  3.  Какое значение лежит в SI перед и после выполнения цикла? На что указывает SI?
  4.  Что представляет собой область кода, расположенного по адресу seg000:0114 и далее?
  5.  Дайте слову, расположенному по адресу seg000:0114 осмысленное имя (нажав клавишу N).

  1.  Нажимая клавишу D (либо выбирая соответствующий пункт контекстного меню), добейтесь преобразования данных по адресу seg000:0114 в двойное слово (dw).

  1.  Рассчитайте, по какому адресу осуществляется переход с адреса seg000:0112, после выполнения цикла. Внесите этот адрес в отчет. Добавьте перекрестную ссылку, указав дизассемблеру, куда делается переход с адреса seg000:0112. Исследуете код программы, по которому делается переход. Что делает этот блок команд? Подробно опишите, что делает каждая команда. Какое значение окажется в регистре CX? Какое значение окажется в регистре SI? Куда произойдет переход после команды RETN и почему? Внесите эту информацию в отчет.
  2.  Итак, мы практически привели код, к виду, указанному в файле IDA__0X1.html. Осталось лишь произвести расшифровку зашифрованного участка кода, выяснить его функции и выявить сообщение «Hello,IDA PRO! ». Для расшифровки кода в Ida Pro можно написать скрипт. Воспользуйтесь командой FILE>IDC COMMAND, либо комбинацией клавиш Shift+F2, для открытия окна ввода скриптов.

  1.  Введите скрипт для расшифровки кода программы по адресам seg000:0116-seg000:0215 и нажмите кнопку OK.

auto i;

for(i=0x116; i<0x216; i++)

PatchByte([0x1000, i], Byte([0x1000, i])^0x66);

  1.  Произошла ли дешифровка кода? Если да, то вы должны были получить примерно следующий код:

  1.  Поясните работу скрипта. Что он делает? На каком ключе происходит расшифровка кода?
  2.  Перейдите по адресу seg000:0116 и укажите дизассемблеру, что этот код является командами. Для этого нажмите клавишу C.

  1.  Осталось лишь, для более удобного представления данных, представить фразу «Hello,IDA PRO! » одной строкой. Для этого выделите строки с этими символами и нажмите клавишу A (ASCII представление данных). Перейдите по адресу seg000:0132 и укажите дизассемблеру, что этот код является массивом данных (для дальнейшего исследования они будут не нужны). Для этого нажмите клавишу * на цифровой клавиатуре и в появившемся окне нажмите кнопку OK. Теперь вы получили итоговый вид кода программы.

  1.  Перейти на расшифрованный участок кода и проанализировать его. Внесите листинг расшифрованного кода с комментариями каждой команды в отчет. Какие действия он выполняет?
  2.  По каким адресам располагается фраза «Hello,IDA PRO! »? Внесите эти адреса в отчет.
  3.  Обобщите все данные, полученные в результате анализа программы. Внесите в отчет пошаговое описание алгоритма работы программы, что и как она делает, из каких блоков состоит. Опишите механизм защиты.


ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 4

Название работы____________________________________-

Цель

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

Выполнил

Студент гр. № ______

ФИО ________________________________________________________

Отчет

  1.  Программа IDA__0X1.COM выполняет следующие действия:

___________________________________________________________.

  1.  Дизассемблированный Hiew код программы:

___________________________________________________________.

  1.  Адрес окончания работы программы: _______________.
  2.  Текстовые строки обнаружить: не удалось / удалось. Вывод:

___________________________________________________________.

  1.  Листинг команд, полученных IDA Pro, находящихся по адресам seg000:0100-seg000:0103, с комментариями:

___________________________________________________________.

Они нужны для того, чтобы:

___________________________________________________________.

  1.  Переход с адреса seg000:0103 происходит по адресу: _______________.
  2.  Листинг команд по адресам seg000:0106-seg000:0112, с комментариями:

___________________________________________________________.

Эти команды нужны для того, чтобы:

___________________________________________________________.

  1.  Цикл, расположенный по адресам seg000:010C-seg000:0110, выполняется: ______ раз. Он выполняет следующие действия:

___________________________________________________________.

  1.  Перед выполнением цикла в SI лежит значение: ______.

После выполнения цикла в SI лежит значение: ______.

SI указывает на:

___________________________________________________________.

  1.  Область кода, расположенного по адресу seg000:0114 и далее, представляет собой:

___________________________________________________________.

  1.  Переход с адреса seg000:0112 происходит по адресу: _______________.

Блок команд по этому адресу выполняет:

___________________________________________________________.

Листинг этого блока команд с комментариями:

___________________________________________________________.

В регистре CX окажется значение: ______.

В регистре SI окажется значение: ______.

Переход после команды RETN произойдет по адресу: _______________, потому что:

___________________________________________________________.

  1.  Скрипт выполняет следующие действия:

___________________________________________________________.

Для расшифровки используется ключ: ______.

  1.  Листинг расшифрованного кода программы с комментариями:

___________________________________________________________.

Этот блок команд выполняет:

___________________________________________________________.

  1.  Фраза «Hello,IDA PRO! » располагается по адресам:

___________________________________________________________.

  1.  Обобщение результатов анализа работы программы IDA__0X1.COM:

___________________________________________________________.

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Каковы основные угрозы программному продукту защищенному от несанкционированного использования вводом ключевой информации? Опишите их.
    1.  Какие задачи решает злоумышленник в процессе реализации угроз программному продукту?
      1.  Что понимают под обратным проектированием?
        1.  Для чего служат отладчики?
        2.  Для чего служат мониторы событий?
        3.  Для чего служат дизассемблеры?
        4.  Для чего служат редакторы кода?
        5.  Какова классификация средств обратного проектирования?
        6.  Опишите приемы, используемые злоумышленником при отладке и дизассемблировании ПО.
        7.  Почему шифрование кода программы считается наиболее предпочтительным для защиты от отладчиков и дизассемблеров?
        8.  Какие способы шифрования кода программы выделяют?
        9.  Что такое ассемблирование и дизассемблирование?
        10.  Почему при дизассемблировании ПО практически невозможно получить исходную программу?
        11.  Какие выделяют группы дизассемблеров по типу взаимодействия с пользователем?
        12.  Охарактеризуйте возможности интерактивного дизассемблера IDA PRO.


Лабораторная работа № 4 «Защита автоматизированных систем от НСД средствами СЗИ НСД Secret Net»

Цель

Познакомиться на практике с принципами защиты автоматизированных систем от НСД на примере программно-аппаратного комплекса Secret Net.

Программно-аппаратные средства

Компьютерная лаборатория, ПАК Secret Net.

Теоретический материал

Автономный вариант системы защиты Secret Net 2000 предназначен для защиты ресурсов рабочей станции локальной сети или неподключенного к сети компьютера.

Система Secret Net 2000 дополняет стандартные защитные механизмы ОС Windows 2000 функциями, обеспечивающими:

  •  Идентификацию пользователей при помощи специальных аппаратных средств (iButton, eToken, Smart Card, Smarty).
    •  Дополнительно к избирательному (дискреционному) управлению доступом, реализованному в ОС Windows 2000, полномочное (мандатное) управление доступом пользователей к конфиденциальной информации на локальных и подключенных сетевых дисках.
    •  Оперативный контроль работы пользователей компьютера путем регистрации событий, связанных с безопасностью ИС. Удобные средства просмотра и представления зарегистрированной информации.
    •  Контроль целостности программ, используемых пользователями и операционной системой.
    •  Возможность создания для любого пользователя замкнутой программной среды (списка разрешенных и запрещенных для запуска программ).

Система Secret Net 2000 включает в себя следующие компоненты и подсистемы:

  •  Ядро системы защиты (1).
    •  Подсистема управления (4).
    •  Подсистема криптографической защиты (5).
    •  База данных системы защиты (6).
    •  Подсистема избирательного управления доступом (9).
    •  Подсистема разграничения доступа к дискам (10).
    •  Подсистема полномочного разграничения доступа (11).
    •  Подсистема замкнутой программной среды (12).
    •  Подсистема контроля целостности (14).
    •  Подсистема контроля входа(16).

Подсистемы Windows 2000

Рис. 1. Архитектура автономного варианта системы Secret Net 2000

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

Подсистема регистрации (3) является одним из элементов ядра системы и предназначена для управления регистрацией в журнале безопасности Windows 2000 (8) событий, связанных с работой ОС и Secret Net. Эта информация поступает от отдельных подсистем системы защиты, которые следят за происходящими в информационной среде событиями.

Регистрация событий осуществляется системными средствами (ОС Windows 2000) или средствами системы защиты Secret Net 2000.

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

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

База данных Secret Net (6) предназначена для хранения сведений, необходимых для работы защищенного компьютера. БД Secret Net 2000 размещается в реестре ОС Windows 2000 и содержит информацию об общих настройках системы защиты, свойствах пользователей и групп пользователей.

Доступ подсистем и компонент системы защиты к данным, хранящимся в БД Secret Net, обеспечивается ядром системы защиты (1).

Подсистема избирательного управления доступом (9) обеспечивает разграничение доступа пользователей к ресурсам файловой системы, аппаратным ресурсам и ресурсам операционной системы компьютера. Для управления доступом к ресурсам файловой системы, системному реестру и системным средствам управления компьютером используются стандартные средства ОС Windows 2000. Для управления доступом к дискам и портам используются средства Secret Net 2000 (10).

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

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

Подсистема контроля входа (16) обеспечивает идентификацию и аутентификацию пользователя при его входе в систему. Подсистема включает в себя модуль идентификации пользователя, а также может содержать аппаратные средства контроля входа (15), например, устройства Secret Net TM Card или ЭЗ “Соболь”, если они установлены на компьютере, и программу-драйвер, с помощью которой осуществляется управление этими устройствами. Драйверы входят в комплект поставки и устанавливаются на компьютер вместе с системой Secret Net 2000.

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

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

Контроль конфигурации аппаратных средств производится ядром Secret Net 2000. По результатам контроля ядро принимает решение о необходимости блокировки компьютера. Решение принимается после входа пользователя и зависит от настройки свойств пользователя.

ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ № 4

Управление пользователями

Создание локального пользователя

1. В окне программы "Проводник" выберите папку "Пользователи".

Рис. 1. Список пользователей.

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

2. Перейдите к правому окну, вызовите контекстное меню и выберите команду “Создать”.

3. Измените имя объекта на имя “User” и нажмите <Enter>.

Предоставление привилегий и управление другими свойствами

Непосредственное предоставление привилегий

1. В окне программы "Проводник" выберите пользователя «User», вызовите на экран окно настройки свойств и перейдите к диалогу "Привилегии".

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

3. Завершив настройку, нажмите кнопку "Применить".

Рис. 2. Вкладка "Привилегии"

Управление состоянием учетных записей

1. Перейдите к вкладке "Общие".

Рис. 3. Вкладка "Общие"

2. Ведите полное имя пользователя и его описание.

3. Ограничьте его работу по времени.

4. Нажмите кнопку "Назначить" для вызова на экран диалога "Дата и время".

Рис. 4. вкладка “Дата и время”

3. Укажите разрешенный период работы и составьте нужное расписание.

4. Нажмите кнопку "OK" в диалоге "Дата и время".

5. Нажмите кнопку "Применить" в окне настройки свойств пользователя.

Настройка механизмов контроля входа

Учетные записи и пароли

Параметры блокировки учетной записи

1. Вызовите окно настройки общих параметров и перейдите к вкладке "Учетная запись".

2. Установите максимальное число попыток входа = 5;

3. Интервал времени сброса счетчика = 3 мин.;

4. Ограничить время блокировки 4 мин.;

5. Нажмите кнопку "OK" или "Применить".

Рис. 5. Вкладка "Учетная запись"

Временная блокировка компьютера

1. Откройте окно управления общими параметрами.

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

3. Нажмите на кнопку "OK" или "Применить".

4. В программе "Проводник" выберите пользователя "User", вызовите на экран окно настройки свойств и перейдите к вкладке "Режимы".

5. В поле "Комбинация клавиш для вызова" выберите комбинацию "горячих" клавиш Ctrl-F12.

6. Установите значение интервала неактивности = 5 мин.

7. Нажмите кнопку "Применить".

Рис. 6. Настройка параметров блокировки

Управление режимами использования пароля

Общие ограничения на пароль

1. Вызовите окно настройки общих параметров и перейдите к диалогу "Ограничения на пароль".

2. Установите неограниченный срок действия пароля.

3. Разрешите изменять немедленно минимальный срок действия пароля.

4. Минимальное количество символов в длине пароле установите 4.

5. Установите не вести журнал паролей.

6. Нажмите кнопку "Применить".

Рис. 7. Диалог "Ограничения на пароль"

Настройка механизмов контроля и регистрации

Регистрация событий

Настройка параметров журнала безопасности

1. Вызовите окно настройки общих параметров и перейдите к вкладке "Журнал".

2. Установите значение максимального размера журнала = 1024 Кбайт.

3. Установите механизм очистки журнала при его переполнении по истечении 5 дней.

4. Нажмите кнопку "Применить".

Рис. 8. Настройка параметров журнала безопасности

Настройка общего перечня регистрируемых событий

1. В окне настройки общих параметров выберите вкладку "Регистрация событий".

Рис. 9. Вкладка "Регистрация событий"

2. Отметьте категории событий Windows 2000 и события Secret Net 2000, которые должны регистрироваться в журнале безопасности.

3. Нажмите кнопку "OK".

Настройка персонального перечня регистрируемых событий

1. В программе "Проводник" выберите пользователя «User», вызовите на экран окно настройки свойств и перейдите к вкладке "Регистрация событий".

Рис. 10. Диалог "Регистрация событий"

2. Отметьте категории событий Windows 2000 и события Secret Net 2000, которые необходимо регистрировать в журнале безопасности.

3. Нажмите кнопку "OK" или "Применить".

Дополнительный аудит

1. Вызовите окно настройки общих параметров и выберите диалог "Компьютер".

Рис. 11. Диалог "Компьютер"

2. Установите отметки рядом с нужными параметрами, которые относятся к дополнительному аудиту и контролю переполнения журнала безопасности.

3. Нажмите кнопку или "Применить".

Контроль целостности

Настройка заданий контроля

Списки ресурсов

1. Вызовите окно настройки общих параметров и перейдите к вкладке "Контроль целостности".

2. Нажмите кнопку "Создать список ресурсов".

Рис. 12. Вкладка "Список ресурсов"

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

4. Нажмите кнопку "Ресурс" и в появившемся меню выберите пункт "Добавить ресурс".

Рис. 13. Вкладка "Ресурс".

5. Укажите необходимые значения параметров.

6. Для добавления в список следующего ресурса, повторите процедуру, начиная с пункта.4.

7. Завершив формирование списка, нажмите кнопку "ОК" в окне настройки общих параметров.

Задания

1. Во вкладке "Контроль целостности" выберите список ресурсов, нажмите кнопку "Задание" и выберите в меню команду "Добавить. задание".

Рис. 14. Вкладка "Общие"

2. Во вкладке "Общие" введите название задания "Контроль документов" и комментарий к нему.

3. Выберите тип контролируемых данных "Содержимое объекта", т.е. контролируемые параметры (характеристики) ресурсов.

4. Отметьте с помощью переключателей желаемую реакцию системы защиты на результат выполнения контроля в случае успеха и в случае неудачи (отказа).

5. Перейдите к вкладке "Расписание" и составьте расписание контроля:

Рис.15 Вкладка "Расписание контроля"

4. В нижней части диалога в группе полей "Учет временных параметров" указать периодичность контроля в течение суток = 4 часам.

5. Нажмите кнопку "OK".

Регистрация событий

1. Вызовите окно настройки общих параметров и перейдите к вкладке "Регистрация событий".

2. В категории событий Secret Net установите отметки у событий групп "События расширенной регистрации" и "События НСД".

Группа событий

Событие

События расширенной регистрации

Контроль целостности выполнен с исправлениями

Ошибка при контроле целостности данных

Восстановлено значение объекта

События НСД

Нарушена целостность объекта

3. Нажмите кнопку "OK".

4. В программе "Проводник" выберите пользователя "User", вызовите на экран окно настройки свойств, перейдите к вкладке "Регистрация событий" и повторите действия 2-3.

Анализ нарушений и восстановление ресурсов

1. Найти в журнале безопасности событие, зафиксированное как нарушение целостности ресурса или несанкционированный доступ.

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

3. Установить причину нарушения целостности ресурса.

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

Замкнутая программная среда

1. Откройте окно управления общими параметрами и перейдите к вкладке "Дополнительно".

2. Установите отметку в поле выключателя "Замкнутая среда" и нажмите кнопку "OK".

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

Рис. 16 Вкладка "Дополнительно"

Настройка регистрации событий

Персональный перечень

1. В программе "Проводник" выберите пользователя, вызовите на экран окно настройки свойств и перейдите к вкладке "Регистрация событий".

2. Отметьте события Secret Net 2000, которые необходимо регистрировать для настройки замкнутой среды:

 В группе "События расширенной регистрации": "Запуск программы";

 В группе "События НСД": "Запрет запуска программы".

3. Нажмите кнопку "Применить".

Рис. 17 Вкладка " Регистрация событий"

Доступ к дискам и портам

Включение механизма разграничения доступа к дискам и портам

1. Откройте окно управления общими параметрами и перейдите к вкладке "Дополнительно".

Рис. 18 Вкладка "Дополнительно".

2. Установите отметку в поле выключателя "Разграничение доступа к устройствам" и нажмите кнопку "Применить".

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

Предоставление прав доступа

1. В программе "Проводник" выберите пользователя "User", вызовите на экран окно настройки свойств и перейдите к вкладке "Доступ".

Рис. 19. Вкладка "Доступ"

2. Установите отметку в списке "Доступ к портам".

3. Установите отметку "Доступ к дискам".

4. Установите отметку "Права доступа" для дисков.

5. Нажмите кнопку "OK".

Вопросы

1. Перечислите основные компоненты Secret Net 2000?

2. Что является отличительной особенностью системы Secret Net 2000 от системы защиты Windows 2000?

3. Каким образом можно настроить механизм регистрации событий?

4. Каким образом можно настроить контроль целостности.

5. Каким образом можно настроить задания контроля целостности?

6. Что означает термин «замкнутая программная среда»?

7. Какие аппаратные средства контроля входа в систему поддерживает Secret Net 2000?


ПРИЛОЖЕНИЯ

Приложение 1. «Пример оформления титульного листа отчёта»

Казанский государственный технический университет

им. А.Н. Туполева

Кафедра систем информационной безопасности

О Т Ч Е Т

по дисциплине

«Программно-аппаратная защита информации»

на тему

«Защита ПО от несанкционированного использования с помощью электронных ключей HASP»

Выполнил:

 студент гр. _______

  _________________

Проверил:

 доцент каф. СИБ

 Аникин И.В.

Дата: ______________

Подпись: ___________

Казань - 2007

Приложение 2. «Список рекомендуемой литературы»

  1.  Программно-аппаратные средства обеспечения информационной безопасности. Защита программ и данных. Учебное пособие для ВУЗов / П.Ю. Белкин, О.О. Михальский, А.С. Першаков и др. – М., Радио и связь, 1999.
  2.  Программно-аппаратные средства обеспечения информационной безопасности. Защита в операционных системах. Учебное пособие для ВУЗов / В.Г. Проскурин, С.В. Крутов, И.В, Мацкевич. – М., Радио и связь, 2000.
  3.  Романец Ю.В., Тимофеев П.А., Шаньгин В.Ф.. Защита информации в компьютерных системах и сетях / Под. ред. Шаньгина В.Ф. – М., Радио и связь, 1999.
  4.  Гроувер Г. Защита программного обеспечения. М.: Мир, 1992.
  5.  Касперски К. Техника и философия хакерских атак. М., 2000
  6.  Аникин И.В., Глова В.И. Программно-аппаратная защита информации. Защита программного обеспечения от отладки и дизассемблирования. Учебное пособие. Казань, 2003.
  7.  

АНИКИН Игорь Вячеславович

ГЛОВА Виктор Иванович

НЕЙМАН Лев Исаакович

НИГМАТУЛЛИНА Алия Науфальевна

ТЕОРИЯ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ И МЕТОДОЛОГИЯ ЗАЩИТЫ ИНФОРМАЦИИ

Методические указания к выполнению

лабораторных работ

Ответственный за выпуск

Технический редактор

Компьютерный набор и вёрстка А.С. Катасёв

ЛР № 020678 от 09.12.97

Подписано в печать

Формат 60х84 1/16. Бумага газетная. Печать офсетная.

Печ. л.      Усл.печ.л.     Уч.-изд.л.      Усл.кр.-отт.

Тираж 100. Заказ

Издательство Казанского государственного технического университета

Типография Издательства Казанского государственного

технического университета

420111, г. Казань, ул. К.Маркса, 10


 

А также другие работы, которые могут Вас заинтересовать

82214. Вклонімося хлібу – він святий 71.5 KB
  Виріс у полі на добрій землі Місце найкраще знайшов на столі Що це Учні відповідають: Хліб Слайд Ведуча: Хліб –- найдорогоцінніший витвір людського розуму людських рук людської праці Ведуча: Хліб – усьому голова. Але до хліба не можна ставитися побуденному. В чому ж ця сила і велич хліба ми спробуємо...
82215. Людиною стати – це мистецтво 76 KB
  Мета: навчити учнів уникати конфлікту у житті, вміти спілкуватися, дружити між собою; розвивати в дітях загальнолюдські чесноти; вчити дітей сприймати ситуації, аналізувати їх і знаходити шляхи виходу з проблемних ситуацій; виховувати товариські стосунки.
82216. Давайте жить мирно! 58.5 KB
  Внекласное мероприятие Давайте жить мирно проведённое в международный День мира направлено на формирование у учащихся чувства сострадания и отвращения к жестокости к жестоким историческим фрагментам во всем мире; на обучение осознанию своей ответственности за процесс обеспечения мира на всей планете.
82217. ДЕНЬ ПРАЦІВНИКА ОСВІТИ 1.09 MB
  Ведучий: Красива осінь вишиває клени, а перший день жовтня дарує нам тепле і радісне свято - День працівника освіти. Викладач... Одна з найважливіших професій. Вона – для обраних. Ви щодня стоїте перед прицілом сотень допитлитвих очей, палите, як хмиз, нерви, і все ж ведете нас на вищі сходинки пізнання.
82218. Воздух – среда нашего обитания 944.87 KB
  Цели: Практическая – учить использовать разные источники, в том числе Интернет (электронные словари и энциклопедии)для поиска необходимой информации. Совершенствовать навыки практической работы с лабораторным оборудованием.
82219. Дружба. Друг, товариш, приятель 1.47 MB
  Передаючи мікрофон діти по черзі висловлюють свою думку на рахунок даного запитання – кожен з них виокремлює по одній рисі характеру що притаманна другові. А як на вашу думку хто з казкових чи мультиплікаційних героїв є прикладом справжнього другадіти висловлюють власні припущення.
82220. Хліб – не просто їжа 273 KB
  Запитання: то з яким продуктом харчування ми зустрічаємося кожен день Сьогодні ми поговоримо з вами про найдорожче золото на землі хліб. Коли ж хліб вперше прийшов на стіл до людини Вченіархеологи різних країн світу після вивчення багатьох матеріалів підтвердили що першою хлібною рослиною треба вважати не жито і пшеницю а дуб.
82221. Еврика! Інтелектуальна гра у 10-11 класах 43 KB
  Як називається число при якому значення многочленна дорівнює нулю Які квадратні рівняння можна швидко розв’язати за допомогою теореми Вієта Назвіть відомі Вам способи розв’язування систем лінійних рівнянь Як називається графік квадратичної функції Коли дріб дорівнює нулю...
82222. Інтелект-шоу «ЕОМ – Еврика» 4.78 MB
  Головна мета нашого інтелект-шоу – розвинути пізнавальну діяльність учнів у області інформатики та інших предметів, знання яких необхідні при вивченні предмету, надати учням можливість продемонструвати ці знання, свою ерудицію та захоплення.