Способы защиты от антивирусов
Антивирус – враг каждого вирусописателя, по определению. Мы создаем вирусы, они находят и убивают их. Вирусописатели создают все более и более сложные вирусы, а антивирусники – все более и более совершенствуют свои продукты. Эта постоянная гонка ведет к усложнению технологий. Сейчас, если вирус не является полиморфным, его шансы выжить равны нулю. Вирусам необходимо защищаться. Эта статья - попытка описать и обобщить способы выживания вирусов.
Основные принципы
На распространение вируса требуется какое-то время. На написание “лечилки” для вируса также нужно время. Причем, чем меньше первое время и больше второе, тем лучше (для вирусописателей, конечно). На этом основываются все приемы защиты. Существует множество видов защит вирусов, но оптимальной стопроцентной защиты не существует, и вообще, сколько вирусописателей – столько и мнений на этот счет. Я постараюсь выделить самые основные виды и как-то их классифицировать.
Защита может быть двух видов: активная и пассивная. К пассивной защите можно отнести принципы сложности и незаметности. К активной – различные механизмы обновления через Сеть. Также активным способом являются приемы защиты от отладчиков и дизассемблеров, которые будут рассмотрены в конце статьи. Есть еще одна классификация защит - по этапам. Время жизни вируса можно условно разделить на следующие этапы:
Распространение вируса
Главное правило выживания на этом этапе – незаметность. Многие вирусописатели любят вставлять в свои творения красочные эффекты, картинки, надписи, а иногда просто деструктивные функции. Они не понимают, что этим укорачивают им жизнь. Необходимо применять различные способы сокрытия вируса в системе, если он резидентен. Иногда очень эффективны простые ограничения на заражаемые системы: установлен SoftIce – не заражать, установлен AVP – не заражать и т.д. Конечно, так многие компьютеры просто не будут заражены. Но зато и вирус почти наверняка не будет обнаружен. Еще лучше сделать такие ограничения временными. К примеру, проходит месяц, вирус заразил большое количество машин, но лишь простых пользователей, не беспокоящихся о безопасности, потом все ограничения снимаются, и вирус начинает полноценно размножаться, но уже не с одной машины, как в начале, а с нескольких тысяч.
Этап второй – попадание в антивирусную контору
Рано или поздно вирус будет обнаружен, и какой-нибудь особо “умный” пользователь отошлет его антивируснику. Теперь игра идет на минуты, чем дольше антивирусник разбирается в алгоритме вируса, тем больше и больше распространяется вирус. Главный принцип защиты на этом этапе – сложность. Простейший вирус будет определен с помощью эвристического анализа еще на первом этапе. Хороший полиморфный вирус потребует нескольких часов работы специалистов из антивирусной конторы. Анализ сложного пермутируещего вируса может занять несколько дней.
Этап третий – выпуск антивируса
Даже на этой стадии есть способы выжить. Наиболее популярное решение – обновление через Сеть. Вирус просто скачивает свою обновленную (и не детектируемую) версию из интернета и продолжает распространение. Вот только сайты, с которых скачиваются обновления, очень быстро закрывают. Лучше использовать что-то другое, например peer-to-peer сети. Есть еще один, малоизвестный, но хороший способ – использование delayed code. Способ заключается в том, что некая часть вируса зашифрована. Во время своей работы вирус перебирает ключи, пытаясь расшифровать этот код. Допустим, через месяц он, наконец, расшифровывает код, вирус меняется, и все антивирусы дружно идут на фиг. Конечно, антивирусники могут достать суперкомпьютер и по-быстрому расшифровать код, но где ты видел суперкомпьютеры в свободном доступе?
Как работает антивирус
Практически невозможно написать защищенный вирус, не понимая, как работает антивирус. Это необходимо, если ты не хочешь, чтобы твой вирус определялся антивиром сразу же после написания. На самом деле, большинство вирусных технологий, таких, как полиморфизм, метаморфизм или UEP, появились благодаря борьбе с антивирусами. Задача антивируса определить, содержит ли программа вирус. По мере проверки программы, если антивирус находит характерные признаки вируса, он увеличивает некую переменную. При достижении этой переменной установленного критического значения считается, что файл заражен.
Основным способом детектирования вирусов является проверка с помощью сигнатур. Сигнатура – это постоянный кусок кода, характерный для вируса, но не характерный для обычной программы. Это основной способ детектирования вирусов еще со времен ДОСа. Как защита от этого был придуман полиморфизм. Тело вируса шифруется переменным ключом, и расшифровщик каждый раз меняется. В идеале – это полноценная защита от антивирусов. На практике же часто плохой полиморфный расшифровщик сам по себе является сигнатурой. Тем не менее, детектировать вирусы стало сложнее, и антивирусникам пришлось придумывать что-то новое. И этим новым стала эмуляция кода.
Как только антивирус натыкается на код, подозрительно похожий на расшифровщик, он начинает одну за другой выполнять инструкции, эмулируя работу процессора. В процессе чего зашифрованный код становится расшифрованным, а вирус обнаруженным. Все это было бы очень неприятно, если бы не кривые руки программистов антивирусных контор. Этот эмулятор не понимает ни инструкций сопроцессора, ни вызовов API функций, ни уж тем более конструкции SEH, и любой хоть немного уважающий себя вирус содержит как минимум парочку трюков, сбивающих эмулятор с толку.
Современные антивирусы знают множество способов детектирования вирусов. Т.к. поиск должен производиться быстро, они не проверяют каждый файл, а используют так называемые маски отбора. Сначала отбрасываются все неисполняемые файлы, потом файлы, которые не могут быть заражены (к примеру, из-за размера). Далее производится сравнение по базе сигнатур.
Если обнаружен полиморфный или метаморфный вирус, то он проверяется на множество инструкций. Принцип прост – полиморфные генераторы несовершенны и генерируют далеко не весь возможный набор инструкций. Исходя из этого и определяется конкретный вирус. К примеру, если вирус Win32.ExampleVir никогда не генерирует дешифровщик с опкодом pushad, а в проверяемом файле он есть, следовательно, это какой-то другой вирус. Данный способ детектирования основан на несовершенстве вирусов, так что достаточно немного лучше сгенерировать полиморфный дешифровщик в своем вирусе, чтобы свести на нет все попытки антивирусов. Конечно, это сложно, но кто говорил, что будет легко?
Ссылка на источник:
http://rut.mediacom3000.net/voyna-virusa-i-antivirusa-naglyadno-video.html