Maximize
Bookmark

VX Heavens

Library Collection Sources Engines Constructors Simulators Utilities Links Forum

Векторно-операторная модель компьютерных вирусов

Дмитрий Зегжда
КомпьютерПресс N 10/1993 (стр. 47-48)
ISSN 0868-6157
Октябрь 1993

[Вернуться к списку] [Комментарии (0)]

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

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

Необходимо отметить, что в данной статье рассматривается только один класс вирусов - файловые вирусы, имеющие сигнатуру. Хотя метод универсален, в качестве примеров используются вирусы, функционирующие в системе MS-DOS.

Определим базовые элементы предлагаемой модели.

Сигнатурой называется фрагмент тела вируса, встречающийся во всех без исключения его копиях [2]. Обычно в качестве сигнатуры берется фрагмент кода, характерный для этого вируса.

Программа, вирус, сигнатура в данной модели представляются вектором, компонентами которого являются байты. Элементы вектора нумеруются начиная с 0 (это удобно при программировании). Размер вектора будем писать после его имени в круглых скобках, а индекс в квадратных.

Определим набор операций над этими векторами:

  1. Операция равенства ( = ). Будем считать, что вектор X длиной n равен вектору Y длиной n, при условии, что компоненты X и Y попарно равны, то есть:
    		Х = Y <=> { X[i] = Y[i] | i: О..п-1 }
    	
  2. Операция внедрения (обозначим се через +). Если даны два вектора - A длиной n и B длиной m, то результатом внедрения В в А является вектор С длиной n+m, удовлетворяющий следующему условию:
                                             (      | A[i]   для 0<=i<k     )
    		A(n) + В(m) = С(n+m) <=> ( C[i] | B[i-k] для k<=i<k+m   )
                                             (      | A[i-m] для k+m<=i<m+n )
    		k: 0..n-1
    	

В терминах теории операторов в общем случае факт заражения вирусом программы можно описать так:

	Pinf = V(P),

где V - оператор заражения программы вирусом; Р - чистая программа; Pinf - инфицированная программа.

Рассмотрим подробнее оператор заражения для сигнатурных файловых вирусов. Процесс заражения программы вирусом состоит из следующих этапов.

  1. Внесение возмущений в заражаемую программу. Имеются в виду действия вируса, направленные на преобразование программы в носитель вируса. Для этогo, во-первых, обеспечивается передача управления на код вируса (замена первых команд и адресов переходов у COM-файлов, точки входа у ЕХЕ-файлов) и, во-вторых, создается пространство для размещения кода вируса (стирание частей программы, увеличение размера файла, переписывание фрагментов программы из начала в конец и т.д. вплоть до архивации программы).

    Назовем оператор, осуществляющий эти действия, оператором возмущения и обозначим его D(p). Оператор преобразует программу р в искаженную программу, готовую к присоединению вируса.

  2. Настройка вируса на заражаемую программу. Под настройкой вируса понимается процесс создания копии вируса, способной функционировать в данной программе. Сюда относятся настройка адресов, инициализация рабочих переменных, сохранение искаженных элементов программы в коде вируса, возможно, перекодировка кода вируса в зависимости от параметров программы и т.д. Заметим, что та часть кода вируса, которая не изменяется в процессе настройки, является сигнатурой.

    Назовем этот оператор оператором настройки и обозначим его А(р). Оператор осуществляет настройку вируса для работы в программе р.

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

    Назовем его оператором инфицирования и обозначим I(р,v) Оператор вносит в программу р, подготовленную к заражению вирусом, настроенную на эту программу копию вируса v.

Тогда можно представить себе стуктуру зараженной программы следующим образом:

+-----------------------------------------+
|######PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP|
|PPPPPPPPP ПРОГРАММА PPPPPPPPPPPPPPPPPPPPP|
|PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP|
|PPPPPPPPPPPPP+---------------------------+
|PPPPPPPPPPPPP|PPPPPPvvvvvvvvvvvvvvvvvvvvv|
|-------------+vvvvv ВИРУС vvvvvvvvvvvvvvv|
|vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv|
|#########################################|
+-----------------------------------------+
P - программа
# - настраиваемая часть вируса
v - сигнатура вируса

В терминах этих операторов процесс заражения программы P некоторым вирусом, имеющим сигнатуру Sign, с получением зараженной программы Pinf описывается следующим уравнением:

	I( D(P), A(P) + Sign ) = Pinf,

где D(P) - программа после воздействия оператора возмущения; A(P) - вирус, адаптированый к программе; Sign - сигнатура вируса.

При такой постановке задача анализа вирусов сводится к нахождению сигнатуры Sign, с помощью которой можно однозначно определить наличие вируса в программе и (если они существуют) операторы, обратные к I и D, позволяющие восстановить зараженную программу.

Покажем, как в рамках данной модели можно найти сигнатуру файлового вируса, если его оператор возмущения удовлетворяет определенному ниже условию.

Для нахождения сигнатуры используются специальные файлы-мишени [3]. Это типичные COM- и EXE-программы, состоящие из тривиальных команд и обладающие характерными особенностями, которые используются вирусами при заражении программ (например, COM-программы начинаются с инструкции перехода). Необходимо иметь набор таких мишеней различных размеров, так как некоторые вирусы заражают только файлы с длинной, лежащей в определенном диапазоне.

Пусть мы имеем некую мишень t, зараженную вирусом, имеющим сигнатуру:

I( D(t), A(t) + Sign ) = tinf

Допустим, что оператор возмущения D(t) осуществляет только перестановку фрагментов мишени и не изменяет составляющие ее байты. Таким образом, мы ввели ограничение на класс сигнатурных файловых вирусов, для которого справедлив предложеный метод. Этому условию удовлетворяет абсолютное большинство сигнатурных файловых вирусов. Однако, если вирус все же искажает фрагменты программы, метод даст правильный результат при условии, что изменения не очень значительны.

Итак, в этом случае мы имеем файл, в котором перемешаны фрагменты кода мишени и вируса. Поскольку коды команд мишени нам известны, мы можем удалить их из файла, и таким образом выделить экземпляр вируса. Обозначим его Vt:

A(t) + Sign Vt

Вирус состоит из настраиваемой части, в которую внедрена сигнатура. Для того чтобы ее найти, нам необходимо иметь две мишени, зараженные одним и тем же вирусом:

A(tt) + Sign - Vtl
A(t2) + Sign - Vt2

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

Задача нахождения операторов, обратных к I и D, также может быть решена (поскольку мы можем легко отделить мишень от вируса), однако в данной модели абсолютно не учитывается семантика вируса, и результаты будут очень ненадежны, так как алгоритм работы этих операторов чаще всего зависит от характеристик заражаемой программы.

По описанному методу реализована программа, которая была успешно опробована на довольно большом наборе вирусов [4].

Предложенный метод имеет следующие отличительные особенности:

Предложенная модель может быть использована для построения перспективных универсальных самообучающихся антивирусных средств, основанных не на различных системах поиска заданного набора вирусов, а на их комплексном исследовании, позволяющем выработать эффективные способы борьбы против любого неизвестного вируса.

Литература:

  1. Cohen F. Computer viruses - theory and experiments // Proceedings of the 7th National Computer Security Conference, 1984.
  2. Pozzo М., Gray Т. Managing Exposure tо Potetially Malicious Programs // Рrосеedings of the 9th National Computer Security Conference, Sept., 1986.
  3. Котляров В.П., Зегжда Д.П. Средство сертификации и контроля несанкционированного доступа программ и данных компьютерных сетей. Третий всесоюзный семинар "Качество программного обеспечения", тезисы докладов. - М.: СНПО Алгоритм, 1991, с. 109-111.
  4. Защита информации в компьютерных системах. Теоретические аспекты защиты от вирусов / Зегжда Д.П., Матвеев В.A., Молотков С.В., Тихомиров Ю.В.; Под ред. Э.М. Шмакова - СПб: СПбГТУ, 1993.
[Вернуться к списку] [Комментарии (0)]
deenesitfrplruua