Работа посвящена поиску уязвимостей в машинном коде, основанному на сигнатурном анализе и использующему авторскую генетическую декомпиляцию. Суть предложенной декомпиляции заключается в эволюционном решении оптимизационной задачи по итерационному подбору исходного кода, компилируемого в заданный машинный с помощью генетических алгоритмов. При этом сам исходный код представляется в форме последовательности генов, каждый из которых определяет одну из альтернативных веток в граґфе синтаксических правил языка программирования; функция приспособленности (важнейшая в генетических алгоритмах) определяется как близость двух машинных (или аналогичных им ассемблерных) кодов: заданного и скомпилированного из исходного. Приведены полученные ранее результаты, а также их применение в интересах решения задачи исследования. Описан формат представления исходного кода программы, сигнатуры уязвимости и использующий их алгоритм поиска. Проведен эксперимент по восстановлению исходного кода из ассемблерного с помощью разработанного прототипа генетической декомпиляции. Подтверждена возможность применения сигнатурного поиска уязвимостей к результатам декомпиляции. Исследована динамика решения оптимизационной задачи, исходя из диапазона значений функции приспособленности исходных кодов в поколении каждой эпохи эволюции. Приведены ключевые достоинства предложенного способа поиска, а также указаны его недостатки и пути их смягчения.
< ... >
The paper is devoted to searching for vulnerabilities in machine code based on signature analysis and using the author’s genetic decompilation. The proposed decompilation essence lies in the optimization problem evolutionary solution of the iterative selection of the source code compiled into a given machine code using genetic algorithms. In this case, the source code itself is represented as a genes sequence, each of which defines one of the alternative branches in the syntax rules graph for the programming language; the fitness function is defined as the proximity of two machine (or similar assembler) codes: a given one and one compiled from the source one. An experiment was conducted to restore the source code from the assembler code using the developed prototype of genetic decompilation. The applying signature search possibility for vulnerabilities to decompilation results is confirmed. The solution dynamics of the optimization problem is researched based on the values range ??of the source codes fitness function in the generation of each evolutionary epoch.
Keywords:
information security, software, vulnerability, signature analysis, machine code, genetic decompilation