- •Безпека даних
- •Вступ. Основні поняття безпеки. Конфіденційність, цілісність та доступність даних. Класифікація загроз. Сервіси та механізми захисту.
- •Основні поняття і визначення криптографічного захисту даних.
- •Порушення, механізми і служби захисту.
- •Традиційне шифрування. Модель традиційного шифрування. Криптографія і криптоаналіз. Класична техніка шифрування: підстановки і перестановки.
- •Потокові і блокові шифри. Дифузія і конфузія. Шифр Файстеля. Диференційний та лінійний крипто аналіз. Принципи побудови блокових шифрів
- •Стандарт шифрування даних (des). Критерії, що лежать в основі конструкції des. Алгоритми "Подвійний" та "Потрійний" des.
- •Режими роботи блочних шифрів. Проблема та схеми розподілу ключів симетричного шифрування.
- •1. Режим електронної шифрувальної книги
- •2. Режим зчеплення шифрованих блоків
- •3. Режим шифрованого зворотного зв'язку
- •Генерування випадкових чисел. Використання та джерела випадкових чисел. Генератори псевдовипадкових чисел.
- •Криптографія з відкритим ключем. Принципи побудови криптосистем з відкритим ключем.
- •Алгоритм rsa
- •Порівняння основних характеристик симетричних та асиметричних алгориммів
- •Управління ключами і схема Діффі–Хеллмана.
- •1. Публічне оголошення
- •2. Публічно доступний каталог
- •3. Авторитетне джерело відкритих ключів
- •4. Сертифікати відкритих ключів
- •1. Простий розподіл секретних ключів
- •2. Розподіл секретних ключів із забезпеченням конфіденційності і аутентифікації
- •3. Гібридна схема
- •Аутентифікація повідомлень і функції хешування. Вимоги та функції аутентифікації.
- •1.1. Шифрування повідомлення
- •1.1.1. Традиційне шифрування
- •Коди автентичності повідомлень та функції хешування.
- •1. Коди автентичності повідомлень
- •1.1. Необхідні властивості кодів автентичності повідомлень
- •1.2. Коди автентичності повідомлень на основі des
- •2. Функції хешування
- •2.1. Вимоги, що пред'являються до функції хешування
- •2.2. Прості функції хешування
- •2.3. Атаки, в основі яких лежить парадокс задачі про дні народження
- •3. Захист функцій хешування і кодів автентичності повідомлень
- •3.1. Атаки з перебором всіх варіантів
- •3.2. Функції хешування
- •Алгоритми хешування. Алгоритм hmac.
- •1.1. Цілі розробки нмас
- •1.2. Алгоритм нмас
- •1.3. Захищеність нмас
- •Цифрові підписи та протоколи аутентифікації. Вимоги до цифрового підпису. Стандарт цифрового підпису dss.
- •1. Цифрові підписи
- •1.1. Вимоги
- •1.2. Безпосередній цифровий підпис
- •1.3. Арбітражний цифровий підпис
- •Протоколи аутентифікації. Взаємна та одностороння аутентифікація. (прочитати уважно номери малюнків і т.Д.)
- •2. Підходи на основі традиційного шифрування
- •3. Підходи на основі шифрування з відкритим ключем
- •4. Одностороння аутентифікація
- •5. Підхід на основі традиційного шифрування
- •6. Підходи на основі шифрування з відкритим ключем
- •Програмна реалізація криптографічних алгоритмів. Використання криптографічних функцій Microsoft CryptoApi в прикладному пз. Поняття про безпечний цикл розробки пз (sdl).
- •1. Будова і можливості Crypto api
- •2. Криптопровайдери
- •3. Контейнери ключів
- •4. Алгоритми
- •5. Сертифікати
- •6. Базові функції
- •6.1. Шифрування
- •6.2. Експорт сесійних ключів
- •6.3. Імпорт сесійних ключів
- •6.4. Розшифрування
- •6.5. Хешування
- •6.6. Цифровий підпис
- •6.7. Перевірка цифрового підпису
- •Методи і засоби створення захищеного програмного забезпечення.
- •3. Класифікація вразливостей захисту
- •4. Огляд існуючих аналізаторів
- •Відношення Історія експонатів
- •Список літератури
Методи і засоби створення захищеного програмного забезпечення.
Лекція 16. Поняття аудиту безпеки програмного коду
Аудит програмного коду за вимогами безпеки являє собою структурне тестування ПО з метою виявлення вразливостей, реалізація яких може знизити рівень цілісності, доступності та конфіденційності системи. Умовою проведення аудиту безпеки коду є наявність вихідних текстів програм і їх специфікацій.
Важливою особливістю технологій security code reviews є те, що основним завданням аудиту є виявлення не різноманітних вразливостей, а тільки вразливостей коду, які можуть бути використані зловмисником, тобто становити загрозу ІБ системи.
У загальному плані аудит безпеки коду є ітераційним процесом, що включає заходи щодо планування, проведення аналізу, вироблення рекомендацій з доопрацювання програми та документації, а також розвитку методик і засобів виявлення та аналізу вразливостей (див.рис.17.1).
Рис.17.1.
Процесна модель security code reviews
1. Некоректності кодування як основний клас вразливостей
Уразливості програмного коду можуть бути некоректностями кодування або помилок проектування, а також мати зловмисний або ненавмисний характер. Однак, згідно з відкритими публікаціям, основні прийоми security code reviews, використовувані при перевірках коду, орієнтовані на виявлення некорректностей кодування підсистем безпеки. Перелічимо основні класи зазначених вразливостей:
переповнення, читання і запис поза буферу,
вихід обчислень за межі певного діапазону при перетворенні змінних числового типу,
формування від'ємного значення довжини рядків байт або кількості елементів масиву,
некоректне приведення типів,
відсутність ініціалізації даних,
витік, брак, використання звільненої пам'яті,
помилки визначення часу і синхронізації,
помилки блокувань в багато поточних середовищах та ін.
Дані класи вразливостей можуть бути використані при проведенні атак на відмову в обслуговування або виконанні нелегітимного коду.
Очевидно, що виявлення некорректностей кодування повністю не вирішує проблему забезпечення безпеки коду. До важливого класу вразливостей відносять помилки проектування підсистем захисту та навмисні (логічні) програмні закладки. Найбільш відомими з них є: наявність недекларованих налагоджувальних і деструктивних функцій, невірні реалізації протоколів або алгоритмів шифрування, використання власних механізмів псевдобезпеки, наявність вбудованих мастерпаролів та впровадження «логічних бомб».
2. Методи аудиту безпеки коду
Перегляд (інспекція) коду вручну;
Статичний аналіз коду за шаблоном;
Динамічний аналіз виконання коду.
Перший підхід вважається найбільш ефективним з точки зору повноти і точності перевірок. Зрозуміло, що тільки експерт здатний виявити складні уразливості і -замасковані програмні закладки, а також дати рекомендації щодо виправлення вразливостей або обмеження можливості їх реалізації.
До недоліків методу відносять високу трудомісткість і вимоги до кваліфікації та досвіду експертів. Для виключення суб'єктивізму в роботі експертів, можуть бути залучені незалежні групи тестування, що є ще більш витратним.
Статичний аналіз коду за шаблоном полягає у використанні засобів автоматизації пошуку та аналізу потенційно небезпечних конструкцій коду (сигнатур) у вихідному коді програм. Даний метод ефективний при пошуку нескладних вразливостей і немаскованих закладок, таких як переповнення буферу, парольні константи або «логічні бомби». До автоматизованих засобів проведення статичного методу за шаблоном відносять сканери вразливостей коду PREfix, PREfast, АК-нд, UCA, FlawFinder, ITS4, RATS, FxCop.
Сучасні сканери коду дозволяють в тій чи іншій мірі автоматизувати:
пошук вразливостей переповнення буферу;
пошук OS-ін'єкцій (виконання довільних команд);
пошук SQL-ін'єкцій;
пошук XSS-запрсов (міжсайтовий скриптинг);
пошук помилок вхідних і вихідних значень;
проводити структурний розбір підпрограм, що реалізують функції захисту.
Дослідження авторів показало, що виявлення вразливостей з використанням засобів автоматизації дозволяє скоротити час перевірок у десять-двадцять разів. Приклад результатів аудиту коду за допомогою сканера вразливостей коду АК-Нд представлений на рис.17.2.
До недоліків методу відносять те, що результати строго обмежені набором попередньо визначених шаблонів відомих класів вразливостей. Крім того, може бути отримано величезне число помилкових спрацьовувань, що знижує продуктивність праці. Перспективним напрямом розвитку сканерів вразливостей коду є впровадження елементів евристичного аналізу потенційно небезпечних операцій.
Динамічний аналіз полягає в моніторингу дій програми при виконанні різних функцій, пов'язаних з безпекою: інсталяції, зміні прав, пересиланні паролів, очищення пам'яті та ін. Найбільш відомі наступні процедури динамічного аналізу:
моніторинг роботи програми та аналіз траси;
ручний перегляд в налагоджувальному режимі роботи підсистем безпеки.
Моніторинг роботи програми та аналіз траси може бути виконаний шляхом включення контрольних точок (наприклад, що реалізують функції друку) у вихідний текст програми і подальшої її перекомпіляції. Крім того, можна використовувати різні програми-монітори системних викликів. Наприклад, таким чином може перевірятися наявність системного виклику міжмережевої фільтрації при різних варіантах міжмережевого обміну. Перекомпіляція програми з включеними контрольними точками має ряд переваг. По-перше, це дозволяє оцінити ступінь повноти тестування (за статистикою викликів підпрограм). По-друге, саме компіляційне середовище може надати інструментальні засоби і провести первинний розбір коду.
Часто як методики перевірки ПО застосовується рандомізоване тестування по методу «сірого ящика» (fuzzing, «фаззінг»). Метод полягає в генерації випадкових вхідних даних із заданого діапазону, визначеного на етапі структурного аналізу безпеки продукту. Фаззінг легко автоматизується і може виконуватися безперервно. Однак основна проблема фаззінга полягає в обмеженості його використання для перевірки критичних (з точки зору безпеки) маршрутів. Тому фаззінг популярний, головним чином, при тестуванні якості та надійності ПЗ.
Відладчики зручні при вивченні найбільш критичних підсистем безпеки програми, наприклад для перевірки в динаміці можливості обходу парольної або криптографічної підсистеми.
На практиці, динамічні методи часто ігноруються експертами з причини тривалості процесу тестування за відсутності гарантій виявлення порушень безпеки.
Статичний аналіз коду - це аналіз програмного забезпечення, який робиться над вихідним кодом програм і реалізується без реального виконання досліджуваної програми.
Програмне забезпечення часто містить різноманітні уразливості через помилки в коді програм. Помилки, допущені при розробці програм, в деяких ситуаціях призводять до збою програми, а отже, порушується нормальна робота програми: при цьому часто виникає зміна і псування даних, зупинка програми або навіть системи. Більшість вразливостей пов'язано з неправильною обробкою даних, одержуваних ззовні, або недостатньо суворою їх перевіркою.
Для виявлення вразливостей використовують різні інструментальні засоби, наприклад, статичні аналізатори вихідного коду програми, огляд яких наведено в даній статті.
