Полиморфные вирусы (45128)

Посмотреть архив целиком

Введение в полиморфизм

Как известно, первые вирусы появились давно. Они заражали древние компьютеры, и ничто не могло их остановить, кроме бдительного пользователя машины. Затем были придуманы антивирусы, определяющие их по характерным симптомам. Но через какое-то время вирус перестал быть тупой мишенью для антивируса. Теперь вирус был наделен специальными возможностями, что позволяло ему быть незамеченным в системе. Одним из вариантов защиты от определения является полиморфизм. В далеком 1990 году он чуть было не погубил всю антивирусную индустрию. Только благодаря профессионализму работников лаборатории были внедрены сложные методы, направленные на уничтожение полиморфных вирусов...

Как же они работают? Вообще, полиморфизм - высококлассная техника, позволяющая вирусу быть незамеченным по стандартной сигнатуре (или, попросту, маске). Обычно детекторы определяют вирус по характерным кускам его кода. В случае с полиморфным вирусом такое не пройдет. Два файла, зараженные одним и тем же вирусом, всегда будут иметь разный размер. Засечь такой вирус очень сложно.

Все полиморфные вирусы обязательно снабжаются расшифровщиком кода, который по определенному принципу преобразует переданный ему код, вызывая при этом стандартные функции и процедуры операционной системы. Сами методы шифрования могут быть разными, но, как правило, каждая операция имеет свою зеркальную пару. В ассемблере это реализуется очень просто, и таких пар может быть много - ADD/SUB, XOR/XOR, ROL/ROR и т.п. Подобные операции проводятся для расшифровки ячеек памяти.

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

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

2. Увеличение элемента случайности в расшифровщике. Место их вставки имеет огромное влияние на размер кода. С мусором же появляются новые варианты компоновки кода. Размер при каждом из них будет разным.

Ассемблер дает безграничные возможности по вставке мусора, поэтому вставки могут быть различными. Вот некоторые их виды:

1. Регистровые операции. Как правило, арифметические и логические. Примером могут служить следующие команды: inc ax; mov ax,[si+bx-04]; add ax,1234h и др.

2. Зеркальные команды. Такие, как add/sub, inc/dec и прочие.

3. Ложные переходы, а также вызов подпрограмм, содержащих мусор (jmp $+10h; call XXXXh).

4. Простой мусор из одиночных операндов (daa; nop; cld и т.д.).

Выделяют несколько уровней полиморфизма, используемых в вирусе. Каждый из них по-разному реализует неодинаковый размер файлов, которые были заражены.

Уровень 1. Самые простые олигоморфные вирусы. Они используют постоянные значения для своих расшифровщиков, поэтому легко определяются антивирусами. Из за этого такие вирусы прозвали "не очень полиморфными". Примеры таких вирусов: Cheeba, December_3, Slovakia, V-Sign, Whale.

Уровень 2. Вирусы, имеющие одну или две постоянные инструкции, которые используются в расшифровщике. Также определяются по сигнатуре, но имеют более сложное строение, чем представители первого уровня. Примеры: ABC, DM, Flip, Jerusalem, Ontario, PC-Flu, Phoenix, Seat, Stasi, Suomi.

Уровень 3. Вирусы, использующие в своем коде команды-мусор. Это, в своем роде, ловушка от детектирования, помогает запутать собственный код. Но такой вирус может быть засечен с помощью предварительного отсеивания мусора антивирусом. Вирусы Tequila, StarShip, V2Px, DrWhite принадлежат к третьему уровню полиморфизма.

Уровень 4. Использование взаимозаменяемых инструкций с перемешиванием в коде, без дополнительного изменения алгоритма расшифровки, помогает полностью запутать антивирус. При этом невозможно "поймать" вирус по стандартной маске. Приходится выполнять перебор, после которого нужная сигнатура будет найдена. Так были написаны вирусы Uruguay, CLME, APE.

Уровень 5. Реализация всех вышеизложенных уровней с поддержкой различных алгоритмов в расшифровщике помогает достичь высокого уровня полиморфизма. При этом может существовать несколько параллельных процессов расшифровки, когда один будет преобразовывать код другого или наоборот. Распознавание таких вирусов - очень сложный процесс. Для этого необходимо произвести тщательный анализ кода самого расшифровщика. С лечением сложнее - приходится трассировать не только генератор, но и тело самого вируса для выявления полной информации о зараженном файле. Эта процедура занимает довольно продолжительное время и может закончиться неудачно. Лечить вирусы этого уровня может лишь DrWeb, в остальных программах это попросту не реализовано. К представителям уровня относятся DAME и др.

Уровень 6 (неизлечимый). И, наконец, существуют вирусы, которые состоят из программных единиц-частей. Они постоянно меняются в теле и перемещают свои подпрограммы. Лечение таких вирусов пока не производится, но и для написания нужно очень хорошо разбираться в ассемблере. Характерной особенностью такой заразы являются пятна. При этом в различные места файла записывается несколько блоков кода, что обуславливает название метода. Такие пятна в целом образуют полиморфный расшифровщик, который работает с кодом в конце файла. Для реализации метода даже не нужно использовать команды-мусор - подобрать сигнатуру будет все равно невозможно. Такой алгоритм используют вирусы BadBoy, CommanderBomber, Leech и т.п.

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



Любой может написать хороший полиморфный вирус. Необходимо лишь немного разбираться в ассемблере. На создание среднего полиморфного вируса тратится не более шести часов.

Очень проста реализация поиска зеркальных команд. Для этого необходимо создать сводную таблицу с операндами. К ней должна прилагаться дополнительная информация: наличие зеркала, необходимость замены команды и прочее. Если человек немного понимает в вирусологии и ассемблере, то составить подобную таблицу ему будет несложно. С командами-мусором можно поступить аналогичным образом, как и с зеркалами.

Кстати о мусоре. К таким инструкциям прилагается ряд ограничений, которые должен исполнять каждый вирусописатель, чтобы его творение работало как следует. Итак, команда не должна:

1. Передавать управление за внешнюю программу. То есть управлять кодом может лишь расшифровщик и никто другой. Если нарушить это правило - вирус будет замечен.

2. Изменять регистры, которые используют рабочие команды. Мусор есть мусор и он никоим образом не должен пересекаться с правильным кодом.

3. Вызывать фатальные ошибки, а также генерировать исключения, так как это остановит работу расшифровщика, либо сделает ее неверной.

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

Еще надо ставить нерабочую команду после цикла, но перед шифрованным кодом - это избавит от некоторых проблем с конвейером у процессоров Pentium.

В полиморфы нередко встраивают код, который выполняется в зависимости от определенной ситуации. Например, при детектировании вируса он может вызвать процедуру самоуничтожения. Как самого себя (частичная или полная безвозвратная модификация кода), так и системы (массовое заражение системных файлов без возможности восстановления). Это очень осложняет поиск антивируса от полиморфного вируса - до антивирусной лаборатории вирус доходит уже в нерабочем состоянии. Также были случаи вызова исключающего кода при попытке излечения вируса(на высоком уровне полиморфизма).

Вирусописатели прежде всего акцентируют внимание на трех главных вещах в своем творении:

1. Маскировка. Цель каждого полиморфного вируса - как можно дольше продержаться в системе до детектировании антивирусом.

2. Защита. После обнаружения заразы происходит вызов исключающего кода.

3. Сложность. Код вируса должен быть очень запутанным, содержать в себе инструкции-зеркала, команды-мусор и прочее. Это обычно работает против новичка, но профессионал в течение нескольких часов изучения кода при трассировке, проследит за алгоритмом вируса.

Первый полиморфный вирус появился в 1990 году и назывался Chameleon. Он вписывал свой код в конец COM-файлов, а также использовал два алгоритма шифрования. Первый шифрует тело по таймеру в зависимости от значения заданного ключа. Второй использует динамическое шифрование и при этом активно мешает трассировке вируса. Существовала и модификация Chameleon. Вторая версия 1 апреля форматировала диск A: (учитывая объемы того времени, это было весьма неприятно).

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

Параллельно вирусам появлялись и полиморфик-генераторы, одним из которым был MtE, открывший целое вирусное семейство. Он уже использовал зеркальные функции, чем затруднял свое детектирование. Теперь вирусологу не нужно было писать свой дешифратор, а лишь воспользоваться MtE, в результате чего мир узнал о новом семействе вирусов. Что интересно, первый MtE-вирус был перехвачен антивирусной лабораторией, поэтому быстрый выход защиты от первого серьезного полиморфного вируса защитил множество рабочих станций от заразы.


Случайные файлы

Файл
175203.rtf
ref-18199.doc
121365.rtf
22705-1.rtf
18319-1.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.