- •Конспект лекцій
- •Безпека програм та даних
- •Лекція 1. Вступ. Категорії інформаційної безпеки. Захист програм.
- •Абстрактні моделі захисту інформації
- •Основні положення по розробці по
- •Помилки, що призводять до можливості атак на інформацію
- •Методи дублювання
- •Короткий огляд технології raid
- •Що таке raid?
- •Переваги і недоліки основних рівнів raid
- •Складені raid масиви
- •Основи криптографічного захисту інформації
- •1.1 Криптографія. Класифікація криптоалгоритмів
- •1.3 Симетричні криптоалгоритмы
- •1.3.1 Скремблери
- •1.3.2 Блокові шифри
- •Загальні відомості про блокові шифри
- •Мережа Фейштеля
- •Захист програм від злому
- •Інструментарій хакера
- •Основи побудови захисту - крок за кроком
- •VxDMon, відповідно, здійснює моніторинг викликів різних сервісів VxD, що в деяких випадках теж може виявитися корисним.
- •Крок 1. Відключення автоматичного запуску cd
- •Крок 2. Автоматичне оновлення системи
- •Крок 3. Відключення непотрібних сервісів
- •Крок 4. Установка фаервола
- •Крок 5. Паролі і усе про них
- •Крок 6. Теорія складання паролів
- •Крок 7. Акаунт "Адміністратор"
- •Крок 8. Небезпечна заставка
- •Крок 9. Реєстр, друг наш!
- •Крок 10. Провідник
Абстрактні моделі захисту інформації
Однією з перших моделей була опублікована в 1977 модель Биба (Biba). Згідно з нею усі суб'єкти і об'єкти заздалегідь розділяються по декількох рівнях доступу, а потім на їх взаємодії накладаються наступні обмеження: 1) суб'єкт не може викликати на виконання суб'єкти з нижчим рівнем доступу; 2) суб'єкт не може модифікувати об'єкти з вищим рівнем доступу. Як бачимо, ця модель дуже нагадує обмеження, введені в захищеному режимі мікропроцесорів Intel 80386+ відносно рівнів привілеїв.
Модель Гогена-Мезигера (Goguen - Meseguer), представлена ними в 1982 році, заснована на теорії автоматів. Згідно з нею система може при кожній дії переходити з одного дозволеного стану тільки в декілька інших. Суб'єкти і об'єкти в цій моделі захисту розбиваються на групи - домени, і перехід системи з одного стану в інше виконується тільки відповідно до так званої таблиці дозволів, в якій вказано які операції може виконувати суб'єкт, скажімо, з домена C над об'єктом з домена D. У цій моделі під час переходу системи з одного дозволеного стану в інше використовуються транзакції, що забезпечує загальну цілісність системи.
Сазерлендская (від англ. Sutherland) модель захисту, опублікована в 1986 році, робить акцент на взаємодії суб'єктів і потоків інформації. Так само як і в попередній моделі, тут використовується машина станів з множиною дозволених комбінацій станів і деяким набором початкових позицій. У цій моделі досліджується поведінка множинних композицій функцій переходу з одного стану в інше.
Важливу роль в теорії захисту інформації грає модель захисту Кларка-Вильсона (Clark - Wilson), опублікована в 1987 році і модифікована в 1989. Заснована ця модель на повсюдному використанні транзакцій і ретельному оформленні прав доступу суб'єктів до об'єктів. Але в цій моделі уперше досліджена захищеність третьої сторони в цій проблемі - сторони, підтримувальної усю систему безпеки. Цю роль в інформаційних системах зазвичай грає програма-супервізор. Крім того, в моделі Кларка-Вильсона транзакції уперше були побудовані по методу верифікації, тобто ідентифікація суб'єкта вироблялася не лише перед виконанням команди від нього, але і повторно після виконання. Це дозволило зняти проблему підміни автора в момент між його ідентифікацією і власне командою. Модель Кларка-Вильсона вважається однією з найдосконаліших відносно підтримки цілісності інформаційних систем.
Основні положення по розробці по
Загальні рекомендації по написанню стійко працюючих алгоритмів (необхідне, але не достатня умова їх інформаційної безпеки) :
не використовуйте екзотичні і недокументовані можливості мови програмування : Ви не упевнені в тому, як вони реалізуються насправді
оформляйте початковий текст ясно і чітко, використовуйте необхідні коментарі
використовуйте дужки для явної вказівки порядку операцій : компілятор може оптимізувати виконання виразів і почати, скажімо, складання F(1)+F(2)+F(3) з другого знаку "+", тим самим викликавши спочатку функцію F від 2, потім від 3, а тільки потім від 1 - якщо у функції змінюються які-небудь глобальні змінні це може привести до непредсказумым наслідків
при усій слушній нагоді використовуйте передачу параметрів функції як аргументи, а не в глобальних змінних
використовуйте структурне програмування: розбивайте складні блоки коду на процедури з ясною структурою і легко контрольованим набором параметрів
ніколи не програмуйте недокументовані возможнности: технологія "reverse engineering" - дизасемблювання і зворотна компіляція" - на сьогодні досягла величезних результатів, особливо відносно високорівневих мов програмування
закривайте файли відразу ж після закінчення роботи з ними, а якщо Ви записуєте важливу інформацію протягом довгого часу - періодично викликайте функції скидання файлового буфера на дисковий накопичувач
перевіряйте вільне місце на диску перед записом у файл: деякі операційні видають помилки при записі на переповнений диск нестандартним чином, результат цього може бути плачевним
блокуйте файли і набори даних, якщо Ви звертаєтеся до них по запису з декількох паралельно працюючих процесів або програм
прагніть як можна сильніше скоротити час запису в спільно використовувані файли, а, отже, і час їх блокування
не будьте заздалегідь упевненими, що програма запущена з тієї директорії, де розташований її здійснимий файл, - одній з перших команд після запуску програми явно зміните каталог на бажаний
при роботі із зовнішніми і мережевими пристроями і дисками будуйте цикли очікування так, щоб з них був можливий вихід після закінчення певного періоду очікування відповіді - тайм-ауту
дуже ретельно розробляйте схему синхронізації паралелльно процесів, що працюють з одними і тими ж даними
ретельно перевіряйте алгоритми на синдром "мертвої петлі" - це ситуація, коли процес A, почавши змінювати об'єкт 1 і заблокувавши його у зв'язку з цим, чекає зняття блокування з об'єкту 2, тоді як процес B, в той же самий час що почав змінювати об'єкт 2 і заблокувавши його, чекає зняття блокування з об'єкту 1 - подібна проблема при такій схемі синхронізації теоретично нерозв'язна, єдиний вихід з неї - розглядати об'єкти 1 і 2 як єдине ціле з можливістю тільки спільного блокування
акуратно виділяйте і очищайте об'єкти в динамічній пам'яті
при необхідності використовуйте криптографію
ніколи не передавайте пароль відкритим текстом
використовуйте криптостойкие алгоритми шифрування і хешування
вичищайте блоки оперативної пам'яті після того, як інформація (паролі, ключі, конфіденційні дані), що знаходилася в них, стала непотрібною
завжди перевіряйте довжини рядків і масивів перед початком роботи з ними
встрайвайте у Ваші системи вимога реєстрації кожного оператора з унікальним паролем і записом як можна більшої кількості інформації про сеанс в балку-файл, недоступний для зміни операторам
ретельно тестуйте Ваші застосування, у тому числі на великих і неправильних вхідних даних