Preview

Труды Института системного программирования РАН

Расширенный поиск

Обнаружение ошибок, возникающих при использовании динамической памяти после её освобождения

https://doi.org/10.15514/ISPRAS-2018-30(3)-1

Аннотация

Существенная часть программного обеспечения написана на языках программирования C/C++. Программы на этих языках часто содержат ошибки: использования памяти после освобождения (Use After Free, UAF), переполнения буфера (Buffer Overflow) и др. В статье предложен метод обнаружения ошибок UAF, основанный на динамическом анализе. Для каждого пути выполнения программы предлагаемый метод проверяет корректность операций создания и доступа, а также освобождения динамической памяти. Поскольку применяется динамический анализ, поиск ошибок производится только в той части кода, которая была непосредственно выполнена. Используется символьное исполнение программы с применением решателей SMT (Satisfiability Modulo Theories) [12]. Это позволяет сгенерировать данные, обработка которых приводит к обнаружению нового пути выполнения.

Об авторах

С. А. Асрян
Институт проблем информатики и автоматизации НАН РА
Армения


С. С. Гайсарян
Институт системного программирования им. В.П. Иванникова РАН; МГУ имени М.В. Ломоносова, факультет ВМК; Московский физико-технический институт; Национальный исследовательский университет «Высшая школа экономики»
Россия


Ш. Ф. Курмангалеев
Институт системного программирования им. В.П. Иванникова РАН
Россия


А. М. Агабалян
Ереванский государственный университет
Армения


Н. Г. Овсепян
Ереванский государственный университет
Армения


С. С. Саргсян
Ереванский государственный университет
Армения


Список литературы

1. D. Dewey, B. Reaves, P. Trainor. Uncovering Use-After-Free Conditions in Compiled Code. In Proc of the 10th International Conference on Availability, Reliability and Security (ARES), 2015, pp. 90-99

2. J. Feist, L. Mounier, ML. Potet. Statically detecting use after free on binary code. Journal of Computer Virology and Hacking Techniques, vol. 10, issue 3, 2014, pp 211-217

3. И.К. Исаев, Д.В. Сидоров, А.Ю. Герасимов, М.К. Ермаков. Avalanche: Применение динамического анализа для автоматического обнаружения ошибок в программах, использующих сетевые сокеты. Труды ИСП РАН, том 21, 2011 г., стр. 55-70.

4. B. Lee, Ch. Song, Y. Jang, T. Wang. Preventing Use-after-free with Dangling Pointers Nullification. In Proc of the Network and Distributed System Security Symposium, 2015, https://www.ndss-symposium.org/ndss2015/ndss-2015-programme/preventing-use-after-free-dangling-pointers-nullification/, дата обращения 05.05.2018

5. Yves Younan. FreeSentry: Protecting Against Use-After-Free Vulnerabilities Due to Dangling Pointers. In Proc of the Network and Distributed System Security Symposium, 2015, https://www.ndss-symposium.org/ndss2015/ndss-2015-programme/freesentry-protecting-against-use-after-free-vulnerabilities-due-dangling-pointers/, дата обращения 05.05.2018

6. J. Caballero, G. Grieco, M. Marron, A. Nappa. Undangle: Early Detection of Dangling Pointers in Use-After-Free and Double-Free Vulnerabilities. In Proceedings of the 2012 International Symposium on Software Testing and Analysis, 2012, pp. 133-143

7. Sang Kil Cha, Thanassis Avgerinos, Alexandre Rebert and David Brumley. Unleashing MAYHEM on Binary Code. In Proceedings of the 2012 IEEE Symposium on Security and Privacy, 2012, pp. 380-394

8. Pin – A Dynamic Binary Instrumentation Tool, https://software.intel.com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool, дата обращения 05.05.2018

9. Triton – Dynamic Binary Analysis Framework, https://triton.quarkslab.com/, дата обращения 05.05.2018

10. P. Godefroid, M. Y. Levin, D. Molnar. Automated Whitebox Fuzz Testing. In Proceedings of NDSS'2008 (Network and Distributed Systems Security), 2008, pp. 151-166.

11. A. Aho, J. Ullman, R. Sethi, M. S. Lam. Compilers: Principles, Techniques, and Tools. Addison Wesley; 2nd edition, September 10, 2006, 1000 p.

12. Leonardo de Moura, Nikolaj Bjørner. Z3: an efficient SMT solver. In Proceedings of the 14th international conference on Tools and algorithms for the construction and analysis of systems, 2008, pp. 337-340


Рецензия

Для цитирования:


Асрян С.А., Гайсарян С.С., Курмангалеев Ш.Ф., Агабалян А.М., Овсепян Н.Г., Саргсян С.С. Обнаружение ошибок, возникающих при использовании динамической памяти после её освобождения. Труды Института системного программирования РАН. 2018;30(3):7-20. https://doi.org/10.15514/ISPRAS-2018-30(3)-1

For citation:


Asryan S.A., Gaissaryan S.S., Kurmangaleev Sh.F., Aghabalyan A.M., Hovsepyan N.H., Sargsyan S.S. Dynamic detection of Use After Free bugs. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2018;30(3):7-20. (In Russ.) https://doi.org/10.15514/ISPRAS-2018-30(3)-1



Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 2079-8156 (Print)
ISSN 2220-6426 (Online)