В тестировании принимали участие системы резервного копирования и восстановления данных для персонального домашнего использования, работающие на платформе Windows 7 x86. Все версии тестируемых систем являются актуальными на момент начала теста (20.12.2016). Среди них:
- Acronis True Image 2017 New Generation 20.0.0.6106
- Carbonite Home 6.2.16804
- CrashPlan Free 4.8.0.331
- EaseUS ToDo Backup Free 10.0.0.0 build 20161212
- iDrive 6.5.1.22
- Macrium Reflect Home Edition 6.3 build 1665
- NovaBackup PC 18.5 build 926
Тест проводился на специально созданном стенде на основе средства виртуализации VirtualBox 5.1.12, хостовой операционной системой являлась Windows 10 (10.0.14393 x64). Для каждой системы резервного копирования и восстановления данных клонировалась "чистая" виртуальная машина под операционной системой Windows 7 Home Premium x32 SP1 (6.1.7601). Тест проводился в среде с отключённой функцией Контроля Пользовательских Записей (UAC).
При установке средств систем резервного копирования использовались установки по умолчанию. Были активированы компоненты, отвечающие за резервное копирование как в облако, так и локально, если они присутствовали в тестируемом продукте.
Тестирование самозащиты средств резервного копирования и восстановления данных проводилось по следующим параметрам:
- Защита собственных файлов:
- модификация/удаление модулей;
- удаление после перезагрузки.
- Защита своих ключей реестра:
- модификация/удаление значимых ключей реестра (вручную):
- ключи автозапуска;
- ключи сервисов;
- ключи конфигурации.
- модификация/удаление значимых ключей реестра (вручную):
- Защита своих процессов:
- Предотвращение завершения процессов:
- из 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):
- Предотвращение завершения процессов:
- Защита объектов резервного копирования в облаке:
- Внешние манипуляции с помощью средств командной строки.
- Внутренние манипуляции с помощью кода, внедрённого в основной управляющий процесс средства резервного копирования.
- Восстановление данных из облака на жёсткий диск:
- Манипуляции с адресами удалённых серверов резервного копирования в облако с помощью модификации файла hosts.
- Полное шифрование диска с помощью шифратора-вымогателя, модифицирующего MBR.
В отличии от аналогичных тестов антивирусных программ проверки возможности выгрузки драйверов и самозащита на уровне системы (изменение разрешений на доступ к файлам и ключам реестра) для данного типа программ не учитывались. Вместо этого были добавлены проверки защиты объектов резервного копирования в облаке и проверки возможностей восстановления системных настроек из облака в случае их повреждения вредоносной программой.
Важно! Все тестовые кейсы работают из User Mode. Проверка самозащиты от атак на уровне ядра не проверялась, так как в данном случае она теряет всякий смысл. Проверка самозащиты производилась при помощи специально подготовленных утилит, имитирующих атаки или вручную, с правами локального администратора. После каждой атаки обязательно проводилась проверка работоспособности средства резервного копирования.
Если в ходе тестов на завершение/модификацию процессов один из них завершался (т.е. атака на него удавалась), то все остальные процессы подвергались атаке повторно.
Шаги проведения тестирования:
- Установка средства резервного копирования на чистую машину;
- Перезагрузка системы, если в этом есть необходимость;
- Проверка успешной установки и работоспособности всех модулей программы; Сохранение образа виртуальной машины;
- Проверка самозащиты по одному из параметров;
- Повторная проверка работоспособности модулей программы;
- Откат системы к сохраненному ранее образу (пункт 4).
Для каждого средства резервного копирования выделялась отдельная чистая виртуальная машина - шаг 1. После каждой проверки самозащиты по какому-либо критерию, машина откатывалась в первоначальное состояние - шаг 4.