Приветствую вас, читатели. Сегодня речь пойдет об очень древнем вирусе, который не только остается активным по сегодняшний день, но и постоянно совершенствуется, используя всё новые и новые методы компрометации как обычных пользователей, так и крупных компаний. И имя этому вредоносу — Smoke Loader.
Smoke Loader — это старинный дроппер, основной функцией которого является исключительно загрузка и запуск полезной нагрузки на устройстве жертвы. Более новые версии этого вредоноса способны выполнять некоторые функции стиллера и воровать конфиденциальные данные пользователей.
Дроппер — это термин, используемый для описания программного компонента вредоносного программного обеспечения (вируса), который выполняет функцию загрузки и установки другого вредоносного кода на компьютере или системе без ведома и согласия пользователя.
Дроппер-вирус может быть разработан таким образом, чтобы маскироваться под легитимный или полезный файл (программу), что позволяет ему обходить антивирусные системы и проникать в систему незаметно. После установки и запуска дроппер-вирус обычно загружает и устанавливает другие компоненты вредоносного программного обеспечения, такие как трояны, шпионские программы-шифровальщики.
Вирус распространяется по правилу MAS (Malware as Service), то есть находится в «свободной» продаже на теневых порталах примерно с января 2013 года (по мнению большинства ресурсов, но некоторые источники утверждают, что началом кампании стал 2011 год).
И совсем недавно специалистами из SecurityWorks (крупная компания, занимающаяся исследованиями в области кибербезопасности) был обнаружен новый тип полезной нагрузки Smoke Loader’a, который позволяет злоумышленникам получить детальную информацию о геолокации зараженного устройства.
Киберпреступники активно используют в своих атаках эту новую полезную нагрузку под названием Whiffy Recon для определения местоположения инфицированных устройств посредством анализа сигналов ближайших точек доступа Wi-Fi. Для этого модуль использует Google Maps и Google Geolocation API.
Google Geolocation API — это сервис от Google, который предоставляет возможность определения местоположения устройств (например, смартфонов или компьютеров) на основе данных о Wi-Fi сетях, сотовых вышках и других источниках информации о местоположении.
Этот API позволяет разработчикам приложений определять координаты (широту и долготу) устройства без необходимости использовать GPS.
Для использования Google Geolocation API разработчики должны получить API-ключ от Google и интегрировать его в свои приложения. Собственно, это и сделали злоумышленники, интегрировав ключ во вредоносный модуль, загружаемый Smoke Loader’ом.
Скорее всего, эта статья будет поделена на две части. В первой мы проанализируем современное устройство дроппера и разберемся с его инфраструктурой. А во второй части мы детально посмотрим на устройство полезной нагрузки Wifi Recon и потенциальных возможных путях её реализации.
Непосредственно Smoke Loader и его краткая история
Что меня удивило больше всего, так это количество сэмплов этого вируса — за 6 месяцев было выгружено 12,296 образцов. В контексте всего мира эта цифра может показаться незначительной, но если сравнивать с количеством сэмплов других вредоносов за этот же период, то это число просто огромно. Так, достаточно известный Agent Tesla за этот же период собрал всего-то две тысячи образцов.
Касательно методологии распространения говорить можно много, так как на протяжении всего времени своего существования Smoke Loader сменил множество способов своей доставки. Ситуация усугубляется тем, что вирус находится в продаже и множество злоумышленников могут распространять его так, как им будет угодно.
Изначально вредонос распространялся исключительно путем спам-рассылок, но со временем этот метод устарел, и его эффективность, естественно, снизилась. Поэтому преступники начали использовать более продвинутые способы доставки. Так, с середины 2015 года началась целая эпидемия.
2013 (2011) — 15.06.2015: Smoke Loader распространяется путем фишинговых рассылок, не используя практически никаких дополнительных методов. Но несмотря на это, сам вредонос постоянно развивается и доставляет всё новые и новые конечные полезные нагрузки.
Жертва получала фишинговое письмо якобы от какой-то известной компании. Во вложениях к этому письму имелся текстовый документ Microsoft Word, который содержал в себе вирусный макрос. Этот скрипт с помощью метода Invoke-RestMetod обращается по сокращенному адресу, где находится основное тело вредоноса. Ссылка была сокращена через публичный «сокращатель», которых что тогда, что сейчас целая уйма.
Вторая половина 2015 — начало 2017 года: очень смутный период для Smoke Loader’a, в котором очень трудно проследить самый популярный метод доставки. Злоумышленники начали использовать практически все доступные средства.
2017 год: вредонос начал распространяться через фейковые патчи для уязвимостей Meltdown и Spectre.
2018 год: вредонос начал продаваться вместе с банковским трояном TrickBot, что повлекло за собой целую эпидемию. Способы распространения слишком хаотичны: от рассылок до целых ресурсов, содержащих в себе приложения с вшитым Smoke Loader’oм. После этого мировое информационное сообщество наконец признало серьёзную угрозу в лице этого вредоноса. С анализом версии тех времен можете ознакомиться вот здесь.
TrickBot — это вредоносное программное обеспечение (малварь), которое изначально было создано для выполнения различных киберпреступных операций, включая кражу банковских данных и информации для доступа к банковским аккаунтам. TrickBot был обнаружен впервые в 2016 году и быстро стал одним из самых распространенных ботнетов в мире.
В этом же году вышла новая версия вируса, которая из простого дроппера превратилась в полноценный инжектор, что на то время было крайней редкостью. Метод, используемый Loader’ом, был назван PROPagate, подробнее можете почитать вот здесь. PROPagate использует функцию SetWindowsSubclass, которая применяется для изменения свойств окон, запущенных в одном сеансе. SetWindowsSubclass также может быть использована для инъекции кода и удаления файлов.
2019 год: Смок обрёл новые возможности и превратился в настоящий швейцарский нож в мире вредоносов. Теперь, помимо загрузки конечной полезной нагрузки, вредонос способен выполнять функции стиллера и воровать данные из таких приложений, как Firefox, Internet Explorer, Chrome, Opera, QQ Browser, Outlook и Thunderbird.
Эти черты закрепились за Smoke Loader с того времени. После этого периода проследить четкую хронологию событий очень трудно.
Smoke Loader — краткий статистический анализ
Список инструментов, используемых для анализа:
DIE — Detect It Easy: многофункциональный инструмент, имеющий просто огромный арсенал. Позволит нам опередить тип компилятора вредоноса, язык, библиотеки и таблицы импорта/экспорта с последующим дизассемблированием.
PE Bear — неплохой инструмент для просмотра и редактирования составляющих PE-файла.
Tiny Tracer — утилита для динамического отслеживания исполнения бинарных элементов. Так называемый трейсер.
IDA PRO — инструмент для реверс-инжиниринга.
Reko — декомпилятор, также знаком нам с прошлых статей.
HollowHunter — утилита распознает и сбрасывает множество потенциально вредоносных имплантов (замененные/имплантированные PE, шелл-коды, перехватчики, патчи в памяти).
Для анализа мы будем использовать последний существующий образец из классического метода распространения вредоноса. То есть первичной полезной нагрузкой здесь будет выступать с виду ничем не примечательный текстовый документ в формате RTF. Путем нехитрых манипуляций мы можем извлечь само тело вредоноса. Примечательно, что сам макрос никак не обфусцирован, сокращенная ссылка ведет на анонимный файлообменник AnonFiles, который уже неоднократно фигурировал в статьях.
Сегодняшний образец Smoke Loader имеет вес в 213 КБ, какую-то непонятную темную иконку и никакой информации больше. По традиции воспользуемся VirusTotal’ом для определения реакции большинства популярных антивирусов на этот файл. 27 антивирусов из 66 считают, что этот файл вредоносный, остальные же угрозы в нём не видят. Примечательно, что такие популярные антивирусы, как Avast и ESET игнорируют этот файл. Выводы о том, какому антивирусу доверять свою безопасность, а какому нет, делайте сами. Я же предоставляю здесь сухие факты.
А мы переходим к более детальному анализу. Воспользуемся DIE для получения более подробной информации о файле. Занимательно, что время компиляции конкретно этого образца не было изменено, подобное отклонение от нормы можно встретить крайне редко. В остальном Смок написан на Microsoft Visual C++ и представляет собой 32-битный исполняемый файл PE, а в качестве компилятора был использован дефолтный Microsoft linker.
В попытках получить больше информации я воспользовался инструментом PE Studio и обнаружил следующую информацию, которая ранее была упущена. Она не является критически важной: исходное имя файла (Primavera.exe), копирайтинг (Challangers bojala) и описание (Somebody).
Также примечательно, что разделы этого PE-файла выглядят вполне вменяемо, в отличие от импортируемых им вызовов, но об этом поговорим уже немного позже.
Самое время для того, чтобы представить примерную цепочку работы данного инжектора:
Первичная полезная нагрузка: здесь присутствует целое изобилие вариантов, но в нашем случае это вредоносный документ .RTF.
Вторичная полезная нагрузка: первичный инжектор/дроппер основного тела вредоноса, который основан на шеллкодах.
Третичная полезная нагрузка: непосредственно Smoke Loader.
Четвертичная полезная нагрузка: конечный доставляемый вредоносный файл.
Shellcode — это небольшой исполняемый код, обычно написанный на языке ассемблера, который выполняется внутри оболочки (shell) операционной системы или другого уязвимого программного компонента. Обычно shellcode используется для эксплуатации уязвимостей в программном обеспечении, чтобы получить несанкционированный доступ к системе или выполнить определенные действия.
Вторичная полезная нагрузка: первичный инжектор\дроппер основного тела вредоноса
Для определения порядка работы этого шеллкода мы воспользуемся утилитой TinyTracer, которая позволит нам детально разобраться в используемых вызовах и их порядке. Подобная специфика анализа не только позволит детально увидеть работу первой ступени, но ещё и существенно сэкономит время. Также стоит отметить, что Смок использует потрясающие методы антианализа, поэтому даже вторичную полезную нагрузку предельно сложно расшифровать.
После запуска Tiny Tracer не происходит ничего особенного, затем программа выдает ошибку, сообщая нам, что ей не удалось проследить за выделенным процессом. И это является нормой. Давайте перейдем в лог-файл и посмотрим порядок действий вредоноса.
Первоначально шеллкод выделяет участок памяти с помощью системного вызова LocalAlloc, и сразу после этого вредонос меняет защиту выделенного участка памяти посредством вызова функции VirtualProtect, тем самым делая область доступной для редактирования.
После этого Смок создаст в ранее выделенной области несколько пустых процессов в приостановленном состоянии, затем он выделит только два из них с помощью вызова VirtualAlloc и запишет исполняемый файл следующего этапа, используя вызов ZwWriteVirtualMemory.
Подобную технику мы уже встречали при анализе инжектора DotRunPex, и называется она Process Hollowing.
Process Hollowing — это техника, которая часто используется в кибербезопасности и разработке вредоносных программ, чтобы скрыть вирусную активность и обойти системные механизмы обнаружения. Эта техника включает в себя создание нового процесса в операционной системе и внедрение в него вредоносного кода.
На этом и обрывается выполнение этого файла. В принципе, он больше нас не интересует, теперь нам нужно сбросить основной шеллкод и провести его анализ.
Третичная полезная нагрузка: непосредственно Smoke Loader
Естественно, для этого мы будем использовать утилиту Hollows Hunter, сам процесс перехвата является слишком простым, чтобы его здесь описывать. Я не считаю необходимым описывать запуск утилиты через CMD, поэтому сразу перейдем к результату.
Теперь перед нашими глазами находится основное тело Smoke Loader’a. Примечательно то, что это приложение имеет схожие характеристики с инжектором второго этапа. Размер файла практически идентичен, да и иконка та же. Визуально можно заметить лишь одно различие — отсутствие любой информации. Вместо её здесь вставлен символ пустоты из юникода.
Воспользовавшись DIE, мы получаем практически идентичную информацию, за исключением даты компиляции. Ну и процент обнаружения антивирусными программами практически 100%.
Итак, теперь мы задействуем IDA и попытаемся провести полноценное вскрытие этого вируса. Предупреждаю, что Smoke Loader известен своими шикарными методами, затрудняющими анализ, поэтому работы здесь будет очень много.
Сразу после открытия образца в IDA нас встречает вот это:
На самом деле это не является чем-то критичным, и решить первую проблему, которая затрудняет наш анализ достаточно просто. Здесь злоумышленники использовали метод непрозрачных предикат.
Метод непрозрачных предикат — это широко используемый метод для затруднения деобфускации кода путем запутывания потока управления. Существует множество схем реализации этой техники, но в Смоке используется одна из самых простых.
За основу был взят переход JMP и преобразован в два условных перехода JZ и JNZ, в зависимости от заданных злоумышленником значений процесс выполнение пойдет по одному из этих переходов. IDA и другие дизассемблеры, видя, что существует неисполняемая ветвь, пытаются расшифровать недоступные функции. Это приводит к обильному количеству мусорного кода.
Но обойти это достаточно просто— достаточно лишь определить переход, который ведет к основному потоку выполнения. В нашем случае это JNZ и удалить JZ. Первый механизм защиты был уничтожен.
Также вредонос проверяет наличие подключенных отладчиков. Сделано это с помощью функции BeingDebugged. Если вредонос получает позитивный ответ, то поток выполнения будет перемещен в недопустимую ячейку памяти и оборвется. Я не знаю, как это обойти, поэтому оставим так.
Следующим методом, затрудняющим анализ является шифровка всех основных функций. Она реализована с помощью простого XOR со смещением в один байт. Выглядит это примерно так:
Для расшифровки мы воспользуемся IDAPython и простеньким кодом, который был разработан для расшифровки подобного. Ознакомиться с ним можно здесь.
После завершения процесса расшифровки мы получаем уже более или менее читаемый код. Но даже так Smoke Loader после использования каждой зашифрованной функции, шифрует их заново. Думаю, что все мы понимаем, для чего это делается. Таким образом, использование того же трассировщика TinyTracer не даст никаких результатов.
Далее идет уже стандартная защита для большинства вредоносов, они не хранят список необходимых API вызовов напрямую, а хранят список их хешей.
Для создания хешей был использован алгоритм djb2, и выглядит он следующим образом:
unsigned long hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while ((c = *str++))
{
hash = ((hash << 5) + hash) + c;
}
return hash;
}
Как работает этот алгоритм:
Инициализируется переменная hash значением 5381. Это начальное значение хэш-кода.
Затем функция проходит по каждому символу во входной строке (последовательности байтов) и выполняет следующие операции: умножает текущее значение на 33.
Добавляет значение текущего символа С к хэшу. Этот процесс продолжается для каждого символа во входной строке.
В конечном итоге хэш содержит финальное значение хэш-кода для входной строки.
Со списком используемых вызовов можете ознакомиться вот здесь.
И последним механизмом защиты является АнтиВМ, то есть обнаружение виртуальной среды исполнения. Организовано все достаточно просто. Вредонос считывает все подразделы реестра Windows следующего ключа:
System\CurrentControlSet\Enum
В случае обнаружения формулировок VMWare, Virtual Box, Quemo и прочих программа прекращает свою работу.
Непосредственно внедрение конечной полезной нагрузки
Смок Лоадер использует достаточно простой, но эффективный метод — PROPagate. Подробное описание процесса внедрения займет очень много места. А эта статья и без того уже огромна. А раз я уже решил писать вторую часть о модуле WifiRecon и конечной полезной нагрузке, то и процесс внедрения будет там.
Выводы
Smoke Loader — действительно серьезная угроза для мировой безопасности. Несмотря на свой огромный возраст как для вредоноса, он не только остается активным, но и постоянно развивается. На данный момент все известные версии Smoke Loader могут быть обезврежены с помощью популярных антивирусов. Тем не менее не стоит пренебрегать защитой. А на этом у меня все. Увидимся в следующей части.
Автор статьи @DeathDay
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
— 15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.