Научная статья на тему 'Сравнительный анализ детекторов состояния гонки'

Сравнительный анализ детекторов состояния гонки Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
192
29
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СОСТОЯНИЕ ГОНКИ / АНАЛИЗ УЯЗВИМОСТЕЙ / ФАЗЗИНГ / ДИНАМИЧЕСКИЙ АНАЛИЗ / ЗАЩИТА ИНФОРМАЦИИ / RACE CONDITION / ANALYSIS OF VULNERABILITIES / FUZZING / DYNAMIC ANALYSIS / DATA PROTECTION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Першин С.В.

Рассматриваются детекторы состояния гонки в коде на языках C++, C#, Python. Детекторы могут применяться, в том числе для анализа, программного обеспечения которое используется на летательных аппаратах.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

COMPARATIVE ANALYSIS OF RACE CONDITION DETECTORS

Consider the detectors of race condition in programs written in the C++, C#, Python languages. The detectors can be used, including for analysis software which used on the aircraft.

Текст научной работы на тему «Сравнительный анализ детекторов состояния гонки»

УДК 004.056

СРАВНИТЕЛЬНЫЙ АНАЛИЗ ДЕТЕКТОРОВ СОСТОЯНИЯ ГОНКИ

С. В. Першин

Сибирский государственный аэрокосмический университет имени академика М. Ф. Решетнева Российская Федерация, 660037, г. Красноярск, просп. им. газ. «Красноярский рабочий», 31

E-mail: pww62@ya.ru

Рассматриваются детекторы состояния гонки в коде на языках C++, C#, Python. Детекторы могут применяться, в том числе для анализа, программного обеспечения которое используется на летательных аппаратах.

Ключевые слова: состояние гонки, анализ уязвимостей, фаззинг, динамический анализ, защита информации.

COMPARATIVE ANALYSIS OF RACE CONDITION DETECTORS

S. V. Pershin

Reshetnev Siberian State Aerospace University 31, Krasnoyarsky Rabochy Av., Krasnoyarsk, 660037, Russian Federation

E-mail: pww62@ya.ru

Consider the detectors of race condition in programs written in the C++, C#, Python languages. The detectors can be used, including for analysis software which used on the aircraft.

Keywords: race condition, analysis of vulnerabilities, fuzzing, dynamic analysis, data protection.

Многопоточное программирование широко распространено. Причина этого в повсеместном использовании многоядерных процессоров и желании программистов увеличить скорость выполнения программ.

Написание многопоточных программ может привести к появлению состояния гонки. Это обусловило появление проблемы детектирования состояния гонки. Однако сложность автоматизированного детектирования состояния гонки не позволяет эффективно решать данную проблему.

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

Разрабатываемый детектор позволит повысить эффективность выявления состояния гонки в коде на языке Python, тем самым повысить защищенность программного обеспечения и снизить затраты ресурсов, требующихся для его тестирования.

Проведенный анализ показал, что на рынке присутствует большое количество детекторов состояния гонки для языков C++, C#. Однако отсутствуют детекторы гонок для кода на языке Python. Большинство из представленных детекторов используют алгоритм Happens-before для выявления состояний гонки [1]. Хотя есть и детекторы, применяющие комбинированный подход, совмещающий преимущества алгоритмов Lockset и Happens-before [2].

Было проведено тестирование следующих детекторов состояния гонки: Valgrind, Intel Inspector, ThreadSanitizer, Pyrace.

Valgrind - инструментальное программное обеспечение, предназначенное для отладки использования памяти, обнаружения утечек памяти, а также профилирования.

Актуальные проблемы авиации и космонавтики - 2017. Том 2

Valgrind использует методы JIT-компиляции, транслирует программу в промежуточное представление (Intermediate Representation), не зависящее от процессора, а затем производит проверку кода в IR форме на наличие уязвимостей. Valgrind позволяет тестировать код на языках C, С++ на наличие состояния гонки.

Valgrind обладает следующими отличительными особенностями: позволяет выявлять большинство типов существующих уязвимостей; простота использования; позволяет осуществлять профилирование и отладку программ.

Intel Inspector это детектор уязвимостей, входящий в состав Intel Parallel Studio. Предназначенный для выявления ошибок памяти (утечки памяти, доступ к неинициализированной памяти и т. д.) и проблем синхронизации, вызванных взаимодействием потоков. Inspector анализирует код на языках C, C++, C# и Fortran.

Intel Inspector обладает следующими особенностями: глубокая интеграция в среду разработки Visual studio; возможность делать текстовые отчёты и комментарии о выявленных уязви-мостях; защита от одновременного редактирования результатов разными пользователями.

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

ThreadSanitizer обладает следующими отличительными особенностями: простота использования; высокая скорость работы; выявляет большинство типов ошибок синхронизации.

Pyrace это программа, написанная в рамках дипломной работы, предназначенная для выявления состояния гонки в коде на языке Python. Для детектирования уязвимостей используется алгоритм Lockset [3].

Pyrace обладает следующими отличительными особенностями: простота использования; на точность детектирования не влияет очередность выполнения инструкций в потоках; высокая скорость работы.

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

Результаты тестирования

Детектор Влияние на скорость в %

Valgrind(DRD) C++ 7803

Intel Inspector C++ 4310

ThreadSanitizer C++ 1096

Intel Inspector C# 4939

Pyrace Python 4966

В среднем 4984

Точность детектора Pyrace составила 36 %, это обусловлено применением алгоритма Lockset для детектирования гонок. Остальные детекторы показали стопроцентную точность, так как для выявления гонок применяли алгоритм Happens-before, либо комбинированные методы [4].

Таким образом, можно сделать вывод, что для выявления состояния гонки в коде на языке C++ в операционных системах семейства Linux следует применять ThreadSanitizer. Если тестирование кода проводится в Windows, то следует использовать Intel Inspector. Для детектирования уязвимостей в коде на языке Python, следует применять Pyrace. Так как Pyrace позволит обнаруживать состояния гонки вне зависимости от очередности выполнения инструкций в потоках.

Библиографические ссылки

1. Исаев И. К., Сидоров Д. В. Применение динамического анализа для генерации входных данных, демонстрирующих критические ошибки и уязвимости в программах // Программирование. 2010. № 4. С. 51-67.

2. Кудрин М., Прокопенко А., Тормасов А. Метод нахождения состояний гонки в потоках, работающих на разделяемой памяти // Труды МФТИ. 2009. Т. 1, № 4. С. 182-201.

3. Savage S., Burrows M., Nelson G., Sobalvarro P., Anderson T. Eraser: A Dynamic Data Race Detector for Multithreaded Programs. In ACM Transactions on Computer Systems, 1997. p. 391-411.

4. Трифанов В. Ю. Динамическое обнаружение состояний гонки в многопоточных Java-программах : дис. канд. тех. наук: 05.13.11. СПб., 2013. С. 112.

© Першин С. В., 2017

i Надоели баннеры? Вы всегда можете отключить рекламу.