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

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

В качестве испытуемых были выбраны пять антивирусов. В этом краштесте я буду пытаться обойти AV-продукты от Avast, Avira, AVG, Comodo, ClamAV. А теперь — немного конкретики о версии каждой программы и ее настройках.

Представляем подопытных

 

Avira AntiVir Personal

Первый в списке тестируемых антивирусов: Avira AntiVir Personal — Free Antivirus. Версия 9.0.0.13. В этом продукте присутствует один модуль, который, похоже, выполняет роль проактивной защиты — AntiVir Guard. Его я, естественно, включил. Опции довольно скудные, помимо настройки «агрессивности» анализа я больше ничего из того, что могло бы повлиять на качество защиты в реальном времени, не обнаружил.

 

avast! FREE Antivirus

Следующий подопытный — avast! FREE Antivirus, версия 110319-1. У аваста, в отличие от авиры, есть целая секция «Экраны в реальном времени». Я убедился, что все модули (а особенно «Экран поведения» — видимо, у аваста проактивная защита именуется именно так), входящие в эту секцию, включены.

 

AVG Anti-Virus Free Edition

Последний антивирус в нашем тесте, который начинается на букву «a» — AVG. Я тестировал AVG Anti-Virus Free Edition, версия 10.0.1204. Этот антивирус не отличается большим количеством настроек. Насколько я понял, проактивная защита представлена в компонентах Resident Shield, Anti-Rootkit, Anti-Virus и Identity Protection.

 

ClamAV

Продукт Immunitet 3.0 от ClamAV довольно прост в использовании. Большинство настроек представлено radiobutton’ами — «да» или «нет». Защиту в реальном времени здесь обеспечивает компонент Monitor Program Start. Я дополнительно включил детектирующий движок ClamAV, который был по умолчанию отключен. Отмечу, что при установке я выбрал версию Free (Cloud + AV), а не Trial, которая значительно превосходит бесплатный аналог по функциональности.
Тестировался продукт версии 3.0.0.18.

 

Comodo Antivirus Free

Последний исследуемый антивирусный продукт — Comodo Antivirus Free, версии 5.3.181415.1237. В Comodo, в отличие от предыдущих антивирусов, присутствуют очень богатые настройки — интерфейс предлагает нашему вниманию огромное количество галочек и ползунков. Проактивная защита обеспечивается компонентой Defense+, которая также гибко настраивается. Я выбрал максимальный уровень защиты, установив Paranoid Mode, который, правда, практически не отличается от Safe Mode.

Сама методика тестирования очень простая: каждый тестовый файл запускается, а затем я фиксирую (или не фиксирую) предупреждение от антивируса.
А теперь к самому интересному — тестовые файлы.

 

Тест первый: прописываемся в автозапуск

Простейший вариант — просто чтобы проверить, работает ли проактивная защита вообще. Итак, первый тестовый образец всего лишь прописывает сам себя в «святая святых» Windows — автозапуск по ключу реестра hklmsoftwarewindowscurrentversionrun. Часть исходного кода:

wchar_t szFullPath[MAX_PATH] = {0};
GetModuleFileNameW(0, szFullPath, MAX_PATH);
HKEY hKey = 0;
RegOpenKeyW(HKEY_LOCAL_MACHINE, L"Software\Microsoft\ Windows\CurrentVersion un", &hKey);
UINT ExitCode = RegSetKeyValueW(hKey, 0, L"MalwareAutorun", REG_SZ, szFullPath, lstrlenW(szFullPath) + 1);

Алгоритм работы этой программы очевиден — получение полного пути самого себя и последующая запись в автозагрузку в реестре. Это один из самых популярных у зловредов вариантов добавления программы в автозапуск. И каковы результаты? Довольно странно, но самый примитивный способ закрепления зловреда в системе был обнаружен только двумя антивирусами: Avast и Comodo обнаружили угрозу, остальные же не помешали записи в авторан.

 

Тест второй: получаем права отладчика

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

HANDLE hToken = 0;
UINT nReturnCode = 0;
LUID UID = {0};
TOKEN_PRIVILEGES TokenPrivileges = {0};
nReturnCode = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
nReturnCode = LookupPrivilegeValueW(0, SE_DEBUG_NAME, &UID);
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Luid = UID;
TokenPrivileges.Privileges[0].Attributes = 0;
nReturnCode = AdjustTokenPrivileges(hToken, false, &TokenPrivileges, 0, 0, 0);

Код довольно примитивен — получаем токен текущего процесса, а затем ему назначаются привилегии отладчика с помощью функции AdjustTokenPrivileges. И что же? Снова Comodo и Avast справились с этой «угрозой», остальные спокойно промолчали. Ситуация весьма удручающая.

 

Тест третий: инжект в память чужого процесса

Сделаем пример посложнее, а именно — программку, выполняющую инжект в память другого процесса. Под «инжектом» я подразумеваю выделение памяти в чужом процессе, запись туда своего кода и дальнейший старт удаленного потока. Этот метод можно назвать классическим среди современных вирусов, так как он позволяет выполнять вредоносные действия «под» доверенным процессом. Фрагмент кода программы-образца:

UINT nReturnCode = 0;
HANDLE hExplorerProcess = 0,
hSnapshot = 0, hRemoteThread = 0;
PROCESSENTRY32W pe32 = {0};
UINT ExplorerID = 0;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof(PROCESSENTRY32);
Process32FirstW(hSnapshot, &pe32);
if(!lstrcmpiW(pe32.szExeFile, L"explorer.exe"))
ExplorerID = pe32.th32ProcessID;
else
{
for( ; nReturnCode = Process32NextW(hSnapshot, &pe32) ;)
{
if(!lstrcmpiW(pe32.szExeFile, L"iexplore.exe"))
{
ExplorerID = pe32.th32ProcessID;
break;
}
}
}
if(!ExplorerID)
return 0;
CloseHandle(hSnapshot);
hExplorerProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, ExplorerID);
PVOID pExplorerMemory = VirtualAllocEx( hExplorerProcess, 0, 0x3000, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
nReturnCode = WriteProcessMemory (hExplorerProcess, pExplorerMemory, ThreadFunc, 0x1000 ,0);
hRemoteThread = CreateRemoteThread(hExplorerProcess, 0, 0, (LPTHREAD_START_ROUTINE) pExplorerMemory, &ExplorerID, 0, 0);

Здесь с помощью функций Process32First/Process32Next я ищу необходимый мне процесс iexplore.exe. Далее, когда он найден, я получаю ID процесса, хэндл процесса и выделяю в адресном пространстве последнего регион памяти с помощью VirtualAllocEx. После этого я записываю в выделенную память код моего потока ThreadFunc:

static DWORD ThreadFunc(LPVOID lpThreadParameter)
{
return 0;
}

Завершающий этап — запуск удаленного потока — выполняется с помощью функции CreateRemoteThread. И как справились с этим антивирусы? Да абсолютно аналогично: Avast и Comodo обнаружили «угрозу», а остальные — нет. Хотя антивирус AVG и выдал предупреждение о неизвестной угрозе, но сделал он это только после того, как удаленный поток стартовал. Кроме того, Anti-Virus Free Edition выдавал предупреждения через раз, поэтому я поставил ему +/- за этот файл.

 

Тест четвертый: глобальные хуки

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

Фрагмент кода основного файла:

HMODULE hDll = LoadLibraryW(L"DLL.dll");
PVOID pHookProc = (PVOID)GetProcAddress(hDll, "HookProc");
HHOOK hHook = SetWindowsHookExW(WH_KEYBOARD, (HOOKPROC)pHookProc, hDll, 0);
Фрагмент кода DLL:
EXTERN_C __declspec(dllexport) DWORD HookProc( int code, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(0, code, wParam, lParam);
}

Чтобы перехватывающая функция обрабатывала все события в системе, она должна быть помещена в DLL в виде экспортируемой функции. Поэтому вначале я получаю базовый адрес вспомогательной библиотеки с помощью LoadLibrary, а затем адрес экспортируемой функции HookProc из последней библиотеки. Далее API’шка SetWindowsHookEx устанавливает хук на клавиатуру. Код экспортируемой функции в DLL вполне тривиален. Как на это отреагировали испытываемые антивирусы? Внедрение библиотеки обнаружил только Comodo. Даже Avast, который успешно отбивал «атаки» трех предыдущих поделок, сдал. О других антивирусах я вообще молчу — они также ничего не выдали.

 

Тест пятый: модификация hosts

Ну и напоследок я решил проверить, как же антивирусы реагируют на модификацию системного файла hosts, который отвечает за привязку определенных доменных имен к IP-адресам. Фрагмент кода, ответственного за правку hosts:

HANDLE hFile = CreateFileW(L"C:\windows\system32\drivers\etc\hosts", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
HANDLE hMapping = CreateFileMappingW(hFile, 0, PAGE_READWRITE, 0, 0, 0);
PVOID pHosts = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
memcpy(pHosts, MalwareHost, lstrlenA(MalwareHost));
memcpy((char*)pHosts + lstrlenA(MalwareHost), EndingBytes, sizeof(EndingBytes));

Код не должен вызывать вопросов — все просто и очевидно. Я решил использовать не связку ReadFile/WriteFile, а маппирование файлов с помощью MapViewOfFile, исключительно для удобства. С этим заданием справились опять же только продукты от Avast и Comodo, что, в общем-то, было уже ожидаемо.

 

Заключение

Бесплатные версии продуктов показали себя не с лучшей стороны — их проактивка не мониторит даже совершенно стандартную вирусную активность. Может быть, платные версии справились бы лучше? Как знать, как знать. С другой стороны, во всем можно найти положительные стороны — помнишь нашу статью про тест халявных антивирусов и защиту от drive-by угроз (xakep.ru/post/54161/default.asp)? Вроде бы, в нем они неплохо себя показали…

2 комментария

  1. 08.07.2014 at 21:14

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

  2. http://adrenalin-orsk.ru

    15.03.2015 at 13:13

    Тоже использовал Comodo. Даже мастерил локальное зеркало обновлений на Linux сервере.

Оставить мнение

Check Also

Что можно сделать с iPhone, зная пасскод. Как сливают данные, уводят iCloud и блокируют остальные устройства

Последние несколько месяцев мы много писали о нововведениях в iOS 11. «Теперь-то заживем!»…