— захист програмної складової даної автоматизованої системи;
— захист окремої програми (прав, що пов'язані з нею) як об'єкту продаж або розповсюдження.
В рамках другого аспекту до основних цілей порушення безпеки ПЗ можна віднести:
—незаконне використання ПЗ (всього ПЗ або його частини);
—незаконне використання ідей, що реалізовані в ПЗ (алгоритмів, програмних інтерфейсів, інтерфейсів взаємодії з користувачем, інших технічних рішень);
—незаконний продаж ПЗ;
—незаконне виготовлення копій ПЗ.
Досягнення зазначених вище цілей пов'язане з реалізацією стосовно ПЗ наступних основних загроз:
—несанкціоноване виконання програми або частини програмного коду;
—несанкціонований доступ до програмного коду, в т.ч. з метою вивчення реалізованих в ньому алгоритмів, зміни або підміни програмного коду;
—несанкціоноване копіювання програм.
Протидія визначеним вище загрозам безпеці ПЗ здійснюється з використанням таких груп методів захисту ПЗ:
1) технічні (в тому числі голографічні);
2) організаційні(наприклад порядок постачання та використання);
3) правові (наприклад, шляхом визначення законів, кодексів, інструкцій).
Наприклад до групи технічних методів захисту ПЗ можуть бути віднесені:
1) захист ПЗ засобами ОС;
2) перевірка і забезпечення цілісності ПЗ;
3) забезпечення стійкості до цілеспрямованих і випадкових дестабілізуючих впливів;
4) ідентифікація користувача та/або середовища виконання;
5) захист від відновлення та/або вивчення вихідного програмного коду та алгоритмів функціонування ПЗ.
2. Методи захисту ПЗ від несанкціонованого доступу до програмного коду
Всі засоби дослідження ПЗ можна розбити на 2 класи: статичні і динамічні. Перші оперують вихідним кодом програми як даними і будують її алгоритм без виконання, другі ж вивчають програму, інтерпретуючи її в реальному або віртуальному обчислювальному середовищі. Звідси випливає, що перші є більш універсальними в тому сенсі, що теоретично можуть отримати алгоритм всієї програми, в тому числі і тих блоків, які ніколи не отримають управління. Динамічні засоби можуть будувати алгоритм програми тільки на підставі конкретної її траси, отриманої при певних вхідних даних. Тому завдання отримання повного алгоритму програми в цьому випадку еквівалентно побудові вичерпного набору текстів для підтвердження правильності програми, що практично неможливо, і взагалі при динамічному дослідженні можна говорити тільки про побудову деякої частини алгоритму.
Два найбільш відомих типу програм, призначених для дослідження ПЗ, як раз і належать до різних класів: це відладчик (динамічний засіб) і дизасемблер (засіб статистичного дослідження). Якщо перший широко застосовується користувачем для налагодження власних програм і завдання побудови алгоритму для нього вторинні і реалізуються самим користувачем, то другий призначений виключно для їх вирішення і формує на виході асемблерний текст алгоритму.
Крім цих двох основних інструментів дослідження, можна використовувати:
· «Діскомпілятори», програми, які генерують з виконуваного коду програму на мові високого рівня;
· «Трасировщики», спочатку запам'ятовують кожну інструкцію, що проходить через процесор, а потім переводять набір інструкцій у форму, зручну для статичного дослідження, автоматично виділяючи цикли, підпрограми тощо;
· «Слідкуючі системи», запам'ятовують і аналізують трасу вже не інструкції, а інших характеристик, наприклад викликаних програмою переривань.
Для захисту програм від дослідження необхідно застосовувати методи захисту від дослідження файлу з виконуваним кодом програми, що зберігається на зовнішньому носії, а також методи захисту виконуваного коду, який завантажується в оперативну пам'ять для виконання цієї програми.
У першому випадку захист може бути заснований на шифруванні конфіденційної частини програми, а в другому - на блокуванні доступу до виконуваного коду програми в оперативній пам'яті з боку відгадчика. Крім того, перед завершенням роботи програми повинен обнулятися весь її код в оперативній пам'яті. Це запобігає можливості несанкціонованого копіювання з оперативної пам'яті дешифрованого виконуваного коду після виконання програми.
Таким чином, захищувана від дослідження програма повинна включати наступні компоненти:
· ініціалізатор;
· зашифровану конфіденційну частину;
· деструктор (деіцініалізатор).
Ініціалізатор повинен забезпечувати виконання таких функцій:
· збереження параметрів операційного середовища функціонування (векторів переривань, вмісту регістрів процесора і т.д.);
· заборона всіх внутрішніх і зовнішніх переривань, обробка яких не може бути записана в програмі;
· завантаження в оперативну пам'ять і дешифрування коду конфіденційної частини програми;
· передача керування конфіденційної частини програми.
Конфіденційна частина програми призначена для виконання основних цільових функцій програми і захищається шифруванням для попередження внесення до неї програмної закладки.
Деструктор після виконання конфіденційної частини програми повинен виконати наступні дії:
· обнулення конфіденційного коду програми в оперативній пам'яті;
· відновлення параметрів операційної системи (векторів переривань, вмісту регістрів процесора і т.д.), які були встановлені до заборони неконтрольованих переривань;
· виконання операцій, які неможливо було виконати при забороні неконтрольованих переривань;
· звільнення всіх незадіяних ресурсів комп'ютера і завершення роботи програми.
Для більшої надійності ініціалізатор може бути частково зашифрованим, по мірі виконання може дешифрувати сам себе. Дешифруватися по мірі виконання може і конфіденційна частина програми. Таке дешифрування називається динамічним дешифруванням виконуваного коду. У цьому випадку чергові ділянки програм перед безпосереднім виконанням розшифровуються, а після виконання відразу знищуються.
Для підвищення ефективності захисту програм від дослідження необхідно внесення в програму додаткових функцій безпеки, спрямованих на захист від трасування. До таких функцій можна віднести:
· періодичний підрахунок контрольної суми області оперативної пам'яті, займаної вихідним кодом; порівняння поточної контрольної суми з попередньо сформованою еталонною і прийняття необхідних заходів у випадку розбіжності;
· перевірку кількості займаної програмою оперативної пам'яті;
· порівняння з обсягом, до якого програма адаптована, і прийняття необхідних заходів у разі невідповідності;
· контроль часу виконання окремих частин програми;
· блокування клавіатури на час відпрацювання особливо критичних алгоритмів.
Для захисту програм від дослідження за допомогою дизассемблерів можна використовувати і такий спосіб, як ускладнення структури самої програми з метою заплутування зловмисника, який дізассемблює цю програму. Наприклад, можна використовувати різні сегменти адреси для звернення до однієї і тієї ж області пам'яті. У цьому випадку зловмисникові буде важко здогадатися, що насправді програма працює з однією і тією ж областю пам'яті.
Способи захисту від дослідження можна розділити на чотири класи.
1. Спосіб, сутність якого полягає у наданні впливу на процес функціонування налагоджувальному кошти через спільні програмні або апаратні ресурси. В даному випадку найбільш відомі:
· використання апаратних особливостей мікропроцесора (особливості черговості вибірки команд, особливості виконання команд і т.д.);
· використання загального програмного ресурсу (наприклад, загального стека) і руйнування даних або коду відладчика, що належать загальному ресурсу, або перевірка використання загального ресурсу тільки захищуваною програмою (наприклад, визначення стека в області, критичній для виконання захищуваної програми);
· переадресація обробників налагоджувальних подій (переривань) від налагоджувальних засобів до захищуваної програми.
Виділення трьох груп захисних дій у даному класі не випадково, оскільки об'єктивно існують загальні апаратні ресурси відладчика, і захищувана програма у випадку однопроцесорного обчислювача виконуються на одному й тому ж процесорі), спільні програмні ресурси (оскільки і відладчик, і захищувана програма виконуються в одному і тому ж операційному середовищі), нарешті, відладчик створює специфічні ресурси, які є важливими для його власної роботи (наприклад адресує собі налагоджувальні переривання).
2. Вплив на роботу налагоджувальних засобів шляхом використання особливостей його апаратного або програмного середовища. Наприклад:
· переміщення фрагментів коду або даних за допомогою контролера прямого доступу до пам'яті;
· впливу на процес регенерації оперативної пам'яті (на деякій ділянці коду регенерація пам'яті відключається, а потім знову включається, - при нормальній роботі ніяких змін немає, при повільному виконанні програми відладчиком вона «зависає»);
· переходу мікропроцесора в захищений режим.
3. Вплив на роботу відладчика через органи управління або / та пристрої відображення інформації.
Видавана налагоджувальними засобами інформація аналізується людиною. Отже, додатковий спосіб захисту від налагодження це порушення процесу спілкування оператора і відладчика, а саме спотворення або блокування вводу з клавіатури і виводу на термінал інформації.
4. Використання принципових особливостей роботи керованого людиною відладчика. У даному випадку захист від дослідження полягає в нав'язуванні для аналізу надмірно великого обсягу коду (як правило, за рахунок циклічного виконання деякої його ділянки).