Комплексная система защиты от уязвимостей, основанных на возвратно-ориентированном программировании
Ключевые слова:
уязвимость, удаленное исполнение кода, защита кода, RoP, вставка кодаАннотация
Затруднительно или невозможно создать программное обеспечение, не содержащее ошибок. Ошибки могут приводить к тому, что переданные в программу данные вызывают нештатный порядок выполнения ее машинного кода. Разбиение на подпрограммы приводит к тому, что инструкции возврата из подпрограмм могут использоваться для проведения атаки. Существующие средства защиты в основном требуют наличия исходных текстов для предотвращения таких атак. Предлагаемая методика защиты направлена на комплексное решение проблемы. Во-первых, затрудняется получение атакующим контроля над исполнением программы, а во-вторых, снижается количество участков программ, которые могут быть использованы в ходе атаки. Для затруднения получения контроля над исполнением применяется вставка защитного кода в начало и конец подпрограмм. При вызове защищенной подпрограммы производится защита адреса возврата, а при завершении – восстановление – при условии отсутствия повреждения его атакующим. Для снижения количества пригодных для атак участков применяются синонимичные замены инструкций, содержащие опасные значения. Предложенные меры не изменяют алгоритм работы исходного приложения. Для проверки описанных решений была выполнена программная реализация и проведено ее тестирование с использованием синтетических тестов, тестов производительности и реальных программ. Тестирование показало правильность принятых решений, что обеспечивает устранение пригодных для атак участков и невозможность использования штатных инструкций возврата для проведения атак. Тестирование производительности показало 14 % падения скорости работы, что находится на уровне ближайших аналогов. Сравнение с аналогами показало, что количество реализуемых сценариев атаки для предложенного решения меньше, а применимость выше.
Литература
2. Вишняков А.В. Классификация ROP-гаджетов // Труды ИСП РАН. 2016. Т. 28. Вып. 6, с. 27–36. DOI: 10.15514/ISPRAS-2016-28(6)-2
3. Vedvyas Shanbhogue, Deepak Gupta, and Ravi Sahita. Security Analysis of Processor Instruction Set Architecture for Enforcing Control-Flow Integrity // Proceedings of the 8th International Workshop on Hardware and Architectural Support for Security and Privacy (HASP '19). Association for Computing Machinery, New York, NY, USA. 2019. Article 8, 1–11. DOI: https://doi.org/10.1145/3337167.3337175
4. Intel 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4 // https://software.intel.com/content/dam/develop/external/us/en/documents-tps/325462-sdm-vol-1-2abcd-3abcd.pdf
5. Intel Launches World’s Best Processor for Thin-and-Light Laptops: 11th Gen Intel Core // https://www.intel.com/content/www/us/en/newsroom/news/11th-gen-tiger-lake-evo.html
6. RAP: RIP ROP 2015 // https://pax.grsecurity.net/docs/PaXTeam-H2HC15-RAP-RIP-ROP.pdf
7. Koo, Z.Z., Ayop, Zakiah, Abidin, Z.Z. Analysis of ROP attack on grsecurity / PaX linux kernel security variables // International Journal of Applied Engineering Research. 2017. no. 12. pp. 13179–13185.
8. Иванников В., Курмангалеев Ш., Белеванцев А., Нурмухаметов А., Савченко В., Матевосян Р., Аветисян А. Реализация запутывающих преобразований в компиляторной инфраструктуре LLVM // Труды ИСП РАН. 2014. Т. 26. Вып. 1. С. 327–342.
9. Нурмухаметов А.Р., Курмангалеев Ш.Ф., Каушан В.В., Гайсарян С.С. Применение компиляторных преобразований для противодействия эксплуатации уязвимостей программного обеспечения // Труды ИСП РАН. 2014. Т. 26. Вып. 3. С. 113–126. DOI: 10.15514/ISPRAS-2014-26(3)-6.
10. ИСП Обфускатор. Технология запутывания кода для защиты от эксплуатации уязвимостей // https://www.ispras.ru /technologies/isp_obfuscator/
11. Нурмухаметов А.Р., Жаботинский Е.А., Курмангалеев Ш.Ф., Гайсарян С.С., Вишняков А.В. Мелкогранулярная рандомизация адресного пространства программы при запуске // Труды ИСП РАН. 2017. Т. 29. Вып. 6. С. 163–182. DOI: 10.15514/ISPRAS-2017-29(6)-9.
12. S. Crane, A. Homescu, P. Larsen. Code randomization: Haven’t we solved this problem yet? Cybersecurity Development (SecDev), IEEE. 2016.
13. M. Conti, S. Crane, T. Frassetto et al. Selfrando: Securing the tor browser against de-anonymization exploits // PoPETs. 2016. no. 4. pp. 454–469.
14. D. Williams-King, G. Gobieski, K. Williams-King et al. Shuffler: Fast and deployable continuous code re-randomization // Proceedings of the 12th USENIX Conference on Operating Systems Design and Implementation. 2016. pp. 367–382.
15. Kangjie Lu, Stefan Nürnberger, Michael Backes, Wenke Lee. How to Make ASLR Win the Clone Wars: Runtime Re-Randomization // Proceedings of the 23rd Annual Network and Distributed System Security Symposium. 2016.
16. Onarlioglu K., Bilge L., Lanzi A., Balzarotti D., Kidra E. G-Free: Defeating return-oriented programming through gadget-less binaries // Proceedings of ACSAC: M. Franz and J. McDermott, Eds. ACM Press. 2010. pp. 49–58.
17. Jinku Li, Zhi Wang, Xuxian Jiang, Mike Grace, Sina Bahram. Defeating return-oriented rootkits with «return-less» kernels. // Proceedings of EuroSys. 2010, edited by G. Muller. ACM Press. pp. 195–208.
18. Dean Sullivan, Orlando Arias, David Gens, Lucas Davi, Ahmad-Reza Sadeghi, Yier Jin. 2017. Execution Integrity with In-Place Encryption. arXiv preprint ar-Xiv:1703.02698 (2017).
19. Lubkin I.A., Subbotin N.A. Technique of verified program module modification with algorithm preservation // IEEE Xplore Digital Library. 2017. 11th International IEEE scientific and technical conference "Dynamics of systems, mechanisms and machines" (Dynamics), 2017. pp. 1–5.
20. Lubkin I.A., Bazhenov I. O. Methodology of software code decomposition analysis // Dynamics of systems, mechanisms and machines. Omsk. 2018. pp. 1–5.
21. Hovav Shacham. The Geometry of Innocent Flash on the Bone: Return-into-libc without Function Calls (on the x86). 2007. ACM Conference on Computer and Communications Security (CCS), Proceedings of CCS, 2007. pp. 552–561.
22. Статья Permutation conditions. URL: https://z0mbie.dreamhosters.com/pcond.txt (дата обращения 01.09.2021).
23. Репозиторий с исходным кодом библиотеки eXtended Disassembler Engine (version 1.02). URL: https://github.com/nimrood/xde (дата обращения 01.09.2021).
24. AMD64 Architecture Processor Supplement Draft Version 0.99.7 // https://www.uclibc.org/docs/psABI-x86_64.pdf
25. Инструмент ROPgadget. Репозиторий с исходным кодом. URL: https://github.com/JonathanSalwan/ROPgadget (дата обращения 01.09.2021).
26. Coremark. Программа оценки производительности. URL: https://github.com/eembc/coremark (дата обращения 01.09.2021).
Опубликован
Как цитировать
Раздел
Copyright (c) Иван Александрович Лубкин, Вячеслав Владимирович Золотарев
Это произведение доступно по лицензии Creative Commons «Attribution» («Атрибуция») 4.0 Всемирная.
Авторы, которые публикуются в данном журнале, соглашаются со следующими условиями: Авторы сохраняют за собой авторские права на работу и передают журналу право первой публикации вместе с работой, одновременно лицензируя ее на условиях Creative Commons Attribution License, которая позволяет другим распространять данную работу с обязательным указанием авторства данной работы и ссылкой на оригинальную публикацию в этом журнале. Авторы сохраняют право заключать отдельные, дополнительные контрактные соглашения на неэксклюзивное распространение версии работы, опубликованной этим журналом (например, разместить ее в университетском хранилище или опубликовать ее в книге), со ссылкой на оригинальную публикацию в этом журнале. Авторам разрешается размещать их работу в сети Интернет (например, в университетском хранилище или на их персональном веб-сайте) до и во время процесса рассмотрения ее данным журналом, так как это может привести к продуктивному обсуждению, а также к большему количеству ссылок на данную опубликованную работу (Смотри The Effect of Open Access).