Другие журналы

научное издание МГТУ им. Н.Э. Баумана

НАУКА и ОБРАЗОВАНИЕ

Издатель ФГБОУ ВПО "МГТУ им. Н.Э. Баумана". Эл № ФС 77 - 48211.  ISSN 1994-0408

Метод поиска обращений по некорректному индексу к строкам C++

# 05, май 2016
DOI: 10.7463/0516.0840726
Файл статьи: SE-BMSTU...o186.pdf (346.78Кб)
автор: Сидорин А. В.1,*

УДК 004.4'2

1 ООО "Московский исследовательский центр Самсунг", Москва, Россия

В связи с общей распространённостью языка C++, а также в связи с распространением языка C++ для программирования мобильных платформ, таких как Tizen, задача статического анализа программ, разрабатываемых с использованием этого языка, является актуальной. Статья посвящена поиску обращений по некорректному индексу к строковым объектам языка  C++. В отличие от переполнений строк C, данный дефект крайне редко обнаруживается промышленными статическими анализаторами в связи со сложностью моделирования данных объектов. В настоящей работе формализованы критерии обнаружения дефекта, а также разработаны формальные правила моделирования методов строк C++ и ряда функций стандартной библиотеки шаблонов языка C++. Данные правила позволяют выполнять моделирование длины строки и индекса обращения к строке. Разработаны правила, позволяющие выполнять межпроцедурный анализ с использованием резюме анализируемой функции. В данной работе производится моделирование только длины строки, что является компромиссом между точностью поиска и объёмом обрабатываемой информации. На основе разработанных правил моделирования реализован проверяющий модуль для статического анализатора Clang Static Analyzer, использующего метод символьного выполнения для анализа возможных путей выполнения программы. Этот проверяющий модуль был опробован на исходном коде пользовательских окружений операционных систем Android и Tizen общим объёмом около 20 млн. строк кода. Результаты ручной проверки срабатываний проверяющего модуля подтвердили высокую точность, достаточную для применения в промышленном статическом анализаторе: около 70% срабатываний в результате ручной инспекции признаны корректными. Перспективы развития предложенного подхода заключаются в разработке более общего набора правил для моделирования классов контейнеров стандартной библиотеки языка C++, а также модификация правил для проверок программ на других языках программирования. Кроме того, интерес представляет моделирование содержимого строки, поскольку с его отсутствием был связан ряд ложных срабатываний.

Список литературы
  1. Working Draft, Standard for Programming Language C++. ISO/IEC N4296, 2014.
  2. Сикорд С.С. Безопасное программирование на C и C++. Второе издание. М.: ООО «И.Д. Вильямс», 2015 г. 496 с.
  3. STR53-CPP. Range check element access // CERT: веб-сайт. Режим доступа:https://www.securecoding.cert.org/confluence/display/cplusplus/STR53-CPP.+Range+check+element+access (дата обращения 16.02.2016)
  4. Lian Li, Cristina Cifuentes, Nathan Keynes. Practical and effective symbolic analysis for buffer overflow detection. Proceedings of the Eighteenth ACM SIGSOFT International Symposium on Foundations of Software Engineering, FSE ’10. 2010, New York, USA, ACM. pp. 317-326.
  5. Ru-Gang Xu, Patrice Godefroid, Rupak Majumdar. Testing for Buffer Overflows with Length Abstraction. Proceedings of the 2008 international symposium on Software testing and analysis, ISSTA '08. 2008, New York, USA, ACM. pp. 27-38
  6. Xavier Allamigeon, Wenceslas Godard, Charles Hymans. Static Analysis of String Manipulations in Critical Embedded C Programs. Proc. Static Analysis: 13th International Symposium, SAS 2006, August 29-31, Seoul, Korea, pp. 35-51, 2006.
  7. James C. King. Symbolic execution and program testing // Communications of the ACM, 1976. № 7. Т. 19. С. 385-394
  8. David Larochelle, David Evans. Statically detecting likely buffer overflow vulnerabilities. Proceedings of the 10th conference on USENIX Security Symposium. 2001, CA, USA, USENIX Association Berkeley, vol. 10, Article no. 14.
  9. Belevantsev Andrey, Malikov Oleg. Using Data Flow Analysis For Detecting Security Vulnerabilities // ТрудыИСПРАН. 2006. № 11, с. 83-98.
  10. Романова Т.Н., Сидорин А.В. Метод резюме для разработки универсального многоцелевого анализатора кодов программ с возможностью обнаружения различных классов дефектов в программах, созданных с использованием языков C и C++. Вестник МГТУ им. Н.Э. Баумана. Серия Приборостроение. 2015. № 5. С. 73-93. DOI:10.18698/0236-3933-2015-5-75-96
  11. Clang Static Analyzer // Clang Static Analyzer: сайт. Available at:http://clang-analyzer.llvm.org (дата обращения: 17.02.2016).
Поделиться:
 
ПОИСК
 
elibrary crossref ulrichsweb neicon rusycon
 
ЮБИЛЕИ
ФОТОРЕПОРТАЖИ
 
СОБЫТИЯ
 
НОВОСТНАЯ ЛЕНТА



Авторы
Пресс-релизы
Библиотека
Конференции
Выставки
О проекте
Rambler's Top100
Телефон: +7 (915) 336-07-65 (строго: среда; пятница c 11-00 до 17-00)
  RSS
© 2003-2024 «Наука и образование»
Перепечатка материалов журнала без согласования с редакцией запрещена
 Тел.: +7 (915) 336-07-65 (строго: среда; пятница c 11-00 до 17-00)