┌──┌─┐┌──
──┘├─┘──┘ Presents
┐ ┌┐┐┌─┤ VMag, Issue 3, 1 January 1999
└─┘┘ ┘└─┘ ─────────────────────────────
(c) 1998 Евгений Касперский.
Глава из книги "Компьютерные вирусы". СК-Пресс, Москва, 1998.
2.8.2. Уровни полиморфизма
Существует деление полиморфик-вирусов на уровни в зависимости от
сложности кода, который встречается в расшифровщке этих вирусов. Такое
деление впервые предложил д-р Алан Соломон, через некоторое время
Весселин Бончев расширил его.
Уровень 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. Постоянство длины расшифровщика.
Мне бы не хотелось излагать эти пункты подробнее, поскольку это может
подтолкнуть вирусописателей к созданию подобных монстров.