Павлов В.Г., к.т.н.,
доц., Бурлака А.О.
Національний
авіаційний університет, м.Київ
Дослідження засобів захисту програмного
забезпечення
Захист програмного забезпечення – це протидія
атакам, що направлені на збій в роботі програми (пошкодження її цілісності),
або доступ до конфіденційної інформації. В наш час протидія атакам на прикладні
програми є актуальною проблемою, тому її вирішення не стоїть на місці. Атаки на
програми в абсолютній своїй більшості здійснюються безпосередньо на
персональному комп’ютері зловмисника. Тому зловмисник має можливість за
допомогою спеціалізованих програм продивитися код досліджуваної програми, аналізувати залежність вихідних і вхідних
даних, трасувати виконання команд (інструкцій) в пам’яті по крокам. Також
зловмисник може виконувати будь-які дії з кодом прикладної програми, змінювати
і використовувати у своїх цілях. Будь-які методи захисту вбудовані в програму,
тому зловмисник може їх проаналізувати і зняти.
Ідеального захисту, звичайно, добитися неможливо,
але це не означає, що від нього треба відмовитися. Чим вищий рівень захисту
програмного продукту, тим менше зловмисників зможуть завершити свою атаку на
досліджувану програму успішно. Загальний принцип побудови захисту сформулював
Брюс Шнайєр у своїй книзі «Прикладна криптографія. Протоколи, алгоритми,
вихідні тексти на Сі»: «Система захисту вважається оправданою, якщо на її злом
зловмисник потратить більше ресурсів, ніж на створення нового програмного продукту, який би був
аналогічний захищеному».
Існують сотні методів та способів захисту
програмних продуктів, але найбільш поширених і надійних можна відмітити кілька:
1.
Затемнення
коду;
2.
Винесення
важливої частини коду на окремий носій;
3.
Перевірка
цілісності коду (перевірка CRC);
4.
Створення
захищеного середовища виконання.
5.
Перевірка
ліцензії;
Основним покликанням затемнення є сповільнення
процесу дослідження і аналізу коду зломщиком. Затемнення шляхом перетворення
ходу виконання або розділення даних забезпечує достатньо серйозний рівень
захисту від реверс-інженерії (зворотного проектування коду програми). Для злому
затемненої програми атакуючому потрібно відновити початковий вид програми,
визначити, які елементи програми є «реальними» (використовуються для коректної
роботи програми), а які – «пустими» (використовуються тільки для того, щоб
відволікти зломщика і заплутати його). Автоматизувати подібну задачу доволі
складно.
Так як більшість перетворень методу затемнення є
детерміновані, то саме затемнення може бути реалізовано автоматично. Для цього
потрібно створити лексичний і/або синтаксичний аналізатор і перетворювати
структури коду, що були отримані за допомогою цього аналізатора. Так як всі
компілятори мають у своєму складі такі аналізатори, то на рівні компілятора
затемнення можна просто реалізувати.
Затемнення не являється універсальним методом, і
для деяких функцій використання даного методу захисту не принесе ефективного
результату. Тим не менше, на практиці метод затемнення може забезпечити доволі
високий рівень захисту для більшості програм.
Винесення важливої частини коду на окремий носій
являється доволі надійним методом захисту програмного продукту, хоча має деякі
загальні недоліки.
По-перше, ціллю атаки зловмисника може стати канал
між клієнтом і сервером або захищеним пристроєм. Так як хто завгодно може
ввійти в даний канал, то виникає необхідність забезпечення аутентифікації як
клієнта, так і сервера, а також шифрування протоколу, по якому сторони
обмінюються інформацією.
По-друге, захищений пристрій може теж стати ціллю
для атаки. У цьому випадку довірений сервер являється більш надійним вибором, у
порівнянні з апаратним ключем, так як фізичного доступу до серверу у
зловмисника немає. А забезпечення захисту сервера від зовнішніх атак набагато
дешевше, ніж створення повністю захищених від злому апаратних ключів.
По-третє, вартість методу захисту на основі
апаратних ключів і смарт-карт є доволі високою, так як кожний користувач повинен
мати свій персональний екземпляр цього пристрою. Даний підхід підійде для
програмних продуктів, що мають невелику кількість користувачів. При великій
кількості клієнтів набагато дешевшим буде підхід з довіреним сервером. При
порівняній невисокій вартості він забезпечить високий рівень захисту.
Захист від модифікації коду програми є важливою
частиною загального захисту програмного продукту від злому. Крім цього,
програма, що може відшуковувати зміни в коді є більш надійною для клієнта, так
як може попередити зараження вірусом, а також, якщо програма здатна виправити і
відновити свій початковий код, то вона може самостійно видалити вірус. В іншому
ж випадку, якщо програма не перевіряє цілісність коду, то вона може бути
заражена вірусом і, в подальшому стати небезпечною і заражувати вірусом інші
програми.
Основними типами атак на алгоритми захисту від
модифікацій є видалення перевірки коду перевірки або ж зміна оригінальних
значень хеш-функцій. Тому для забезпечення більшого захисту потрібно захистити
оригінальні хеш-функції, а також сам перевірочний алгоритм. Захист можна
забезпечити затемненням цих частин програми, або ж перенесення алгоритму
перевірки і хеш-функції на захищений носій (наприклад, апаратний ключ).
Захищене середовище виконання забезпечує дуже
високий рівень захисту від злому. По-перше, гарантується повноцінний захист від
модифікації програмного коду. Це пояснюється тим, що перевірка на цілісність
виконується в самому середовищі (доступ до вмісту середовища практично
неможливий) і захищається надійними криптографічними методами. Крім цього,
частина алгоритмів виконується в захищеному середовищі, тому це є також
протидією реверс-інженерії. Зломщику залишається або досліджувати код програми,
який є зашифрованим, або ж досліджувати захищене середовище як «чорний ящик».
Ще одна перевага програм, що використовують
захищене середовище – це їхня стійкість до вірусів.
Рівень захисту, що забезпечується перевіркою
ліцензії залежить тільки від алгоритмів, що використовуються в ній самій. Сам
метод дуже вразливий до зворотного проектування, тому потрібно використовувати
його тільки в комплексі з методом затемнення або захищеним модулем. Комплексно
даний розглянутий метод є надійним, ефективним і недорогим методом захисту від
піратства.
Список використаної літератури:
1)
Крис Касперски.
Техника и философия хакерских атак. – М.: СОЛОН-Пресс, 2004. – 272 с. – (Серия «Коддокопатель»).
2)
Анин Б. Ю. Защита компьютерной информации. – СПб.:
БХВ-Петербург, 2000. – 384 с.
3)
Анисимов А. В., Иванов И. Ю.. Проблеми
програмування. – К., 2006. – 41-61 с.