Как современные вредоносные программы обходят мониторинг процессов

Как современные вредоносные программы обходят мониторинг процессов

Одна из основных задач любого антивируса (AV) заключается в отслеживании активности всех процессов. Вредоносные программы, в свою очередь, хотят избежать своего детектирования антивирусом.

Авторы: Michael Vincent, Abhishek Singh

Одна из основных задач любого антивируса (AV) заключается в отслеживании активности всех процессов. Вредоносные программы, в свою очередь, хотят избежать своего детектирования антивирусом. Большинство руткитов стараются “залечь тише воды, ниже травы”. Подобной стратегии придерживаются и современные вредоносные программы при обходе антивирусов и систем безопасности корпоративного уровня.

Так как же вредоносным программам удается избежать детектирования при запуске нового процесса? Очень легко: под прицел попадает непосредственно ядро операционной системы. Для мониторинга создания и завершения процессов в ядре Windows, системы безопасности обращаются к функции ядра PsSetCreateProcessNotifyRoutine, предоставляемой Microsoft. Когда происходит создание или завершение процесса, PsSetCreateProcessNotifyRoutine создает соответствующее оповещение. В дальнейшем, системы безопасности используют полученную информацию о процессах, чтобы отследить активность системы и защитить критические ресурсы.

В операционных системах семейства Windows существует массив объектов обратного вызова, который начинается с адреса PspCreateProcessNotifyRoutine. В Windows XP SP2 можно зарегистрировать до восьми объектов обратного вызова. Но к несчастью для разработчиков не из Microsoft’а, указатель PspCreateProcessNotifyRoutine не экспортируется, и открытого метода регистрации на оповещения для сторонних приложений не существует.

Тем не менее, были обнаружены вредоносные программы, которые пытаются получить доступ к PspCreateProcessNotifyRoutine (внутреннему указателю), чтобы удалить все объекты обратного вызова. После того, как будут удалены функции обратного вызова антивируса, вредоносная программа сможет беспрепятственно создавать и завершать процессы по своему усмотрению. Давайте разберемся подробнее, как проводится такая атака.

Рисунок 1. PsSetCreateProcessNotifyRoutine ntoskrnl.exe

В первую очередь необходимо найти внутренний указатель PspCreateProcessNotifyRoutine. Беглый просмотр реализации PsSetCreateProcessNotifyRoutine в ntoskrnl.exe с помощью IDA Pro показывает, что смещение PspCreateProcessNotifyRoutine находится внутри PsSetCreateProcessNotifyRoutine (см. Рисунок 1 выше). Ниже на Рисунке 2 представлен фрагмент кода вредоносной программы, полученный с помощью обратного проектирования. Фрагмент демонстрирует, как авторы вредоносной программы анализируют структуру PsSetCreateProcessNotifyRoutine в ntoskrnl.exe и используют полученную информацию для реализации атаки.

Рисунок 2. Получение смещения PspCreateProcessNotifyRoutine

Реализация атаки довольно проста (см. Рисунок 2). В первую очередь определяется номер сборки Windows, который содержится в экспортированной переменной NtBuildNumber. Для Windows XP номер сборки равен 2600 (0a28 в шестнадцатеричной системе). Следующим шагом получают адрес времени выполнения функции PsSetCreateProcessNotifyRoutine.

Фрагмент кода под меткой jmp_PsSetCreateProcessNotifyRoutine содержит команду перехода jmp на внешнюю функцию PsSetCreateProcessNotifyRoutine. Как видно из Рисунка 3, размер команды jmp равен двум байтам. Поэтому, интересующий нас адрес функции PsSetCreateProcessNotifyRoutine в памяти находится по смещению jmp_PsSetCreateProcessNotifyRoutine + 2.

Для версии сборки NtBuildNumber равной 2600 код команды ‘mov edi’ – 0xBF, а команды ‘push edi’ – 0x57. Теперь осталось только просканировать машинный код и найти фрагмент, в котором пятым по счету байтом после 0xBF был бы байт 0x57. Сразу же за 0xBF следует адрес PspCreateProcessNotifyRoutine в памяти. И это все! Дальнейшие действия эксплойта тривиальны. Нужно просто перейти на указатель PspCreateProcessNotifyRoutine и занулить все объекты обратного вызова.

Рисунок 3. jmp_PsSetCreateProcessNotifyRoutine

Заключение: Любую корпоративную или пользовательскую систему безопасности, которая использует мониторинг процессов обычным образом, можно легко обойти. К счастью, все продукты FireEye защищены от атаки, описанной в данной статье: любой вредоносный процесс будет надлежащим образом отслеживаться и идентифицироваться.

Тени в интернете всегда следят за вами

Станьте невидимкой – подключайтесь к нашему каналу.