Ревнивых А.В., Велижанин А.С. —
Методика автоматизированного формирования структуры дизассемблированного листинга
// Кибернетика и программирование. – 2019. – № 2.
– С. 1 - 16.
DOI: 10.25136/2644-5522.2019.2.28272
URL: https://e-notabene.ru/kp/article_28272.html
Читать статью
Аннотация: Предмет исследования – методика разбиения дизассемблированного кода на логические блоки в автоматическом режиме, поиск уязвимостей программного обеспечения без использования исходного кода (с использованием бинарного файла либо его эквивалента, полученного реверс-инжинирингом).
Объектом исследования являются существующие анализаторы кода и особенности их функционала.
Целью исследования является рассмотреть возможность разбиения дизассемблированного кода на логические блоки в автоматическом режиме и некоторые связанные с этим возможные сложности.
Постановка проблемы. Сложность анализа больших программных продуктов на уровне машинного кода обуславливает необходимость автоматизации данного процесса. Методология исследования основана на сочетании теоретического и эмпирического подходов с применением методов статического и динамического анализа, сравнения, обобщения, алгоритмизации, моделировании, синтеза. Ключевые выводы. Разбиение кода на блоки путем последовательного в режиме «строчка за строчкой» анализа машинного кода в некоторых случаях может привести к неверной интерпретации. Кроме того, анализ кода согласно выводам функций так же не гарантирует правильности определения границ функций. Однако в целом матричный метод может быть применен для анализа зависимостей функций по выделенным таким образом блокам кода.
Научная новизна связана с определением автором перспективных векторов исследования программного кода на уязвимости, обоснованием подхода (построение матрицы переходов из целочисленных значений), который может являться начальной стадией подготовки к автоматизированному анализу дизассемблированного кода.
Abstract: The subject of the research is the method of splitting a disassembled code into logical blocks in automatic mode, searching for software vulnerabilities without using source code (using a binary file or its equivalent, obtained by reverse engineering).The object of the research is the existing code analyzers and features of their functionality.The aim of the study is to consider the possibility of splitting a disassembled code into logical blocks in automatic mode and some of the possible difficulties associated with this.Formulation of the problem. The complexity of analyzing large software products at the level of machine code necessitates the automation of this process. The research methodology is based on a combination of theoretical and empirical approaches using the methods of static and dynamic analysis, comparison, generalization, algorithmization, modeling, synthesis. Key findings. Splitting the code into blocks by sequential in line-by-line analysis of machine code in some cases can lead to misinterpretation. In addition, the analysis of the code according to the conclusions of the functions also does not guarantee the correctness of the determination of the boundaries of the functions. However, in general, the matrix method can be applied to analyze the dependencies of functions on the blocks of code thus selected.The scientific novelty is connected with the determination of promising vectors for the study of software code for vulnerability, the rationale for the approach (building the transition matrix from integer values), which may be the initial stage of preparation for the automated analysis of the disassembled code.
Ревнивых А.В., Велижанин А.С. —
Исследование дизассемблированного представления исполняемых файлов, сформированных различными компиляторами. Пример уязвимости на переполнение буфера
// Кибернетика и программирование. – 2019. – № 1.
– С. 1 - 17.
DOI: 10.25136/2644-5522.2019.1.28238
URL: https://e-notabene.ru/kp/article_28238.html
Читать статью
Аннотация: Предметом исследования является потенциальная уязвимость, в частности на переполнение буфера, в различном программном обеспечении, связанная с функцией стандартной библиотеки языка программирования С/С++ strcpy и подходы и методы поиска таковой уязвимости. Объектом исследования выступают данные машинного кода компиляторов при выполнении сборки программы в различных режимах.
Целью исследования является провести анализ некоторых особенностей машинного кода, генерируемого различными компиляторами для Windows и Linux в режимах Debug и Release, в том числе, проведя на основе этого обзор уязвимости переполнения буфера. Методы исследования. В работе рассматриваются и развиваются методы построения алгоритмов поиска уязвимости переполнения буфера, исследуются характеристики данной уязвимости на уровне машинного кода. Для этого используются компиляторы Visual C++, Intel C++, g++, а также отладчики WinDBG, GDB.
Ключевые выводы. Сборка программ в различных режимах приводит к формированию различий в исполняемом коде, который сделан из полностью одного и того же кода языка программирования высокого уровня; эти различия проявляются в отличиях в поведении программы. В ходе исследования программного обеспечения в поисках уязвимостей важно проводить анализ машинного кода с целью выявления скрытых закономерностей.
Новизна исследования заключается в выявлении отличий в машинном коде, полученном после сборки одинакового высокоуровневого кода, определении «штампов» компиляторов при выполнении сборки программы в различных режимах. Особым вкладом автора в исследование темы является развитие методов построения алгоритмов поиска уязвимости переполнения буфера.
Abstract: The subject of the study is a potential buffer overflow vulnerability in various software related to the function of the standard C / C ++ strcpy programming language library and approaches and methods for finding such vulnerabilities. The object of the study is the data of the machine code of the compilers when the program is assembled in various modes. The purpose of the study is to analyze some features of the machine code generated by various compilers for Windows and Linux in the Debug and Release modes, including, on the basis of this, a review of the buffer overflow vulnerability. Research methods. The paper reviews and develops methods for constructing algorithms for searching for buffer overflow vulnerabilities, examines the characteristics of this vulnerability at the level of machine code. This is done using the Visual C ++ compilers, Intel C ++ compilers, g ++ compilers, as well as the WinDBG, GDB debuggers. Key findings. Building programs in different modes leads to the formation of differences in the executable code, which is made from the completely same high-level programming language code; these differences manifest themselves in differences in program behavior. In the course of researching software in search of vulnerabilities, it is important to analyze computer code in order to identify hidden patterns. The novelty of the study lies in identifying differences in the machine code obtained after assembling the same high-level code, identifying compiler stamps when executing the assembly of the program in different modes. A special contribution of the author to the study of the topic is the development of methods for constructing algorithms for searching for buffer overflow vulnerabilities.