Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik_1_0.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.93 Mб
Скачать
  1. Методи і засоби створення захищеного програмного забезпечення.

Лекція 16. Поняття аудиту безпеки програмного коду

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

Важливою особливістю технологій security code reviews є те, що основним завданням аудиту є виявлення не різноманітних вразливостей, а тільки вразливостей коду, які можуть бути використані зловмисником, тобто становити загрозу ІБ системи.

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

Рис.17.1. Процесна модель security code reviews

1. Некоректності кодування як основний клас вразливостей

Уразливості програмного коду можуть бути некоректностями кодування або помилок проектування, а також мати зловмисний або ненавмисний характер. Однак, згідно з відкритими публікаціям, основні прийоми security code reviews, використовувані при перевірках коду, орієнтовані на виявлення некорректностей кодування підсистем безпеки. Перелічимо основні класи зазначених вразливостей:

  • переповнення, читання і запис поза буферу,

  • вихід обчислень за межі певного діапазону при перетворенні змінних числового типу,

  • формування від'ємного значення довжини рядків байт або кількості елементів масиву,

  • некоректне приведення типів,

  • відсутність ініціалізації даних,

  • витік, брак, використання звільненої пам'яті,

  • помилки визначення часу і синхронізації,

  • помилки блокувань в багато поточних середовищах та ін.

Дані класи вразливостей можуть бути використані при проведенні атак на відмову в обслуговування або виконанні нелегітимного коду.

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

2. Методи аудиту безпеки коду

  1. Перегляд (інспекція) коду вручну;

  2. Статичний аналіз коду за шаблоном;

  3. Динамічний аналіз виконання коду.

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

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

Статичний аналіз коду за шаблоном полягає у використанні засобів автоматизації пошуку та аналізу потенційно небезпечних конструкцій коду (сигнатур) у вихідному коді програм. Даний метод ефективний при пошуку нескладних вразливостей і немаскованих закладок, таких як переповнення буферу, парольні константи або «логічні бомби». До автоматизованих засобів проведення статичного методу за шаблоном відносять сканери вразливостей коду PREfix, PREfast, АК-нд, UCA, FlawFinder, ITS4, RATS, FxCop.

Сучасні сканери коду дозволяють в тій чи іншій мірі автоматизувати:

  • пошук вразливостей переповнення буферу;

  • пошук OS-ін'єкцій (виконання довільних команд);

  • пошук SQL-ін'єкцій;

  • пошук XSS-запрсов (міжсайтовий скриптинг);

  • пошук помилок вхідних і вихідних значень;

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

Дослідження авторів показало, що виявлення вразливостей з використанням засобів автоматизації дозволяє скоротити час перевірок у десять-двадцять разів. Приклад результатів аудиту коду за допомогою сканера вразливостей коду АК-Нд представлений на рис.17.2.

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

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

  • моніторинг роботи програми та аналіз траси;

  • ручний перегляд в налагоджувальному режимі роботи підсистем безпеки.

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]