Почти беспристрастное сравнение антивирусов LMD, Manul, ClamAV и Вирусдай.
![](https://habrastorage.org/files/233/305/c78/233305c7820d452fa7a16cc028c343ab.jpg)
За последний год ряды антивирусов, которые борются с заражением веб-сайтов, пополнились несколькими новыми представителями. Теперь выбор веб-мастера или владельца сайта становится сложнее. Еще год или два назад выбирать было не из чего.
Разборы отдельных случаев применения антивирусов уже публиковались на Хабре. Однако, сколько-нибудь общее и полноценное сравнение никто не делал. Чтобы помочь понять разницу между антивирусными продуктами для борьбы с вирусами на серверах и сайтах мы сегодня сравним по полноте и точности антивирусные базы четырех антивирусов. Сделать постараемся это корректно и беспристрастно.
Сравнение точности детектирования
Давайте разберемся с точностью детектирования угроз каждым антивирусом. Для каждого из пациентов возможны ложные срабатывания и наша задача — определить их долю во множестве обнаруженных файлов каждым из антивирусов в отдельности. Ведь никому не нужен антивирус, который показывает пальцем на хорошие файлы вместо зараженных.
Для анализа точности определения угроз мы будем использовать набор сайтов (W). Разницы между заражениями и подозрениями мы не будем делать из-за того, что подобных функций нет у некоторых антивирусов. Нам придется вручную проверить обнаруженный каждым антивирусом файл на предмет наличия вредоносного кода в нем (мы же боремся за объективность). Такая работа, как вы понимаете, (в случае, если таких файлов много) отнимет много сил и времени. Поэтому мы возьмем набор сайтов W необходимым и достаточным для удовлетворительной точности и сравнительно небольшого времени ручного анализа. W=1500.
Пусть
![](https://habrastorage.org/files/47c/0df/46c/47c0df46c03d4f69b29376d737bf8fa0.png)
![](https://habrastorage.org/files/8bc/651/7e2/8bc6517e23dd4fffa83b5c690ce33100.png)
![](https://habrastorage.org/files/115/3d7/e9f/1153d7e9f9a649a7ac552ebd3c1e4140.png)
![](https://habrastorage.org/files/d88/635/160/d88635160160429287b2446a504ffa69.png)
![](https://habrastorage.org/files/159/e3a/6e5/159e3a6e53d44a4d9cfb22414f7f02ee.png)
Точностью определения (A) антивируса будем называть подмножество различных гарантированно содержащих вредоносный код файлов
![](https://habrastorage.org/files/bab/874/5da/bab8745da3f54f4fa045aef056e9e320.png)
![](https://habrastorage.org/files/2a1/bbe/dff/2a1bbedfffe74fabbf6d96b8dc1d788c.png)
![](https://habrastorage.org/files/508/56a/4dc/50856a4dce77416aa4505f61f98e7fd3.png)
![](https://habrastorage.org/files/c1a/409/bcc/c1a409bcce6d449f96778d6c9855378e.png)
![](https://habrastorage.org/files/5a6/776/d88/5a6776d889434febaea5fa1e90ea2e06.png)
![](https://habrastorage.org/files/4be/492/06d/4be49206d90c437d9747b468cd4ce2a6.png)
Для наглядности будем измерять точность детектирования A в единицах соответствующего
![](https://habrastorage.org/files/bab/874/5da/bab8745da3f54f4fa045aef056e9e320.png)
![](https://habrastorage.org/files/e34/4e3/113/e344e311354b4c9588a26bc2cb45cca6.png)
В тестах мы не использовали md5 сигнатуры из антивирусных баз ClamAV и LMD. При заражении веб-сайтов вредоносный код почти всегда либо встраивается в существующие файлы, либо видоизменяется от одного заражения к другому. Такой полиморфизм легко реализовать, когда дело касается заражения веб-сайтов. В таком случае эффективность определения угроз по контрольным суммам файлов крайне низка, но при этом она подразумевает вычисление этих сумм для тысяч файлов на сайте, что существенно снижает быстродействие, почти не сказываясь на качестве обнаружения.
Сравнение полноты определения
Второй важный параметр для антивируса — полнота определения, т.е. количество выявляемых угроз из их полного числа на зараженном сервере или сайте.
Полнота в нашем анализе тесно связана с точностью определения. Мы будем рассматривать для сравнения полноты только точные (не ложные) срабатывания антивирусов.
Возьмем множества точных срабатываний антивирусов из предыдущего теста:
![](https://habrastorage.org/files/872/69b/0d3/87269b0d30474b5187177845b66ba3fc.png)
![](https://habrastorage.org/files/e85/2e0/e53/e852e0e5353940e39adc62d1f83ddad0.png)
![](https://habrastorage.org/files/01a/786/e09/01a786e09c0946d2838aa74d8d7964ae.png)
![](https://habrastorage.org/files/e57/ccb/2d7/e57ccb2d7bb349f9bf04ae7036c06389.png)
![](https://habrastorage.org/files/78c/43e/be0/78c43ebe00b340799fb64de6a3eb9bdf.png)
![](https://habrastorage.org/files/711/9f7/d66/7119f7d665644dce84d32bdaed43a943.png)
![](https://habrastorage.org/files/211/838/48b/21183848b756450ca56fc3f01440004f.png)
Полнотой определения (F) антивируса будем называть подмножество различных гарантированно зараженных файлов, выявленных им на объединенном множестве файлов
![](https://habrastorage.org/files/78c/43e/be0/78c43ebe00b340799fb64de6a3eb9bdf.png)
![](https://habrastorage.org/files/b65/ba6/02f/b65ba602fe284c659452129735174828.png)
![](https://habrastorage.org/files/84b/816/6e1/84b8166e124f48649558651d58c3e599.png)
![](https://habrastorage.org/files/ce2/752/7a8/ce27527a87094d4ba730bc9014630c58.png)
![](https://habrastorage.org/files/009/d0d/f2f/009d0df2f63f4c07899f0dea49fbba26.png)
![](https://habrastorage.org/files/5af/1d8/cbc/5af1d8cbca0d4baa90230c8b21ee8738.png)
Будем измерять полноту определения F в единицах
![](https://habrastorage.org/files/78c/43e/be0/78c43ebe00b340799fb64de6a3eb9bdf.png)
![](https://habrastorage.org/files/3b7/a0f/eda/3b7a0feda4d648038d6048bcae7f692e.png)
Итак, мы сравнили качество и полноту детектирования заражений. Теперь приведем сводные данные в одной таблице.
Полнота определения F, % | Точность определения A, % | |
LMD | 11,86% | 60,52% |
Вирусдай | 78,87% | 92,72% |
Манул | 47,42% | 2,53% |
ClamAV | 9,28% | 69,23% |
При ручной проверке файлов, определенных антивирусами как зараженные, мы выявили несколько интересных фактов, о которых хотелось бы упомянуть отдельно. Начнем с количества файлов, обнаруженных каждым антивирусом. Manul нашел зараженные или подозрительные файлы почти на каждом проверяемом сайте. Мы были сильно удивлены, когда посчитали, что доля детектированных им файлов составила 98% от общего количества файлов, детектированных всеми антивирусами.
Беда в том, что, как видно из второй диаграммы, только 2.5% этих файлов действительно были заражены. Остальные — ложные срабатывания. Хотя полнота определения у него достаточно высока, такое количество ложных срабатываний сильно затрудняет дальнейший ручной анализ и лечение. Анализируя саму антивирусную базу Manul мы выяснили, что он записывает в «подозрения» достаточно большое количество часто встречающихся безопасных фрагментов кода. Например, как подозрения определяются следующие вхождения:
file_put_contents
, @file_get_contents
, move_uploaded_file
, ini_set
, error_reporting
, phpinfo
, extract
, @include
, mail
, touch
, chdir
, copy
, create_function
и тп. Отсюда следует, что весьма сложно написать сколь нибудь серьезный PHP скрипт, в котором Manul не найдет подозрений. Отчасти это касается и ClamAV. Он, к примеру, ищет вхождения некоторых простых английских слов и тоже определяет их как заражения. LMD очень часто по неизвестной причине находит вирусы в библиотеке zip.lib.php, встречающейся на многих сайтах. Конкретно определяется как заражение такой участок кода:
$fr .= "\x00\x00";
Причины этого неизвестны. И таких примеров можно найти еще достаточно много. Вирусдай тоже не безгрешен. Бывает так, что он находит подозрительный (например, обфусцированный) код в файле, который не является вредоносным. Обфускация может применяться и для защиты программ, а не только для сокрытия вредоносных кодов. Но не смотря на это, его полнота определения превосходит остальные веб-антивирусы.
Наше сравнение, как написано в начале статьи, все же является «почти беспристрастным» по нескольким причинам. Мы проводили тесты на веб-сайтах, то есть искали вирусы только в веб-скриптах. В связи с этим мы не обрабатывали md5 сигнатуры (по описанным выше причинам). Так же ClamAV все же более универсальное средство поиска угроз, рассчитанное не только на веб-сайты.
Сравнение качества лечения
С детектированием мы разобрались. Выясним насколько полно антивирусы определяют фрагмент вредоносного кода в файле. Это важно для организации лечения. Будет не очень хорошо, если при удалении найденного антивирусом фрагмента кода файл вдруг станет нерабочим, а как следствие, часто и сам сайт перестанет функционировать. Конечно, существуют целые вредоносные файлы, но сейчас мы рассматриваем случаи, когда вредоносный код внедрен в хороший файл и удалять все его содержимое целиком нельзя.
Разберем этот параметр на примере вредоносного кода, который детектировали сравниваемые антивирусы. В нашем примере код имел такое содержание:
![](https://habrastorage.org/files/d12/a12/781/d12a127811374cc6922ba4b41f359355.png)
LMD определяет его как вредоносный по вхождению такого участка кода:
= ''; for($i=0; $i < strlen($
Сам по себе этот участок кода вряд ли можно назвать вредоносным и он вполне может встретиться в нормальных скриптах.
Manul определяет его как вредоносный по вхождению такого участка:
eval(
Как мы уже писали, Manul много чего считает опасным. Использование множества встроенных PHP функций присутствует почти в каждом скрипте и поднимать тревогу только по этому поводу нет смысла, это только затрудняет анализ отчетов по сканированиям.
ClamAV не нашел в этом коде ничего.
Вирусдай смог найти этот код целиком. Соответственно этот код может быть безопасно удален из файла, чего нельзя сказать о других антивирусах.
Возьмем другой пример с кодом примерно такого содержания:
![](https://habrastorage.org/files/c5c/2d4/828/c5c2d482841a4bb0bff2ae16526002c7.png)
Его нашли все 4 антивируса.
LMD нашел такой участок:
_']=Array(base64_decode('
Сомнительно, но имеет право на жизнь.
ClamAV:
<? $GLOBALS['_433305846_']=Array(base64_decode('' .'ZG' .'Vma' .'W5l'),base64_decode('ZmlsZV9n' .'ZXRfY2'
Хорошо, но ClamAV ищет этот код по точному вхождению. Он не сможет найти этот код при малейшем его изменении при повторном заражении. Но эта разновидность вируса редко встречается именно в таком виде и скорее всего при заражении другого сайта код будет выглядеть несколько иначе.
Manul нашел это:
$GLOBALS['_433305846_']=Array(base64_decode('' .'ZG' .'Vma' .'W5l'),base64_decode('ZmlsZV9n' .'ZXRfY2' .'9udGVudH' .'M=')
Тоже хорошо, тем более любая разновидность этого кода им тоже будет найдена, так как поиск производится по достаточно сложному регулярному выражению, охватывающему все разновидности этого кода.
Но ни в одном случае найденный код не может быть вырезан из файла. Вирусдай же определяет весь этот код от начала до конца как вредоносный и может безболезненно его вырезать при лечении. Вообще лечение файлов (имеется в виду не удаление файла, а именно вырезание вредоносного участка из файла) недоступно во всех этих антивирусах. Вирусдай тоже может вылечить не все, но многое.
Вы можете подумать, что мы специально могли взять такие примеры вирусов, которые не лечатся другими антивирусами. Это не так. Мы просто постарались выбрать примеры, наиболее наглядно показывающие разницу качества лечения. В принципе почти любой пример, который мы могли бы взять, показывал бы то же самое, но не так наглядно. Мы анализировали антивирусные базы всех антивирусов, и почти все сигнатуры в этих базах детектируют отдельные мелкие участки кода, не охватывая тело вируса целиком.
Вместо вывода
ClamAV не умеет лечить. LMD, ClamAV и Манул — бесплатные серверные утилиты, а Вирусдай — платный SaaS с поддержкой и фаерволом. Обсуждать функциональность и удобство использования каждого антивируса мы в данной статье не будем, поскольку отличий у них множество, а ограничимся только сравнением антивирусных баз. Сухая статистика говорит лучше обилия пустых слов. Да и кроме того, каждый волен выбирать себе инструмент по душе и по потребностям.