То, что сигнатурный поиск начинает пасовать в случае небольшой модификации кода вируса, известно уже давно. Надо сказать, что за годы эволюции антивирусы достигли определенных успехов в преодолении этой проблемы, но XXI век принес в стан антивирусов новый порок: в погоне за наградами в независимых исследованиях независимых (кавычки ставить? :)) лабораторий производители антивирусов начали детектировать вредоносные файлы по MD5-хешам. Результат хороший, вот только один измененный байт в коде малвари приводит к изменению хеша, и файл полностью перестает детектироваться. Кто из современных антивирусов грешит подобным подходом? Проверим в этом исследовании!

 

Немного о тестах

Самый распространенный тест антивирусов представляет собой следующее: за некий промежуток времени собирается коллекция файлов (предположительно вредоносных), складывается в папку, а затем она по очереди сканируется разными антивирусами. Все, тест готов. По такой нехитрой канве работают абсолютно все организации и частные лица, которые проводят подобное тестирование (on demand).

Есть в этом подходе и подводные камни:

  1. Если коллекция невелика (164, 932, 3022 файла), то это слишком мало — вполне может (случайно) оказаться, что какое-то небольшое семейство (десять файлов) или просто отдельные файлы были антивирусом не задетектированы, и это повлечет за собой очень большую потерю процентов. А у другого наоборот — возможно, он все эти файлы хорошо знает, в результате чего процент детекта подскочит к ста.
  2. А как ты будешь на этапе сбора коллекции понимать, что перед тобой вирус и его стоит поместить в коллекцию? Разумеется, в идеале каждый файл нужно запустить в песочнице, убедиться в его рабочем вредоносном функционале и после этого поместить в коллекцию… Здесь мы снова сталкиваемся с ограничением — большую коллекцию таким способом создать трудно.

Давай сразу перейдем к методу от противного — разберем, как не надо делать.

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

  1. читы/трейнеры/кейгены/кряки — об этих программах единого мнения у антивирусных компаний нет. Иногда на VirusTotal мы видим, что банальный кряк детектируется 30 антивирусами, а бывают кряки и с пятью детектами (именно кряки, а не склейки с троянами);
  2. битые файлы — возможно, что оно когда-то и было вирусом, но в процессе путешествия по сетям, крипторам и кривым рукам файл был поврежден и перестал быть работоспособным. Кстати, самый смешной пример из новенького: переслали мы тут коллегам текстовый файл с описаниями вирусов virlist.dwb, который шел со старыми версиями (конец 90-х) одного российского антивируса. Не пропустил его Гугл, объявил вредоносным. Видимо, не понравились куски кода вирусов в этом файле.
  3. Есть общепризнанная adware, которую детектирует вплоть до 40 антивирусов из 50 (по VT). Зависит это от того, кто, как и с кем договорился, как программа распространяется, а также какое настроение у вирусного аналитика было этим утром. Поэтому бывает так: адварь поначалу детектируется двумя-тремя (а то и десятком) антивирусов, а со временем в антивирусных компаниях обращают на них внимание, и количество детектов начинает таять, в результате сокращаясь до трех-четырех эвристических детектов антивирусов десятого эшелона.

Думаю, понятно, что либо такие программы должны проходить отдельной категорией, либо должна быть в тесте «общепринятая» adware — с количеством детектов на VT от 30 (например). Или вот тебе информация из свеженького: окошко «угроза ликвидирована» от «Доктора Веб». При ближайшем рассмотрении оказывается, что это не угроза, а вполне легальная программа (MIRC, он и не отрицает, что это программа), и не ликвидирована, а автоматически проигнорирована. Но окошечко было показано грозное!

  1. Редкие программы и непонятные файлы некоторые антивирусы (Avira, Bitdefender) любят добавить в базы под именем типа Kazy. В течение недели эти ложные детекты без следа исчезают: в начале недели в папке он находил 50 зловредов, а к концу только 40 — и это обычная ситуация.
  1. «Что не знаю — то вирусяк» — у многих антивирусов есть облака, опираясь на которые они выносят свой вердикт. Некоторые особо хитрые антивирусы неизвестные файлы помечают «желтеньким» — дескать, не знаю что это, но подозрительно. Способ поистине универсальный — по сути, если ему дать развернуться, то ни один вирус даже теоретически не пройдет.
 

Наш хитрый план

С оглядкой на все вышеперечисленное и имея определенные знания и умения можно видоизменить on demand тест антивирусов и показать, кто «затачивается» под такие тесты и играет нечестно, а у кого вирусные аналитики работают добросовестно и добавляют именно вирусы, а не используют bash-скрипт, который детектит по MD5 все подряд.

План относительно прост:

  1. Разумеется, проводить тестирование по обычной методологии надо — на этом этапе можно отсеять как явно липовые антивирусы (кто сказал «антивирус Бабушкина»? :)), так и просто откровенно слабые поделки, основной смысл жизни которых — попасть под какие-либо гранты, целевые программы или откатные схемы. Причем с первого взгляда выделить их бывает непросто.
  2. Почему Евгений Касперский в свое время упоминал про липовый вирлаб с детектом файлов по MD5? Потому что это просто, быстро, незатратно по человеческим и аппаратным ресурсам и фактически исключает возможность ложных срабатываний (меняем один байт в файле, и в корне меняется его MD5-хеш). Но такой детект был бы раем для хакеров — поменял один байт в вирусе (или при копировании с места на место он бы сам менял его в самом себе), и антивирус его не видит!

Проще говоря, для прохождения тестов такого детекта вполне хватит, а для реальной защиты — нет. Если антивирусная компания широко практикует технологию «детектим глупым, но точным детектом по хешу типа MD5 все, что движется, для прохождения тестов», то для ее обнаружения достаточно взять большую коллекцию вирусов, сбить им хеш (меняем пару незначащих для работоспособности байт — они не должны быть «отличительной чертой» данного вируса, по которой может быть сделана сигнатура), и тогда результаты сканирования будут совсем другими (чем сильнее уменьшится после этого процент обнаружения вирусов из данной коллекции, тем сильнее компания применяет описанную технологию).

Главное — не наткнуться на байты, которые служат той самой «приметой» этого файла. Разумеется, можно забить нулями десять байт на точке входа, но тогда нельзя будет винить антивирус, что он перестал обнаруживать этот файл, — вирус превратился в мусор, и плюс к тому мы изменили те байты, которые могут быть как раз характерными именно для данного семейства.

Поэтому менять байт мы будем в тех местах, которые не являются «приметой» и детектировать по которым при обычном режиме работы никто не будет.

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

Большинство компиляторов заполняют эту «заглушку» примерно сходным образом, там содержится всем знакомая фраза «That program cannot…» — вот в ней мы и будем менять один байт. А для верности запишем еще один байт в конец файла (в оверлей).

  1. Крайне важно обнаружить антивирусы, которые считают вирусами практически весь новый/неизвестный софт, а потом, если файл становится популярен, снимают детекты (очень распространенная практика).

Именно по этой причине в комплекте с сигнатурным детектом идет тест на ложные срабатывания, ведь какой толк в антивирусе, который обнаруживает 99% вирусов, но при этом 50% чистых программ тоже считает малварью? Сделать такую поделку до безобразия просто — считаем угрозой все, что не имеет валидной цифровой подписи.

Итак, как же выявить таких бракоделов? Достаточно в тест брать не широко распространенный софт для чтения-печати-соцсетей. Мы возьмем малопопулярные программы — профильный/специализированный софт для представителей прекрасных и уважаемых с детства профессий: врачей, инженеров, спортсменов, учителей, системных администраторов…

Все просто, но нужно учесть и вычесть следующие моменты:

  1. Никаких хакерских утилит (keygen/crack).
  2. Не должно быть патченного софта (русифицированный, взломанный и так далее).
  3. Долой спорные файлы.
 

Результаты первого теста

 

Результаты первого теста, который показывает реакцию антивирусов на проверку нашей любовно проверенной выборки, ты можешь видеть на рис. 1. Результаты логичные и ожидаемые — детект хороший, да и с чего ему быть плохим?


 

О нашей вирусной коллекции

Собрано чуть более десяти тысяч образцов исполняемых файлов формата PE. Файлы, которые признаны adware, в тестировании участие не принимали, хакерские утилиты, битые файлы и прочий мусор также были отбракованы на этапе сбора коллекции. Файлы «отлежались» не менее двух недель в теплом и сухом месте, чтобы даже самый ленивый антивирус успел добавить их в свои базы.

По нашим подсчетам, в собранной коллекции «мусора» (в том числе и спорных файлов) осталось не более 1% — косвенным доказательством для читателя может стать крайне высокий уровень детекта сразу у нескольких антивирусов.

Примерный состав коллекции (топ), согласно детектам Касперского:

  • 30% HEUR:Trojan.Win32
  • 15% Trojan.Win32
  • 12% Backdoor.Win32
  • 7% Trojan-Downloader.Win32
  • 6% Packed.Win32
  • 5% Trojan-Dropper.Win32
  • 5% Trojan-Spy.Win32

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

Источники вирусов: спам, антивирусные статьи на разных блогах, даунлоад по ссылкам с malware-трекеров (кстати, содержал рекордный процент мусора), парсинг результатов поисковиков (их пометки зараженных сайтов) и другие. Мини-коллекции по 100 файлов с форумов и популярные архивы VirusSign мы не использовали.


 

О нашей коллекции чистых файлов

C сайтов и торрентов мы скачали «сборники софта» для некоторых профессий — коллекции составлены давно, почти всем файлам больше трех лет (судя по времени их первой заливки на VT). Пакеты известного софта (типа «все версии AutoCad»), мы не качали, а искали сборники более мелкого и специализированного софта — в идеале, чтобы это были наборы разных утилит для конкретных целей (вроде расчета удельной теплоемкости).

Всего мы подготовили чуть больше сотни ехе-файлов (в идеале счет должен идти на тысячи), но даже на этом наборе тенденции проследить можно. Коллекция не секретна (чистые файлы согласно УК РФ распространять можно), спрашивай — поделимся. О том, что из коллекции были убраны хакерские программы и прочие сомнительные файлы (за детект которых нельзя ругать даже чуть-чуть), можно и не повторять.

 

Результаты теста сигнатурного обнаружения

Рис. 2. Результаты теста сигнатурного обнаружения после модификации пары байт

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

Как видно из рис. 2, чем выше уровень уменьшения детекта, тем больше антивирус «затачивается» под тесты (ну, или у него такие плохие детекты сами по себе), а у кого уровень детекта после модификации поменялся мало — те детектируют вирусы более добросовестно. Явные аутсайдеры — Norton и Nano: на каждый четвертый вирус у них пропадает детект при самом незначительном изменении файла.

Причем если от Nano такое поведение было вполне ожидаемо и может объясняться его уровнем технологий (на фоне в целом невысокого детекта), то Norton предстает как самый «затачивающийся» антивирус (мы раскроем его карты и расскажем, что он был победителем в первом тесте, достигнув уровня обнаружения 99,77%) — то есть он обнаруживает по точным хешам вообще все хоть немного подозрительное/неизвестное, включая наш возможный 1% спорных файлов. Зато после самой незначительной модификации файла «сбрасывает» уровень детекта больше, чем все остальные антивирусы первого эшелона, вместе взятые. К сожалению, параноидальный и уважаемый нами Comodo тоже оказался выше всяких «похвал» по результатам этого теста.

Кстати, а может быть, таким способом сбивается только детект на сканировании спокойно лежащего на диске файла, а при его запуске монитор антивируса вдруг «очнется» и обнаружит малварь? Проверим!

«Остатки» (то, что не было обнаружено после модификации) выборочно запускались, но антивирусы, как и следовало ожидать, сигнатурным методом ничего не обнаруживали. Нередко срабатывали файрволы и поведенческие анализаторы, но к нашему тесту это не имеет никакого отношения — мы не ставили своей целью показать, кто из антивирусов как часто задает пользователю вопрос о доступе приложения в Сеть. Кстати, проясним момент с сигнатурным детектом при запуске: если правильно задетекченный файл закриптовать неким криптором до степени пропажи детекта, то при запуске детект может произойти в памяти, когда криптор возвращает код в первоначальное состояние и передает ему управление. Конечно, это происходит не со всеми крипторами и антивирусами, но такое имеет место быть.

 

Результаты теста на ложные срабатывания

Третий тест: на ложные срабатывания. Примечание: антивирусы отсортированы по странам

Как мы уже отмечали, для получения адекватных результатов теста на ложные срабатывания наша выборка не кажется достаточно обширной. Будем над этим работать, но с результатами на малой выборке ты можешь ознакомиться (и сделать предварительные выводы) уже сейчас на рис. 3.

 

Выводы

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