Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пакувальники, шифратори




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

· алгоритми компресії даних

· прийоми, зв'язані з використанням не документованих особливостей операційних систем і процесорів

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

Переваги:

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

· Методи упакування/шифрування збільшують стійкість СЗ інших типів

Недоліки:

· Практично усі застосовувані методи сповільнюють виконання коду ПО

· Шифрування/упакування коду ПО викликає ускладнення при відновленні (update) і виправленні помилок (bug fix, service pack)

· Можливе підвищення апаратно-програмних вимог ПО.

· У чистому виді дані системи не можуть бути застосовані для авторизації використання ПО

· Ці системи можуть бути застосовані лише до продуктів невеликого обсягу

· Даний клас систем уразливий, тому що програмний код може бути, розпакований або розшифрований для виконання

· Мають невеликий термін безпечного використання, через п. 4

· Упакування і шифрування коду, що виконується, вступає в конфлікт із забороною само-модифікуючого коду в сучасних ОС.

Системи захисту від несанкціонованого копіювання

Системи захисту від несанкціонованого копіювання здійснюють «прив'язку» ПО до дистрибутивного носія (гнучкий диск, CD і ін.). Даний тип захисту заснований на глибокому вивченні роботи контролерів, їх фізичних показників, нестандартних режимах розбивки, читання/запису і т.п. При цьому на фізичному рівні створюється дистрибутивний носій, що володіє приблизно неповторними властивостями (нестандартна розмітка носія, інформації або/і запис на нього додаткової інформації – пароля або мітки), а на програмному – створюється модуль, набудований на ідентифікацію й аутентифікацію носія за його унікальним властивостями. При цьому можливо застосування прийомів, використовуваних пакувальниками/шифраторами.

Переваги:

· Ускладнення нелегального копіювання і поширення ПО

· Захист прав користувача на придбане ПО

Недоліки:

· Велика трудомісткість реалізації системи захисту

· Уповільнення продажів через необхідність фізичної передачі дистрибутивногоносія інформації

· Підвищення системних вимог через захист (наявність нагромаджувача)

· Зниження завадостійкого ПО

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

· На час роботи ЗД займається нагромаджувач

· Погроза крадіжки захищеного носія

Системи захисту від несанкціонованого доступу

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

Парольні захисти

На сьогоднішній день цей клас СЗПО є найпоширенішим. Основний принцип роботи даних систем полягає в ідентифікації й аутентифікація користувача ПО шляхом запиту додаткових даних, якими можуть бути назва фірми і/або ім'я і прізвище користувача і його пароль або тільки пароль/реєстраційний код. Така інформація може запитуватися в різних ситуаціях, наприклад, при старті програми, після закінчення терміну безкоштовного використання ПО, при виклику процедури реєстрації або в процесі установки на ПК користувача.

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

Слабкою ланкою парольних захистів є блок перевірки правильності введеного пароля/коду. Для такої перевірки можна порівнювати введений пароль із записаним у коді ПО, правильним або з правильно генерованим із введенням додаткових даних паролем. Можливо також порівняння похідних величин від введеного і правильного паролів, наприклад їхній хеш-функції, у такому випадку в коді можна зберігати тільки похідну величину, що підвищує стійкість захисту. Шляхом аналізу процедур перевірки можна знайти реальний пароль, записаний у коді ПО, знайти правильно генерований пароль із уведених даних або створити програму для перебору паролів для визначення пароля за потрібним хеш значенням. Крім того, якщо СЗПО не використовує шифрування, досить лише примусово змінити логікові перевірки для одержання безперешкодного доступу до ПО.

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

Переваги:

· Надійний захист від зловмисника початківця

· Мінімальні незручності для користувача

· Можливість передачі пароля/коду по мережі

· Відсутність конфліктів із системним і прикладним ПО і АТ

· Простота реалізації і застосування

· Низька вартість

Недоліки:

· Низька стійкість більшості систем захисту даного типу

· Користувачеві необхідно запам'ятовувати пароль/код

Системи «прив'язки» ПО

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

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

Переваги:

· Не потрібно додаткових апаратних засобів для роботи захисту

· Ускладнення несанкціонованого доступу до скопійованого ПО

· Простота застосування

· "Невидимість" СЗПО для користувача.

Недоліки:

· Помилкові спрацьовування СЗПО при будь-яких змінах у параметрах ПК

· Низька стійкість при доступі зловмисника до ПК користувача

· Можливість конфліктів із системним ПО

Програмно-апаратні засоби захисту ПО з використанням електронних ключів

В даний час даний клас СЗПО здобуває усе велику популярність серед виробників програмного забезпечення (ПО). Під програмно-апаратними засобами захисту розуміються засоби, засновані на використанні так званих «апаратних (електронних) ключів». Електронний ключ – це апаратна частина системи захисту, що представляє собою плату з мікросхемами пам'яті і, у деяких випадках, мікропроцесором, поміщену в корпус і призначену для установки в один з стандартних портів ПК (COM, LPT, PCMCIA, USB) або роз'єм розширення материнської плати. Так само як такий пристрій можуть використовуватися смарт карти (Smart card).

За результатами проведеного аналізу, програмно-апаратні засоби захисту в дійсний момент є одними із самих стійких систем захисту ПО від НСД.

Електронні ключі по архітектурі можна підрозділити на ключі з пам'яттю(без мікропроцесора) і ключі з мікропроцесоромі пам'яттю.

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

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

Переваги:

· Значне ускладнення нелегального поширення і використання ПО

· Рятування виробника ПО від розробки власної системи захисту

· Висока автоматизація процесу захисту ПО

· Наявність API системи для більш глибокого захисту

· Можливість легкого створення демонстраційних версій

· Досить великий вибір таких систем на ринку

Недоліки:

· Ускладнення розробки і налагодження ПО через обмеження з боку СЗ

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

· Уповільнення продажів через необхідність фізичної передачі апаратної частини.

· Підвищення системних вимог через захист (сумісність, драйвери)

· Зниження відказу-стійкості ПО

· Несумісність систем захисту і системного або прикладного ПО користувача

· Несумісність захисту й апаратури користувача

· Обмеження через несумісність електронних ключів різних фірм

· Зниження розширюваності комп'ютерної системи

· Ускладнення або неможливість використання захищеного ПО в переноснихі блочних ПК

· Наявність в апаратної частини розмірів і ваги (для COM/LPT = 5×3×2 вага 50гр).

· Загроза крадіжки апаратного ключа.

Засоби захисту ПО з «ключовими дисками»

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

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

Позитивні і негативні сторони даного типу СЗПО практично повністю збігаються з такими в систем з електронними ключами.

Показники ефективності систем захисту

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

Показники застосовності

Технічні відповідність СЗПО функціональним вимогам виробника ПО і вимогам по стійкості, системні вимоги ПО і системні вимоги СЗПО, обсяг ПО й обсяг СЗПО, функціональна спрямованість ПО, наявність і тип СЗ в аналіз ПО – конкурентів.

Економічні співвідношення втрат від піратства і загального обсягу прибутку, відношення втрат від піратства і вартості СЗПО і її впровадження, співвідношення вартості ПО і вартості СЗПО, відповідність вартості СЗПО і її впровадження поставленим цілям.

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

Критерії оцінки

Захист як атака ускладнення нелегального копіювання і доступу, захист від моніторингу, відсутність логічних дірок і помилок у реалізації системи.

Стійкість до дослідження/зломів – застосування стандартних механізмів, або нові/нестандартні механізми для дослідження/злому.

Відказо-стійкість (надійність) імовірність відмовлення захисту (НСД), під час надбудови на відмовлення системи, імовірність відмовлення програми захисту (крах), частота помилкових спрацьовувань.

Незалежність від конкретних реалізацій ОС використання не документованих можливостей, «вірусних» технологій і «дір» в ОС.

Сумісність – відсутність конфліктів із системним і прикладним ПО, відсутність конфліктів з існуючої АТ, максимальна сумісність з розроблювальним АТ і ПО.

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

Побічні ефекти – перевантаження трафіку, відмовлення в обслуговуванні, уповільнення роботи захисту ПО й ОС, захоплення системних ресурсів, перевантаження ОЗУ, порушення стабільності ОС.

Вартість – вартість/ефективність, вартість/ціна захисту ПО, вартість/ліквідовані збитки.

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

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

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

Методи захисту ПЗ від несанкціонованого доступу до програмного коду

Класифікація засобів дослідження програмного коду

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

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

Крім цих двох основних інструментів дослідження, можна використовувати:

· «Діскомпілятори», програми, які генерують з виконуваного коду програму на мові високого рівня

· «Трасировщики», спочатку запам'ятовують кожну інструкцію, що проходить через процесор, а потім переводять набір інструкцій у форму, зручну для статичного дослідження, автоматично виділяючи цикли, підпрограми тощо

· «Слідкуючі системи», запам'ятовують і аналізують трасу вже не інструкції, а інших характеристик, наприклад викликаних програмою переривань.

Методи захисту ПЗ від дослідження

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

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

Таким чином, захищувана від дослідження програма повинна включати наступні компоненти:

· ініціалізатор;

· зашифровану конфіденційну частину;

· деструктор (деіцініалізатор).

Ініціалізатор повинен забезпечувати виконання таких функцій:

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

· заборона всіх внутрішніх і зовнішніх переривань, обробка яких не може бути записана в програмі

· завантаження в оперативну пам'ять і дешифрування коду конфіденційної частини програми

· передача керування конфіденційної частини програми

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

Деструктор після виконання конфіденційної частини програми повинен виконати наступні дії:

· обнулення конфіденційного коду програми в оперативній пам'яті;

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

· виконання операцій, які неможливо було виконати при забороні неконтрольованих переривань;

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

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

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

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

· перевірку кількості займаної програмою оперативної пам'яті

· порівняння з обсягом, до якого програма адаптована, і прийняття необхідних заходів у разі невідповідності

· контроль часу виконання окремих частин програми

· блокування клавіатури на час відпрацювання особливо критичних алгоритмів.

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

Способи захисту ПЗ від дослідження

Способи захисту від дослідження можна розділити на чотири класи.

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

· використання апаратних особливостей мікропроцесора (особливості черговості вибірки команд, особливості виконання команд і т. д.)

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

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

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

  1. Вплив на роботу налагоджувальних засобів шляхом використання особливостей його апаратного або програмного середовища. Наприклад:

· переміщення фрагментів коду або даних за допомогою контролера прямого доступу до пам'яті

· впливу на процес регенерації оперативної пам'яті (на деякій ділянці коду регенерація пам'яті відключається, а потім знову включається, - при нормальній роботі ніяких змін немає, при повільному виконанні програми відладчиком вона «зависає»)

· переходу мікропроцесора в захищений режим

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

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

  1. Використання принципових особливостей роботи керованого людиною відладчика.

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

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

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

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

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

N=z/w0.Витрати часу зловмисника обчислюються середньою величиноюТзл=Nw1/2. Для приблизних розрахунків w1/w0»10000.

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

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

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

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

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

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

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

  1. Заміщення фрагмента коду функцією від команди, що знаходиться на даному місці, і деяких даних
  2. Визначення стека в області коду і переміщення фрагментів коду з використанням стекових команд
  3. Перетворення коду в залежності від вмісту попереднього фрагмента коду або деяких умов, отриманих при роботі попереднього фрагмента
  4. Перетворення коду в залежності від зовнішньої до програми інформації
  5. Перетворення коду, поєднане з діями, характерними для роботи налагоджувальних засобів

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Символи обфускації

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

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

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

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

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

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

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

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

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

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

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

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

Захист від дослідження ПЗ створеного за допомогою технології.NET




Поделиться с друзьями:


Дата добавления: 2014-12-25; Просмотров: 935; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.