Реферат: Захист програмного забезпечення

Вступ

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

При дослідженні проблем захисту ПЗвід навмисних дефектів неминуча постановка наступних питань:

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

·   які можливі мотиви дій суб'єкта, що здійснюєрозробку таких дефектів?

·   як можна ідентифікувати наявність програмногодефекту?

·   як можна відрізнити навмисний програмнийдефект від програмної помилки?

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

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

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

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

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

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

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

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

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

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

·   потенційна можливість одержати винагороду заусунення виниклої при випробуваннях або експлуатації системи «програмноївідмови» і т.п.

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

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

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

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

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

При відповіді на питання пронесанкціоноване копіювання програм необхідно відповісти на наступні питання:

·   що може зробити зловмисник («пірат») у ходіспроб вивчення програми?

·   що є істотними знаннями про програму?

·   що є специфікацією програми?

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


1.  Основні поняття щодо захисту програмного забезпечення

Програмнезабезпечення є однією з базових складових сучасних ІКС.

Розглянемозастосування до ПЗ моделі порушника, яка визначена в НД ТЗІ 1.1-002-99.Відповідно до рівнівможливостей, що надаються потенційним порушникамштатними засобами КС, можна виділити чотири групи умов щодо порушення безпеки ПЗ:

1)  перший рівень визначаєнайнижчий рівень можливостей впливу на ПЗ — можливість взаємодії з ПЗ тількичерез інтерфейси, що надаються ним (наприклад — доступ до вебсерверу, програмніінтерфейси, інтерфейси користувача);

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

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

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

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

1)  зламПЗ засобами АРМ, які надані користувачу;

2)  зламПЗ наявними та додатковими засобами АРМ;

3)  створеннянайбільш зручного програмного (або програмно-апаратного) середовища для зламуПЗ;

4)  внесенняв ПЗ таких властивостей, які сприяють зниженню його рівня захищеності.

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

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

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

Томузавдання захисту ПЗ доцільно розглядати в двох основних аспектах:

—      захистпрограмної складової даної автоматизованої системи;

—      захистокремої програми (прав, що пов'язані з нею) як об'єкту продаж аборозповсюдження.

Врамках другого аспекту до основних цілей порушення безпеки ПЗ можна віднести:

—незаконневикористання ПЗ (всього ПЗ або його частини);

—незаконневикористання ідей, що реалізовані в ПЗ (алгоритмів, програмних інтерфейсів,інтерфейсів взаємодії з користувачем, інших технічних рішень);

—незаконнийпродаж ПЗ;

—незаконневиготовлення копій ПЗ.

Досягненнязазначених вище цілей пов'язане з реалізацією стосовно ПЗ наступних основнихзагроз:

—несанкціонованевиконання програми або частини програмного коду;

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

—несанкціонованекопіювання програм.

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

1) технічні(в тому числі голографічні);

2)  організаційні(наприкладпорядок постачання та використання);

3)  правові(наприклад, шляхом визначення законів, кодексів, інструкцій).

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

1)  захистПЗ засобами ОС;

2)  перевіркаі забезпечення цілісності ПЗ;

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

4)  ідентифікаціякористувача та/або середовища виконання;

5)  захиствід відновлення та/або вивчення вихідного програмного коду та алгоритмівфункціонування ПЗ.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/>

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

 3.1.NET Framework

Microsoft .NET— програмна технологія,запропонована корпорацією Microsoft як платформа для створення як звичайнихпрограм, так і веб-програм. Багато в чому є продовженням ідей та принципів,покладених в технологію Java.

Одною з ідей .NET є сумісність служб,написаних різними мовами.

Кожна бібліотека (збірка) в .NETмістить інформацію про свою версію, що дозволяє усунути можливі конфлікти міжрізними версіями збірок.

.NET — кросплатформена технологія, наданий момент існує реалізація для платформи Microsoft Windows, FreeBSD (відMicrosoft) і варіант технології для ОС Linux в проекті Mono (в рамках угоди міжMicrosoft з Novell).

Захист авторських прав відноситься достворення середовищ виконання (CLR — Common Language Runtime) для програм .NET.Компілятори для .NET випускаються багатьма фірмами для різних мов вільно.

.NET поділяється на дві основнічастини — середовище виконання (по суті віртуальна машина) та інструментарійрозробки.

Середовища розробки .NET-програм:Visual Studio .NET (C++, C#, J#), SharpDevelop, Borland Developer Studio(Delphi, C#) і т. д. Середовище Eclipse має додаток для розробки .NET-програм.Програми також можна розробляти в текстовому редакторі та використовуватиконсольний компілятор.

Також як і технологія Java,середовище розробки .NET створює байт-код, призначений для виконаннявіртуальною машиною. Вхідна мова цієї машини в .NET називається CIL (CommonIntermediate Language), також відома як MSIL (Microsoft Intermediate Language),або просто IL. Застосування байт-кода дозволяє отримати кроссплатформеність нарівні скомпільованого проекту (в термінах .NET: збірка), а не на рівніпочаткового тексту, як, наприклад, в С. Перед запуском збірки в середовищівиконання (CLR) байт-код перетворюється вбудованим в середовищеJIT-компілятором (just in time, компіляція на льоту) в машинні коди цільовогопроцесора.

3.2 Декомпіляція .NETзбірок за допомогою .NET Reflector

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

.NET Reflector — безкоштовна утилітадля Microsoft .NET, комбінуюча браузер класів, статичний аналізатор идекомпілятор.

Програма може використовуватися длянавігації, пошуку та аналізу вмісту. NET-компонентів, а також збірок іпереводити двійкові дані у форму, придатну для читання людиною. Reflectorдозволяє проводити декомпіляцію. NET-збірок на мови C#, Visual Basic.NET іMSIL. Reflector також включає дерево викликів, яке може використовуватися длянавігації вглиб IL-методів з метою визначення, які методи вони викликають.Програма відображає метадані, ресурси і XML-документацію. .NET Reflector можебути використаний .NET-розробниками для розуміння внутрішньої роботи бібліотеккоду, для наочного відображення відмінностей між двома версіями збірок, і того,як різні частини. NET-додатків взаємодіють один з одним.

.NET Reflector може використовуватисядля знаходження місць, які мають проблеми з продуктивністю і пошуку багів. Вінтакож може бути використаний для пошуку залежностей збірки. Програма може бутивикористана для ефективної конвертації коду між C # і VB.NET.


3.2.1Приклад роботи .NET Reflector

Головне вікно .NET Reflector показуєсписок збірок із складу .NET Framework. Про кожну із них можна подивитисяінформацію, а також переглянути списки класів і тонкощі реалізації кожної ізних.

Для демонстрації можливостейдекомпілятора, відкриємо виконуваний файл популярного графічного редакторуPaint.NETі переглянемо код методу PainDotNet.Tools.FloodToolBase, який, судячиз назви відповідає за заливку зображення деяким кольором.

Код програми можна дизасемблювати нетільки в C#, але й в MSIL, VB.NET, Delphi, MC++.

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

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

Розглянемо методи захисту .NET збіркивід дослідження:

·   Обфускаціякоду програми. Цей метод є найбільш простим і поширеним.

·   Компіляціязбірки у машинний (native)код при його встановленні на комп’ютер користувача.Зокрема, це можна виконати з допомогою утиліти ngen, яка поставляється укомплекті із .NETFramework.Але, цей метод може призвести до деякихнепередбачуваних наслідків, наприклад, при встановленні нової версії.NETFramework, програма, встановлена таким чином, може припинити працювати.

·   Використанняоптимізуючих компіляторів.

·   Розробленнякритичних частин програмного коду на ManagedC++, що дещо ускладнить процесдекомпіляції.

·   Розробленнякритичних частин програмного коду на С++, з компіляцією його в машинний(native)код у формі динамічних бібліотек (dll) та їх подальше використання впрограмі на .NETFramework. Для захисту коду отриманої dll можна використовуватиті ж самі методи, що й для звичайних програм.

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


Висновки

В курсовій роботі були розглянутіпроблеми захисту програмного забезпечення, засоби і методи унеможливленнянесанкціонованого дослідження програмного коду. Також була розглянутатехнологія .NETFramework, та проблеми захисту ПЗ створеного на її основі.Технологія .NETFramework дає розробникам багато зручних і корисних засобів, якідозволяють швидко створювати і розповсюджувати (за рахунок незалежності відапаратної платформи і використання MSIL) якісні програмні продукти. Але вонамає суттєвий недолік – програми на її основі дуже легко піддаються дослідженнюза допомогою декомпіляторів, таких як .NETReflector, роботу якого було розглянутов курсовій роботі. Найбільш простим і найменш трудомістким способом захистутаких програм, є використання обфускаторів. Нажаль, на даний час, не існуєбезкоштовних обфускаторів .NET коду, які забезпечують достатньо високий рівеньзахисту. Проте існує досить багато платних обфускаторів, які використовуютьодночасно і символьну обфускацію, і заплутування програмного коду ізаплутування потоку управління. Зокрема всі ці функції маєDotfuscatorProfessionalEdition безкоштовна версія якого постачається разом ізсередою розроблення VisualStudio.

еще рефераты
Еще работы по информатике, программированию