Scientific journal
Modern high technologies
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 0,940

ABOUT THE PROBLEM OF CLASSIFICATION ON THE NEIGHBORHOOD OF THE ROOT OF THE CONTROL FLOW GRAPH OF THE PROGRAM IN THE CONTEXT OF PROCESS OF REPRODUCTION OF FILE COMPUTER VIRUSES

Borodin A.V. 1 Yudina M.A. 1 Vasileva M.A. 1
1 Volga State University of Technology
Article is devoted to a research of implementation methods of computer viruses in the executable code submitted by classical file objects. Features of mechanisms of interception of management at the licensed program – a container of placement of a body of a computer virus are considered. Approach to implementation of instructions of interception of management in the code of the licensed program allowing to reduce the probability of detection of the fact of interception from different heuristic anti-virus algorithms and based on a research of the graph of a control flow of the program is developed. The mathematical model of the description of a task of the analysis of the graph of a control flow of the program container is offered. The problem of classification of the starting code of the programs implemented in languages of the high level is formulated. The strategy of implementation of instructions of interception of management in all imaginable cases of implementation of the licensed program are formalized. The novelty of the offered approach decides by increase in degree of security of interception of management in relation to the technology described in literature on «unknown» point of entry – Entry Point Obscured (EPO) or Unknown Entry Point (UEP). The solution, as for a case of possible classification of the neighborhood of a root of the graph of a control flow, and for a case of lack of a possibility of such classification is proposed. A scope of the offered approach – development of the destroying program influences of different function.
control flow graph
classification
computer virus
obfuskation
transfer of control
entry point
high-level programming language

Одной из важных задач при проектировании компьютерных вирусов (КВ) является разработка механизма (или нескольких механизмов) передачи управления от легальной программы (ЛП) к коду вируса [1]. Самым простым решением этой задачи является перехват управления в точке входа в ЛП [2]. Однако этот способ имеет существенный недостаток. Перехват управления в точке входа в ЛП очень легко обнаружить. На это способны практически все эвристические алгоритмы поиска КВ [3]. С другой стороны, если внедрить механизм передачи управления КВ далеко (в смысле количества инструкций/операторов) от точки входа, то вероятность получения управления КВ существенно снижается с ростом такого расстояния. Усложняется, в общем случае, и процесс внедрения, увеличивая тем самым вероятность возникновения неожиданных для вирмэйкера ошибок [4]. Последствия здесь: сокращение времени скрытого существования КВ в вычислительной системе (ВС), то есть, по сути, рост вероятности удаления КВ из ВС раньше достижения цели, ради которой вирус разрабатывался [5, 6]. Тем не менее эта технология получила достаточно широкое распространение в КВ для 32-разрядных операционных систем семейства Microsoft Windows. Так поступают вирусы Win32.CTX, Win32.SK, Win32.Blakan, Win32.Deemo и др. Эта технология внедрения получила название технологии вирусов с «неизвестной» точкой входа – Entry Point Obscured (EPO) или Unknown Entry Point (UEP) [7].

Для преодоления перечисленных выше проблем возможно использование вирусом методов формального анализа графа потока управления (ГПУ) ЛП. При этом для сокращения требуемых для исследования ГПУ ЛП ресурсов времени и памяти ВС возможно ограничение области анализа некоторой окрестностью корня ГПУ (входного блока, на который указывает точка входа в ЛП). При этом для многих компилируемых языков программирования высокого уровня в указанной окрестности вблизи корня может встречаться много типовых блоков, чем также можно воспользоваться для упрощения механизма внедрения.

Материалы и методы исследования

В качестве фактического материала для исследования проблемы были использованы результаты дизассемблирования программ, написанных на языках программирования C++ (компиляторы Microsoft Visual Studio 2008, 2015 и 2017), Object Pascal (компилятор Free Pascal Compiler версии 3.0.4) и Visual Prolog (компилятор компании Prolog Development Center версии 7.5), реализованных для операционных систем семейства Microsoft Windows, функционирующих на процессорах семейства Intel x86.

Формальные методы анализа машинного кода базируются в работе на теоретико-множественном и теоретико-графовом подходах.

Результаты исследования и их обсуждение

Рассмотрим поставленную задачу формально. Назовем ГПУ четверку

borod01.wmf,

где borod02.wmf – ориентированный граф,

V – множество вершин или базовых блоков (последовательностей смежных инструкций, в которые поток управления входит в их начале и покидает в конце, без останова программы или возможности ветвления [8]),

E – множество дуг, дугу можно рассматривать как последовательность из двух вершин e = (v1, v2)∈E, borod03.wmf, дуги, по сути, представляют поток управления,

start – начальная вершина (корень) ГПУ, borod05.wmf,

stop – конечная вершина ГПУ, borod07.wmf.

Введем понятие пути на ГПУ:

borod08.wmf

borod09.wmf, borod10.wmf,

где borod11.wmf – множество натуральных чисел. Отсюда множество всех путей на ГПУ можно определить следующим образом:

borod12.wmf

borod13.wmf

Пользуясь введенными обозначениями, можно определить три полезные функции для формализации понятий, связанных с ГПУ.

1. Функция длины пути:

borod14.wmf,

определенная следующим образом:

borod15.wmf

2. Функция начала пути:

borod16.wmf,

определенная следующим образом:

borod17.wmf

3. Функция конца пути:

borod18.wmf,

определенная следующим образом:

borod19.wmf

Заметим, что borod20.wmf и, таким образом, эти функции определены и на E.

Пользуясь введенными функциями, определим еще две множество-значные функции.

4. Функция входящих дуг в вершину:

borod21.wmf,

определенная следующим образом:

borod22.wmf, borod23.wmf.

Здесь 2E – булеан множества E (множество всех подмножеств множества E).

5. Функция исходящих дуг из вершины:

borod24.wmf,

определенная следующим образом:

borod25.wmf, borod26.wmf.

Пользуясь двумя последними функциями, отметим, что borod27.wmf и borod28.wmf.

Переходя непосредственно к решению поставленной задачи, заметим, что относительно просто, без привлечения методов анализа потоков данных (крайне ресурсоемкая задача), КВ может построить подграф

borod29.wmf, borod30.wmf, borod31.wmf,

графа G, определяемый своим множеством путей:

borod32.wmf

borod33.wmf

где Vg – множество вершин, заканчивающихся командой передачи управления без явного задания адреса перехода (например, ret, iret для процессоров семейства x86), множество Vg, фактически, ограничивает возможность построения ГПУ без анализа потоков данных,

l – глубина анализа графа потока управления.

Продолжая формирование языка описания математической модели процесса анализа ГПУ программы-контейнера, положим, что V является порождающим множеством (доменом) для семейства мультимножеств borod34.wmf. Для любого мультимножества стандартно определена функция высоты [9]:

borod35.wmf,

значением которой является максимальная кратность вхождения элементов мултимножества-аргумента:

borod36.wmf

Здесь использованы следующие обозначения: borod37.wmf – множество неотрицательных целых чисел, borod38.wmf – функция кратности элементов мультимножества A. Таким образом, равенство hgt A = 1 означает, что все элементы мультимножества A входят в него ровно один раз (все элементы A уникальны).

Определим, далее, функцию контента

borod39.wmf

следующим образом:

borod40.wmf

С использованием этой функции факт отсутствия циклов в пути p на ГПУ можно представить следующим образом:

borod41.wmf

Теперь можно ввести множество путей без циклов:

borod42.wmf

Простейшей предлагаемой стратегией перехвата управления КВ, у ЛП является внедрение инструкций передачи управления коду КВ во все базовые блоки из множества

borod43.wmf

при условии реализации механизма однократного выполнения кода КВ, в том числе при многократных передачах управления на этот код.

Во многих случаях простейшую стратегию можно улучшить. Изучение опыта исследователей компьютерных вирусов [10], а также материалов дизассемблирования множества программ позволило сделать вывод о том, что для многих компиляторов можно выделить инвариантную окрестность ГПУ, определяемую множеством borod44.wmf, при borod45.wmf, где l0 – некоторое пороговое значение, зависящее от компилятора. (Интересно, например, что для компилятора языка логического программирования Visual Prolog компании Prolog Development Center значение l0 оказалось существенно больше, чем у других исследованных компиляторов.) Этот факт позволяет предварительно, на этапе проектирования КВ, составить базу данных типовых окрестностей ГПУ G', изучить их и выделить только лучшие (для внедрения инструкций передачи управления КВ) базовые блоки из множества

borod46.wmf

Таким образом, при внедрении инструкций передачи управления компьютерному вирусу последний предварительно решает задачу классификации по базе данных, логически состоящей из записей вида borod47.wmf, где borod48.wmf – множество базовых блоков, наиболее удобных для внедрения и обеспечивающих гарантированное получение КВ управления, borod49.wmf. Иначе говоря, происходит поиск множества borod50.wmf по ключу G'. Далее КВ производит внедрение инструкций перехвата управления в базовые блоки из множества borod51.wmf.

В случае, когда КВ не удается решение задачи классификации по созданной базе данных, то ему следует воспользоваться простейшей стратегией. Это менее эффективный путь, однако и у него имеются определенные преимущества перед классической технологией EPO.

Интересно, что условие применения простейшей стратегии перехвата управления в рамках предлагаемой технологии наталкивает на идею противодействия нашему подходу: компиляторам с языков высокого уровня следует обфусцировать стартовые коды (типовые блоки), активно используя инструкции передачи управления без явного задания адреса перехода. Это приведет к росту мощности множества Vg и укорочению длин путей из этого множества. Данная ситуация может свести на нет эффективность предлагаемого подхода. Критерием качества противодействия в этом случае может стать величина

borod52.wmf

Чем больше эта величина, тем труднее для КВ решить задачу эффективного перехвата управления. В то же время, учитывая консервативность разработчиков компиляторов и требования удобства низкоуровневой отладки кода [11], можно предположить, что разработанная в рамках данной статьи методика внедрения разрушающих программных воздействий в исполнимые файлы операционных систем еще долгое время сможет быть эффективно использованной.

Как и технология EPO, предложенный подход к внедрению КВ в ЛП провоцирует антивирусные сканеры при поиске заражения по сигнатурам просматривать весь код программы [7], что существенно снижает быстродействие антивирусного программного обеспечения. Увеличение времени на сканирование программного обеспечения означает определенное снижение вероятности обнаружения на фиксированных промежутках времени. Это первый шаг к достижению цели исследования. С другой стороны, обеспечение изменчивости кода КВ за счет обфускации на основе, например, функционально инвариантного псевдослучайного изменения ГПУ КВ [12] позволяет свести на нет возможности сигнатурного поиска, тем самым оставляя возможность обнаружения лишь со стороны эвристических алгоритмов. Именно в этом случае предложенная технология может в максимальной степени продемонстрировать свои сильные стороны.

Заключение

Подводя итог, отметим, что в рамках представленной работы был предложен механизм передачи управления от ЛП к КВ, отличающийся нетривиальным подходом к размещению инструкций/операторов перехвата. Данный подход усложняет обнаружение КВ эвристическими алгоритмами, с одной стороны, увеличивает вероятность передачи управления вирусу, с другой стороны, и, наконец, снижает вероятность фатальных ошибок в системе ЛП + КВ. Данный подход, особенно в сочетании с перспективными методами обфускации [12, 13] внедренного в ЛП кода, а также обфускации карты памяти [14], способен, по мнению авторов, существенно повысить живучесть КВ.

Также следует отметить, что предложенный подход позволяет говорить о формировании новых путей расширенного воспроизводства технологий компьютерных вирусов [15], что, хотя и не является целью настоящей статьи, однако демонстрирует значительный общий потенциал подхода.