ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.11.2019
Просмотров: 1418
Скачиваний: 1
СОДЕРЖАНИЕ
Лекція 1. Вступ. Категорії інформаційної безпеки. Захист програм.
Абстрактні моделі захисту інформації
Основні положення по розробці ПО
Помилки, що призводять до можливості атак на інформацію
Короткий огляд технології RAID
Переваги і недоліки основних рівнів RAID
1.3 Симетричні криптоалгоритмы
Загальні відомості про блокові шифри
Основи побудови захисту - крок за кроком
Крок 1. Відключення автоматичного запуску CD
Крок 2. Автоматичне оновлення системи
Крок 3. Відключення непотрібних сервісів
Крок 6. Теорія складання паролів
Формування кодів може вестися по наступних основних напрямах:
-
Жорстко фіксовані коди, прошиті в програму. Їх зазвичай небагато і їх розголос зводить захист до нуля.
-
Деякий алгоритм перевірки коду. Трохи краще першого, але лише небагато. Візьміть за приклад код Windows - його знає будь-який користувач
-
Алгоритм перевірки коду, що використовує ім'я користувача. Очевидно, що для кожного імені буде унікальний номер (чи номери - їх може бути декілька, залежно від алгоритму). Це вже краще, але нелегальне поширення тримається на егоїзмі зареєстрованих користувачів - ніщо не заважає їм зрадити ім'я/пароль розголосу, але тоді хоч би можна вичислити винуватця і заблокувати його код
-
Алгоритм перевірки коду, що використовує ім'я користувача і деякі унікальні або динамічно такі, що змінюються параметри, наприклад інформацію про комп'ютер. Це надійно, дає прив'язку до комп'ютера, але в наше століття постійних апгрейдов дуже незручний.
-
On - Line реєстрація. Полягає в тому, що програма в On - Line зв'язується з сайтом розробників (чи компанії, що здійснює продужу софтвера) і передає туди ревизиты користувача. У відповідь програмі передається реєстраційна інформація. Цей метод може і хороший для ряду програм, але на мій погляд не витримує ніякої критики з двох міркувань: 1. Ніхто не може гарантувати, що конкретно передасть програма в Инет. А передати вона може усе, що завгодно - параметри комп'ютера, паролі, будь-які дані і тому подібне2. Конкретний користувач може не мати доступу до Инет. Це особливо важливо для програм, робота яких не пов'язана безпосередньо з Мережею. І зареєструвати таку програму його практично ніхто до себе на комп'ютер не пустить (з міркувань п.п. 1)
Рекомендувати тут що-небудь даремне, але я наприклад використовую різновиди методу 3.
Що і як закривати
Якщо ви вирішили поширювати свій продукт як shareware, то напевно вже продумали відмінності між незареєстрованою і зареєстрованою версією. Якщо ще немає, то можу підказати: в принципі, можна використовувати три підходи - демо-версия, time limited -версия і обмежена версія (взагалі-то, можна ще робити упор на совість і просто просити прислати вам гроші, якщо програма сподобалася, але це, на жаль, працює далеко не завжди: по моєму досвіду, у користувача має бути стимул, спонукаючий до реєстрації, причому реальний, а не просто умови ліцензійної угоди).
З демо-версиями усе просто. Двома словами, принцип такий: ви сильно урізаєте можливості програми, просто "викидаючи" частини коду з початкового тексту, перекомпілюєте і викладаєте результат як демо-версию. (Тим же, хто виявляє бажання заохотити вас матеріально, ви просто посилаєте повну версію програми, або повідомляєте, де її можна узяти, - вказавши, наприклад, "приховане" посилання на вашій сторінці.) Обмовлюся відразу, що цей спосіб - гірший з усіх. По-перше, по демо-версии користувач не завжди може зрозуміти, наскільки програма йому підходить. По-друге, один з тих, що сплатили може підкласти вам свиню і розповісти іншим, де можна поживитися повною версією "на халяву" (чи просто почати роздавати її усім своїм знайомим), - все одно у вас немає способу дізнатися, хто ж зробив "добру" справу. А якщо ви посилатимете повну версію звичайною (чи навіть електронною) поштою, то у вас різко збільшаться накладні витрати.
Другий спосіб прийнятніший, але важче реалізовується (чому - поясню пізніше). Принцип полягає в тому, що ви надаєте користувачеві право тестувати ваше творіння "за повною програмою", але тільки протягом деякого обмеженого терміну: скажімо, тридцяти днів з моменту установки на комп'ютер або з моменту першого запуску. Чи як варіант: обмеження на число запусків. Після закінчення відведеного терміну (чи після заданого числа запусків) програма просто перестає працювати або переходить в демо-режим.
Третій, найпоширеніший спосіб: деякі функції у вашій програмі залишаються "закритими", поки вона не буде сплачена. Можна, наприклад, обмежити розмір файлів, з якими додаток може працювати (встановивши деяку "верхню планку"), або не давати зберігати результати роботи, або відключити деякі "просунуті" можливості - тут вже кому як подобається. Після оплати ви посилаєте користувачеві деякий пароль (ключ, реєстраційний номер і тому подібне), який, будучи введеним, розблоковує раніше недоступні функції.
Так, до речі, не перешкодить ще і така річ, як reminder (чи "nag screen", як завгодно). Це зовсім просто: при запуску програма визначає, зареєстрована вона або ні; у останньому випадку користувачеві ненав'язливо нагадують, що не погано б і честь знати, тобто заплатити.
Як це зробити
Можна, звичайно, скористатися послугами третіх фірм - просто купити програмний пакет, що забезпечує перехід від незареєстрованої версії до зареєстрованої після оплати і введення деякого пароля (см, наприклад, www.timelock.com/product/ або www.dataet.com/products/isr 2/). Проблема в тому, що якщо цю систему купило хоч би декілька розробників і захищені у такий спосіб продукти вже є, то можете бути упевнені, що в цьому захисті вже хто-небудь "длубався" і використовувані в ній трюки давно усім відомі. Отже доведеться вам потрудитися самому.
Демо-версії я розглядати тут не буду - і так усе ясно (см вищий). Можна, звичайно, поширювати і їх, але тільки як доповнення до "оцінної" версії, - наприклад, роздавати на виставках, домовитися про включення на різні CD - ROM і тому подібне - виключно в цілях реклами.
З обмеженням за часом трохи складніше. При інсталяції (чи при першому запуску) програма повинна десь запам'ятати поточну дату (чи проинициализировать лічильник запусків), а при наступних запусках - звіряти дати (чи не кінчився "випробувальний термін") або збільшувати лічильник і перевіряти його значення. Якщо ви дійсно знаєте це місце (куди писати дату/лічильник) - візьміть з полиці пиріжок (детальніше про ваші супертайники - див. нижче).
Частково працездатна версія - на мою думку, найбільш правильний вибір. Напевно у вашій програмі є можливості, які можна назвати "професійними" (для просунутих користувачів). Чи просто приємні дрібниці, які можна описати коротким і звучним словом "cool", тобто ті, жити без яких можна, але незручно. До речі, це ще і дуже хороший стимул до купівлі: хочеш зробити свою роботу приємнішою і легшою - купуй!
Тепер про те, що повинно відбуватися після оплати. Тут знову ж таки є дві дороги: "статичні" паролі і генератор ключів.
У першому випадку програма "розблоковується" при введенні пароля, відповідного деяким критеріям. При цьому сам пароль не є індивідуальним. Я думаю, що вже ні для кого не є секретом, як це зробила компанія Microsoft зі своїми CD - keys: сума цифр повинна ділитися на 7. Простіше нікуди. Природно, ви можете придумати що-небудь поскладніше, наприклад, робити деякі обчислення, які повинні призводити до певного результату. Як варіант - можна зберігати усі правильні ключі усередині самої програми.
Оскільки кожному користувачеві ви посилатимете свій пароль (хоча і не пов'язаний з його даними), то у разі, якщо один з них буде опублікований для "широкого використання", вам неважко буде вичислити кривдника.
Що стосується генератора ключів, то це елегантніший спосіб: знаючи ім'я користувача, ви можете шляхом яких-небудь перетворень згенерувати з нього деякий ключ. Тут вже включайте свою фантазію: краще всього, якщо перетворення буде одностороннім і досить заплутаним.
Не можна не згадати і ще про один спосіб захисту - за допомогою апаратних ключів, що підключаються до паралельного порту комп'ютера (типу HASP). Звичайно, для програми вартістю п'ять доларів це не дуже підходить (занадто дорого; не усі люблять; з деякими пристроями не досягається повна сумісність і т. д.), але проте. Можете спробувати.
Маленький сюрприз
Якщо ваша програма дійсно хороша, то через два-три дня після її випуску вас чекає сюрприз: в Інтернеті з'явиться "халявный" реєстраційний код, або crack, або patch, або зламана версія. До речі, якщо вам не знайомі ці терміни, то от як їх можна визначити (узято з news: alt.cracks) : "Crack: Any method used to defeat protection applied to a software program to allow its full unencumbered use without paying the author for it. Patch: An executable software program that, when aimed at another software program, modifies the target program for some specific purpose". Загалом, ідея ясна: вашою програмою тепер можуть користуватися усі охочі, причому платити для цього зовсім не обов'язково.
Звичайно, ви можете про це і не дізнатися, якщо звикли економити на доступі до Інтернету і/або якщо не знаєте, де шукати, але я вас запевняю - якщо програма цікава не лише вам і вашим друзям, то її обов'язково зламають. Сто відсотків.
Повинен вас засмутити (чи обрадувати?) : 99% відсотків защит, вживаних в shareware -программах, ламаються за 10-15 хвилин. Для цього навіть не потрібно бути хакером. Усе, що вимагається, - це декілька програм: потужний відладчик типу SoftICE, дизасемблер типу IDA плюс пара утиліт типу FileMon, RegMon, VxdMon. Іноді навіть цього багато. Ну і ще, звичайно, хоч би базове знання асемблера.
Я тут не поглиблюватимуся в деталі "злому" - в Інтернеті існує безліч прекрасно написаних посібників як для "початківців", так і для "просунутих" хакерів. Зупинюся лише на найзагальніших принципах (повинен відразу обмовитися, що сам я зломом ніколи не займався і займатися не збираюся - окрім як для розваги; якщо програма мені подобається, я реєструю її легальним способом). Дуже сподіваюся, що борці з піратством не розцінять це як "курс молодого бійця" для охочих спробувати свої сили.
Отже. Зазвичай реєстрація виглядає таким чином: користувач натискає на кнопку "Зареєструвати"! (чи звертається до відповідного пункту меню)і перед ним з'являється віконце з пропозицією ввести реєстраційний ключ. При закритті цього віконця (після введення ключа) відбувається верифікація. Верифікація може бути жахлива складною і заплутаною, але врешті-решт вона приходить до закономірного результату, а саме операції порівняння (введеного ключа з правильним або вичисленого значення з деяким зразком) або запису в стек (чи регістр) результату верифікації.
Усе до геніальності просто: усі операції роботи з рядками (якщо ви пишете мовою високого рівня) використовують виклики відповідних функцій (API) ядра Windows (kernel) або звернення до Run - Time Library. І ті і інші легко відстежуються відладчиком, а частенько і розпізнаються дизасемблером. Якщо ж ви використовували генератор ключів, то рано чи пізно в пам'яті з'явиться "правильний" рядок - тобто та, яка має бути, якщо користувач чесно сплатив нелегку працю програміста. Тому найчастіше хакер має можливість зареєструвати програму "На себе" і роздати пароль таким, що усім бажає (так, наприклад, було зроблено з прекрасним антивірусом AVP від дуже шанованого мною Євгенія Касперского).
Хто такий (точніше, такі) PhrozenCrew, ви, напевно, знаєте, а якщо (поки) не знаєте, то двома словами: це найбільша (хоча і не найстаріша) "крэкерская" група, що займається зломом shareware -программ (на їх рахунку більше трьох тисяч "постраждалих" авторів); налічує близько сорока активних членів, включаючи засновника (The Keyboard Caper, родом з Південної Африки), президента і віце-президента (Archimede і TeRaPhY, відповідно), власне "крэкеров", кур'єрів, тестувальників і ін. Втім, це вже тема для окремої статті.
У разі, якщо підібрати пароль неможливо ("шароварщики" все-таки теж не ликом шиті і зазвичай мають поняття про асемблер), використовується інший підхід: повертане перевірочною функцією значення просто замінюється на протилежне (і усього делов-то - замінити безумовний перехід на умовний або навпаки). А далі пишеться малюсінька програма, яка робить те ж саме, але вже не в пам'яті, а безпосередньо в EXE -файле вашої улюбленої програми.
Якщо ваша програма - time - limited, то тут все ще простіше (ну прямо як в старому анекдоті про невдачливого єврея - або акула попадеться глуха, або свисток для відлякування будезламаний :). Річ у тому, що час першого запуску потрібно десь зберігати (при цьому залишаючи незмінним при переинсталляциях). Зберігати можна тільки в двох місцях: в Registry або у файлі на диску (варіанти типу невживаних доріжок я з обуренням відмітаю - хлопці, це ж вам не DOS, самі ж намучитеся, а то і кінцевому користувачеві диск споганите). За допомогою згаданих вище програм (деякі з яких абсолютно безкоштовні) будь-який охочий з легкістю може побачити, які саме ключі Registry ви пишете або читаєте і до яких файлів звертаєтеся. Далі, знайти відповідні виклики в самій програмі - справа техніки, на те відладчики/дизасемблери і існують. Усі відомі мені shareware -программы із захистом цього класу (наприклад, Bounds Checker Professional) вже давно розкриті.
Навіть при використанні апаратних ключів успіх не гарантований. Ідея сама по собі непогана, але усі перевірки відбуваються все-таки в самій програмі (чи в бібліотеках, що поставляються з цими ключами), а значить, від прикрощів ви не застраховані - вищезгадані способи злому можуть бути з успіхом застосовані і тут.
""Джентльменський набір" хакера
На першому місці коштує, природно, дизасемблер. Він значно простіше в зверненні, ніж відладчик, і часто його буває більш ніж достатньо, щоб "розколоти" програму середнього рівня захисту.
З усіх відомих мені дизасемблерів найпотужнішим є IDA (Interactive DisAssembler), см www.datarescue.com/ida.htm; він далеко не безкоштовний (149 доларів), але, повірте, вкладені в нього гроші окупляться з лишком. До речі, ця програма написана нашими співвітчизниками. Однією з її відмінних рис є "многоплатформность" - він "розуміє" безліч форматів файлів, включаючи DOS COM/EXE, NE (New Executable), LE (Linear Executable, PE (Portable Executable), COFF (Common Object File Format), NLM (NetWare Loadable Modules), LIB, AR і навіть Java -классы. Спектр підтримуваних процесорів теж дуже широкий: Intel (від 8080 - пам'ятаєте такий? - до Pentium Pro і Pentium MMX, і навіть i860), а також Motorola 68xxx, ARM, TMS і багато інших. Причому користувачі можуть розширювати цей список, додаючи підтримку інших процесорів самостійно.
Є у IDA і багато інших чудових можливостей, частина з яких дійсно унікальні. Наприклад, FLIRT (Fast Library Identification and Recognition Technology); за допомогою цієї технології дизасемблер здатний розпізнавати виклики бібліотечних функцій (наприклад, для мови C - printf, strcmp і т. д.), включаючи ті, які ви написали самі. Мало того, IDA ще і уміє ідентифікувати звернення до масивів і структур, роблячи асемблерний текст значно більш читаним. Не можу не згадати і про "autocommenting" - результуючий текст виходить добре закоментованим! І остання маленька, але важлива деталь: в IDA ви можете "підправити" текст програми (замінюючи початкові інструкції асемблера на свої власні) і зберегти результуючий EXE -файл, так що навіть patch робити не доведеться.
Якщо все ж IDA вас чим-небудь не влаштовує, сходите за адресою www.csee.uq.edu.au/csm/decompilation/disasm.html, - там зібрана ціла колекція посилань на різні дизасемблери. Рекомендую також відвідати www.eccentrica.org/Mammon/disasm.html, де окрім дизасемблерів є ще і посилання на утиліти для редагування бінарних файлів - теж згодяться.
Далі - хороший відладчик. Забудьте про Borland Turbo Debugger і Microsoft WinDbg! Ці програми хороші тільки для "лову бліх", тобто помилок. Кращий вибір - SoftICE від NuMega (www.numega.com/products/sys/sys.htm). З його допомогою ви можете робити буквально усе! Власне, головне його призначення - це все-таки пошук помилок, але і як хакреський інструмент він просто незамінний.
Не обійтися і без вже згаданих утиліт FileMon, RegMon і (можливо) VxDMon, написаних Марком Руссиновичем, відомим експертом в області низькорівневого програмування для Windows (саме він розповів всьому світу про те, що різниця між Windows NT Workstation і Windows NT Server - це усього лише декілька додаткових програм і значення одного ключа в Registry). FileMon показує детальну інформацію про усі звернення до файлової системи; є можливість встановлювати різні фільтри і навіть відстежувати роботу з swap -файлом.