3. Вплив на роботу відладчика через органи управління або / та пристрої відображення інформації.

Видавана налагоджувальними засобами інформація аналізується людиною. Отже, додатковий спосіб захисту від налагодження це порушення процесу спілкування оператора і відладчика, а саме спотворення або блокування вводу з клавіатури і виводу на термінал інформації.

4. Використання принципових особливостей роботи керованого людиною відладчика. У даному випадку захист від дослідження полягає в нав'язуванні для аналізу надмірно великого обсягу коду (як правило, за рахунок циклічного виконання деякої його ділянки).

Розглянемо даний метод докладніше. Нехай є деяке повноциклове перетворення з N станів t: Т = t 1, t 2 ,..., t N (Наприклад, звичайний двійковий лічильник або, рекуррента). Значення N вибирається не надто великим. Наприклад, для k-бітового лічильника N = 2 k. Ділянка коду, що захищається від вивчення, динамічно перетворюється (шифрується) з використанням криптографічно стійкого алгоритму на ключі t, який вибирається випадково і рівноймовірно з безлічі станів Т.

Робота механізму захисту від дослідження виглядає таким чином. Програма повноциклового перетворення починає роботу з детермінованого або випадкового значення. На встановленому значенні проводиться дешифрування зашифрованої ділянки коду. Правильність дешифрування перевіряється підрахунком значення хеш-коду розшифрованої ділянки програмного коду з використанням елементів, пов'язаних з налагодженням (стек, налагоджувальні переривання та ін.) Хеш-функція повинна з імовірністю 1 визначати правильність дешифрування (для цього значення хеш-коду повинно бути не менше k).

Припустимо, що повноциклове перетворення стартує з першого значення. Тоді при нормальному виконанні програми (швидкість роботи висока) буде здійснено i циклів алгоритму, після чого захищувана ділянка буде коректно виконаний. При роботі відладчика, керованого людиною, швидкість виконання програми на кілька порядків нижчі, тому для досягнення необхідного значення 1 буде витрачено значний час.

Для чисельної оцінки даного методу введемо наступні значення. Припустимо, що i в середньому дорівнює N / 2. Нехай w 0 - час виконання циклу алгоритму (встановлення поточного значення, дешифрування, перевірка правильності дешифрування) у штатному режимі функціонування (без налагодження); w 1 - час виконання того ж циклу в режимі налагодження; z-граничний час затримки при штатній роботі захищеної програми. Тоді N = z / w 0. Витрати часу зловмисника обчислюються середньою величиною Т зл = Nw 1 / 2. Для приблизних розрахунків w 1 / w 0 »10000.

У ряді способів захисту від налагодження ідентифікація відладчика і направлення його по хибному шляху відбуваються одночасно, в одному і тому ж фрагменті коду (так, при визначенні стека в області коду захищуваної програми при роботі відладчика, що використовує той же стек, код програми буде зруйновано). В інших випадках помилковий шлях в роботі програми формується штучно. Часто для цього використовують динамічне перетворення програми (шифрування) під час її виконання.

Спосіб динамічного перетворення полягає в наступному: спочатку в оперативну пам'ять завантажується фрагмент коду, зміст частини команд якого не відповідає тим командам, які цей фрагмент у дійсності виконує; потім цей фрагмент по деякому закону перетворюється, перетворюючись на виконавчі команди, які потім і виконуються.

Перетворення коду програми під час її виконання може переслідувати три основні мети:

·    протидія файловому дизасемблюванню програми;

·    протидія роботі відладчика;

·    протидія зчитуванню коду програми у файл з оперативної пам'яті.

Перелічимо основні способи організації перетворення коду програми:

1.  Заміщення фрагмента коду функцією від команди, що знаходиться на даному місці, і деяких даних.

2.  Визначення стека в області коду і переміщення фрагментів коду з використанням стекових команд.

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

4.  Перетворення коду в залежності від зовнішньої до програми інформації.

5.  Перетворення коду, поєднане з діями, характерними для роботи налагоджувальних засобів.

Перший спосіб полягає в тому, що за деякою адресою в коді програми розташовується, наприклад, побітова різниця між реальними командами програми і деякою хаотичної інформацією, яка розташовується в області даних. Безпосередньо перед виконанням даної ділянки програми відбувається підсумовування хаотичної інформації з вмістом області коду і в ній утворюються реальні команди.

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

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

Четвертий спосіб полягає в перетворенні коду програми на основі деякої зовнішньої інформації, наприклад зчитаної з ключовою дискети некопіюємої мітки, машинно-залежної інформації або ключа користувача. Це дозволить виключити аналіз програми, що не має ключового носія або розміщеної на іншому комп'ютері, де машино-залежна інформація інша.

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

Важливим завданням захисту програм від досліджень є захист від трасування програми по заданій події (свого роду вибіркове дослідження). В якості захисту від трасування по заданій події (переривання) можна виділити три основних способи.

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

2.  Активний захист першого типу - замикання ланцюгів обробки подій минаючи програми трасування.

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

Наприклад, для захисту від трасування за дисковим перериваннях для ОС MS DOS при читанні некопіюємої мітки з дискети або вінчестера можна використовувати наступні прийоми:

·    робота з ключовою міткою шляхом прямого програмування контролера гнучкого диска (активний захист другого типу);

·    визначення одного з невикористовуваних переривань для роботи з диском (активний захист першого типу);

·    прямий виклик відповідних функцій в ПЗУ (BIOS) після відновлення різними способами їх фізичної адреси (активний захист першого типу);

·    визначення факту перевизначення адреси переривання на іншу програму і невиконання в цьому випадку дискових операцій (пасивний захист).

При операціях з жорстким диском, як правило, використовується переривання int 13h. Для запобігання трасування програми по заданому переривання (у даному випадку переривання int 13h) можна також використовувати зазначені вище способи, а саме:

·    перевизначення вихідного переривання в BIOS на невикористовуваний вектор переривання;

·    прямий виклик функцій BIOS.

При небезпеці трасування щодо подій операційного середовища можуть бути виділені наступні дії програм:

·    визначення факту заміни обробників подій на власні функції (зокрема, для захисту від відладчика);

·    файлові операції, пов'язані зі зчитуванням різних лічильників або паролів, обчислення контрольних сум і значень хеш-кодів;

·    файлові операції, пов'язані зі зчитуванням заголовків та іншої істотно важливої інформації у виконуваних файлах або завантажуваних бібліотеках.

2.4 Способи вбудовування захисних механізмів в програмне забезпечення

Вбудовування захисних механізмів можна виконати наступними основними способами:

·    вставкою фрагмента перевірочного коду у виконуваний файл;

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

·    вставкою перевірочного механізму у вихідний код на етапі розробки та налагодження програмного продукту;

·    комбінуванням зазначених методів.

Стосовно до конкретної реалізації захисних механізмів для конкретної обчислювальної архітектури можна говорити про захисний фрагмент в виконуваному або вихідному коді. До процесу і результату вбудовування захисних механізмів можна висунути наступні вимоги:

·    висока трудомісткість виявлення захисного фрагмента при статичному дослідженні (особливо актуальна при вбудовуванні в вихідний код програмного продукту);

·    висока трудомісткість виявлення захисного фрагмента при динамічному дослідженні (при налагодженні і трасування по зовнішніх подій);

·    висока трудомісткість обходу чи редукування захисного файлу.

Можливість вбудовування захисних фрагментів у виконуваний код обумовлена типовою архітектурою виконуваних модулів різних операційних середовищ, що містять, як правило, адресу точки входу в виконуваний модуль. У цьому випадку додавання захисного фрагмента відбувається наступним чином. Захисний фрагмент додається до початку або кінця виконуваного файлу, точка входу коригується таким чином, щоб при завантаженні управління передалося додатковому захисному фрагменту, а в складі захисного фрагмента передбачається процедура повернення до оригінальної точки входу. Досить часто оригінальний виконуваний файл піддається перетворенню. У цьому випадку перед поверненням управління оригінальній точці входу проводиться перетворення образу оперативної пам'яті завантаженого виконуваного файлу до вихідного виду.

У разі доповнення динамічних бібліотек можлива корекція зазначеним чином окремих функцій.

Істотним недоліком розглянутого методу є його легке виявлення і у випадку відсутності перетворення оригінальним коду виконуваного файлу - легка можливість обходу захисного фрагмента шляхом відновлення оригінальної точки входу.

2.5 Обфускація програмного коду

Обфускація, або заплутування коду - приведення вихідного тексту або виконуваного коду програми до виду, що зберігає її функціональність, але ускладнює аналіз, розуміння алгоритмів роботи та модифікацію при декомпіляції. «Заплутування» коду може здійснюватися на рівні алгоритму, на рівні початкового тексту, асемблерного тексту. Для створення заплутаного ассемблерного тексту можуть використовуватися спеціалізовані компілятори, що використовують неочевидні або недокументовані можливості середовища виконання програми. Існують також спеціальні програми, що проводять обфускацію, звані обфускаторами.

  2.5.1 Символьна обфускація

Першою і, мабуть, найбільш легко виконуваною обфускацією є символьна обфускація. Обфускатори, які використовують символьну обфускацію називаються обфускаторамі першого покоління.

Символьна обфускація включає в себе обфускацію імен класів, назв методів, параметрів і т. п. Дані обфускатори застосовують такі методи:

·    Перейменування методів, змінних і т.д. в набір безглуздих символів Наприклад: метод класу GetPassword(), після обфускаціі буде мати ім'я KJHS92DSLKaf(). Проте існує одна проблема - багато декомпіляторів, зустрічаючи на своєму шляху подібного роду імена замінюють їх на більш читабельні (method_1, method_2), тим самим зводячи всю роботу обфускатора нанівець.

·    Перейменуванняв коротші імена. Проходячи по всіх класах, методах, параметрах, обфускатори замінюють імена на їх порядкові номери. Наприклад, метод - GetConnectionString(), після обфускаціїназивається 0(). Подібні обфускатори можна також використовувати як оптимізуючі компілятори. Також подібне рішення добре тим, що існує ймовірність того, що одне і те ж ім'я буде використано для іменування класу, методів класу (наприклад відрізняються тільки типом повертається значення). Це дозволить також заблокувати роботу окремих дизассемблерів.

·    Використання для імен змінних нечитабельних символів. Частина обфускаторов вставляють в імена нечитабельні символи, наприклад символи японської мови. Не всі декомпілятори адекватно обробляють такі символи. Деякі замінюють імена з такими символами на більш зрозумілі, деякі проставляють замість незрозумілих символів їх код, деякі просто відмовляються працювати з даними символами.

·    Використання ключових слів мов програмування. Цей вид символьної обфускаціі дозволить захиститися від самих примітивних декомпіляторов, які, побачивши в якості імені зарезервоване слово вважають, що файл не правильний і відмовляються з ним працювати.

·    Використання імен, які змінюють зміст. Цей тип обфускації використовує психологічний чинник. Припустимо, був клас SecurityInformation з методом GetInformation, а став Car, з методом Wash. Звичайно, це може заплутати голову недосвідченому зломщикові, але процесу декомпіляції ніяк не зашкодить.

2.5.2 Обфускація даних

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

Обфускація даних складається з таких методів, як:

·    Зміна місця розташування даних - об'єднання декількох сутностей в одну або навпаки поділ однієї сутності на кілька. Наприклад: два рядки можуть бути об'єднані в масив рядків.

·    Кодуючі перетворення. Деякі дані кодуються і в процесі виконання або завантаження програми декодуються.

·    Заміна статичних членів на виклики методів. Деякі статичні члени замінюються на виклики методів.

·    Додавання невикористовуваних даних. На основі невикористовуваних даних надалі формують помилкові умови.

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

·    Виконання фіналізації (finalization). Для певних полів і методів класу може бути виконана фіналізація (Finalization), тобто дані можуть бути захищені від перевизначення у класах нащадків, створених від класу, якому належить даний член. Даний процес зменшує час виконання програми.

  2.5.3 Обфускація графа потоку керування

Найбільш складною в плані реалізації, але найбільш стійкою до спроб злому є обфускація графа потоку керування. На сьогоднішній день існує лише кілька подібних обфускаторів. Обфускатори даного типу застосовують наступні методи:

·    Перетворення обчислень. Даний метод полягає у вставці в алгоритми помилкових умов.

·    Видалення або додавання абстракцій коду. Видалення абстракцій коду дозволяє крім рішення задачі обфускаціі також оптимізувати роботу програми. Наприклад: обфускатор може замінити виклик який-небудь функції безпосередньо тілом функції, або навпаки одну функцію замінити на кілька маленьких функцій.

·    Перемішування випадковим чином лінійних ділянок.



Информация о работе «Захист програмного забезпечення»
Раздел: Информатика, программирование
Количество знаков с пробелами: 40344
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
46809
0
0

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

Скачать
124538
18
22

... замінено  на /2. Покладемо ,, k=k+1, j=1 та повернемося до першого кроку. Блок-схема алгоритму приведена нижче. Рисунок 2.4–Алгоритм Хука-Дживса 3. Розробка програмного забезпечення вирішення задачі формування портфеля цінних паперів   3.1 Загальні відомості про програмне забезпечення Розроблене програмне забезпечення призначене для автоматизації процесу формування портфелем цінних ...

Скачать
50164
1
4

... середовище використовується Windows XP. Всі робочі місця підключені до локальної мережі класу. Остання підключається до сервера комбінату. У процесі вивчення курсу інформатики використовується таке програмне забезпечення: операційна система Windows; текстовий редактор Word; електронні таблиці Excel; система управління базами даних Access; засоби обробки графічної інформації Corel Draw; Photoshop; ...

Скачать
89612
2
19

... . Таким чином, вивчення особливостей поведінки чотирикомпонентних сумішей полімерів є важливим і тема роботи актуальна. Метою дипломного проекту є створення програмного забезпечення для оптимізації складу чотирикомпонентних нанонаповнених сумішей полімерів, яке дозволить визначати полімерні композиції для отримання виробів з покращеними властивостями. Для досягнення поставленої мети потрібно вирі ...

0 комментариев


Наверх