Какой антивирус лучше?Степан «Step» Ильин Хакер, номер #110, стр. 110-026-1 Тест-драйв антивирусных пакетовСколько мы бы ни писали о том, что любой антивирус можно обойти, сколько бы ни рассказывали, как без него обойтись, иметь при себе качественный сканер и антивирусный монитор в наше время условие почти обязательное. Но что выбрать? У каждого на этот счет свое мнение и даже внутри команды ][ используются совершенно разные продукты. Мы решили положить конец спорам и, наконец, разобраться, каким продуктам можно довериться, а какие стоит незамедлительно отправить в отстой. Этот тест-драйв антивирусов для тебя! С самого начала работы над материалом встал очень важный вопрос: а как, собственно, проводить тестирование? Какой антивирус считать хорошим, а какой — плохим? Как вообще можно оценить эффективность работы, продуманность эвристических алгоритмов, результативность поиска? Интересно было посмотреть, как с этой задачей справились другие, поэтому мы первым делом изучили уже имеющиеся тестирования, которые в небольшом количестве доступны в Сети. Все они строились примерно на одном принципе: бралась внушительная коллекция всевозможной заразы (20-30 тысяч вирусов, троянов и прочей малвари), рассортировывалась по категориям и на нее натравливались по очереди все тестируемые антивирусы. Эффективность антивируса в таком случае прямо пропорциональна количеству найденной малвари: чем больше нашел, тем лучше. Ознакомиться с результатами можно здесь: www.antivirus.ru/OknoA.html, www.anti-malware.ru, www.virus.gr. Исследования эти довольно свежие, и повторять их не было никакого желания, да и смысла тоже, поэтому мы все сделали по-другому :). Количество найденный вирусов, как и объем самой базы, — показатель хоть и наглядный, но весьма косвенный. Намного интереснее посмотреть, как антивирус справится ситуацией, когда перед ним вирус не в чистом виде (который, понятно дело, найти проще простого), а в закриптованном или упакованном варианте. Практика показывает, что в ход зачастую даже не обязательно пускать приватные крипторы - некоторые известные продукты валятся уже на самых простых и общеизвестных упаковщиках. Вот и проверим! Да и вообще, почему вирус обязательно должен быть в базе? Тупое сканирование подборки, включающей пускай даже редкие, но уже известные вирусы, не учитывает эвристические возможности продуктов. А именно этим отличаются действительно продвинутые пакеты: суметь определить вирус по потенциально опасным участкам кода, собрать сигнатуры для них и грамотно обработать ситуацию (а не обзывать вирусами все подряд) — вот что действительно сложно. Поэтому для проверки эвристических алгоритмов мы провели отдельный тест, предварительно придумав простую, но показательную методику. Проактивная защита, которую сейчас активно вводят производители антивирусных пакетов, — это третий пункт нашей программы. Итак, все наше тестирование можно разделить на три части:
Подготовка к тестированиюДля тестирования мы взяли наиболее известные и продвинутые пакеты, заслужившие доверие пользователей по всему миру. Брать другие продукты было бессмысленно, поскольку на фоне более продвинутых товарищей они смотрелись бы по меньшей мере жалко. Окончательный список антивирусных пакетов получился следующим:
Полная информация о каждом из них приведена в сводной таблице. Понятно, что устанавливать эти продукты вместе — полный бред. Каждый из них использует свои драйверы, прослойки для работы с ядром системы, песочницы и прочие приемы, которые несовместимы друг с другом. Поэтому для тестирования использовалась виртуальная машина VMware. Общие характеристики стенда тестирования:
Для каждого антивируса был сделан свой снимок (snapshot), что позволяло быстро переключаться между ними для тестирования. И первым в нашей программе был статический скан. Статический сканДля проверки возможностей сканера, который является неотъемлемой частью любого антивируса, как уже было сказано, мы не стали использовать тупое сканирование по базе малвари. Было интересно выяснить, как обрабатывает тот или иной продукт ситуацию, когда тело вируса запаковано или закриптовано с помощью специальных утилит. Для этого мы сделали несколько заготовок и смотрели, что скажет каждый из антивирусов, обработав их. В качестве основы был выбран известнейший червь MSBlast, с которым наверняка имела дело большая часть читателей. Всего у нас получилось семь модификаций:
Все эти файлы мы записали на болванку и тестировали отдельно на каждом антивирусном пакете, работая с различными snapshot’ами системы в VMware. Результаты, честно говоря, нас немного удивили. Если с нахождением нативного MSBlast справились все (еще бы было по-другому!), то с криптованными файлами возникли совершенно неожиданные проблемы. Исполнение защищенных участков кода на виртуальной машине в случае использования специального криптора VMProtect сильно осложнили анализ для некоторых антивирусов. Сканеры Avira AntiVir PersonalEdition, BitDefender Antivirus 2008, популярнейший на Западе Panda Antivirus и в России — Dr.Web Антивирус не смогли распознать в исследуемом файле малварь. Еще хуже дела обстоят с морфером tElock. Несмотря на то что мы использовали публичный билд, уже давным-давно распространяющийся в Сети, полиморфный движок до сих пор не по зубам большинству антивирусов. Лишь только NOD32 смог увидеть в тестируемом экземпляре потенциально опасный файл. Последним криптором, который использовался для создания тестовых файлов, был NiceProtect, разработанный нашим автором GPcH и скачанный с официального сайта www.niceprotect.com. Avast, AVG, Dr.Web, F-Secure, Norton, McAfee с ним, к сожалению, оказались незнакомы! А что с программой, очень похожей на вирус? Тут 50 на 50: одна половина антивирусов указала на то, что это потенциально опасный код, другая просканировала файл без какой-либо реакции. Что лучше? Сложный вопрос: с одной стороны, ложное срабатывание всегда бесит и вводит в заблуждение пользователей. С другой стороны, это ведь действительно мог быть какой-нибудь опасный загрузчик, и тогда отчет антивируса о потенциальной угрозе был бы очень кстати! Итоги: среди всех пакетов заметно выделяется NOD32, который обнаружил заразу во всех предложенных нами файлах, за что и получает премию «Лучший статический сканер». Чуть хуже показали себя Антивирус Касперского и Sophos, пропустив файл, закриптованный tElock. Все остальные пакеты находятся примерно на одном уровне, явных аутсайдеров сегодня нет. Эвристический анализНовые вирусы и их всевозможные модификации появляются каждый день. Антивирусные компании, несмотря на все свои ухищрения, не могут моментально реагировать на появление малвари, поэтому проходит порядочное время, прежде чем тело вируса будет проанализировано и соответствующие сигнатуры добавлены в базу данных. Именно поэтому в любом сканере помимо сигнатурного поиска предусмотрен более сложный — эвристический. В процессе эвристического анализа проверяется структура файла, его соответствие вирусным шаблонам, выявляются конструкции, характерные для червей, вирусов и прочей малвари. В результате становится возможным обнаружение еще неизвестной малвари. Эта технология неспособна на 100% определить, вирус перед ней или нет, и, как любой вероятностный алгоритм, грешит ложными срабатываниями. Мы подготовили несколько программ, которые не являются вирусами, но используют характерные для них приемы. Посмотрим, как отреагируют на них антивирусы. Всего у нас девять заготовок:
Перед сканированием в настройках каждой программы включался самый глубокий уровень анализа и расширенная эвристика, если таковая была предложена разработчиками. Результаты тестирования представлены в таблице 2. Два первых наших файла показались антивирусам абсолютно безобидными даже несмотря на то, что в них применяются характерные для вирусов приемы. Надо сказать, что в целях эксперимента я залил эти файлы на www.virustotal.com — специальный сервис, предназначенный для проверки файлов по базам многочисленных антивирусов. Так вот некоторые продукты (малоизвестные и поэтому в нашем тестировании участия не принимающие) все-таки смогли задетектить в notepad-1.exe и notepad-2.exe потенциальную малварь. Но будем считать, что наши пакеты - более продвинутые и могут отличить обычный (пусть и модифицированный) блокнот от малвари :). С выявлением опасного кода в других файлах антивирусы справились на порядок лучше. Единственное, расстраивает, что чуть измененный MSBlast смог облапошить сразу три антивируса, для этого всего-то нужно было поставить в точку входа очень длинный цикл.
Итоги: из таблицы видно, что наибольшее количество опасного кода обнаружено сразу тремя пакетами: Avira AntiVir, Dr.Web Антивирус, F-Prot Antivirus, за что они получают нашу награду «Лучшая эвристика. Неплохо показали себя Антивирус Касперского и BitDefender, остальные пакеты в предложенных образцах никаких угроз не обнаружили. Проактивная защитаЧто вообще такое «проактивная защита»? Эта технология — логическое продолжение эвристических методов детектирования вредоносного ПО путем анализа его возможной деятельности. Однако «проактивная защита» - более широкое понятие, нежели «эвристический анализатор». Она включает в себя мониторинг системного реестра, контроль целостности критических файлов, мониторинг работы приложений с оперативной памятью и другие методы. Когда сигнатурный и эвристический поиск не дают результатов, предотвратить работу неизвестной малвари бывает под силу как раз такой проактивной защите. Для того чтобы посмотреть на ее работу на практике, были разработаны следующие заготовки:
Надо сказать, что методы проактивной защиты пока мало распространены. Это относительно новая технология, поэтому нет ничего удивительного в том, что многие антивирусы не отрабатывают эти ситуации. Это не значит, что они плохие, просто они этого пока не умеют. Итоги: награду «Лучший проактив» заслуженно получает Антивирус Касперского — эта штука действительно работает и может предотвратить деятельность всевозможной заразы. Порадовала также песочница Sophos Norman’а, которую вирусам обойти будет довольно сложно. Подводя итоги
Так какой же антивирус лучше? Никакой! Практика показывает, что в разных ситуациях каждый из продуктов ведет себе по-разному. Где-то лучше NOD32, где-то эффективнее оказываются технологии Антивируса Касперского, а в третьей ситуации их обоих переплюнет какой-нибудь другой продукт. К сожалению, установить несколько антивирусных пакетов нельзя, да и это не гарантировало бы полной защиты. Гораздо важнее выполнять элементарные правила безопасности, чтобы у заразы не было ни малейшего шанса попасть в систему. Впрочем, в наше время иметь при себе антивирусный пакет необходимо. И теперь ты можешь выбрать его исходя их того, что для тебя важнее. Как обманывают антивирусТрюк 1: технология чистого листаМалварь, написанная с нуля (from the scratch), не поддается детектированию в принципе (если, конечно, она не использует готовых компонентов, свистнутых из других вирусов, уже успевших засветиться в антивирусных базах). Теоретически существуют определенные последовательности машинных инструкций/API-функций, характерных для малвари и практически не встречающихся в честных программах, по которым эвристический анализатор может определить угрозу при условии, что антивирус получает управление первым, что вовсе не факт! Зловредные последовательности легко зашифровать, разнести по разным частям программы, разбавить мусором, в результате чего практически все эвристики остаются не у дел. Самые продвинутые (KAV, NOD32) упорно продолжают мочить заразу, поэтому хакерам приходится прибегать к другим трюкам. Но! Это в случае, если антивирус получает управление первым, например, если пользователь открывает исполняемый файл, проверяемый антивирусом перед запуском. А если малварь проникает через дыру в сетевом стеке (например), то она (при наличии достаточных прав) запросто прикончит антивирус, и тот никак не сможет ей противостоять. Трюк 2: упаковщики и протекторыАнтивирусы поддерживают обширную (и постоянно обновляемую) базу упаковщиков исполняемых файлов и прочих протекторов, разработчики которых прилагают титанические усилия, чтобы сделать упаковку однонаправленным процессом, то есть, чтобы максимально затруднить распаковку. Разгрызть навороченный протектор очень сложно, и на это уходит от пары дней до нескольких недель рабочего времени, в течение которого любой древний вирус, обработанный новым протектором, будет проходить сквозь антивирусные заслоны со свистом пули. Как вариант - можно слегка подправить код уже существующего протектора, и антивирус вновь обломается с его распаковкой. Трюк 3: оставаться в памятиПроактивные механизмы концентрируются вокруг исполняемых файлов, реестра и прочих ресурсов, в которых гнездится зараза, откладывая яйца. Однако существует множество червей, обитающих исключительно в памяти и не прикасающихся ни к диску, ни к реестру. Естественно, такие черви гибнут при перезагрузке, однако если компьютер подключен к сети, то червь будет приходить вновь и вновь, пока администратор не заткнет все дыры. Лишь некоторые антивирусы периодически выполняют сканирование памяти! Трюк 4: код, который модифицирует себя самДаже у самых продвинутых AV-движков эмуляторы не поддерживают самомодифицирующийся код, что позволяет малвари установить команду перехода на честный код и тут же изменить целевой адрес на вирусное тело, но антивирусы этого не заметят и будут искать черную кошку, которой нет, в темной комнате, которая никогда не существовала. Естественно, некоторые тривиальные самомодификации изначально заложены в эвристический движок и палятся на лету, но в общем случае самомодифицирующийся код современным антивирусам все еще не по зубам. Трюк 5: использование неизвестных командПри заражении программы вирус обычно внедряет в точку входа честной программы одну или несколько команд для передачи управления на вирусное тело, которое может быть расположено где угодно: в начале, середине, конце файла, или даже «размазано» по всей его длине. Если эти команды неизвестны эмулятору ЦП, то антивирус просто пропускает такой файл, поскольку знает, с какого адреса продолжать декодирование (неизвестные машинные команды имеют неизвестную длину), а неизвестных команд очень много. Реально эмуляторы поддерживают только базовые инструкции, не более 10% от общего набора x86-команд. Что же касается x86-64, то это вообще шах и мат (во всяком случае сейчас). Трюк 6: использование API-функцийЭмуляторы, встроенные в антивирусы, эмулируют лишь машинные инструкции (да и то не все), но не API-функции операционной системы, результат которых можно использовать для расшифровки кода. Самый распространенный трюк среди хакеров — берем некоторую API-функцию, передаем ей некорректные параметры, чтобы она возвратила определенный код ошибки (заранее известный хакеру), использующийся для расшифровки основного вирусного тела. Антивирусы нервно курят в сторонке, но в драку не лезут, поскольку эмулировать все API-функции — задача практически нерешаемая, а если же использовать динамическую эмуляцию (то есть выполнять API-функции на живом ЦП), то при этом существует риск, что вирус вырвется за пределы эмулятора и захватит управление. DVDВ этот раз на нашем DVD-приложении мы подготовили для тебя большую подборку антивирусных пакетов |