В тестировании принимали участие 20 наиболее популярных антивирусных программ класса Internet Security актуальных на дату начала тестирования версий продуктов (24.11.2010) и работающих на платформе Windows 7 x64. Среди них:
- Avast Internet Security 5.0.477
- AVG Internet Security 2011 (build 1170)
- Avira AntiVir Premium Security Suite 10.0.0.565
- BitDefender Internet Security 2011 (Build: 14.0.23.312)
- Comodo Internet Security 5.0.32580.1142
- Dr.Web Security Space 6.0 (12.0.0.58851)
- Emsisoft Anti-Malware 5.0.0.0
- Eset Smart Security 4.2.67.10
- F-Secure Internet Security 2011 (1.30.4220.0)
- G DATA Internet Security 2011 (21.1.0.5)
- Kaspersky Internet Security 2011 (11.0.2.556)
- McAfee Internet Security 2011
- Microsoft Security Essentials 1.0.2498.0
- Norton Internet Security 2011 (18.1.0.37)
- Outpost Security Suite Pro 2010 (7.0)(3409.520.1244.401)
- Panda Internet Security 2011(16.00.00)
- PC Tools Internet Security 2011 (8.1.0.0.50)
- Trend Micro Titanium Internet Security 2011 (3.0.0.1303)
- VBA32 Personal 3.12.14.1
- ZoneAlarm Security Suite 2010 (9.3.37.0)
Тест проводился на специально подготовленном стенде под управлением VMware Workstation 7.1.0 (build-261024). Для каждого антивирусного продукта клонировались "чистые" виртуальные машины под операционной системой Windows 7 (6.1.7600 x64). Хостовой операционной системой так же являлась Windows 7 (6.1.7600 x64).
При установке антивирусов использовались рекомендуемые производителем настройки по умолчанию и производились все рекомендуемые программой действия (перезагрузка системы, обновление и т.д.). Все компоненты защиты активировались, если это не было предусмотрено после установки автоматически.
Тестирование самозащиты антивирусов проводилось по следующим параметрам:
- Самозащита на уровне системы:
- изменение разрешений на доступ к файлам;
- изменение разрешений на доступ к ключам реестра.
- Защита собственных файлов:
- модификация/удаление модулей;
- удаление антивирусных баз;
- удаление после перезагрузки.
- Защита своих ключей реестра:
- модификация/удаление значимых ключей реестра (вручную):
- ключи автозапуска;
- ключи сервисов;
- ключи конфигурации.
- модификация/удаление значимых ключей реестра (вручную):
- Защита своих процессов:
- Предотвращение завершения процессов:
- из TaskManager;
- API с уровня пользователя:
- получение хендла процесса и использование ZwTerminateProcess;
- перечисление всех потоков процесса, получение хендла потока и использование ZwTerminateThread;
- получение хендла процесса и использование ZwterminateJobObject;
- получение хендла процесса и использование ZwDEbugActiveProcess;
- использование WinStationTerminateProcess.
- посылка сообщений (SendMessage API):
- нахождение главных окон процесса и посылка WM_CLOSE через SendMessage, PostMessage, SendMessageCallback, SendNotifyMessage, PostThreadMessage, SendMessageTimeout;
- нахождение главных окон процесса и посылка WM_QUIT через SendMessage, PostMessage, SendMessageCallback, SendNotifyMessage, PostThreadMessage, SendMessageTimeout;
- нахождение главных окон процесса и посылка WM_SYSCOMMAND (SC_CLOSE) через SendMessage, PostMessage, SendMessageCallback, SendNotifyMessage, PostThreadMessage, SendMessageTimeout;
- нахождение всех окон процесса и посылка всех возможных оконных сообщений в цикле через SendMessage и PostMessage.
- Модификация процесса/кода:
- инжектирование кода (CreateRemoteThread):
- получение хендла процесса и использование ZwCreateThread с адресом ExitProcess.
- инжектирование кода (Set New Thread Context):
- перечисление всех потоков процесса, получение хендла потока и использование ZwSetContextThread с адресом ExitProcess;
- перечисление всех потоков процесса, получение хендла потока и использование ZwQueueApcThread/ZwQueueApcThreadEx с адресом ExitProcess.
- инжектирование DLL;
- перечисление всех потоков процесса и вброс dll-ки, закрывающей его через SetWindowsHookEx;
- перечисление всех потоков процесса и вброс dll-ки, закрывающей его через SetWinEventHook.
- изменение атрибутов защиты памяти (Memory Attributes Modification):
- получение хендла процесса и установка на всех доступных блоках памяти атрибута PAGE_NOACCESS через ZeProtectVirtualMemory;
- получение хендла процесса и освобождение всей доступной памяти через ZwFreeVirtualMemory;
- получение хендла процесса и освобождение всеx маппированных объектов через ZwUnmapViewOfSection;
- получение хендла процесса и забивание всей доступной памяти через ZwAllocateVirtualMemory;
- получение хендла процесса и забивание всей доступной памяти через ZwMapViewOfSection.
- запись в процесса (WriteProcessMemory):
- Получение хендла процесса и уничтожение (перезапись нулями) содержимого доступных блоков памяти через ZwWriteVirtualMemory.
- модификация объектов процесса (Modification of process objects):
- получение хендла процесса и освобождение всех хендлов внутри процесса через ZwDuplicateObject;
- получение хендла процесса и полное забивание всех свободных хендлов внутри процесса через ZwDuplicateObject.
- инжектирование кода (CreateRemoteThread):
- Выгрузка драйверов.
- Предотвращение завершения процессов:
Важно! Все тестовые кейсы работают из User Mode. Проверка самозащиты от атак на уровне ядра не проверялась, так как в данном случае она теряет всякий смысл.
Проверка самозащиты производилась при помощи специально подготовленных утилит, имитирующих атаки или вручную, с правами локального администратора. После каждой атаки обязательно проводилась проверка работоспособности антивируса (его отдельных модулей, активных процессов, сервисов, драйверов, а так же проводилась проверка детектирования вредоносных программ при помощи тестового вируса EICAR).
Если в ходе тестов на завершение/модификацию процессов один из них завершался (т.е. атака на него удавалась), то все остальные процессы подвергались атаке повторно.
Шаги проведения тестирования:
- Установка антивирусной программы на чистую машину;
- Перезагрузка системы;
- Проверка успешной установки и работоспособности всех модулей программы;
- Сохранение образа виртуальной машины;
- Проверка самозащиты по одному из параметров;
- Повторная проверка работоспособности модулей программы;
- Откат системы к сохраненному ранее образу (пункт 4).
Для каждой антивирусной программы выделялась отдельная чистая виртуальная машина - шаг 1. После каждой проверки самозащиты антивируса по какому-либо критерию, машина откатывалась в первоначальное состояние - шаг 4.