Дмитрий Зегжда
КомпьютерПресс N 10/1993 (стр. 47-48)
ISSN 0868-6157
Октябрь 1993
Организация эффективной системы борьбы с компьютерными вирусами невозможна без разработки конструктивной математической модели, описывающей их структуру и принципы функционирования [1]. Наличие таких моделей позволит создать универсальные средства противодействия, доказать их эффективность и определить область применения. С другой стороны, могут быть определены условия, требующиеся для распространения вирусов, и сформулированы требования к системе, делающие существование вирусов невозможным.
Предлагается рассматривать процесс заражения программы вирусом как синтез новой программы, состоящей из взаимно адаптированных копий исходной программы и вируса.
Необходимо отметить, что в данной статье рассматривается только один класс вирусов - файловые вирусы, имеющие сигнатуру. Хотя метод универсален, в качестве примеров используются вирусы, функционирующие в системе MS-DOS.
Определим базовые элементы предлагаемой модели.
Сигнатурой называется фрагмент тела вируса, встречающийся во всех без исключения его копиях [2]. Обычно в качестве сигнатуры берется фрагмент кода, характерный для этого вируса.
Программа, вирус, сигнатура в данной модели представляются вектором, компонентами которого являются байты. Элементы вектора нумеруются начиная с 0 (это удобно при программировании). Размер вектора будем писать после его имени в круглых скобках, а индекс в квадратных.
Определим набор операций над этими векторами:
Х = Y <=> { X[i] = Y[i] | i: О..п-1 }
( | 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 - инфицированная программа.
Рассмотрим подробнее оператор заражения для сигнатурных файловых вирусов. Процесс заражения программы вирусом состоит из следующих этапов.
Назовем оператор, осуществляющий эти действия, оператором возмущения и обозначим его D(p). Оператор преобразует программу р в искаженную программу, готовую к присоединению вируса.
Назовем этот оператор оператором настройки и обозначим его А(р). Оператор осуществляет настройку вируса для работы в программе р.
Назовем его оператором инфицирования и обозначим 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].
Предложенный метод имеет следующие отличительные особенности:
Предложенная модель может быть использована для построения перспективных универсальных самообучающихся антивирусных средств, основанных не на различных системах поиска заданного набора вирусов, а на их комплексном исследовании, позволяющем выработать эффективные способы борьбы против любого неизвестного вируса.