Статический анализатор уязвимости многопоточных программ на языке С++

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    295,2 Кб
  • Опубликовано:
    2016-09-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Статический анализатор уязвимости многопоточных программ на языке С++

Министерство образования и науки Российской Федерации

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ

УНИВЕРСИТЕТ имени академика С.П.КОРОЛЕВА

(НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ (СГАУ)»

Факультет информатики

Кафедра геоинформатики и информационной безопасности



ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе по дисциплине

«Инженерия программного обеспечения»

на тему «Статический анализатор уязвимости многопоточных программ на языке С++»

Выполнил:

студент группы 6410

Койнов А.С.

Проверил:

Мостовой Я.А.


САМАРА 2016

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

ПОСТАНОВКА ЗАДАЧИ

СТРУКТУРА ПРОГРАММЫ

ИНСТРУКЦИЯ ПО РАБОТЕ

РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ПРОГРАММЫ

ЛИСТИНГ ПРОГРАММЫ

ВЫВОД

СПИСОК ЛИТЕРАТУРЫ

ВВЕДЕНИЕ

Многопоточность - свойство платформы или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение может достичь более эффективного использования ресурсов вычислительной машины.

Наряду с очевидными преимуществами, многопоточность - одна из сложнейших областей программирования. Малейшая невнимательность может привести к появлению трудноуловимых «плавающих ошибок». В связи с этим, возникает необходимость в создании анализатора уязвимости многопоточных программ, который мог бы автоматически выявлять типичные ошибки синхронизации многопоточного программного обеспечения.

ПОСТАНОВКА ЗАДАЧИ

Должна быть составлена программа, обеспечивающая проверку уязвимости многопоточного ПО на С++ к ошибкам синхронизации «гонки» и «заброшенные замки».

Должна быть приведена структурная схема программы с описанием её работы, инструкция по работе с программой и результаты работы данной программы на тестовом ПО.

СТРУКТУРА ПРОГРАММЫ

программный синхронизация язык ошибка

Программа состоит из следующих блоков:

)        Флажок выбора типа уязвимости анализируемой программы.

)        Меню выбора файла анализируемой программы.

)        Алгоритм поиска ошибок синхронизации многопоточного ПО:

а) осуществляющий поиск ошибки синхронизации типа «гонки»

б) осуществляющий поиск ошибки синхронизации типа «заброшенные замки»

) Сохранение полученных результатов в массиве.

) Вывод результата на экран.

Структурная схема программы приведена ниже:

ИНСТРУКЦИЯ ПО РАБОТЕ

1)      Для запуска программы необходимо открыть файл Analiztator.exe После этого, должно открыться окно программы, представленное на рисунке 1.

Рисунок 1

2)      Для выбора типа проверки, необходимо поставить галочки на соответствующих пунктах (рисунок 2).

Рисунок 2

3)      Для выбора программы на проверку, необходимо нажать на кнопку «файл», затем на кнопку «открыть» и выбрать нужную программу через проводник (рисунок 3).

Рисунок 3

)        При выборе проверяемой программы, её содержимое будет отображаться в левой части окна. В правой части окна показаны потенциальные ошибки синхронизации, их тип и номера строк кода, в которых они были обнаружены (рисунок 4).

Рисунок 4

5)      Для сохранения полученной информации, необходимо нажать на кнопку «файл», затем на кнопку «сохранить лог» и выбрать место сохранения лога через проводник (рисунок 5).

Рисунок 5

)        Для выхода из системы необходимо нажать «файл», затем «выход» (рисунок 6).

Рисунок 6

РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ПРОГРАММЫ

1)      Реакция анализатора на штатное ПО без потенциальных ошибок:

А) Тестирование на наличие «гонок»:


Б) Тестирование на наличие «заброшенных замков»:




)        Реакция анализатора на ПО, содержащее ошибку синхронизации типа «заброшенные замки»:

ЛИСТИНГ ПРОГРАММЫ

using Microsoft.Win32;System;System.Collections.Generic;System.IO;System.Linq;System.Text;System.Text.RegularExpressions;System.Threading.Tasks;System.Windows;System.Windows.Controls;System.Windows.Data;System.Windows.Documents;System.Windows.Input;System.Windows.Media;System.Windows.Media.Imaging;System.Windows.Navigation;System.Windows.Shapes;Analyzator

{

/// <summary>

/// Логика взаимодействия для MainWindow.xaml

/// </summary>partial class MainWindow: Window

{<string> content = new LinkedList<string>();mutexLock = new Regex(@"[\._]lock[\(\)]");unlockMutex = new Regex(@"[\._]unlock[\(\)]");variableRegex = new Regex(@"^\s*(extern\s+)?(unsigned|signed)?\s*(const\s+)?(int|short|char|long|double|float|byte).*(;)");parser = new Parser();<Variable> allVariables = new List<Variable>();linesNumber = 0;leftMutexes = 0;void OpenFile()

{openFileDialog = new OpenFileDialog();.Multiselect = true;(openFileDialog.ShowDialog() == true)

{TextBox.Document.Blocks.Clear();.Clear();(allVariables.Count > 0) {.Clear();

}

[] safeFileNames = openFileDialog.SafeFileNames;index = 0;<Variable> variables = new List<Variable>();(string fileName in openFileDialog.FileNames)

{

//file1TextBox.AppendText(file);(File.Exists(fileName)) {

/*file1TextBox.AppendText("-----------------------------------");TextBox.AppendText(Environment.NewLine);*/saveFileName = safeFileNames[index++];TextBox.AppendText("Файл: " + saveFileName);TextBox.AppendText(Environment.NewLine);TextBox.AppendText("----------------------------");TextBox.AppendText(Environment.NewLine);= 1;[] lines = File.ReadAllLines(fileName);(string line in lines)

{TextBox.AppendText(linesNumber + ". " + line + Environment.NewLine);++;

}TextBox.AppendText(Environment.NewLine);.ReadFile(fileName, saveFileName);= parser.getVariables();(Variable variable in variables)

{.Add(variable);

}

//searchMutexes(lines);(mutexesCheckBox.IsChecked == true)

{(lines, saveFileName);

}

}

}

}(racesCheckBox.IsChecked == true)

{();

}(racesCheckBox.IsChecked == false && mutexesCheckBox.IsChecked == false)

{.AppendText("Ни одная уязвимость не выбрана" + Environment.NewLine);

}

}MainWindow()

{();TextBox.IsReadOnly = true;.IsReadOnly = true;

}void MenuItem_Click(object sender, RoutedEventArgs e)

{();

}void parseArray(string[] arr)

{lockMatch = null;unlockMatch = null;(content.Count > 0)

{.Clear();

}lineNumber = 1;= 0;(string str in arr)

{= mutexLock.Match(str);= unlockMutex.Match(str);(lockMatch.Success)

{++;.AddLast(lineNumber + "." + str.Trim() + " возможно заброшенный замок");

} else if (unlockMatch.Success)

{-;

}++;

}

}void writeToTextBox(string fileName)

{(string str in content)

{.AppendText(fileName + " " + str + Environment.NewLine);

}

}void printNoLeftMutex(string fileName)

{.AppendText("Заброшенных мьютексов в файле " + fileName + " не найдено" + Environment.NewLine);

}void searchRaces()

{(int i = 0; i < allVariables.Count - 1; i++)

{<string> sameVariables = new List<string>();.Add(allVariables[i].fullName);(int j = i + 1; j < allVariables.Count; j++)

{(allVariables[i].name == allVariables[j].name)

{.Add(allVariables[j].fullName);

}

}(sameVariables.Count > 1)

{(string str in sameVariables)

{.AppendText(str + " - использование одинакового имени переменной, возможны гонки" + Environment.NewLine);

}

}

}

}void searchMutexes(string [] arr, string saveFileName)

{(arr);(leftMutexes > 0)

{(saveFileName);

} else

{(saveFileName);

}

}void MenuItem_Click_1(object sender, RoutedEventArgs e)

{;

}

{name = saveFileDialog1.FileName;saveFileName = saveFileDialog1.SafeFileName;

// Write to the file name selected.

//... You can write the text from a TextBox instead of a string literal..IO.File.WriteAllText(name, logTextBox.Text);.Show("Файл " + saveFileName + " был успешно сохранен");

}

}void MenuItem_Click_2(object sender, RoutedEventArgs e)

{.Current.Shutdown();

}

}

}

ВЫВОД

Ввиду значительной сложности многопоточного программирования и крайней трудоемкости поиска «плавающих ошибок» при разработке многопоточного ПО, неизбежно возникает необходимость в создании программы-анализатора, которая помогала бы отлавливать характерные ошибки синхронизации.

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

СПИСОК ЛИТЕРАТУРЫ

1.      Форстер Дж., Лю В. Разработка средств безопасности и эксплойтов/Пер. с англ. - М.: Издательство «Русская Редакция»; СПб.: Питер,2007. -432 стр.

.        Майкл Ховард, Девид Лебланк, Джон Виега «Уязвимости в программном коде и борьба с ними». -М.: ДМК Пресс 2011, 288.

.        Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования.: Пер.с англ. - М.: Издательский дом "Вильямс", 2003. - 512 c.

4.      Информационно-аналитические материалы по параллельным вычислениям (http://www.parallel.ru, http://www.ccas.ru, www.mcs.anl.gov <http://www.mcs.anl.gov>).

.        Немнюгин С.А., Стесик О.Л. Параллельное программирование для многопроцессорных вычислительных систем. -СПб.: Петербург, 2002.

.        https://ru.wikipedia.org/

Похожие работы на - Статический анализатор уязвимости многопоточных программ на языке С++

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!