ФГБОУ ВПО
«Воронежский государственный технический университет»
Кафедра систем информационной безопасности
«Компьютерные преступления в распределенных компьютерных системах» для студентов специальности
очной формы обучения
Воронеж 2012
Составители: д-р техн. наук Г.А. Остапенко, К.В. Симонов
УДК 681.3.06
Компьютерные преступления: методические указания к выполнению практических занятий по дисциплине «Компьютерные преступления в распределенных компьютерных системах» для студентов специальностей 090301 "Компьютерная безопасность",очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. Г.А. Остапенко, К.В. Симонов. Воронеж, 2012. 57 с.
В методических указаниях изложен порядок выполнения заданий при проведении практических занятий и пояснения по их выполнению по дисциплине "Компьютерные преступления в распределенных компьютерных системах", приводится список необходимой литературы и правила оформления пояснительной записки.
Методические указания подготовлены в электронном виде в текстовом редакторе MSWORD и содержатся в файле МУ_к практике_по_КП.doc.
Ил. 23. Библиогр.: 9 назв.
Рецензент канд. техн. наук, доц. М.И. Бочаров
Ответственный за выпуск д-р техн. наук, проф. А.Г. Остапенко
Издается по решению редакционно-издательского совета Воронежского государственного технического университета
© ФГБОУ ВПО "Воронежский государственный технический университет", 2012
1. ОБЩИЕ ПОЛОЖЕНИЯ
1.1 Цель и задачи практических занятий
Цель данного практикума – является закрепление теоретического материала, обучение студентов основам и принципам противодействия общественно опасным действиям, в которых машинная информация является либо средством, либо объектом преступного посягательства.
Практикум предусматривает выполнение практических работ: проработку теории, изучение алгоритма, самостоятельное выполнение задания, анализ результатов. Он может быть использован как студентами, для самостоятельного изучения практического курса по дисциплине «Компьютерные преступления», так и преподавателями для организации практических работ.
Практикум включает 5 практических работ, каждая из которых посвящена конкретной теме. Практические работы располагаются а порядке рекомендуемого освоения практических навыков по дисциплине «Компьютерные преступления в распределенных компьютерных системах» и полностью согласуются с лекционными материалами.
Каждая практическая работа содержит теоритический материал, необходимый для ее выполнения, а так же пошаговый план выполнения работы, с пояснениями и иллюстрациями к каждому шагу.
Студент, выполнивший все практические работы, должен обладать следующей общекультурной компетенцией (ОК):
владеет культурой мышления, способен к обобщению, анализу, восприятию информации, постановке цели и выбору путей её достижения (ОК-1);
способен понимать сущность и значение информации в развитии современного информационного общества, сознавать опасности и угрозы, возникающие в этом процессе, соблюдать основные требования информационной безопасности, в том числе защиты государственной тайны (ОК-12);
Студент, выполнивший все практические работы, должен обладать следующей профессиональной компетенцией (ПК):
осознает социальную значимость своей будущей профессии, обладает мотивацией к осуществлению профессиональной деятельности (ОПК- 1);
способен использовать систематизированные теоретические и практические знания гуманитарных, социальных и экономических наук при решении социальных и профессиональных задач (ОПК-2);
способен нести ответственность за результаты своей профессиональной деятельности (ОПК-4);
способен выявлять, пресекать, раскрывать и расследовать преступления и иные правонарушения в информационной сфере (ПК-10).
решение задач воспитания средствами учебного предмета (ПК-12).
Студент, выполнивший все практические работы, должен:
владеть приемами работы со свойствами электронных документов, файлов, папок;
навыками автоматизированного сбора информации о параметрах устройств, входящих в состав компьютера и об установленном программном обеспечении.
уметь вести поиск и исследование, осуществлять защиту информации, представленной в электронной форме;
знать основные закономерности создания и функционирования информационных процессов в компьютерах и сетях;
методы подготовки и защиты процессуальных документов с использованием современных информационных технологий.
Задачи практических работ:
освоить теоретический материал по дисциплине "Компьютерные преступления в распределенных компьютерных системах" (углубленное изучение законодательных актов, регулирующих отношения в информационной сфере, включая квалификацию видов наказаний за компьютерные преступления);
изучение основных понятий и терминов, имеющих отношение к компьютерным преступлениям;
усвоение принципов идентификации компьютерных преступлений и их характеристик;
изучение методов раскрытия и расследования типовых компьютерных преступлений;
закрепить знание теоретического материала, используя необходимый инструментарий практических работ
2 СОДЕРЖАНИЕ ПРАКТИЧЕСКИХ РАБОТ
2.1 Практическая работа №1: «Анализ атак ориентированных на взлом программного обеспечения путем обхода процедуры авторизации»
Системы защиты ПО были придуманы для того, чтобы создатели программного обеспечения могли получать финансовые вознаграждения за свой труд. Для этого есть 2 способа:
попытаться заинтересовать пользователя в его приобретении. Это привело к мысли создавать «Shareware» программы (то есть условно-бесплатные). Такой «софт» можно бесплатно скачать и пользоваться. Однако, ограничения ставятся на некоторые функции ПО, или же на время использования. То есть, если программа нужна пользователю, он ее рано или поздно должен будет приобрести. Приобретение сводится к продаже пользователю регистрационного кода, сгенерированного для него (то есть на основе его данных, хотя в некоторых случаях, серийные номера могут генерироваться случайно, но иметь общие свойства – например чтобы деление одной части ключа на другую давало всегда один и тот же остаток, известный программе). При всем этом необходимо заботиться о том, чтобы покупатель, ее не смог свободно распространять. Однако, до сих пор существует множество программ, которые можно купить один раз и распространять неограниченными тиражами[1].
продавать программу сразу, но опять же заботиться о защите нелегального распространения.
Описанное выше можно назвать «внешними» системами защиты. «Внутренние» системы – это средства затруднения взлома и анализа машинного кода программы, такие как использование специальных приемов против отладчиков, упаковка (сжатие), шифрование, проверка целостности машинного кода (например через «циклический избыточный код» CRC, либо другие эффективные алгоритмы, к примеру коды Рида-Соломона, которые не только говорят о «неправильных» байтах, но и могут их восстанавливать).
Для защиты от нелегального распространения используют либо «привязку» к конкретному компьютеру пользователя, либо снабжают ПО специальным устройством, которое трудно продублировать. В роли «привязки» – считывание уникальных данных аппаратуры (например: процессора, жесткого диска, настроек и версий операционной системы и т.д.), после чего создается ключевой файл либо запись в реестре, либо используется любое другое хранилище ключевой информации. При каждом запуске программы такой ключ генерируется заново и сверяется с тем, что создавался при регистрации. Их несовпадение говорит о том, что программа либо запущена на другой машине или пользователь сменил часть аппаратуры. Из-за второго варианта могут возникать претензии со стороны легального пользователя, поэтому с таким методом защиты разработчики очень осторожны. Так же, зарегистрированная программа, может оставить специальную метку в файловой системе, однозначно идентифицируя данный компьютер, что проще и не вызовет претензий пользователя при замене, ну, скажем, процессора, но все же менее надежно при нелегальном копировании[2].
В роли специальных устройств может выступать HASP-ключ, дискета или CD, подготовленные особым образом, и т.д. К примеру - программа записана на CD со специальными метками, который невозможно скопировать штатными средствами. Так или иначе, эти устройства выполняют роль регистрационного ключа, и должны являться гарантом того, что данная копия программы принесла прибыль разработчикам[3].
Качество механизмов защиты, деньги, получаемые пиратами от торговли взломанным ПО, а так же желание некоторых людей решить новую «головоломку» лишает программистов честно заработанных денег.
Взлом программного обеспечения можно разделить на несколько категорий – «математический» взлом, «эмуляция условий» и программный (грубый) взлом.
«Математический» взлом - это исследование алгоритма генерации серийного номера находящегося внутри программы-жертвы и создание на его основе генератора серийных номеров (так называемый «KeyGen»), который распространяется вместе с программой. При таком взломе целостность программы-жертвы остается неименной. Для выявления такого алгоритма требуются глубокие знания в математике и программировании (в частности – языка Assembler), а так же знание особенностей компиляторов от разных разработчиков.
Это Shareware программа, поэтому рассмотрим более детально алгоритм регистрации ПО такого рода (допустим, нам нужно зарегистрировать программу X_PROG):
Получение регистрационного номера:
Пользователь перечисляет сумму разработчикам, и сообщает некоторые данные: например, свой ник (для удобства пусть это будет «USER_NICKNAME»)
Разработчики используют специальный алгоритм (скажем ALG) , для преобразования «USER_NACKNAME» в ключевую информацию, необходимую для корректной работы X_PROG.
Полученный ключ (пусть это будет «VALID_KEY») отправляется пользователю.
Регистрация программы:
Пользователь запускает X_PROG. Она пытается прочитать сохраненные данные регистрации (при этом пусть данные о пользователе хранятся в переменной REG_NAME, а ключ регистрации в S_N)
Если сохраненных данных нет, то выполнить пункт 6
Программа, используя тот же самый алгоритм ALG, что и разработчики, преобразует REG_NAME в ключ REG_KEY.
REG_KEY сверяется c ключом S_N.
Если они совпадают, то для программы это означает, что программа уже зарегистрирована и происходит скачок на пункт 11.
Программа показывает окно регистрации и просит пользователя ее зарегистрировать.
Пользователь в поле регистрации REG_NAME вводит «USER_NICKNAME», а в поле S_N – полученный им ключ «X_KEY».
Происходит то же самое что и в пункте 3.
REG_KEY сверяется c ключом S_N. Если они совпадают, то регистрация успешно закончена. Программа сохраняет данные регистрации, чтобы каждый раз не запрашивать данные пользователя. Затем выполняется пункт скачок на пункт 11
Программа работает в демонстрационном режиме (ограниченная версия).
Программа работает в полном режиме. Пользователь радуется.
Наша испытуемая программа Denoiser.exe не будет работать в полном режиме, пока она не будет авторизована – при этом, после запуска, программа явно требует регистрационный код. Авторы данного произведения допустили одну небольшую оплошность – при вводе некорректного S/N(serial number) программа выдает сообщении “Wrong registration code”. Оплошность - это потому, что разработчики практически «нарисовали стрелку», указывающую на защитный механизм! То есть, если мы найдем программный код, который выводит сообщение на экран, то окажемся прямо в хвосте защиты[5].
Теперь можно приступать к исследованию. Для удобства сохраните копию оригинального файла «Denoiser.exe», например, скопировав его в другую папку.
QView - это редактор файлов, который представляет собой простой дизассемблер с полной поддержкой команд микропроцессора семейства i386. При нажатии комбинации ALT+F на экране появится окно для загрузки файла в редактор (см. рисунок 1) Найдите и откройте Denoiser.exe.
Рис. 1. Окно для загрузки файла в редактор
В любом случае проверим. Откроем «DLL_REG.DLL» в редакторе, опять нажмем F7 и введем «Wrong reg». Нашли! Строка располагается по адресу 0001B368. Теперь встает вопрос – как искать код который выводит эту строку на экран. Скорее всего (это можно определить по виду окна) - это стандартная функция Windows – MessageBox, которая принимает следующие параметры:
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
то есть – hWnd – идентификатор окна, который нам абсолютно не интересен, lpText – адрес выводимого текста (как раз нашего сообщения), lpCaption – адрес строки заголовка, uType – стиль сообщения (используется для показа дополнительных кнопок, а так же иконок – «Ошибка», «Информация», «Предупреждение» и так далее..). Если эту функцию представить в виде машинных команд, то она будет выглядеть следующим образом:
PUSH uType
PUSH lpCaption
PUSH lpText
PUSH hWnd
CALL MessageBoxA
То есть в программе будет присутствовать команда “PUSH XXXXXXXX” – где «иксы» - это шестнадцатеричное представление адреса строки. Адрес, который мы нашли – это физический адрес, поэтому для нас не подходит. Вся проблема в том, что после загрузки программы в память происходит «настройка адресов» - то есть преобразование физических в виртуальные, посредством специальной таблицы.