Несколько месяцев назад мы писали о PowerLoader. Этот вредоносный код использует интересный метод повышения привилегий в контексте explorer.exe. Исходные тексты PowerLoader, которые оказались доступными для общественности, используются и в других семействах вредоносных программ. Например, дропперы буткита Win32/Gapz основаны на этом коде PowerLoader. В августе мы обнаружили новую модификацию PowerLoader для 64-битных ОС (обнаруживается ESET как Win64/Vabushky.A). Эта модификация использует три эксплойта для поднятия своих привилегий в системе (Local Privelege Escalation): MS13-053 (CVE-2013-3660), MS12-041 (CVE-2012-1864), и MS12-042 (CVE-2012-0217). Использование таких эксплойтов ранее не наблюдалось в семплах PowerLoader или родственных ему семействах. Александр Матросов выполнил анализ этого вредоносного ПО.
Вредоносный код Win64/Vabushky является хорошим примером того, как быстро злоумышленники обновляют свои проекты с использованием исходных текстов Carberp. Два 64-битных эксплойта (CVE-2012-1864 и CVE-2012-0217) из нового PowerLoader основаны на исходных текстах Carberp. Стоит так же отметить, что код PowerLoader, который стал доступен для общественности в апреле 2013, спровоцировал новую волну распространения дропперов, основанных на нем.
Дропперы Win64/Vabushky упакованы с использованием MPRESS, поскольку этот упаковщик один из немногих свободно распространяемых продуктов, который поддерживает 64-битные файлы формата PE32+. После распаковки дроппер извлекает оригинальный PE32+ заголовок с временем компиляции как указано ниже.
Все файлы включают в себя полезную нагрузку, скомпилированную в начале августа. В таблице экспорта этой версии PowerLoader можно увидеть изменения по сравнению с более старой версией.
После внедрения кода в explorer.exe, PowerLoader пытается исполнить следующие эксплойты в контексте доверенных процессов.
Подобный набор эксплойтов может быть использован для обхода некоторых типов песочниц (sandbox), которые используются в security-продуктах, поскольку эти эксплойты используют прямое манипулирование объектами ядра из пользовательского режима с использованием легальных Win32 API.
CVE-2013-3660
В марте исследователь из Google Security Team Tavis Ormandy (@taviso) обнаружил уязвимость CVE-2013-3660, которая была закрыта июльским бюллетенем MS13-053. Мы не наблюдали 64-битную версию этого эксплойта до появления новой модификации PowerLoader, в то время как PoC x86 версии является доступным для общественности.
Перед непосредственно эксплуатацией, код эксплойта создает второй объект рабочего стола (user32!CreateDesktopA) для сокрытия факта работы с GDI объектами.
Основной код эксплуатации приведен ниже на рисунке.
Шелл-код, который исполняется с помощью nt!NtQueryIntervalProfile, выглядит следующим образом.
Данный код эксплуатации не работает в 64-битной Windows 8, посольку не способен обойти аппаратную технологию Intel SMEP (Supervisor Mode Execution Protection), которую программно поддерживает новая ОС. SMEP блокирует исполнение страниц кода пользовательского адресного пространства в режиме ядра и в 64-битной версии Windows 8 может быть обойден с использованием ROP. Однако Intel уже анонсировали другую защитную технологию SMAP (Supervisor Mode Access Prevention), которая вводит дополнительные ограничения на доступ к страницам памяти. Обе этих технологии SMAP и SMEP разработаны для предотвращения эксплуатации уязвимости типа NULL pointer dereference в режиме ядра, но SMAP еще не поддерживается в Windows.
CVE-2012-0217 и CVE-2012-1864
Код эксплойтов этих уязвимостей основан на утекших исходных текстах Carberp. Мы не наблюдали 64-битные версии CVE-2012-1864 ITW до того, как тексты Carberp стали доступны общественности. Код эксплуатации CVE-2012-0217, который доступен общественности, не работает стабильно на 64-битных версиях ОС. После инспекции исполняемых файлов эксплойтов в текстах Carberp было установлено, что в них указан один и тот же путь к build-директориям.
Это свидетельствует о том, что эксплойты разрабатывались на одной системе и, возможно, одним человеком. Код эксплойта CVE-2012-0217 значительно отличается от публично доступного PoC, который демонстрирует возможности эксплуатации. Версия эксплойта из текстов Carberp является более стабильной и поддерживает 64-битные ОС. Ниже показаны совпадения в блоках кода этих версий эксплойта для CVE-2012-0217 (слева указан код из PowerLoader).
На первый взгляд они кажутся очень похожими. Основные отличия встречаются только в дополнительном debug-коде, который не включен в модификацию PowerLoader. Кроме этого, в нем существуют несколько методов для того, чтобы сделать эксплуатацию более стабильной.
Этот код обеспечивает модификацию nt!HalDispatchTable для того, чтобы избежать стопроцентной загрузки CPU несколькими потоками во время эксплуатации.
Эксплойт для CVE-2012-1864 так же не был доступен публично до появления новой модификации PowerLoader. Сама уязвимость была обнаружена Tarjei Mandt (aka @kernelpool) из Azimuth Security. Детали уязвимости были обнародованы в его докладе «Smashing the Atom» на конференции RECon в июне 2012, но код эксплуатации не был опубликован для общественности. Код эксплойта из PowerLoader выглядит более оптимизированным и не содержит какой-либо отладочной информации. Ниже показаны различия в различных версиях этого эксплойта, на втором скриншоте версия из PowerLoader, в которой отсутствует вывод отладочной информации.
Оба этих эксплойта для CVE-2012-0217 и CVE-2012-1864 уязвимостей являются хорошими примерами обхода режима sandbox в security-продуктах. Эксплойты умеют манипулировать объектами режима ядра из пользовательского режима с использованием стандартных WinAPI. Хорошее описание способов обхода песочниц с использованием таких типов уязвимостей представлено в презентации «Application Sandboxes: A Pen-Tester’s Perspective».
Полезная нагрузка
После успешного исполнения кода PowerLoader и повышения привилегий, на компьютер пользователя загружается вымогатель (ransomware) Win64/Vabushky.A. Файл вымогателя исполняется после того, как загрузчик поднял текущие привилегии до максимальных, т. е. SYSTEM. Дроппер Win64/Vabushky использует трюк с легитимным self-generated certificate и его последующей установкой в локальное хранилище как коревой ЦА, т. е. ROOT CA и TrustedPublisher. Следующий код демонстрирует эту технику.
Этот трюк не является новым и уже упоминался в анализе Mandiant «The “Hikit” Rootkit: Advanced and Persistent Attack». Кроме этого, во время процесса установки, вредоносный код модифицирует данные Boot Configuration Data (BCD) для активации режима test-signing, который позволяет загружать неподписанные драйверы. На следующем рисунке представлены разделы реестра, в которые производится инсталляция драйвера.
Следующим шагом является установка в систему вредоносного драйвера для блокирования системы и демонстрация экрана с определенной обложкой, которая скачивается с одного из URL-адресов, жестко зашитых в самом коде.
После всех действий вредоносной программы пользователь получает заблокированный рабочий стол.
Win64/Vabushky осуществляет шифрование файлов пользователя с использованием Microsoft CryptoAPI. После шифрования к файлу дописывается расширение .crypted. Код драйвера использует стандартные приемы блокировки крана и не заслуживает детального обсуждения.
Заключение
Дроппер Win64/Vabushky использует интересную модификацию кода PowerLoader. В нем используются LPE-эксплойты для 64-битных ОС из исходных текстов Carberp. Все модули и компоненты, извлекаемые Win64/Vabushky используются именно для 64-битной версии ОС Windows. Кроме этого, CVE-2013-3660 может эксплуатировать 32-битную версию Windows 8, что делает его универсальным. В то же время, в силу ограничений Intel SMEP и его поддержки в Windows 8, код эксплуатации не может работать для 64-битной версии ОС. Таким образом усилия Microsoft по обеспечению дополнительных security-механизмов в Windows 8 действительно оправдываются в случае защиты пользователя от действий эксплойтов.
Автор: esetnod32