Логин
Пароль
Неверный логин/пароль
Введите логин, указанный вами при регистрации. Мы вышлем новый пароль.
Ваша учетная запись не найдена
Пароль выслан.

Краш-тест отечественных антивирусов: Dr.Web vs Kaspersky CRYSTAL

12 января 2011, 18:08

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

Сегодняшнее тестирование будут проходить две антивирусные программы. Первый испытуемый — Kaspersky CRYSTAL. Это ПО разрабатывалось специально для комплексной защиты пользовательского компьютера. В Кристале, помимо классического сканера и резидентного проактивного модуля, есть также средства родительского контроля, шифрование данных, менеджер паролей, которые для нас особой ценности сегодня не представляют. Вторым кандидатом на уничтожение будет Dr.Web Security Space Pro. Его функционал чуть беднее. Нет менеджера паролей, виртуальной клавиатуры и прочих полезных и не очень фич.

Антивирус предназначен для комплексного противодействия интернет-угрозам в сочетании с дополнительной защитой от сетевых атак благодаря встроенному брендмауэру.
Оба антивируса очень популярны в России, а Kaspersky еще и входит в мировую пятерку самых продаваемых программ для защиты от зловредов.

Принцип тестирования

Для проверки антивирусов на прочность мы разработали пять собственных тестов. Некоторые тесты представляют собой специально написанные программы, другие можно выполнить вручную с помощью стандартных инструментов Windows. Кстати, все испытания проводятся в Windows XP Professional SP3. За прохождение каждого теста будет выставляться оценка по пятибальной системе — совсем как в школе.

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

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

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

Четвертое и пятое испытание стоят особняком, поскольку будут выполняться с помощью стандартных средств ОС Windows — никаких специальных утилит мы писать не будем. Разумеется, при желании все это можно реализовать и программно. Итак, один из тестов будет запрещать запуск антивируса посредством политик безопасности, а второй попробует деинсталлировать ПО без лишнего шума и пыли. Итак, когда мы немного разобрались с тем, что будем делать, приступим непосредственно к краш-тестам.

Тест №1

Первый тест будет производиться с помощью специально написанной утилиты. В командной строке мы передадим ей полное имя файла, который хотим удалить при следующей загрузке ОС. Программа вызовет системную функцию MoveFileEx, которая может перемещать файлы и папки. Первый ее параметр — это полное имя перемещаемого файла, второй — куда будем перемещать, а третий — флаг, который задает некоторые опции перемещения. Если второй параметр оставить пустым, то есть передать NULL вместо строки с новым местом хранения, а в качестве флага установить значение MOVEFILE_DELAY_UNTIL_REBOOT, то нужный нам файл будет удален во время загрузки ОС.

Все просто. Всего одна функция, и никакого хитроумного кода. Такую утилитку может написать даже ученик средней школы. Теперь проверим, как она подействует на наши антивирусы. Первым по списку идет Kaspersky CRYSTAL. Если посмотреть в менеджер процессов, то мы увидим, что Каспер два раза запустил avp.exe.

Одна копия запущена с системными привилегиями, а вторая — с правами активного в данный момент пользователя. Удалять будем именно этот файл, который по умолчанию лежит в папке «%programfiles%\Kaspersky Lab\Kaspersky CRYSTAL\». Запускаем утилиту, передав ей в качестве одного из параметров полное имя экзешника и … Кристал начал ругаться на нашу тестовую утилиту, определив ее рейтинг опасности как «высокий». Если бы это был реальный зловред, то пользователю пришлось бы решать, разрешить подозрительной программе выполниться или нет. Если все-таки дать свободу нашей утилите, то после ребута системы антивирус не запускается. Программа сделала свое дело и удалила главный бинарник Касперского. В случае запрета выполнения подозрительной тулзы все будет хорошо — avp.exe останется на своем месте и по-прежнему будет радовать пользователей красивой иконкой в трее.

Итак, Kaspersky CRYSTAL прошел первое испытание, но, к сожалению, всего лишь на троечку. Очень часто пользователи жмут на кнопку «Да» не читая, что там пишут.

Следующее защитное ПО — Dr.Web Security Space Pro. В отличие от CRYSTAL, Доктор Веб состоит из множества исполняемых exe-файлов, каждый из которых ответственен за свою функцию. Но удалить мы попробуем самый главный бинарь, который, как и в Касперском, запускается от имени системы — dwengine.exe. Тестовая утилита удаления отработала без проблем, Доктор даже не пискнул. Но посмотрим, что будет после перезагрузки. А после нее все осталось на своих местах — анитвирус как новенький! Ну что же, попробуем стереть какой-нибудь другой важный файл, например, утилиту обновления или базы с сигнатурами. После нескольких запусков смертоносного кода и перезагрузки компьютера Доктор остается жив, и поэтому получает за первое испытание твердую пятерку. Никакого шума, никаких вопросов к пользователю. Просто не удаляется :).

Тест №2

Второй краш-тест очень похож на первый, но с одним единственным отличием — путь к удаляемому файлу мы передаем в зашифрованном виде. Процедура шифрования тоже не совсем простая. Мы используем специальный трюк, чтобы обмануть эвристики наших антивирусов. Подробнее об этом можно почитать во врезке. А пока посмотрим, как справятся с этим испытанием Касперский и Доктор Веб.

Первый в очереди — Kaspersky CRYSTAL. Предварительно зашифровав путь к avp.exe, мы передаем его нашей утилите. Реакция Кристала на второй тест полностью совпадает с реакцией на первый. Антивирус предложил выбрать, что делать с подозрительной программой. В случае, если мы разрешаем ее выполнение, после перезагрузки Kaspersky не загрузится. Итог: второе испытание Каспер тоже проходит на тройку.

Ситуация с Dr.Web полностью идентична предыдущей. Все попытки удалить какие-либо файлы, требуемые для его работы, потерпели неудачу. Не удалялся даже банальный license.txt! За такую стойкость Доктор Веб получает пять.

Тест №3

Третье испытание также будет удалять нужные для антивирусного ПО файлы, но при этом будет маскировать сам факт попытки удаления. Как говорилось выше, для того, чтобы стереть файл при загрузке ОС, нужно функции MoveFileEx в качестве одного из параметров передать флаг MOVEFILE_DELAY_UNTIL_REBOOT. Именно этот флаг мы и замаскируем под нечто безобидное, что позволит усыпить бдительность эвристики.

На запуск теста с маскировкой удаления Kaspersky CRYSTAL никак не прореагировал. Сообщение, в котором бы говорилось об опасной программе, не появилось. Может быть, Кристал блокирует эту угрозу втихаря? Перезагружаем, и... нет. Касперский провалил этот тест. ПО не запустилось, avp.exe исчез с жесткого диска без какихлибо следов. Маскировка удаления файлов принесла свои плоды.

Анализатор кода CRYSTAL не смог распознать угрозу и поплатился за это. Результат: двойка и ничего, кроме двойки. А что же с Dr.Web? Провалит ли он, наконец, хоть одно испытание? Как оказалось, нет. Доктор тверд, как скала. Никакие хитрые попытки удалить важные файлы его не берут. А все из-за того, что доступ ко всем нужным и ненужным бинарникам из дистрибутива Веба был заблокирован на уровне файловой системы. Такой подход решил все проблемы с вандализмом. Просто так поменять эти права у нас не получится, все гайки закручены очень крепко. Заслуженная пятерка.

Тест №4

Следующий тест мы будем проводить с помощью стандартных инструментов Windows XP Professional. В главном меню системы выберем пункт «Выполнить...» и впишем туда следующее: gpedit.msc. Откроется консоль с групповыми политиками. Там выберем «User Configuration», затем «Administrative Templates», «System». Справа найдем «Don't run specified Windows applications». Эта опция позволяет запретить запуск определенных программ на основе их имени.

Для Касперского мы будем блокировать avp.exe. Прописав запрет на его запуск в политиках Windows, мы перезагружаем компьютер и смотрим на результат. После старта системы Kaspersky CRYSTAL работает, как ни в чем не бывало. Запустился не только сервис с правами системы, но и процесс с привилегиями текущего пользователя. Похоже, это первая пятерка у Каспера. Поздравляем! С Dr.Web ситуация чуть хуже. Блокирование запуска dwengine.

exe никак не повлияло на работу Доктора, а вот если прописать в политиках имя сканера, то он не запустится. Таким же образом парализуется работа SpIDer Guard. Никакие сообщения при запуске какого-нибудь зловреда пользователю показаны не будут. Но стоит отметить, что защитные функции антивирус потерял не полностью.

Он выполнит действия, заложенные в настройках по умолчанию, например, бережно перенесет вирус в карантин, но пользователь об этом, к сожалению, ничего не узнает. Доктор Веб получает четверку.

Тест №5

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

Для «невидимой» деинсталляции Kaspersky CRYSTAL нужно выполнить следующую команду:

msiexec /quiet / uninstall {1A59064A-12A9-469F-99F6-04BF118DBCFF}

Ключ /quiet означает, что пользователь не увидит ни одного окна, касающегося процесса анинсталла. Идентификатор в фигурных скобках уникален для установленного дистрибутива Кристал. После выполнения этой команды Касперский не выдает никаких сообщений, касающихся попытки его удаления, но и сама деинсталляция как таковая завершается неудачей. Каспер справился с испытанием — без лишнего шума он пресек попытку несанкционированного удаления. Вторая пятерка.

Для тестирования Dr.Web была выполнена та же команда, с той лишь разницей, что был заменен идентификатор дистрибутива. Через некоторое время после запуска msiexec с нужными параметрами на экране появился диалог с предложением отключить модуль самозащиты и ввести капчу. В случае правильного набора цифрового кода Доктор исчезнет с компьютера пользователя навсегда. То, что Доктор Веб спросил разрешения об отключении самозащиты — это хорошо, но плохо, что он не сообщил нам причины, по которой самозащита отключается. Неопытный юзер может подумать, что так нужно, и с чистой совестью ввести капчу. В итоге Dr.Web получает тройку, поскольку непонятные окошки с непонятным текстом — дурной тон.

Итоги

На этом все. Пять ужасных испытаний пройдены. Некоторые хуже, некоторые лучше. Но ни Kaspersky CRYSTAL, ни Dr.Web Security Space Pro не смогли сдать все тесты на отлично. Для большей наглядности можно посмотреть в таблицу с оценками и вспомнить, как это было.

Итоги: Доктор Веб оказался устойчивей ко всяким деструктивным выпадам в его сторону. Он хорошо защитил свои файлы на уровне ФС и смог противостоять жестоким политикам безопасности Windows. А его модуль самозащиты не позволит злоумышленникам тихо и незаметно удалить антивирус. Касперский справился чуть хуже. Главной проблемой для него стал замаскированный вызов MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT. Итоговая оценка за краш-тестирование:

  • Kaspersky CRYSTAL — 3.6 балла,
  • Dr.Web Security Space Pro — 4.4 балла.

Трюк с ключом шифрования

Для шифрования пути к файлу во втором тесте и маскировки передачи флага MOVEFILE_DELAY_UNTIL_REBOOT функции MoveFileEx в третьем использовался специальный трюк, который позволяет обойти эвристические анализаторы антивирусного ПО. Если мы сохраним ключ для расшифровки некой строки в памяти программы напрямую (в виде константы или передаваемого значения), то анализаторы кода смогут отследить всю цепочку использования этого ключа и в конце получить исходную информацию в раскриптованном виде.

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

DWORD pseudoRandomDigit(const DWORD digit)
{
fopen("dsjklfjsdlk", "r");
DWORD err = ::GetLastError();
return digit + err;
}

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

Источники

www.xakep.ru