Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/7749| Title: | Підсистема захисту програмного забезпечення від неправомірних інформаційних впливів |
| Authors: | Панаско, Олена Миколаївна Юрченко, Владислав Юрійович |
| Keywords: | обфускація;аналіз коду;шифрування;скремблування;доступ;відкритий ключ |
| Issue Date: | 2022 |
| Abstract: | Мета роботи це розробка підсистеми, що забезпечує захист програмного забезпечення від неправомірних інформаційних впливів. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/7749 |
| Appears in Collections: | 125 Кібербезпека та захист інформації (Безпека інформаційних і комунікаційних систем) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| Б_125_Юрченко_Панаско.pdf Restricted Access | 1.26 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ЕЛЕКТРОННИХ ТЕХНОЛОГІЙ І РОБОТОТЕХНІКИ
КАФЕДРА РОБОТОТЕХНІЧНИХ І ТЕЛЕКОМУНІКАЦІЙНИХ СИСТЕМ ТА
КІБЕРБЕЗПЕКИ
До захисту допущено
завідувач кафедри РТСК
д.т.н., професор
_______________ В.В. Палагін
"_____" _____________ 2022 року
Пояснювальна записка
до дипломного проекту (роботи)
бакалавра
(освітньо-кваліфікаційний рівень)
на тему «Підсистема захисту програмного забезпечення від неправомірних
інформаційних впливів»
Виконав: студент 4 курсу, групи БІ-81
Спеціальності 125 – «Кібербезпека» ,
(шифр і назва спеціальності)
освітньої програми «Безпека інформаційних і
комунікаційних систем»
(назва освітньої програми)
Юрченко В.Ю.
(прізвище та ініціали)
Керівник Панаско О.М.
(прізвище та ініціали)
Рецензент Андрієнко В.О.
(прізвище та ініціали)
Черкаси – 2022 року
Форма № Н-9.01
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Факультет електронних технологій і робототехніки
Кафедра робототехнічних і телекомунікаційних систем та кібербезпеки
Освітньо-кваліфікаційний рівень бакалавр
Спеціальність 125 – Кібербезпека
Освітня програма – Безпека інформаційних і комунікаційних систем
ЗАТВЕРДЖУЮ
Завідувач кафедри В.В. Палагін
“_____” ___________________ 2022 року
ЗАВДАННЯ
НА ВИПУСКНУ РОБОТУ СТУДЕНТУ
Юрченка Владислава Юрійовича __________________
(прізвище, ім’я, по батькові)
1. Тема проекту (роботи) Підсистема захисту програмного забезпечення від
неправомірних інформаційних впливів
керівник проекту (роботи) Панаско Олена Миколаївна
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання)
затверджені наказом вищого навчального закладу від «18» лютого 2022 року № 58/04
2. Термін здачі студентом закінченої роботи “ 25 ” травня 2022 року _________
3. Вихідні дані до роботи: Наукові та навчальні джерела з питань захисту програмного
забезпечення та інформаційної безпеки; матеріали щодо методів боротьби з інтернет-
піратством та захисту інтелектуальної власності; опис і принципи роботи
криптографічних алгоритмів Advanced Encryption Standard та RSA; Методи хешування
та механізми автентифікації користувачів у програмних системах; принципи
функціонування мережевого протоколу Transmission Control Protocol/Internet Protocol.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити)
Обґрунтування актуальності теми, визначення мети, об’єкта та предмета
дослідження; аналіз проблеми інтернет-піратства та огляд методів захисту
програмного забезпечення, зокрема методів обфускації; послідження криптографічних
методів захисту інформації, включаючи алгоритми Advanced Encryption Standard, RSA та
методи хешування; розробка та програмна реалізація підсистеми захисту програмного
забезпечення, включаючи алгоритм роботи, механізм автентифікації користувачів та
аналіз результатів роботи системи..
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів)
1. Структурна схема підсистеми захисту програмного забезпечення; 2. Блок-схема
алгоритму роботи підсистеми захисту; 3. Схема взаємодії клієнта та сервера під час
процесу автентифікації користувачів; 4. Охорона праці.
.6. Консультанти з проекту (роботи) із зазначенням розділів проекту, що їх стосуються
Підпис, дата
Прізвище, ініціали та посада
Розділ завдання завдання
консультанта
видав прийняв
Охорона праці Кожем’якін О.С.
старший викладач кафедри
безпеки життєдіяльності
7. Дата видачі завдання 18 лютого 2022 року
КАЛЕНДАРНИЙ ПЛАН
Термін
№ Назва етапів дипломного проекту
виконання етапів Примітка
з/п (роботи)
проекту (роботи)
1. Аналіз технічного завдання та пошук
18.02.22 – 09.03.22
літератури
2. Обґрунтування актуальності теми,
визначення мети, об’єкта та предмета 10.03.22 – 24.03.22
дослідження.
3. Аналіз проблеми інтернет-піратства та огляд
методів захисту програмного забезпечення, 25.03.22 – 10.04.22
зокрема методів обфускації.
4. Дослідження криптографічних методів
захисту інформації, включаючи алгоритми
11.04.22 – 25.04.22
Advanced Encryption Standard, RSA та методи
хешування.
5. Розробка та програмна реалізація підсистеми
захисту програмного забезпечення, включаючи
алгоритм роботи, механізм автентифікації 26.04.22 – 10.05.22
користувачів та аналіз результатів роботи
системи.
7. Виконання розділу охорони праці 11.05.22 – 26.05.22
8. Оформлення пояснювальної записки 27.05.22 – 01.06.22
9. Оформлення презентації 02.06.22 – 09.06.22
Студент Юрченко В.Ю.
( підпис ) (прізвище та ініціали)
Керівник проекту (роботи) Панаско О.М.
( підпис ) (прізвище та ініціали)
ВСТУП
Жодне обговорення прав інтелектуальної власності не обходиться без
згадки про проблему піратства в усьому світі. Піратство визначається як
копіювання, викрадення, відтворення, передача та продаж інтелектуальної
власності фізичної особи без її чіткої згоди та письмового дозволу, а також без
виплати цій особі належних їй роялті. Як ми знаємо, його відносять до купівлі
продуктів за дуже зниженими цінами, адже для пірата немає жодних витрат,
крім мінімальних витрат на відтворення. Асортимент таких продуктів може
включати програмне забезпечення, фільми, музику, книги і навіть
фармацевтику та інші твори мистецтва, на які винахідник витратив би великі
кошти.
Підраховано, що світ щорічно втрачає мільярди доларів через піратство,
тому що, як згадувалося раніше, все, що пірат повинен зробити, це відтворити
продукти інтелектуальної власності, позбавивши їх цифрового захисту, який
запровадили виробники. Справді, той факт, що пірати розробляють геніальні
методи видалення DRM або рівні безпеки Digital Rights Management, означає,
що, незважаючи на розвиток технологій, власники прав інтелектуальної
власності просто не в змозі боротися з загрозою піратства та стримувати її.
Проблема піратства настільки загострилася, що навіть лідери галузі, такі
як Microsoft, Apple, Motion Picture Studio Houses of Hollywood та великі видавці,
заламують руки через свою неспроможність запобігти піратству. Проблема
піратства, яка раніше була обмежена країнами, що розвиваються, де азіатські
країни були визначені як основні винуватці, тепер поширилася в усіх куточках
світу завдяки появі Інтернету та відносно анонімному захисту, який Інтернет
пропонує піратам. Це означає, що дана проблема не обмежується лише
країнами третього світу і зараз стосується всього світу.
3
Інтереси будь-якого суспільства, що розвивається, полягає у захисті
життєво важливих інтересів цього суспільства, забезпечення реалізації
конституційних прав і свобод людини і громадянина, досягнення і
підтримування суспільної злагоди, підвищення творчої активності населення.
Безперервне ускладнення інформаційних систем і мереж зв'язку
критично важливих інфраструктур забезпечення життя суспільства несе в собі
загрозу інтересам суспільства в інформаційній сфері. Вони можуть проявлятися
і у вигляді як навмисних, так і ненавмисних помилок, збоїв і відмов техніки і
програмного забезпечення, неправомірного інформаційного впливу на те ж
саме програмне забезпечення зі сторони злочинних структур і кримінальних
елементів, неправомірного інформаційного впливу. Об'єктами реалізації таких
структур можуть виступати системи енергетичної, транспортної, та деяких
інших інфраструктур.
В даній дипломній роботі нас цікавить аспект саме неправомірного
інформаційного впливу. Під цим поняттям слід розуміти процес, який може
призвести до заподіяння шкоди чиїм-небудь інтересам. Такий вплив може
проявлятися у вигляді спроб здійснення шахрайських операції з використанням
глобальних або вітчизняних інформаційно-телекомунікаційних систем,
відмивання фінансових коштів, одержаних протиправним шляхом, одержання
неправомірного доступу до фінансової, банківської та іншої інформації, яка
може бути використана з корисливою метою.
Одним із небезпечних джерел неправомірного інформаційного впливу
виступає розширення масштабів вітчизняної і міжнародної комп'ютерної
злочинності.
Актуальність створення підсистеми захисту програмного забезпечення
від неправомірних інформаційних впливів пояснюється гострою проблемою
піратства та необхідністю захисту програмного забезпечення для отримання
прибутку від його продажу.
4
Мета роботи – розробка підсистеми, що забезпечує захист програмного
забезпечення від неправомірних інформаційних впливів.
Об’єкт дослідження – методи та засоби забезпечення безпеки
програмного забезпечення комп’ютерних систем різного рівня і призначення.
Предмет дослідження – підсистема захисту програмного забезпечення
від неправомірних інформаційних впливів.
Для досягнення мети слід вирішити такі задачі:
• переглянути основні методи боротьби з інтернет-піратством;
• проаналізувати основні методи та засоби, які необхідні для
реалізації підсистеми захисту програмного забезпечення;
• розробити алгоритм роботи підсистеми захисту програмного
забезпечення;
• провести практичну реалізацію підсистеми захисту програмного
забезпечення від неправомірних інформаційних впливів.
Структура та обсяг роботи. Робота складається із вступу, 4 розділів та
висновку, переліку використаних джерел, що містить 14 найменувань на 2
сторінках.
Загальний обсяг роботи – 51 сторінка, з них 48 сторінки основного
тексту.
5
РОЗДІЛ 1
МЕТОДИ БОРОТЬБИ З ІНТЕРНЕТ-ПІРАТСТВОМ
1.1 Проблема інтернет-піратства
Як зупинити програмне піратство? Це важливе питання, а відповідь
складна. Системи захисту авторських прав не є надійними. Навіть при
використанні авторських прав і патентів власники вмісту все одно мають
справу з багатьма проблемами через програмне піратство.
У 2018 році Business Software Alliance підрахував, що 37% усього
програмного забезпечення, встановленого на персональних комп’ютерах, було
неліцензованим, що призвело до 46,3 мільярдів доларів втраченого доходу. За
даними Sandvine, BitTorrent, найпопулярніший веб-сайт обміну файлами, у 2018
році становив 22% глобальної пропускної здатності завантаження. Це показує,
наскільки люди зацікавлені в піратському контенті.[4]
Глобальні накази щодо перебування вдома через COVID-19 також
погіршили проблему програмного піратства.
Порушення авторських прав може відбуватися у формі підроблених
програм, надмірного використання клієнтського сервера, інтернет-піратства на
сайтах індексування торрентів, а також ліцензії на програмне забезпечення або
обходу ключа продукту. Коли продукт скопійовано, люди можуть
використовувати техніку завантаження жорсткого диска, щоб додавати
піратські програми на комп’ютери, які вони продають, і залучати покупців. Все
це стосується власників авторських прав. Ми розглянемо кілька способів, за
допомогою яких компанії можуть запобігти піратству програмного
забезпечення.
6
Авторські права, патенти та користувацькі угоди становлять правову
основу для боротьби з піратством в Інтернеті. Існує широкий спектр
інструментів для боротьби з піратством, як-от захист від несанкціонованого
доступу, обфускація, водяні знаки та ключі продуктів.
1.2 Основні способи запобігання піратству
5 основних способів запобігання піратству:
• Авторські права, патенти та угоди з кінцевими користувачами;
• Ключі програмного продукту;
• Обфускація;
• Програмне забезпечення для захисту від несанкціонованого
доступу;
• Програмне забезпечення водяних знаків.
Програмне забезпечення може бути захищене авторськими правами та
патентами. Вони створюють правову основу для бізнесу для захисту своєї
інтелектуальної власності та електронних винаходів. Угоди кінцевого
користувача додатково визначають, що клієнту дозволяється робити з
програмним забезпеченням.
Ключі програмного продукту є унікальними для кожного покупця.
Програмне забезпечення не буде запущено або встановлено, якщо користувач
не введе ключ. Мета ключів продуктів — зменшити піратство кінцевих
користувачів, оскільки люди, які мають намір розповсюджувати заблоковане
програмне забезпечення, можуть генерувати ключі зі своїми власними кодами.
Програмний ключ із апаратним блокуванням є одним із найнадійніших типів,
оскільки він базується на індивідуальному комп’ютері користувача.[4]
Обфускація – це техніка, яка робить вихідний код продукту
незрозумілим для людей. Складні алгоритми можуть змінювати програмний
7
код, щоб замаскувати його під щось інше або виглядати випадковим. Однак
обфускація не є повністю надійним рішенням, оскільки зловмисник може
розкрити вихідний код за певний період часу. З цієї причини обфускація часто
використовується в поєднанні з наступною технікою в нашому списку,
захистом від несанкціонованого доступу.
Програмне забезпечення, захищене від несанкціонованого доступу,
призначене для захисту від модифікацій та зворотнього проектування. Якщо
зловмисник змінить частину вихідного коду, програма вимкнеться або
виявиться збій. Зловмисники підробляють програмне забезпечення з метою
обходу автентифікації, вимкнення моніторингу безпеки або обходу
ліцензійного коду, щоб зробити незаконні копії.
Власники програмного забезпечення також можуть включити водяний
знак у вихідний код. Цей водяний знак прихований у програмному забезпеченні
і може підтвердити право власності або походження програми, коли його
витягнути. Таке відстеження може перешкодити злодіям робити незаконні
копії. Крім того, судові водяні знаки є новою технологією для запобігання
піратству фільмів завдяки останнім досягненням у розробці блокчейну. Це
робиться шляхом незначної зміни певних кольорів пікселів у відеофайлі, які
непомітні для людського ока. Це також відстежує право власності на продукт.
1.3 Обфускація як метод захисту програмного забезпечення
З розвитком цифрових технологій також зростає загроза неймовірного
рівня тиражування та незаконного відтворення програмного забезпечення.
Тому рівень піратства зростає пропорційно. Це є прямою загрозою для
виробників програмного забезпечення, яка призводить до розробки численних
методів захисту програмного забезпечення.
8
ІТ-індустрії щорічно витрачають мільярди доларів на запобігання атак
на безпеку, таких як втручання та зловмисний зворотній інжиніринг. Через
величезне застосування та розвиток інтернет-технологій та мультимедіа,
сформувалася величезна потреба в дослідженнях безпеки та захисту. Кожна
організація має свою власну інтелектуальну власність, і для неї є великим
викликом захистити свої дані, наприклад, програмне піратство чи ін’єкція
шкідливого коду тощо. Крім того, обробка даних через програму є
конфіденційною, а тому її розкриття може зашкодити покупцю програмного
забезпечення, бізнесу безпосередньо.
Можна виділити два загальні способи захисту інтелектуальної власності:
юридичний та технічний. Юридичний означає отримання авторських прав або
підписання юридичних контрактів проти створення дублікатів тощо. А
технічний означає, що власники програмного забезпечення надають перевагу
для захисту за допомогою конкретного програмного забезпечення. Раніше
захист даних означав використання брандмауерів і шлюзів у самій операційній
системі або в мережі. Але для захисту від сторонніх людей краще
використовувати механізми або методи в самому програмному забезпеченні.
Шифрування та брандмауери є одними з поширених рішень для
зменшення загрози зловмисників, які намагаються зламати програму. Але ці
підходи не допомагають захистити програмне забезпечення, коли зловмисник
сам є кінцевим користувачем. Серед різних методів, доступних для захисту
коду від різних атак, обфускація коду є однією з найпопулярніших альтернатив
для запобігання розуміння коду, його підробці тощо.
Обфускація (від лат. obfuscare - затінювати, затемняти; і англ. obfuscate -
робити неочевидним, заплутаним, збивати з пантелику) або заплутування коду
– приведення вихідного тексту або виконуваного коду програми до виду, що
зберігає її функціональність, але утруднює аналіз, розуміння алгоритму та
модифікацію при декомпіляції. Загалом, обфускація коду передбачає
9
приховування деталей реалізації програми від супротивника, тобто
перетворення програми в семантично еквівалентну (той же обчислювальний
ефект) програму, що набагато важче зрозуміти зловмиснику. Таким чином,
обфускація коду є широко поширеним рішенням, і було запропоновано багато
різних підходів до неї. Також обфускацію можна віднести до типу захисту
програмного забезпечення від несанкціонованого зворотного інжинірингу.[1]
Приклад обфускаці показано на рис.2.1
"Заплутування" коду може здійснюватися на рівні алгоритму, вихідного
тексту та/або асемблерного тексту. Для створення заплутаного асемблерного
тексту можуть використовуватися спеціалізовані компілятори, що
використовують неочевидні або недокументовані можливості виконання
програми. Існують також спеціальні програми, що проводять обфускацію, які
називаються обфускаторами (англ. obfuscator). [1]
Рис.2.1 – Приклад обфускаціїї
На жаль на сьогоднішній день жоден із сучасних методів обфускації
коду не задовольняє всім критеріям ефективності обфускації, щоб протистояти
атакам зворотної інженерії. Програмний код не є панацеєю – його все одно
можна зламати. А тому дослідники а також індустрія програмного
забезпечення, намагаються використовувати нові й кращі методи обфускації
своєї інтелектуальної власності в регулярному процесі, які можуть допомогти
захистити конфіденційні фрагменти коду будь-якого програмного забезпечення
без зміни властивих програмному забезпеченню функцій. Такі методи
10
обфускації можуть бути реалізовані в коді рівня ассемблера з урахуванням
теорії оптимізаційних перетворень. Ассемблерний код представляє залежності
даних і зручність аналізу даних після розбирання виконуваного файлу
порівняно з декомпільованим кодом.
Отже, обфускація складається з перетворень коду, які ускладнюють
розуміння програми, змінюючи її структуру, зберігаючи при цьому оригінальні
функціональні можливості, які також не підходять для реверс-інжинірингу.
Однак рішучий зловмисник, витративши достатньо часу на перевірку
заплутаного коду, може знайти функціональні можливості, щоб змінити та
досягти успіху у своїх зловмисних цілях. З цієї причини методи обфускації
реалізуються з іншими підходами, такими як заміна/оновлення коду, виявлення
несанкціонованого доступу до коду, оновлення захисту (при цьому
зловмисники отримують обмежену кількість часу для виконання своєї мети)
тощо. Практично шифрування, захист сервером рішення безпеки, засновані на
апаратному забезпеченні, різні підписані коди, захист від несанкціонованого
доступу, водяні знаки, старіння програмного забезпечення, пакування є одними
з найбільш часто використовуваних методів, щоб уникнути або кинути виклик
механізмам виявлення. Однак постачальник повинен оцінити, скільки часу буде
протистояти обфускації, тобто час, який зловмисник потребує, щоб зрозуміти
код. Відповідно до цього, деякі інші методи обфускації можуть бути реалізовані
в оригінальному коді так, що супротивник не зможе отримати алгоритм чи
логіку коду.
Крім того, методи обфускації включають перевпорядкування коду,
перетворення для заміни значущих імен ідентифікаторів у вихідному коді
безглуздими випадковими іменами (перейменування ідентифікатора), вставки
небажаного коду, безумовні стрибки, умовні переходи, прозоре вставлення
гілок, перепризначення змінних, випадковий мертвий код, об’єднання
локальних цілих чисел, кодування рядків, генерація фіктивного коду
11
середнього рівня, придушення констант, сітка потоків керування та багато
іншого.
По суті, обфускація багато в чому відрізняється від шифрування. По-
перше, він не вимагає жодного зворотного перетворення. Далі, зловмиснику не
обов’язково весь час шукати оригінальний код, оскільки атака може бути
успішною, не маючи оригінального коду програмного забезпечення. І, нарешті,
зашифрований текст буде марним без ключа, оскільки обфусцована програма
може працювати без будь-якої додаткової інформації.
Якщо ми обговоримо інший аспект, то в основному програмний код є
переносимим і поширюється по мережах, якому також можна не довіряти.
Таким чином, механізм захисту повинен бути включений у програмне
забезпечення, але він також повинен бути незалежним від апаратного
забезпечення.
Основною функцією будь-яких методів захисту програмного
забезпечення є виявлення піратства, пошкодження або неправомірного
використання коду або програми. Виходячи з цього, передбачається, що
«обфускація коду» є простим і головним інструментом захисту вихідного коду
в області захисту та безпеки програмного забезпечення. Основна ідея цих
методів обфускації полягає в тому, щоб приховати вихідний код від
супротивника, оскільки код буде трансформований, але його функціональність
буде схожа на оригінальний код, який набагато важче проаналізувати чи
зрозуміти.
Для аналізу коду потрібні будь-які дизассемблери або декомпілятори
для використання у виконуваному коді. Але, очевидно, що розібраний код не
буде схожим на вихідний код, оскільки неможливо повернутися з усіма тими ж
функціями.
Обфускація коду відноситься до класу методів, які перетворюють
вихідну програму в цільову програму, так що обидві програми мають однакову
12
поведінку, але цільову програму важко спроектувати будь-якому зловмиснику.
Також можна комбінувати більше ніж одну техніку обфускації, щоб досягти
кращої сили. Ця ідея виникла через наступні зауваження:
• Заплутане програмне забезпечення ніколи не переривається через
мережеві обмеження. Крім того, для шифрування або розшифровки коду не
потрібне обладнання. Таким чином, для автентифікації програмного додатка не
вимагається цифровий підпис, незалежно від того, має програма безпечний код
із надійного джерела чи ні.
• Методи шифрування потребують певного апаратного забезпечення для
ефективної дії, а підписаний код накладає певні обмеження, які не повинні
залежати від апаратної платформи. Використання спеціального обладнання
також призведе до витрат покупця програмного забезпечення.
• Декомпіляція буде складнішою для обфусцованого коду, навіть якщо
витратити достатньо зусиль і часу. Але можна повернути алгоритми та
структури даних. Таким чином, основний намір полягає в тому, щоб збільшити
час і зусилля, завдяки чому супротивнику практично неможливо здійснити
зворотний інженерний заплутаний код або програмне забезпечення.
• За допомогою обфускації можна заплутати код та усунути більшість
логічних зв'язків, так що перетворений код стає достатньо складним для аналізу
та несанкціонованих модифікацій.
• Існує дуже багато складних алгоритмів шифрування, які неможливо
реалізувати через обмеження пам'яті та пропускної здатності мережі.
• В останній час теорія обфускації все ще потребує оцінки якості
практичних обфускаційних перетворень швидшим і простим способом.
Об’єднавши деякі з вищезгаданих аспектів у техніках захисту
програмного забезпечення, можна вважати, що концепція «обфускації коду»
може бути сильнішим, а також кращим інструментом для захисту програмного
забезпечення.
13
Щоб проаналізувати код, дуже необхідно знайти порядок, у якому
виконуються всі інструкції. Цей порядок виконання може виявити за
допомогою графіка потоку керування. Як правило, якщо графік потоку
керування є складним, це означає, що код програми також складний. Але
важливим моментом є те, що графік потоку управління корисний, якщо в
програмі є цикли та умовні оператори. В іншому випадку, якщо в коді немає
умовних операторів або циклів, то весь код буде розглядатися як один блок.
Наведені нижще методи обфускації коду будуть корисні для частини коду
(якщо немає умовного оператора) або коду в базовому блоці. Таким чином,
вважається, що методи обфускації можуть бути реалізовані в тих частинах
коду, для яких неможливо створити графік потоку керування або відсутні
умови.
Методи обфускації:
1. Перетворення даних
Представляє собою перетворення даних в інший вигляд, що має
мінімальний вплив на продуктивність коду, але ускладнює процес зворотного
інжинірнгу.
2. Обфускація потоку керування кодом
Обфускація потоку керування виконується зміною порядку операторів
виконання програми. Зміна графа управління за допомогою вставки довільних
інструкцій переходу та перетворення деревоподібних умовних конструкцій у
плоскі оператори перемикання.[2]
3. Обфускація адрес
Полягає в зміні структури збереження даних, щоб ускладнити їх
використання. Наприклад алгоритм, може вибирати випадковими адреси даних
у пам'яті, а також відносні відстані між різними елементами даних. Даний
підхід примітний тим, що навіть якщо зловмисник і зможе "декодувати" дані,
14
використовувані додатком на певному пристрої, то на інших пристроях він все
одно не зможе відтворити свій успіх.
4. Регулярне оновлення коду
Цей метод запобігає атакам, регулярно випускаючи оновлення
обфусцованого програмного забезпечення. Своєчасні заміни частин існуючого
програмного забезпечення новими обфусцованими примірниками можуть
змусити зловмисника відмовитися від існуючого результату зворотного аналізу,
оскільки зусилля по злому коду в такому разі можуть перевищити цінність, що
отримується від цього[2].
5. Обфускація інструкцій асемблера
Перетворення та зміна асемблерного коду також може ускладнити
процес зворотного інжинірингу. Одним з таких методів є використання
інструкцій, що перекриваються (jump-in-a-middle), в результаті чого
дизассемблер може зробити неправильний висновок. Асемблерний код також
може бути посилений проти проникнення за рахунок включення марних
керуючих операторів та іншого коду для сміття.
6. Обфускація налагоджувальної інформації
Відлагоджувальну інформацію можна використовувати для зворотного
проектування програми, тому важливо блокувати несанкціонований доступ до
даних налагодження. Інструменти обфускації досягають цього, змінюючи
номери рядків та імена файлів у налагоджувальні дані або повністю видаляючи
з програми налагоджувальну інформацію.
15
РОЗДІЛ 2
Технологічні заходи захисту програмного забезпечення
комп’ютерних систем різного рівня і призначення
2.1 Алгоритми шифрування AES і RSA
Одна річ, яка стала абсолютно очевидною в епоху Інтернету, полягає в
тому, що запобігти доступу неавторизованих людей до даних, що зберігаються
в комп’ютерних системах із підтримкою Інтернет, надзвичайно важко. Все, що
потрібно, щоб працівник натиснув неправильне посилання в електронному
листі або необережно відповів на, здавалося б, законний запит на інформацію, і
зловмисник може отримати повний доступ до всіх ваших даних. У сучасному
регуляторному середовищі та середовищі зв’язків з громадськістю таке
порушення може бути катастрофічним.
Але що, якщо ви можете бути впевнені, що навіть якщо зловмисник
отримав доступ до вашої інформації, він не зможе її використати? Це роль
шифрування даних.
Як працює шифрування?
Основна ідея шифрування полягає в перетворенні даних у форму, в якій
оригінальний зміст маскується, і розшифрувати їх можуть лише ті, хто
належним чином уповноважений. Це робиться шляхом скремблування
інформації за допомогою математичних функцій на основі числа, яке
називається ключем. Для розшифровки (або дешифрування) інформації
використовується зворотний процес, що використовує той самий або інший
ключ. Якщо для шифрування і дешифрування використовується один і той же
ключ, процес називається симетричним . Якщо використовуються різні ключі,
процес визначається як асиметричний [6].
16
Два з найбільш широко використовуваних алгоритмів шифрування
сьогодні - це AES і RSA. Обидва є високоефективними та безпечними, але
зазвичай використовуються по-різному.
AES та RSA можуть працювати разом. Як же це відбувається.
Основна проблема AES полягає в тому, що, як симетричний алгоритм, він
вимагає, щоб і шифратор, і дешифратор використовували один і той же ключ.
Це породжує важливу проблему керування ключами – як цей надзвичайно
важливий секретний ключ можна розповсюдити, можливо, сотням одержувачів
у всьому світі, не піддаючись величезному ризику того, що він буде
необережно чи навмисно скомпрометований десь на цьому шляху? Відповідь
полягає в тому, щоб поєднати сильні сторони шифрування AES і RSA[6].
У багатьох сучасних комунікаційних середовищах, включаючи Інтернет,
велика частина даних, якими обмінюються, шифрується за допомогою
швидкого алгоритму AES. Щоб отримати секретний ключ, необхідний для
розшифровки цих даних, авторизовані одержувачі публікують відкритий ключ,
зберігаючи при цьому пов’язаний закритий ключ, який знають лише вони.
Потім відправник використовує цей відкритий ключ і RSA для шифрування та
передачі кожному одержувачу власного секретного ключа AES, який можна
використовувати для розшифрування даних.
2.1.1 Шифрування AES
AES (Advanced Encryption Standard) став найкращим алгоритмом
шифрування для урядів, фінансових установ і підприємств, які піклуються про
безпеку в усьому світі. Агентство національної безпеки США (NSC)
використовує його для захисту «цілком секретної» інформації країни.
Алгоритм AES послідовно застосовує серію математичних перетворень до
кожного 128-бітового блоку даних. Оскільки обчислювальні вимоги цього
підходу низькі, AES можна використовувати із споживчими обчислювальними
17
пристроями, такими як ноутбуки та смартфони, а також для швидкого
шифрування великих обсягів даних. Наприклад, серія мейнфреймів IBM z14
використовує AES для забезпечення повноцінного шифрування, за допомогою
якого шифруються всі дані в усій системі, незалежно від того, чи знаходяться
вони в стані спокою або передаються[7].
AES — це симетричний алгоритм, який використовує один і той самий
ключ із 128, 192 або 256 біт як для шифрування, так і для дешифрування
(безпека системи AES збільшується експоненціально з довжиною ключа).
Навіть маючи 128-бітовий ключ, завдання зламу AES шляхом перевірки
кожного з 2128 можливих значень ключа (атака «грубої сили») настільки
інтенсивна в обчислювальному відношенні, що навіть найшвидшому
суперкомп’ютеру в середньому знадобиться понад 100 трильйонів років
зробити це. Насправді, AES ніколи не був зламаний, і на основі сучасних
технологічних тенденцій, як очікується, залишатиметься в безпеці протягом
наступних років.
Більш популярний і широко поширений алгоритм AES виявився
принаймні в шість разів швидше, ніж потрійний DES. Потрібна була заміна
DES, оскільки розмір його ключа був занадто малим. Зі збільшенням
обчислювальної потужності він вважався вразливим проти вичерпної атаки
пошуку ключів. Triple DES була розроблена для подолання цього недоліку, але
виявилося, що він повільний[7].
Особливості AES наступні:
• Симетричний ключовий симетричний блоковий шифр
• 128-бітні дані, 128/192/256-бітні ключі
• Сильніший і швидший, ніж Triple-DES
• Надайте повну специфікацію та деталі дизайну
• Програмне забезпечення, реалізоване на C і Java
18
AES є ітеративним, а не шифром Фейстеля. Він заснований на «мережі
підстановки-перестановки». Він складається з серії пов’язаних операцій, деякі з
яких передбачають заміну вхідних даних конкретними виходами (підстановки),
а інші передбачають перемішування бітів навколо (перестановки).
Цікаво, що AES виконує всі свої обчислення на байтах, а не на бітах. Отже,
AES розглядає 128 біт блоку відкритого тексту як 16 байтів. Ці 16 байтів
розташовані в чотирьох стовпцях і чотирьох рядках для обробки як матриця −
На відміну від DES, кількість раундів в AES змінна і залежить від довжини
ключа. AES використовує 10 раундів для 128-бітних ключів, 12 раундів для
192-бітних ключів і 14 раундів для 256-бітних ключів. Кожен з цих раундів
використовує інший 128-бітовий ключ раунду, який обчислюється на основі
вихідного ключа AES (рис.2.2).
Рис.2.2 − Схема структури AES наведена на наступній ілюстрації
Процес шифрування буде обмежуватись описом типового раунду
шифрування AES. Кожен раунд складається з чотирьох підпроцесів. Процес
першого раунду зображено нижче (рис.2.3).
19
Рис.2.3 − Схема структури AES наведена на наступній ілюстрації
Процес першого раунду.
Byte Substitution (SubBytes)
16 вхідних байтів замінюються пошуком фіксованої таблиці (S-box),
заданої в дизайні. Результат – матриця з чотирьох рядків і чотирьох стовпців.
Shiftrows
Кожен із чотирьох рядків матриці зміщується вліво. Будь-які записи, які
«випадають», повторно вставляють у праву частину рядка. Зсув здійснюється
наступним чином:
• Перший ряд не зсувається.
• Другий рядок зміщується на одну (байт) позицію вліво.
• Третій ряд зміщується на дві позиції вліво.
• Четвертий ряд зміщується на три положення вліво.
• Результатом є нова матриця, що складається з тих самих 16
байтів, але зміщених відносно один одного.
MixColumns
20
Кожен стовпець із чотирьох байтів тепер перетворюється за допомогою
спеціальної математичної функції. Ця функція приймає на вхід чотири байти
одного стовпця і виводить чотири абсолютно нових байти, які замінюють
вихідний стовпець. Результатом є ще одна нова матриця, що складається з 16
нових байтів. Слід зазначити, що цей крок не виконується в останньому
раунді[7].
Addroundkey
16 байтів матриці тепер розглядаються як 128 біт і приєднуються до 128
біт круглого ключа. Якщо це останній раунд, то результатом буде
зашифрований текст. В іншому випадку отримані 128 біт інтерпретуються як 16
байтів, і ми починаємо ще один подібний раунд.
Процес дешифрування
Процес дешифрування шифротексту AES подібний до процесу
шифрування у зворотному порядку. Кожен раунд складається з чотирьох
процесів, які проводяться у зворотному порядку:
• Add round key
• Mix columns
• Shift rows
• Byte substitution
Оскільки підпроцеси в кожному раунді відбуваються у зворотному
порядку, на відміну від шифру Фейстеля, алгоритми шифрування та
дешифрування мають бути реалізовані окремо, хоча вони дуже тісно пов’язані.
2.1.2 Шифрування RSA
RSA названо на честь вчених Массачусетського технологічного інституту
(Рівест, Шамір і Адлеман), які вперше описали його в 1977 році. Це
асиметричний алгоритм, який використовує загальновідомий ключ для
21
шифрування, але вимагає іншого ключа, відомого лише призначеному
одержувачу, для розшифровки. У цій системі, яку відповідно називають
криптографією з відкритим ключем (PKC), відкритий ключ є продуктом
множення двох величезних простих чисел разом. Лише цей продукт довжиною
1024, 2048 або 4096 біт стає загальнодоступним. Але розшифрування RSA
вимагає знання двох основних факторів цього продукту. Оскільки не існує
відомого методу обчислення простих множників таких великих чисел, лише
творець відкритого ключа може також створити закритий ключ, необхідний для
розшифрування.
RSA є більш інтенсивним у обчисленні, ніж AES, і набагато повільнішим.
Зазвичай він використовується для шифрування лише невеликих обсягів даних.
RSA є прикладом криптографії з відкритим ключем, що ілюструється
наступним прикладом: припустимо, Аліса хоче надіслати Бобу цінний діамант,
але коштовність буде вкрадена, якщо вона буде надіслана незахищена. І Аліса, і
Боб мають різні навісні замки, але вони не мають однакових, а це означає, що
їхні ключі не можуть відкрити замки іншого. Як Аліса надіслала діамант Бобу?
Рішення:
Боб спочатку надсилає Алісі незамкнений замок. Зауважте, що Боб дасть
будь-кому незаблокований навісний замок, оскільки єдине використання для
нього це надіслати щось Бобу. Аліса додає блокування Боба і надсилає пакунок
Бобу, і Боб знімає замок і відкриває пакет (рис.2.4).
Рис.2.4 − Схема структури AES наведена на наступній ілюстрації
22
У RSA відкритий ключ генерується шляхом множення двох великих
простих чисел p і q разом, а закритий ключ генерується за допомогою іншого
процесу, що включає ссіqq. Після цього користувач може розповсюдити свій
відкритий ключ pq, і кожен, хто бажає надіслати користувачеві повідомлення,
зашифрував би своє повідомлення за допомогою відкритого ключа. Для всіх
практичних цілей навіть комп’ютери не можуть розкласти великі числа на
добуток двох простих чисел, так само, як розкласти число, наприклад 414863
вручну, практично неможливо. Однак множення двох чисел є набагато менш
складним, тому потенційну розкладку можна швидко перевірити, як показує
така проблема з кількома варіантами.
Реалізація RSA інтенсивно використовує модульну арифметику, теорему
Ейлера та функцію Ейлера. Зверніть увагу, що кожен крок алгоритму включає
лише множення, тому комп’ютер легко може виконати:
1. Спочатку одержувач вибирає два великих простих числа p і q. Їх
добуток, n = pq, становитиме половину відкритого ключа.
2. Приймач обчислює ϕ(pq)=(p−1)(q−1) і вибирає число e відносно
просте до ϕ(pq). На практиці e часто вибирають як 216+1=655372, хоча в деяких
випадках воно може бути невеликим до 3. e буде другою половиною відкритого
ключа.
3. Приймач обчислює модульну обернену d до e modϕ(n). Іншими
словами, de≡1(modϕ(n)). d — закритий ключ.
4. Приймач розподіляє обидві частини відкритого ключа: n і e. d
тримається в секреті.
Тепер, коли відкриті та закриті ключі згенеровані, їх можна повторно
використовувати скільки завгодно. Щоб передати повідомлення, виконайте такі
дії:
1. Спочатку відправник перетворює своє повідомлення в число m.
Один поширений процес перетворення використовує алфавіт ASCII: наприклад,
23
повідомлення «Привіт» було б закодовано як 7269767679. Важливо, щоб m<n,
оскільки в іншому випадку повідомлення буде втрачено при прийнятті за
модулем n, тож якщо n менше за повідомлення, воно буде надіслано частинами.
2. Потім відправник обчислює c≡me(mod n). c — це зашифрований
текст або зашифроване повідомлення. Крім відкритого ключа, це єдина
інформація, яку зловмисник зможе вкрасти.
3. Приймач обчислює cd≡m(modn), таким чином отримуємо вихідне
число m.
4. Приймач перекладає m назад у літери, отримуючи вихідне
повідомлення.
Через великі труднощі зі зламанням RSA він використовується майже
повсюдно, де потрібне шифрування: обмін паролями, банківські операції,
покупки в Інтернеті та навіть кабельне телебачення. RSA також
використовується для забезпечення легітимності веб-сайтів, оскільки лише
справжній веб-сайт матиме приватний ключ. Таким чином, він майже повністю
уникає атак «людина посередині», під час яких зловмисник перехоплює
з’єднання і показує користувачеві переконливий фейк. Загалом, уразливість у
RSA мала б катастрофічні наслідки для безпеки, тому були спроби різних атак.
Потужність RSA вимірюється розміром ключа, який є кількістю бітів
n=pq. 512-розрядний (155 цифр) RSA більше не вважається безпечним, оскільки
сучасні атаки грубої сили можуть отримати закриті ключі всього за години, а
подібна атака змогла витягти 768-бітний (232 цифри) закритий ключ у 2010
році. 2016 1024-бітні (309 цифр) ключі вважаються ризикованими, а більшість
нещодавно створених ключів 4096-бітні (1234 цифри).
Одна поширена атака на RSA повністю обходить алгоритм. Комп’ютер
може швидко обчислити найбільший спільний дільник двох чисел за
допомогою евклідового алгоритму, тому зловмисник може запустити цей
алгоритм на двох відкритих ключах. Якщо їх найбільший спільний дільник не
24
дорівнює 1, то зловмисник знайшов просте число, що розділяє обидва ключа,
отже, він зламав два ключа одночасно. Наприклад, припустимо, що два
відкритих ключі: 239149 і 166381. Важко розкласти будь-яке з цих двох чисел
на множники вручну, але алгоритм Евкліда можна виконати вручну, виявивши,
що ці два числа мають найбільший спільний дільник 379.
2.2 Хешування
Хешування — це процес перетворення будь-якого заданого ключа або
рядка символів в інше значення. Зазвичай це представлено коротшим
значенням або ключем фіксованої довжини, що представляє та полегшує пошук
або використання вихідного рядка.[12]
Найпопулярнішим використанням хешування є реалізація хеш-таблиць.
Хеш-таблиця зберігає пари ключів і значень у списку, доступному через її
індекс. Оскільки пари ключів і значень необмежені, хеш-функція відобразить
ключі до розміру таблиці. Тоді хеш-значення стає індексом для певного
елемента.
Хеш-функція генерує нові значення відповідно до математичного
алгоритму хешування, відомого як хеш-значення або просто хеш. Щоб
запобігти перетворенню хешу назад у вихідний ключ, хороший хеш завжди
використовує односторонній алгоритм хешування.[13]
Хешування має відношення до індексації та пошуку даних, цифрових
підписів, кібербезпеки та криптографії, але не обмежуючисьлише ними.
Мета використання хешування.
Хешування використовує функції або алгоритми для відображення даних
об’єкта на репрезентативне ціле значення. Потім хеш може бути використаний
для звуження пошуку при знаходженні цих елементів на карті даних об’єкта.
25
Наприклад, у хеш-таблицях розробники зберігають дані — можливо,
записи про клієнта — у вигляді пар ключів і значень. Ключ допомагає
ідентифікувати дані та працює як вхід до функції хешування, тоді як хеш-код
або ціле число потім відображаються на фіксований розмір (рис.2.5).
Хеш-таблиці підтримують функції, які включають наступне:
• вставити (ключ, значення)
• отримати (ключ)
• видалити (ключ)
• приклад хеш-таблиці
Діаграма, що ілюструє, як працює хеш-таблиця.
Рис.2.5 – Ілюстрація роботи хеш-таблиці
На додаток до швидкого отримання даних, хешування допомагає
шифрувати та дешифрувати цифрові підписи, які використовуються для
аутентифікації відправників та одержувачів повідомлень. Таким чином хеш-
функція перетворює цифровий підпис до того, як хешове значення (відоме як
дайджест повідомлення) і підпис надсилаються в окремих передачах до
одержувача.
Після отримання та сама хеш-функція отримує дайджест повідомлення з
підпису, який потім порівнюється з дайджестом переданого повідомлення, щоб
переконатися, що обидва вони однакові. Під час односторонньої операції
хешування хеш-функція індексує вихідне значення або ключ і надає доступ до
26
даних, пов’язаних з певним значенням або ключем, який витягується (рис.2.6)
[12].
Рис.2.6 – Процес цифрового підпису
Коли хтось створює та шифрує цифровий підпис за допомогою
приватного ключа, хеш-дані також створюються та шифруються. Відкритий
ключ підписувача дає змогу одержувачу розшифрувати підпис.
Хешування в структурі даних.
Десятична класифікація Дьюї добре працює в бібліотеках протягом
багатьох років, а базова концепція так само добре працює в інформатиці.
Інженери програмного забезпечення можуть заощадити простір і час у файлі,
зменшуючи вихідні ресурси даних і вхідні рядки до коротких буквено-
цифрових хеш-ключів.
Коли хтось шукає елемент на карті даних, хешування допомагає звузити
пошук. У цьому сценарії хеш-коди генерують індекс для зберігання значень.
Отже, тут хешування використовується для індексації та отримання інформації
з бази даних, оскільки це допомагає прискорити процес; набагато легше
знайти елемент, використовуючи його коротший хешований ключ, ніж його
початкове значення.
27
Багато алгоритмів шифрування використовують хешування для
підвищення кібербезпеки. Хешовані рядки та введення не мають сенсу для
хакерів без ключа дешифрування.
Наприклад, якщо хакери зламали базу даних і знайшли такі дані, як
«Джон Доу, номер соціального страхування 273-76-1989», вони можуть негайно
використати цю інформацію для своєї негідної діяльності. Однак хешове
значення, як-от "a87b3", є марним для суб'єктів загрози, якщо вони не мають
ключа для його розшифрування.
Таким чином, хешування допомагає захистити паролі, що зберігаються в
базі даних.
Криптографія використовує кілька хеш-функцій для захисту даних. Деякі
з найпопулярніших криптографічних хешів включають наступне:
• Алгоритм безпечного хешування 1 ( SHA-1 )
• Алгоритм безпечного хешування 2 (SHA-2)
• Алгоритм безпечного хешування 3 ( SHA-3 )
• MD2
• MD4
• MD5
Хеш-функції дайджесту повідомлень, такі як MD2, MD4 і MD5,
допомагають хешувати цифрові підписи. Після хешування підпис
перетворюється на коротше значення, яке називається дайджестом
повідомлення (рис.2.7).
28
Рис.2.7 – Хешування MD5
Алгоритм безпечного хешування (SHA) — це стандартний алгоритм,
який використовується для створення більшого (160-бітового) дайджеста
повідомлення. Хоча це як хеш-функція дайджесту повідомлень MD4 — і добре
зберігає та витягує базу даних — це не найкращий підхід для криптографічних
цілей або перевірки помилок. SHA-2 використовується для створення більшого
(224-розрядного) дайджеста повідомлень. SHA-3 є наступником SHA-2[12].
Хешування в кібербезпеці вимагає односпрямованих процесів, які
використовують односторонній алгоритм хешування. Це важливий крок у тому,
щоб зупинити суб’єктів загрози від зворотної інженерії хешування до
початкового стану. У той же час два ключі також можуть генерувати
ідентичний хеш. Це явище називається зіткненням.
29
Хороша хеш-функція ніколи не створює однакове хеш-значення з двох
різних вхідних даних. Таким чином, хеш-функція, яка має надзвичайно низький
ризик зіткнення, вважається прийнятною.
Відкрита адресація та окремий ланцюжок – це два способи боротьби з
колізією, коли вони виникають. Відкрита адресація обробляє колізії, зберігаючи
всі дані в самій хеш-таблиці, а потім шукаючи доступність у наступному місці,
створеному алгоритмом.
Відкриті методи адресації включають:
• подвійне хешування;
• лінійне зондування;
• квадратичне зондування.
Навпаки, окреме об’єднання ланцюжків уникає колізій, змушуючи кожну
клітинку хеш-таблиці вказувати на зв’язані списки записів з ідентичними
значеннями хеш-функції.
Щоб додатково забезпечити унікальність зашифрованих вихідних даних,
фахівці з кібербезпеки також можуть додавати випадкові дані до хеш-функції.
Цей підхід, відомий як «засолювання», гарантує унікальний вихід, навіть якщо
вхідні дані ідентичні.
Засівання заважає поганим акторам отримати доступ до неунікальних
паролів. Це тому, що кожне хеш-значення унікальне, навіть якщо користувачі
повторно використовують свої паролі. Засолювання додає ще один рівень
безпеки, щоб запобігти атакам райдужних столів.
Хешування також можна використовувати під час аналізу або запобігання
фальсифікації файлів. Це пояснюється тим, що кожен вихідний файл генерує
хеш і зберігає його в даних файлу. Коли одержувач отримує файл і хеш разом,
він може перевірити хеш, щоб визначити, чи не був скомпрометований файл.
Якщо хтось маніпулював файлом під час передачі, хеш відображатиме цю
зміну.
30
2.4 Протокол TCP/IP
TCP означає Transmission Control Protocol, стандарт зв'язку, який дозволяє
прикладним програмам і комп'ютерним пристроям обмінюватися
повідомленнями через мережу. Він призначений для надсилання пакетів через
Інтернет і забезпечення успішної доставки даних і повідомлень по мережах.
TCP є одним із основних стандартів, що визначають правила Інтернету, і
входить до стандартів, визначених Спеціальною групою з розробки Інтернету
(IETF). Це один з найбільш часто використовуваних протоколів у цифрових
мережевих комунікаціях, що забезпечує наскрізну доставку даних.[10]
TCP організовує дані так, щоб їх можна було передавати між сервером і
клієнтом, гарантуючи при цьому цілісність даних, що передаються через
мережу. Перш ніж передавати дані, TCP встановлює з'єднання між джерелом і
його призначенням, яке забезпечує працездатність до початку зв'язку. Потім він
розбиває великі обсяги даних на менші пакети, забезпечуючи при цьому
цілісність даних протягом усього процесу.
В результаті всі протоколи високого рівня, які потребують передачі
даних, використовують протокол TCP. Приклади включають такі методи
спільного доступу, як протокол передачі файлів (FTP), Secure Shell (SSH) і
Telnet. Він також використовується для надсилання та отримання електронної
пошти через протокол доступу до Інтернет-повідомлень (IMAP), протокол
поштового відділення (POP) і простий протокол передачі пошти (SMTP), а
також для доступу до Інтернету через протокол передачі гіпертексту (HTTP).
Альтернативою TCP є протокол User Datagram Protocol (UDP), який
використовується для встановлення з’єднань з низькою затримкою між
програмами та скорочення часу передачі. TCP може бути дорогим мережевим
інструментом, оскільки включає в себе відсутні або пошкоджені пакети та
31
захищає доставку даних за допомогою таких засобів керування, як
підтвердження, запуск з’єднання та керування потоком.[10]
UDP не забезпечує з’єднання з помилками чи послідовність пакетів, а
також не сигналізує про пункт призначення перед доставкою даних, що робить
його менш надійним, але менш дорогим. Таким чином, це хороший варіант для
чутливих до часу ситуацій, таких як пошук системи доменних імен (DNS),
передача голосу через Інтернет-протокол (VoIP) і потокове мультимедіа.
Internet Protocol (IP) — це метод передачі даних з одного пристрою на
інший через Інтернет. Кожен пристрій має IP-адресу, яка однозначно
ідентифікує його та дозволяє йому спілкуватися та обмінюватися даними з
іншими пристроями, підключеними до Інтернету.
IP відповідає за визначення того, як програми та пристрої обмінюються
пакетами даних один з одним. Це основний комунікаційний протокол,
відповідальний за формати та правила обміну даними та повідомленнями між
комп’ютерами в одній мережі або кількох мережах, підключених до Інтернету.
Це робиться за допомогою набору протоколів Інтернету (TCP/IP), групи
протоколів зв’язку, які розділені на чотири рівні абстракції.
IP є основним протоколом на рівні Інтернету TCP/IP. Його головна мета
полягає в доставці пакетів даних між початковою програмою або пристроєм і
призначенням за допомогою методів і структур, які розміщують теги,
наприклад інформацію про адресу, в пакетах даних.
TCP та IP – це окремі протоколи, які працюють разом, щоб забезпечити
доставку даних до цільового призначення в межах мережі. IP отримує та
визначає адресу — IP-адресу — програми або пристрою, на який потрібно
надіслати дані. Тоді TCP відповідає за транспортування та маршрутизацію
даних через архітектуру мережі та забезпечення їх доставки до цільової
програми або пристрою, який визначив IP.
32
Іншими словами, IP-адреса схожа на номер телефону, призначений
смартфону. TCP – це комп’ютерна мережева версія технології, яка
використовується для того, щоб телефон дзвонив і дозволив користувачеві
розмовляти з людиною, яка телефонувала. Ці два протоколи часто
використовуються разом і покладаються один на одного для того, щоб дані
отримували місце призначення та безпечно досягали його, тому процес
регулярно називають TCP/IP.[10]
Модель TCP/IP – це стандартний метод передачі даних в Інтернеті. Він
був розроблений Міністерством оборони США, щоб забезпечити точну та
правильну передачу даних між пристроями. Він розбиває повідомлення на
пакети, щоб уникнути необхідності повторно надсилати все повідомлення,
якщо під час передачі виникнуть проблеми. Пакети автоматично збираються
знову, коли вони досягають місця призначення. Кожен пакет може проходити
різним маршрутом між вихідним і кінцевим комп’ютером, залежно від того, чи
буде вихідний маршрут перевантаженим чи недоступним.
TCP/IP розділяє комунікаційні завдання на рівні, які забезпечують
стандартизацію процесу, без того, щоб постачальники апаратного та
програмного забезпечення самі керували. Пакети даних повинні пройти через
чотири рівні, перш ніж вони будуть отримані пристроєм призначення, потім
TCP/IP проходить через рівні в зворотному порядку, щоб повернути
повідомлення в початковий формат.
Як протокол на основі з’єднання, TCP встановлює та підтримує з’єднання
між програмами або пристроями, поки вони не закінчать обмін даними. Він
визначає, як вихідне повідомлення має бути розбито на пакети, нумерує та
повторно збирає пакети та надсилає їх іншим пристроям у мережі, таким як
маршрутизатори, шлюзи безпеки та комутатори, а потім до місця призначення.
TCP також надсилає та отримує пакети з мережевого рівня, обробляє передачу
33
будь-яких скинутих пакетів, керує контролем потоку та забезпечує досягнення
всіх пакетів місця призначення.
Хорошим прикладом того, як це працює на практиці, є надсилання
електронної пошти за допомогою SMTP із сервера електронної пошти. Щоб
розпочати процес, рівень TCP на сервері ділить повідомлення на пакети,
нумерує їх і пересилає на IP-рівень, який потім транспортує кожен пакет на
цільовий сервер електронної пошти. Коли пакети надходять, вони повертаються
на рівень TCP, щоб знову зібрати їх у вихідний формат повідомлення та
передати на сервер електронної пошти, який доставляє повідомлення до
електронної скриньки користувача.
TCP/IP використовує тристороннє рукостискання для встановлення
з’єднання між пристроєм і сервером, що гарантує, що кілька з’єднань TCP-
сокетів можуть передаватися в обох напрямках одночасно. І пристрій, і сервер
повинні синхронізувати та підтвердити пакети перед початком зв’язку, потім
вони можуть узгоджувати, розділяти та передавати з’єднання TCP-сокета.
Модель TCP/IP визначає, як пристрої повинні передавати дані між собою,
і дозволяє спілкуватися через мережі та на великі відстані. Модель представляє,
як дані обмінюються та організуються в мережах. Він розділений на чотири
рівні, які встановлюють стандарти для обміну даними та представляють, як дані
обробляються та упаковуються під час доставки між додатками, пристроями та
серверами.
Чотири рівні моделі TCP/IP є такими:
1. Рівень каналу передачі даних: рівень каналу даних визначає
спосіб надсилання даних, обробляє фізичний акт надсилання та отримання
даних і відповідає за передачу даних між програмами або пристроями в мережі.
Це включає в себе визначення того, як дані повинні передаватися апаратними
засобами та іншими пристроями передачі в мережі, такими як драйвер
пристрою комп’ютера, кабель Ethernet, мережевий інтерфейс (NIC) або
34
бездротова мережа. Його також називають канальним рівнем, рівнем доступу
до мережі, рівнем мережевого інтерфейсу або фізичним рівнем і є комбінацією
фізичного рівня та рівня каналів даних моделі взаємозв’язку відкритих систем
(OSI) , яка стандартизує комунікаційні функції в обчислювальній та
телекомунікаційній сферах cистеми.[11]
2. Інтернет-рівень: Інтернет-рівень відповідає за надсилання
пакетів із мережі та контроль їх переміщення по мережі, щоб гарантувати, що
вони досягають місця призначення. Він надає функції та процедури для
передачі послідовностей даних між програмами та пристроями через мережі.
3. Транспортний рівень: транспортний рівень відповідає за
забезпечення надійного та надійного з’єднання даних між оригінальною
програмою або пристроєм та його цільовим призначенням. Це рівень, на якому
дані поділяються на пакети та нумеруються для створення послідовності. Потім
транспортний рівень визначає, скільки даних потрібно надіслати, куди вони
мають бути надіслані та з якою швидкістю. Він гарантує, що пакети даних
надсилаються без помилок і послідовно, і отримує підтвердження того, що
пристрій призначення отримав пакети даних.
4. Прикладний рівень: прикладний рівень відноситься до програм,
яким потрібен TCP/IP, щоб допомогти їм спілкуватися один з одним. Це рівень,
з яким зазвичай взаємодіють користувачі, наприклад системи електронної
пошти та платформи обміну повідомленнями. Він поєднує рівні сеансу,
презентації та прикладного рівня моделі OSI.
Пакети даних, надіслані через TCP/IP, не є приватними, що означає, що їх
можна побачити або перехопити. З цієї причини важливо уникати використання
загальнодоступних мереж Wi-Fi для надсилання особистих даних і забезпечити
шифрування інформації. Одним із способів шифрування даних, що
передаються через TCP/IP, є віртуальна приватна мережа (VPN) .
35
РОЗДІЛ 3
РОЗРОБКА АЛГОРИТМУ РОБОТИ ТА ПРОГРАМНА РЕАЛІЗАЦІЯ
ПІДСИСТЕМИ ЗАХИСТУ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
3.1 Вибір виду захисту програмного забезпечення
Перед початком розробки алгоритму потрібно визначитися з видом
захисту. Можна виділити наступні види захисту програмного забезпечення:
• система довіри;
• програмний офлайн захист;
• програмний онлайн захис;
• апаратний захист.
З усих вище перелічених найпривабливіше виглядає онлайн захист.
Звісно цей вид захисту має як свої переваги так і недоліки.
До переваг можна віднести:
• досить високу надійність;
• можливість перенести деяку логіку роботи програми на сервер.
До недоліків відносять:
• необхідність постійного Інтернет підключення;
• витрати на підтримку і роботу сервера.
В наш час не можна уявити роботу без мережі Інтернет. Кожен
поважаючий себе і своїх співробітників підприємець може забезпечити
стабільне інтернет-підключення. Тому дана проблема відпадає.
З витратами на сервер і його підтримку ситуація дещо складніша. З
одного боку, якщо використовувати запропонований мною варіант захисту
програмного забезпечення то витрати будуть мінімальними. Для роботи
вистачить навіть не дуже потужного ноутбука. З іншої, при перенесенні деякої
36
логіки роботи програми на сервер витрати відповідно зростуть. Отже витрати
на сервер цілком залежать від розробників, їхнього програмного забезпечення
та необхідного рівня захисту для нього.
З вище сказаного становиться зрозумілим що для подальшої розробки
підсистеми захисту програмного забезпечення потрібно використовувати
клієнт-сервену архітектуру.
3.2 Розробка алгоритму роботи підсистеми захисту
Для подальшої роботи підсистеми дуже важливо провести перший запуск
програмного забезпечення. При запуску буде згенеровано ім'я користувача і
його індентифікатор а також зашифровано і збережено в файл необхідні дані.
Алгоритм зображений блок-схемою на рис.3.1.
37
Рис.3.1 - Алгоритм роботи підсистеми захисту при першому запуску
програмного забезпечення
38
В подальшому алгоритм роботи підсистеми буде працювати, як
показано на блок-схемі (рис.3.2)
Рис.3.2 - Алгоритм роботи підсистеми захисту
39
3.3 Протокол TCP/IP та забезпечення шифрування
Виконання наведеного вище алгоритму потребує клієнт-серверного
додатку. Оскільки потрібно буде передавати повідомлення невеликого розміру
протокол TCP/IP для цієї задачі підійде найкраще. Але він має серйозний
недолік - пакети даних, надіслані через TCP/IP, не є приватними, що означає,
що їх можна побачити або перехопити.
Враховуючи той факт що будуть передаватися ключі шифрування і дані
для автентифікації алгоритм шифрування RSA для даної задачі підходе
найкраще.
Для реалізації алгоритму шифрування RSA була використана бібліотека
System.Security.Cryptography. Програмний код для шифрування і дешифрування
можна переглянути на рисунках наведених нижче (рис.3.3, рис.3.4).
Рис.3.3 - Шифрування RSA
40
Рис.3.4 - Дешифрування RSA
Також потрібно звернути увагу, що виникає необхідність збереження
даних для автентифікації на стороні клієнта. Щоб забезпечити надійне її
збереження буде використовуватись алгоритм шифрування AES.
Для реалізації алгоритму шифрування AES буда використана бібліотека
System.Security.Cryptography. Програмний код для шифрування і дешифрування
можна переглянути на рисунках наведених нижче (рис.3.5, рис.3.6).
Рис.3.5 - Шифрування AES
41
Рис.3.6 - Дешифрування AES
3.4 Процес автентифікації та створення нових користувачів
Підсистема захисту програмного забезпечення розробляється як
автоматична система яка не потребує ніяких зусиль для роботи з нею, крім
запуску. Тому автоматизований процес створення користувачів для подальшої
автентифікації – важливий елемент.
Ім'я користувача створюється за допомогою додавання до User двох
згенерованих рандомних байтів (рис.3.7). Для генерації використовувався
криптографічний генератор випадкових чисел з бібліотеки
System.Security.Cryptography.
42
Рис.3.7 - Генерація випадкових чисел
Для утворення індентифікатора було використано хеш-функцію SHA-
512 (рис.3.8). Хеш-функція реалізована за допомогою бібліотеки
System.Security.Cryptography.
Рис.3.8 - Генерація індентифікатора
Алгоритм роботи автентифікації виглядає так: програма спочатку зчитує
дані з файла, який зберігається на сервері. Потім шукає відповідне ім'я
користувача і порівнює отриманий ключ від клієнта з завантаженими з файла і
відправляє результат перевірки клієнту (рис.3.9).
43
Рис.3.9 – Перевірка користувачів
Клієнт отримує результат. В залежності від отриманого результату
програма або продовжує роботу, або припиняє. У випадку запуску більше
одного клієнта одночасно всі наступні копії, крім першої «зависають»
(рис.3.10).
44
Рис.3.10 – Перевірка користувачів
3.5 Результати роботи
Перш за все слід сказати, що підсистема захисту програмного
забезпечення створювалась як автоматична система яка не потребує ніяких дій
з собою крім запуску. Скріншоти наведені нижче призначені для того щоб
показати що захист працює.
При першому запуску як було сказано вище створюється ім'я
користувача і індентифікатор. Вигляд з боку сервера (рис.3.11) і клієнта
(рис.3.12) наведено нижче.
45
Рис.3.11 – Вигляд процесу реєстрації на сервері
Рис.3.12 – Вигляд процесу реєстрації на клієнті
Список всіх зареєстрованих користувачів можна переглянути у файлі
(рис.3.13).
Рис.3.13 – Файл з зареєстрованими користувачами
На рис.3.14 показана робота підсистеми захисту. Перші 2 користувачі
без проблем отримали доступ в той же час при дублюванні користувача з ім'ям
User10662 останнє вікно не отримало відповіді від сервера і «зависло».
Рис.3.14 – Файл з зареєстрованими користувачами
46
У випадку якщо індентифікатор або ім'я користувача невірні сервер
відправляє відповідне повідомлення (рис.3.15).
Рис.3.15 – Файл з зареєстрованими користувачами
3.6 Обфускація коду
Обфускація коду виконувалась вбудованим в Visual Studio
обфускатором Dotfuscator Community. Результати обфускації наведені нижче
(рис.3.16).
Рис.3.16 – Результати обфускації коду
47
ВИСНОВКИ
В ході виконання роботи було досягнуто мети - розробка підсистеми
захисту програмного забезпечення від неправомірних інформаційних впливів.
Для цього було розкрито проблему інтернет-піратства. У 2018 році
Business Software Alliance підрахував, що 37% усього програмного
забезпечення, встановленого на персональних комп’ютерах, було
неліцензованим, що призвело до 46,3 мільярдів доларів втраченого доходу. За
даними Sandvine, BitTorrent, найпопулярніший веб-сайт обміну файлами, у 2018
році становив 22% глобальної пропускної здатності завантаження. Це показує,
наскільки люди зацікавлені в піратському контенті. Виявлено 5 основних
способів запобігання піратству:
• Авторські права, патенти та угоди з кінцевими користувачами;
• Ключі програмного продукту;
• Обфускація;
• Програмне забезпечення для захисту від несанкціонованого
доступу;
• Програмне забезпечення водяних знаків.
Був проведений аналіз методів і засобів необхідних для створення
підсистеми захисту програмного забезпечення. А саме – обфускація,
алгоритмам шифрування RSA та AES, хешування та протокол TCP/IP.
Розроблено алгоритм роботи підсистеми захисту програмного
забезпечення і проведено його програмну реалізацію.
48
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Обфускация (программное обеспечение). Режим доступу до сайту:
https://ru.wikipedia.org/wiki/Обфускация_(программное_обеспечение).
2. Обфускация как метод защиты программного обеспечения. Режим
доступу до сайту: https://habr.com/ru/post/533954/.
3. Бауэр Ф. Расшифрованные секреты. Методы и принципы
криптологии. М.: Мир, 2007. 550 c.
4. How to stop software piracy. Режим доступу до сайту:
https://www.redpoints.com/blog/how-to-stop-software-
piracy/?utm_referrer=https%3A%2F%2Fwww.google.com%2F&nab=0.
5. Борьба с пиратством: методология и инструментарий. Режим
доступу до сайту: http://www.unkniga.ru/copyright/copyrightcom/6700-borba-s-
piratstvom-metodologiy-i-instrumentariy.html.
6. AES vs. RSA Encryption: What Are the Differences. Режим доступу до
сайту: https://www.precisely.com/blog/data-security/aes-vs-rsa-encryption-
differences.
7. Advanced Encryption Standard. Режим доступу до сайту:
https://www.tutorialspoint.com/cryptography/advanced_encryption_standard.htm
8. Мао B. Современная криптография. Теория и практика. М.:
Вильямс, 2005. 763 с.
9. RSA Encryption. Режим доступу до сайту:
https://brilliant.org/wiki/rsa-encryption/.
10. What is a Transmission Control Protocol TCP/IP Model. Режим
доступу до сайту: https://www.fortinet.com/resources/cyberglossary/tcp-ip.
11. Шнайер Б. Прикладная криптография. Протоколы, алгоритмы,
исходные тексты на языке Си. М.: Триумф, 2003. 806 с.
49
12. What is hashing and how does it work. Режим доступу до сайту:
https://www.techtarget.com/searchdatamanagement/definition/hashing.
13. Хеш-функція. Режим доступу до сайту:
https://uk.wikipedia.org/wiki/Хеш-функція.
14. Многопоточное клиент-серверное приложение TCP. Режим доступу
до сайту: https://metanit.com/sharp/net/4.3.php.
50