Главная страница
Навигация по странице:

  • Класифікація вразливостей захисту

  • set PATH =% path%; C:\Program Files\Expat 2.1.0\Bin

  • - nofooter

  • імя_уязвімой_функціі

  • _texeclpe

  • D:\RATS\rats.exe --noheader -r --context crack_me.cpp > test.out

  • Методичні вказівки до виконання лабораторних робіт Київ 2014 Зміст Лабораторна робота 1 Розробка програми розмежування повноважень користувачів на основі парольної автентифікації 3


    Скачать 1.3 Mb.
    НазваниеМетодичні вказівки до виконання лабораторних робіт Київ 2014 Зміст Лабораторна робота 1 Розробка програми розмежування повноважень користувачів на основі парольної автентифікації 3
    АнкорLaby_po_ZI.doc
    Дата11.08.2018
    Размер1.3 Mb.
    Формат файлаdoc
    Имя файлаLaby_po_ZI.doc
    ТипМетодичні вказівки
    #22806
    страница5 из 7
    1   2   3   4   5   6   7

    Лабораторна робота 5 Автоматизований пошук вразливостей у вихідних текстах програмного забезпечення, що написані на мові високого рівня.


    Мета роботи

             пошук потенційних вразливістей і помилок програмування в вихідних текстах на мові програмування C / C++ з використанням автоматизованого засобу виявлення поширених помилок програмування RATS

             дослідження виявленої проблеми: визначення типу та категорії помилки, локалізація, розроблення пропозицій щодо усунення. Ранжування виявлених проблемних місць за ступенем серйозності;

    Вміст завдання

    • Самостійно вибрати файл на мові програмування, підтримуваного утилітою.

    • Просканувати даний файл.

    • Проаналізувати вихідну інформацію утиліти, визначити характер уразливості, пояснити її значення для безпеки додатку

    • Знайти позицію уразливості у вихідному коді і запропонувати варіант її усунення

    Теоретичні відомості

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

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

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

    B загальному випадку при статичному аналізі вирішуються такі завдання:

    1. дослідження структури програми

    2. виділення набору стандартних системних функцій , використовуваних програмою

    3. виявлення способів і цілей взаємодії програми c зовнішніми пристроями і системними ресурсами

    4. пошук типових вразливостей

    5. пошук руйнують програмних засобів в коді програми

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

    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 Потенційно небезпечні функції в популярних мовах програмування

    Мова програмування

    Потенційно небезпечні функції

    C/C++

    - gets(),
    - Strcpy(),strcat(),
    - printf(), sprint(),vsprintf(), fsprintf(),
    - memmove(), memcpy(),wmemmove(), wmemcpy()
    - scanf(), sscanf(), fscanf(), vscanf(),vsscanf,
    - wcscpy(), wcscat(), wcsncat()
    wmemset(),wcsncpy()
    - system(), popen(), execlp(), execvp(), ShellExecute(), ShellExecuteEx(), _wsystem()

    Perl

    System(), exec(), fork(), readpipe(),open(), |, eval()

    Python

    exec, eval, os.system, os.popen, execfile, input, compile

    Java

    Class.forName(), Class.newInstance(), Runtime.exec()

    PHP

    include(), require(), readfile(), show_source(), highlight(),import_request_variables(), extract(), parse_str(), eval(), assert(), passthru(), exec(), system(), shell_exec(), proc_open( ), mysql_query(), fopen(), echo


    Використання утиліти 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 не включати в вихідну інформацію дані про використовуваних базах вразливостей

    - nofooter не включати в вихідну інформацію допоміжні дані про час , витрачений на перевірку

    - 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.

    Кожна сигнатура представлена у вигляді:



      імя_уязвімой_функціі

    -

      Опісаніе_уязвімості

      Рівень _ ризику

     


    -

      Номер _ аргументу

      Рівень _ ризику

     


     


    Например:



      _texeclpe

    -

      Many program execution commands under Windows will search the path for a program if you do not explicitly specify a full path to the file. This can allow trojans to be executed instead. Also, be sure to specify a file extension, since otherwise multiple extensions will be tried by the operating system, providing another opportunity for trojans.

      High

     


    -

      1

      High

     


     


    Така база може бути доповнена програмістом, у разі, якщо стане відомою нова уразливість.

    Приклад команди перевірки файлу
    D:\RATS\rats.exe --noheader -r --context crack_me.cpp > test.out

    1   2   3   4   5   6   7


    написать администратору сайта