Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #35, ОКТЯБРЬ 2003 г.

Борьба за выживание

Эдайн Гхэллах

Спецвыпуск Xakep, номер #035, стр. 035-060-2


Даже на этой стадии есть способы выжить. Наиболее популярное решение – обновление через Сеть. Вирус просто скачивает свою обновленную (и не детектируемую) версию из интернета и продолжает распространение. Вот только сайты, с которых скачиваются обновления, очень быстро закрывают. Лучше использовать что-то другое, например peer-to-peer сети. Есть еще один, малоизвестный, но хороший способ – использование delayed code. Способ заключается в том, что некая часть вируса зашифрована. Во время своей работы вирус перебирает ключи, пытаясь расшифровать этот код. Допустим, через месяц он, наконец, расшифровывает код, вирус меняется, и все антивирусы дружно идут на фиг. Конечно, антивирусники могут достать суперкомпьютер и по-быстрому расшифровать код, но где ты видел суперкомпьютеры в свободном доступе?

Как работает антивирус

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

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

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

Современные антивирусы знают множество способов детектирования вирусов. Т.к. поиск должен производиться быстро, они не проверяют каждый файл, а используют так называемые маски отбора. Сначала отбрасываются все неисполняемые файлы, потом файлы, которые не могут быть заражены (к примеру, из-за размера). Далее производится сравнение по базе сигнатур.

Если обнаружен полиморфный или метаморфный вирус, то он проверяется на множество инструкций. Принцип прост – полиморфные генераторы несовершенны и генерируют далеко не весь возможный набор инструкций. Исходя из этого и определяется конкретный вирус. К примеру, если вирус Win32.ExampleVir никогда не генерирует дешифровщик с опкодом pushad, а в проверяемом файле он есть, следовательно, это какой-то другой вирус. Данный способ детектирования основан на несовершенстве вирусов, так что достаточно немного лучше сгенерировать полиморфный дешифровщик в своем вирусе, чтобы свести на нет все попытки антивирусов. Конечно, это сложно, но кто говорил, что будет легко?

Назад на стр. 035-060-1  Содержание  Вперед на стр. 035-060-3