Methodology for Antivirus Self-Protection Test under x64 Platform (January 2011)
We tested 20 most popular Internet Security antivirus products in their most recent versions issued by the date of the test (November 24, 2010) for Windows 7 x64. The list included:
- 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)
Testing was conducted on a specially prepared test stand running under VMware Workstation 7.1.0 (build 261024). A “clean” Windows 7 (6.1.7600 x64) virtual machines were cloned for each antivirus product. VMware Workstation ran under Windows 7 (6.1.7600 x64) as well.
The default settings recommended by each product vendor were used when installing the antivirus products. All of the actions recommended by the installation programs (e.g., system restart, updating, etc.) were performed. All protection components that were not automatically enabled after installation were enabled manually.
Testing of antivirus product self-protection capabilities included the following parameters:
- Self-protection at the system level:
- Modification of file access permissions;
- Modification of registry key access permissions.
- Protection of the antivirus product's own files:
- Modules modification/removal;
- Antivirus databases removal;
- Removal upon reboot.
- Protection of the antivirus product’s registry keys:
- Modification / deletion of important registry keys (manually):
- Startup keys;
- Service keys;
- Configuration keys.
- Modification / deletion of important registry keys (manually):
- Protection of the antivirus product’s processes:
- Prevention of process termination:
- From the TaskManager;
- User-level API:
- Getting the handle of the process and using ZwTerminateProcess;
- Getting a list of all process threads, getting the handle of the process and use of ZwTerminateThread;
- Getting the handle of the process and use of ZwterminateJobObject;
- Getting the handle of the process and use of ZwDEbugActiveProcess;
- Using WinStationTerminateProcess.
- System messages (SendMessage API):
- Getting process main window and sending WM_CLOSE using SendMessage, PostMessage, SendMessageCallback, SendNotifyMessage, PostThreadMessage, SendMessageTimeout;
- Getting process main window and sending WM_QUIT using SendMessage, PostMessage, SendMessageCallback, SendNotifyMessage, PostThreadMessage, SendMessageTimeout;
- Getting process main window and sending WM_SYSCOMMAND (SC_CLOSE) using SendMessage, PostMessage, SendMessageCallback, SendNotifyMessage, PostThreadMessage, SendMessageTimeout;
- Getting all process windows and sending all possible window events in the loop using SendMessage and PostMessage.
- Process/code modification:
- Code injection (CreateRemoteThread):
- Getting the handle of the process and using ZwCreateThread with ExitProcess address.
- Code injection (Set New Thread Context):
- Getting a list of all process threads, getting the handle of the process and use of ZwSetContextThread with ExitProcess address;
- Getting a list of all process threads, getting the handle of the process and use of ZwQueueApcThread/ZwQueueApcThreadEx with the ExitProcess address.
- DLL injection;
- Getting a list of all process threads and injection of DLL closing the process using SetWindowsHookEx;
- Getting a list of all process threads and injection of DLL closing the process using SetWinEventHook.
- Memory Attributes Modification:
- Getting the handle of the process and setting PAGE_NOACCESS attribute to every available memory unit using ZeProtectVirtualMemory;
- Getting the handle of the process deallocation all available memory using ZwFreeVirtualMemory;
- Getting the handle of the process and unmap all mapped objects using ZwUnmapViewOfSection;
- Getting the handle of the process and allocation of all available memory using ZwAllocateVirtualMemory;
- Getting the handle of the process and allocation of all available memory using ZwMapViewOfSection.
- Writing in process memory (WriteProcessMemory):
- Getting the handle of the process and override available memory using ZwWriteVirtualMemory.
- Modification of process objects:
- Getting the handle of the process and deallocation of all handles of the process using ZwDuplicateObject;
- Getting the handle of the process and allocation of all free handles of the process using ZwDuplicateObject.
- Code injection (CreateRemoteThread):
- Driver unloading.
- Prevention of process termination:
PLEASE NOTE: all tests were performed in User Mode. We did not test the kernel-level self-protection capabilities of the products as there is no use in such test in the given case.
Testing of the self-protection capabilities was conducted manually or using specially developed utilities that imitate attacks. After each attack, the correct operation of the antivirus product (including individual modules, active processes, services and drivers) was verified. Additionally we tested product malware detection capabilities by means of the EICAR test virus.
If one of the processes was terminated during processes termination/modification test (ie the attack was successful), then all the other processes have been attacked again.
- Installation of an antivirus program on a clean virtual machine.
- System restart.
- Verification of the successful installation and correct operation of all modules.
- Saving an image of the virtual machine.
- Testing of one self-protection parameter.
- Verification of the correct operation of the program’s modules.
- Rollback to the saved image (step 4)
A separate clean virtual machine was used for each antivirus program (step 1). After testing the antivirus product’s self-protection capability based on one of the criteria, the virtual machine was rolled back to its original state after product installation (step 4).