Методичні вказівки до виконання лабораторних робіт Київ 2014 Зміст Лабораторна робота 1 Розробка програми розмежування повноважень користувачів на основі парольної автентифікації 3
Скачать 1.3 Mb.
|
Лабораторна робота 5 Автоматизований пошук вразливостей у вихідних текстах програмного забезпечення, що написані на мові високого рівня.Мета роботи пошук потенційних вразливістей і помилок програмування в вихідних текстах на мові програмування C / C++ з використанням автоматизованого засобу виявлення поширених помилок програмування RATS дослідження виявленої проблеми: визначення типу та категорії помилки, локалізація, розроблення пропозицій щодо усунення. Ранжування виявлених проблемних місць за ступенем серйозності; Вміст завдання
Теоретичні відомості Статичний аналіз коду - це аналіз програмного забезпечення , який виконується над вихідним кодом програм і реалізується без реального виконання досліджуваної програми . Програмне забезпечення часто містить різноманітні уразливості через помилки в коді програм. Помилки , допущені при розробці програм , в деяких ситуаціях призводять до збою програми , а отже , порушується нормальна робота програми : при цьому часто виникає зміна і псування даних , зупинка програми або навіть системи . Більшість вразливостей пов'язано з неправильною обробкою даних , одержуваних ззовні , або недостатньо суворої їх перевіркою. Для виявлення вразливостей використовують різні інструментальні засоби , наприклад, статичні аналізатори вихідного коду. B загальному випадку при статичному аналізі вирішуються такі завдання:
Сучасні засоби статичного аналізу безпеки програмного забезпечення в основному досліджують уразливості у вихідних текстах програм. B даний час існують наступні вільно поширювані засоби пошуку вразливостей: ITS4 , RATS , FLA WFINDER , LCLINT . Всі ці засоби мають схожою функціональністю , виявляючи уразливості в програмному забезпеченні , написаному на мовах C , C + + та інших , на основі бази даних відомих помилки програмування , що призводять до вразливостей. Класифікація вразливостей захисту Коли вимога коректної роботи програми на всіх можливих вхідних даних порушується , стає можливим поява так званих вразливостей захисту (security vulnerability). Уразливості захисту можуть приводити до того , що одна програма може використовуватися для подолання обмежень захисту всієї системи в цілому. Класифікація вразливостей захисту в залежності від програмних помилок : 1. Переповнення буфера ( buffer overflow ) . Ця вразливість виникає через відсутність контролю за виходом за межі масиву в пам'яті під час виконання програми . Коли занадто великий пакет даних переповнює буфер обмеженого розміру, вміст сторонніх елементів пам'яті перезаписується , і відбувається збій і аварійний вихід з програми. За місцем розташування буфера в пам'яті процесу розрізняють переповнення буфера в стеку ( stack buffer overflow ), купі ( heap buffer overflow ) і області статичних даних ( bss buffer overflow ) . 2. Уразливості " зіпсованого введення " ( tainted input vulnerability ) . Уразливості " зіпсованого введення " можуть виникати у випадках , коли вводяться користувачем дані без достатнього контролю передаються інтерпретатору деякого зовнішнього мови (зазвичай це мова Unix shell або SQL) . У цьому випадку користувач може таким чином задати вхідні дані , що запущений інтерпретатор виконає зовсім не ту команду , яка передбачалася авторами вразливою програми. 3. Помилки форматних рядків ( format string vulnerability ) . Даний тип вразливостей захисту є підкласом уразливості " зіпсованого введення " . Він виникає через недостатній контроль параметрів при використанні функцій форматного введення-виведення printf , fprintf , scanf , і т. д. стандартної бібліотеки мови Сі . Ці функції приймають в якості одного з параметрів символьний рядок , заданий формат введення або виведення подальших аргументів функції . Якщо користувач сам може задати вид форматування , то вразливість може виникнути в результаті невдалого застосування функцій форматування рядків. 4. Уразливості як наслідок помилок синхронізації ( race conditions ) . Проблеми, пов'язані з багатозадачністю , призводять до ситуацій , званим "стан гонки ": програма, не розрахована на виконання в багатозадачному середовищі , може вважати , що , наприклад , використовувані нею при роботі файли не може змінити інша програма . Як наслідок , зловмисник , вчасно підмінюючий вміст цих робочих файлів, може нав'язати програмі виконання певних дій . Звичайно , крім перерахованих існують і інші класи уразливостей захисту . Помилка помилку - різниця. Статичні аналізатори вказують на ті місця в програмі , в яких можливе знаходиться помилка . Ці підозрілі фрагменти коду можуть , як утримувати помилку , так і виявитися абсолютно безпечними. Частина тих огріх , які допускають програмісти , некритична і загрожує тільки нестабільністю програми . Інші, навпаки , дозволяють впроваджувати шелл -код і виконувати довільні команди на віддаленому сервері. Особливий ризик в коді представляють команди , що дозволяють виконати buffer overflow та інші схожі типи атак. Таких команд дуже багато , у випадку з C / C + + це функції для роботи з рядками ( xstrcpy ( ) , strcat ( ) , gets ( ) , sprintf ( ) , printf ( ) , snprintf ( ) , syslog ( )) , системні команди ( access ( ) , chown ( ) , chgrp ( ) , chmod ( ) , tmpfile ( ) , tmpnam ( ) , tempnam ( ) , mktemp ( )) , а також команди системних викликів ( exec ( ) , system ( ) , popen ( ) ) . Вручну досліджувати весь код (особливо , якщо він складається з декількох тисяч рядків) досить утомливо . А значить, можна без праці прогледіти передачу якої-небудь функції неперевірених параметрів . Значно полегшити завдання можуть спеціальні засоби для аудиту , в тому числі , відома утиліта RATS ( Rough Auditing Tool for Security ) від відомої компанії Fortify . Вона не тільки успішно впорається з обробкою коду , написаного на C / C + + , але зможе обробити ще й скрипти на Perl , PHP і Python. У базі утиліти знаходиться велика добірка з детальним описом проблемних місць в коді. За допомогою аналізатора вона обробить згодований їй вихідний код і спробує виявити баги , після чого повідомити інформацію про знайдені недоліки . RATS працює через командний рядок , як під Windows , так і * nix -системами . Потенційно небезпечні функції Таблиця. 1 Потенційно небезпечні функції в популярних мовах програмування
Використання утиліти RATS Для установки RATS необхідно попередньо встановити бібліотеку аналізатора XML файлів, яка називається Expat. Вона доступна на сайті http://expat.sourceforge.net/. Встановивши Expat, необхідно в системній змінній PATH вказати шлях до бібліотек Expat, наприклад, set PATH =% path%; C:\Program Files\Expat 2.1.0\Bin або використати Control Panel (Панель управління) -> System (Система)-> Advanced (Додатково) / Environment Variables (Переменные среды) в Windows 8. RATS є утилітою командного рядка, що не вимагає інсталяції. Каталог, в якому знаходиться утиліта, так само необхідно прописати в системній змінній PATH. Параметри виклику утиліти: rats.exe [-adhilrwxR] [--help] [--database|--db] name1 name2 ... namen ключі утиліти -a <fun> виводиться повідомлення про кожного входження функції «fun» в аналізованому файлі - d <filename> або - db або - database вказує бібліотеку вразливостей , відмінної від використовуваної за замовчуванням. - h або - help довідкова інформація - l <language> або - language <language> зазначення мови програмування , для якого виконується перевірка - r або - references вихідна інформація містить опис викликів об'єктів , які не є функціями , однак можуть бути джерелом уразливості - w < 1,2,3 > або - warning < 1,2,3 > установка рівня детальності повідомлень. За замовчуванням рівень = 2 - x не використовувати вбудовану базу даних вразливостей -R або - no - recursion не аналізував файли, розташовані в підкаталогах аналізованого каталогу - xml висновок інформації у форматі XML. - html Виведення інформації у форматі HTML. - noheader не включати в вихідну інформацію дані про використовуваних базах вразливостей не включати в вихідну інформацію допоміжні дані про час , витрачений на перевірку - resultsonly комбінація ключів - noheader , - nofooter , - quiet - columns виводить номер рядка файлу , в якій виявлена уразливість - context Виводить рядок коду , в якій виявлена уразливість База сигнатур утиліти представляє собою файли в форматае XML, для тих мов програмування, які можуть аналізуватися RATS. У дистрибутиві це файли rats-c.xml, rats-openssl. xml, rats-perl. xml, rats-php. xml, rats-python. xml, rats-ruby. xml. Кожна сигнатура представлена у вигляді: - - Например: - - Така база може бути доповнена програмістом, у разі, якщо стане відомою нова уразливість. Приклад команди перевірки файлу D:\RATS\rats.exe --noheader -r --context crack_me.cpp > test.out |