|
|
К полиморфик-вирусам относятся те из них, детектирование
которых невозможно (или крайне затруднительно) осуществить при помощи так
называемых вирусных масок - участков постоянного кода, специфичных для
конкретного вируса. Достигается это двумя основными способами -
шифрованием основного кода вируса с непостоянным ключем и случаным набором
команд расшифровщика или изменением самого выполняемого кода вируса.
Существуют также другие, достаточно экзотические примеры полиморфизва -
DOS-вирус "Bomber", например, не зашифрован, однако последовательность
команд, которая передает управление коду вируса, является полностью
полиморфной. Полиморфизм различной степени сложности встречается в
вирусах всех типов - от загрузочных и файловых DOS-вирусов до
Windows-вирусов и даже макро-вирусов. |
Уровни
полиморфизма |
Существует деление
полиморфик-вирусов на уровни в зависимости от сложности кода, который
встречается в расшифровщиках этих вирусов. Такое деление впервые предложил
д-р. Алан Соломон, через некоторое время Весселин Бончев расширил
его. Уровень 1: вирусы, которые имеют
некоторый набор расшифровщиков с постоянным кодом и при заражении выбирают
один из них. Такие вирусы являются "полу-полиморфиками" и носят также
название "олигоморфик" (oligomorphic). Примеры: "Cheeba", "Slovakia",
"Whale". Уровень 2: расшифровщик вируса
содержит одну или несколько постоянных инструкций, основная же его часть
непостоянна. Уровень 3: расшифровщик
содержит неиспользуемые инструкции - "мусор" типа NOP, CLI, STI и
т.д. Уровень 4: в расшифровщике
используются взаимозаменяемые инструкции и изменение порядка следование
(перемешивание) инструкций. Алгоритм расшифрования при этом не
изменяется. Уровень 5: используются все
перечисленные выше приемы, алгоритм расшифрования непостоянен, возможно
повторное шифрование кода вируса и даже частичное шифрование самого кода
расшифровщика. Уровень 6:
permutating-вирусы. Изменению подлежит основной код вируса - он делится на
блоки, которые при заражении переставляются в произвольном порядке. Вирус
при этом остается работоспособным. Подобные вирусы могут быть
незашифрованы. Приведенное выше деление не свободно от недостатков,
поскольку производится по единственному критерию - возможность
детектировать вирус по коду расшифровщика при помощи стандартного приема
вирусных масок: Уровень 1: для
детектирования вируса достаточно иметь несколько масок Уровень 2: детектирование по маске с использованием
"wildcards" Уровень 3: детектирование по
маске после удаления инструкций-"мусора" Уровень 4: маска содержит несколько вариантов
возможного кода, т.е. становится алгоритмической Уровень 5: невозможность детектирования вируса по
маске Недостаточность такого деления продемонстрирована в вирусе
3-го уровня полиморфичности, который так и называется - "Level3". Этот
вирус, являясь одним из наиболее сложных полиморфик-вирусов, по
приведенному выше делению попадает в Уровень 3, поскольку имеет постоянный
алгоритм расшафровки, перед которым стоит большое количество
команд-"мусора". Однако в этом вирусе алгоритм генерирования "мусора"
доведен до совершенства: в коде расшифровщика могут встретиться
практически все инструкции процессора i8086. Если произвести
деление на уровни с точки зрения антивирусов, использующих системы
автоматической расшифровки кода вируса (эмуляторы), то деление на уровни
будет зависеть от сложности эмуляции кода вируса. Возможно детектирование
вируса и другими приемами, например, расшифровка при помощи элементарных
математических законов и т.д. Поэтому мне кажется более объективным
деление, в котором помимо критерия вирусных масок участвуют и другие
параметры. 1. Степень сложности
полиморфик-кода (процент от всех инструкций процессора, которые могут
встретиться в коде расшифровщика) 2.
Использование анти-эмуляторных приемов 3. Постоянство алгоритма расшифровщика 4. Постоянство длины расшифровщика |
Изменение выполняемого
кода |
Наиболее часто подобный способ
полиморфизма используется макро-вирусами, которые при создании своих новых
копий случайным образом меняют имена своих переменных, вставляют пустые
строки или меняют свой код каким-либо иным способом. Таким образом
алгоритм работы вируса остается без изменений, но код вируса практически
полностью меняется от заражения к заражению. Реже этот способ
применяется сложными загрузочными вирусами. Такие вирусы внедряют в
загрузочные сектора лишь достаточно короткую процедуру, которая считывает
и диска основной код вируса и передает на него управление. Код этой
процедуры выбирается из нескольких различных вариантов (которые также
могут быть разбавлены "пустыми" командами), команды переставляются между
собой и т.д. Еще реже этот прием встречается у файловых вирусов -
ведь им приходится полностью менять свой код, а для этого требуются
достаточно сложные алгоритмы. На сегодняшний день известны всего два таких
вируса, один из которых ("Ply") случайным образом перемещает свои команды
по своему телу и заменяет их на команды JMP или CALL. Другой вирус ("TMC")
использует более сложный способ - каждый раз при заражении вирус меняет
местами блоки своего кода и данных, вставляет "мусор", в своих
ассемблерных инструкциях устанавлявает новые значения оффсетов на данные,
меняет константы и т.д. В результате, хотя вирус и не шифрует свой код, он
является полиморфик-вирусом - в коде не присутствует постоянного набора
команд. Более того, при создании своих новых копий вирус меняет свою
длину. |
|
|