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





НазваниеРазработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии
страница6/10
Дата публикации01.08.2013
Размер1.43 Mb.
ТипАвтореферат
100-bal.ru > Информатика > Автореферат
1   2   3   4   5   6   7   8   9   10
Глава 4. Система внедрения цифровых водяных знаков в исходные коды программ

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

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

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

Согласно предложенной в работе [35] классификации, водяные знаки могут быть разделены на две категории:

  • статические – добавляются к коду или данным программы на этапе создания;

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

Существует другая классификация, представленная в статье [36]. Здесь, происходит разделение типов водяных знаков по назначению.

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

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

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

  • Лицензионная метка – используется для аутентификации программного обеспечения. Должна быть невидимой и «хрупкой»16.

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

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

Существует два основных подхода. Первый предлагает использование специальных дополнительных функций, которые добавляются к коду программы, [39], [41], [42]. Код дополнительных функций содержит требуемый водяной знак, например, в виде констант, использующихся
в различных вычислениях. Эти добавленные функции не должны выглядеть как “мертвый код” (код, который никогда не будет выполнен) потому,
что иначе они могут быть легко удалены алгоритмом устранения мертвого кода. То есть они должны быть интегрированы в программу и вызваны
в течение выполнения программы. Преимущество этого подхода состоит
в фактически неограниченной длине водяного знака. Однако недостаток – потенциальная деградация алгоритма работы программы. Другим недостатком является уязвимость к нападениям, которые находят некоторые известные образцы функциональных конструкции водяного знака и пути обращения к нему.

Второй подход не использует добавление явных кодов, а скорее задействует некоторую незначительную избыточность в программных файлах, которая позволяет внедрять водяной знак. Подобный подход используется в работах [38], [40], [43-47], чтобы скрыть данные непосредственно в исполняемых файлах. Общая особенность этих методов состоит в нахождении некоторого набора эквивалентных способов генерации исполняемого файла и сокрытие данных через выбор одного из них. Методы генерации кода зависят от компилятора и, в частности, его методов выбора типа команды, планирования инструкций, размещения текста программы, выделения регистров, расстановке переменных и расстановке адресов функций в таблицах импорта. Следует обратить внимание на то,
что некоторые модификации кода могут быть применены к уже готовому исполняемому файлу, в то время как другие только во время компиляции
и, поэтому, требуются специально разработанный компилятор. Мы кратко проиллюстрируем сущность каждого метода. Примеры во всей главе будут даваться на C\C++ и языках трансляции процессора ARM 17.

Метод выбора команды состоит в нахождении различных последовательностей кода, которые производят то же самое вычисление. Например, инструкция d = d + 1 могла быть выполнена путем добавления
1 или, вычитанием -1 от d. Инструкция d = d * 2 могла быть выполнена добавлением d к d или левым битовым сдвигом d. Эти варианты могут быть закодированы как 0 и 1 соответственно. Выбор одного из них зависит
от внедряемого бита данных. Следует обратить внимание на то,
что возможность эффективного поиска альтернативной команды зависит
от типа процессора и ограничены в RISC типа ARM. В ARM удвоение переменной может быть сделано следующим образом:

add rd, rd, #0

или

mov rd, rd, asl #1,

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

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

mov r3, r4

add r0, r4, #1

две операции являются независимыми следовательно, возможна эквивалентная последовательность:

add r0, r4, #1

mov r3, r4

Таким образом можно закодировать один бит информации.

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

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

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

Все рассматриваемые методы могут быть объединены вместе, чтобы увеличить общий объем внедрения информации. Однако существует проблема: внедрение данных не всегда устойчиво. Это, прежде всего, относится к внедрению, сделанному непосредственно в готовую исполняемую программу. Та же самая программа, которая внедряет данные, может использоваться для стирания или изменения водяного знака. Именно поэтому в данной работе особое внимание уделяется методам внедрения, применяемых к исходным текстам программ, после компиляции которых найти или исказить водяной знак значительно труднее.
4.3 Описание предложенной схемы внедрения водяных знаков
4.3.1 Описание предлагаемой схемы

В данном разделе будет предложена схема нанесения водяных знаков в тексты программ на языке C\C++.

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

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

int f (int x)

{

int a, b;

a = x + 1;

b = x - 1;

return a + 2 * b;

}

Вычислительная часть функции, откомпилированая с GCC:

ldr r3, [fp, #-16]

add r3, r3, #1

str r3, [fp, #-20]

ldr r3, [fp, #-16]

sub r3, r3, #1

str r3, [fp, #-24]

ldr r3, [fp, #-24]

mov r2, r3, asl #1

ldr r3, [fp, #-20]

add r3, r2, r3

mov r0, r3

где распределение памяти для переменных соответствует порядку
их объявления:

x = [fp, #-16], a = [fp, #-20], b = [fp, #-24].

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

0→ int a, b; 1→ int b, a;
0→ a = x + 1; 1→ b = x – 1;

b = x – 1; a = x + 1;
Так, исходная функция, в которой объявления локальных переменных и инструкции упорядочены лексикографически, соответствует водяному знаку “00”. Чтобы внедрить водяной знак “11”, мы перезаписываем функцию в виде:

int f (int x)

{

int b, a;

b = x - 1;

a = x + 1;

return a + 2 * b;

}

Вычислительная часть функции, откомпилированая с GCC:

ldr r3, [fp, #-16]

sub r3, r3, #1

str r3, [fp, #-20]

ldr r3, [fp, #-16]

add r3, r3, #1

str r3, [fp, #-24]

ldr r3, [fp, #-20]

mov r2, r3, asl #1

add r3, r2, r3

mov r0, r3

где распределение памяти для переменных соответствует порядку
их объявления:

x = [fp, #-16], a = [fp, #-24], b = [fp, #-20].

Рассмотрим устойчивость данного метода к искажению водяного знака. Предположим, что мы имеем две исполняемых программы или объектных модуля, которые содержат нашу функцию с водяными знаками “00” и “11” соответственно. В табл. 4.1 приведено сравнение двух объектных файлов
с помощью команды unix shell “cmp –l”. Мы обнаруживаем 4 различия.
Таблица 4.1. Различия объектных файлов до и после внедрения водяного знака

Адреса

Байты файлов

Без водяного зн.

С водяным зн.

79

203

103

91

103

203

97

30

24

105

24

30


(Те же самые различия, но в других адресах, были бы найдены
в исполняемых программах). Первые 203 и 103 – различия кодов команд add и sub. Далее, различия 30 и 24 – распределения памяти для переменных a и b. Мы видим, что нельзя вмешиваться в этот водяной знак, то есть изменять его на “01” или “10”, изменяя лишь эти известные различающиеся байты. Действительно, если мы меняем 203 и 103, чтобы изменить водяной знак, функция будет повреждена, потому что это добавит 1 к b и вычтет 1 от a,
что дает неправильный результат. Та же самая ошибка будет возникать,
если мы меняем 30, и 24 (результат будет b + 2*a). Итак, мы можем подвести итог, утверждая, что вообще невозможно вмешаться в водяной знак
в двоичном исполняемом файле простой заменой различающихся байт,
где обнаружены различия. Эти различия могут только помогать обнаруживать местоположение водяного знака. Конечно, это возможно только когда пакеты программ содержат различные водяные знаки (отпечатки пальца) и злонамеренные пользователи создают коалиции.

Более серьезное нападение может быть осуществлено,
если мы дизассемблируем исполняемую программу. Хотя дизассемблирование большой исполняемой программы является достаточно трудной задачей, все же имеется ряд дополнительных трудностей связанных с внедрением в исходный код C\C++. Рассмотрим код нашей функции.
Во-первых, мы можем видеть, что нет никаких последовательных
и независимых команд, которые могут быть переставлены для того, чтобы модифицировать водяной знак. Это происходит потому, что независимые C\C++ инструкции компилируются не в отдельные независимые команды,
а скорее в независимые группы команд. Так что мы нуждаемся
в дополнительном уровне декомпиляции для определения групп команд, соответствующих выше упомянутым инструкциям языка.

Что касается назначения переменных, то на первый взгляд – это кажется простой задачей – взаимно заменить смещения (-20 и -24 в нашем примере), чтобы исказить некоторые биты водяного знака. Но иногда
(не в нашем примере) необходим адрес переменной. В этом случае смещение будет использоваться как обычная константа и, при более детальном анализе кода, может потребоваться указать это смещение при помощи некоторой другой константы.

Фактически, чтобы осуществить эффективное нападение
мы нуждаемся больше в декомпиляторе, нежели чем в дизассемблере. Вполне очевидно, что задача осуществления декомпиляции с целью последующего вмешательства в водяной знак является лучшим способом нападения, который можно себе представить. Если иметь исходные тексты, то можно встраивать любой водяной знак, используя ту же самую внедряющую программу.
1   2   3   4   5   6   7   8   9   10

Похожие:

Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconРоссийской федерации
Курс призван дать понимание принципов построения и функционирования сети Интернет, а также базирующихся на ней информационных технологий....
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconАналитический доклад Совету глав правительств СНГ о текущем состоянии,...
В настоящее время эффективное информационное взаимодействие невозможно представить без использования информационных технологий, телекоммуникационных...
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconInformation technology. Security techniques. Methodology for it security evaluation
Информационная технология. Методы и средства обеспечения безопасности. Методология оценки безопасности информационных технологий
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconВыпускная работа по «Основам информационных технологий»
На современном этапе ни одни исследования в науке невозможно представить без использования информационных технологий. Данный реферат...
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconОсновные направления внедрения средств информационных и коммуникационных...
Зация образования – это процесс обеспечения сферы образования методологией и практикой разработки и оптимального использования современных...
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconДоклад по теме: «Внедрение технологий глонасс в интересах обеспечения...
«Внедрение технологий глонасс в интересах обеспечения безопасности граждан и социально-экономического развития Костромской области....
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconПрименение информационных технологий на уроках английского языка...
Возможности использования информационно-коммуникативных технологий в обучении английскому языку 17
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconМетодические рекомендации по организации месячникамедиабезопасности...
Мешиона от 24. 10. 13 №397-у «О проведении Интрнет-уроков «Имею право знать!», в целях обеспечения информационной безопасности обучающихся,...
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconИсследование и разработка методов и средств обеспечения информационной...
Работа выполнена на кафедре прикладной информатики Московского государственного университета геодезии и картографии (миигаиК)
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconПрименение информационных технологий на уроках истории и обществоведения...
Возможности использования информационно-коммуникативных технологий в обучении истории 17
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconПрограмма по формированию навыков безопасного поведения на дорогах...
Изучение и разработка новых методов подготовки к егэ в 11 классе с учетом использования современных технологий
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconПрограмма по формированию навыков безопасного поведения на дорогах...
Изучение и разработка новых методов подготовки к егэ в 11 классе с учетом использования современных технологий
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconЭффективность использования информационных технологий в исследованиях...
Специальность 23. 00. 01 – теория и философия политики, история и методология политической науки
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconРабочая программа учебной дисциплины «Информационные системы в экономике»
Сформировать у студентов знаний и навыков в области использования информационных технологий и информационных систем для решения экономических...
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconМетодические рекомендации по государственной регистрации и учету...
«Центр информационных технологий и систем органов исполнительной власти» (далее – фгну цитиС) в целях формирования национального...
Разработка методов обеспечения безопасности использования информационных технологий, базирующихся на идеях стеганографии iconПриходько Юлия Алексеевна Приложение №2 Белгородский региональный...
Необходимость внедрения новых информационных технологий в процесс обучения математики


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск