Перейти к содержанию
Tech Threat Lab
TTL

Pony/Fareit: как исторический загрузчик крал учетные данные и доставлял вторую стадию

Pony/Fareit: как исторический загрузчик крал учетные данные и доставлял вторую стадию

Pony — Windows-троян для кражи учетных данных со встроенным загрузчиком дополнительных полезных нагрузок. Семейство также известно как Fareit и Siplog; его впервые обнаружили в 2011 году.

В рассмотренных кампаниях Pony распространялся через защищенный паролем ZIP-архив во вложении к спам-письму и через ссылку на файл с расширением .scr. После запуска троян собирал сохраненные данные приложений, передавал их оператору по HTTP и мог загрузить следующую стадию. Это исторические примеры: они сами по себе не подтверждают текущую активность Pony против российских организаций.

Распространению Pony способствовала не столько техническая сложность, сколько утечка исходного кода Pony Loader и графического конструктора Pony Builder. Операторы могли собирать собственные варианты, задавать инфраструктуру, менять упаковку и включать нужные модули сбора данных. Поэтому в разных кампаниях встречались уникальные исполняемые файлы при сохранении базовой логики семейства.

Что делает Pony

Pony совмещает две функции в одном бинарном файле: похищает данные и доставляет последующие полезные нагрузки на уже скомпрометированное устройство. Троян извлекает сохраненные учетные данные из браузеров, FTP-, почтовых, терминальных и SSH-клиентов, мессенджеров, программ обмена файлами и других приложений.

После сбора данных Pony передает их на панель управления, контролируемую злоумышленником, по HTTP. Если это предусмотрено конфигурацией, встроенный загрузчик получает и запускает дополнительные исполняемые файлы — в частности, банковский троян или программу-вымогатель.

Почему у семейства много вариантов

Исходный код загрузчика и Pony Builder попали в открытый доступ и распространялись на подпольных форумах. Конструктор работал по принципу «укажи и щелкни», поэтому создавать варианты могли не только разработчики.

При сборке оператор задавал URL-адреса для отправки похищенных паролей и получения второй стадии, выбирал значок для маскировки бинарного файла, а также активировал отдельные параметры, включая «Активировать загрузчик» и «Не запускать дубликаты файлов».

Конфигурация встраивалась в экземпляр на этапе компиляции. Сборки можно было дополнительно упаковать новым пакером, чтобы затруднить сигнатурное обнаружение. В результате Pony использовался в несвязанных кампаниях и может рассматриваться как вредоносное ПО начального доступа: его роль не ограничивается кражей данных, поскольку конкретные сборки способны доставить следующие этапы атаки.

Последовательность работы в описанных образцах

Ниже приведены действия, выявленные в рассмотренных образцах Pony. Наличие отдельных пунктов зависит от конкретной сборки и ее конфигурации: в частности, модули сбора данных, загрузчик второй стадии, работа с локальными учетными записями, копирование файла и самоудаление не следует считать обязательными признаками каждого варианта семейства.

  • Определяет характеристики зараженной системы: архитектуру, аппаратные идентификаторы и пути к пользовательским данным.
  • Перебирает приложения и извлекает сохраненные учетные данные из FTP-клиентов, браузеров, почтовых клиентов, мессенджеров, терминальных и SSH-клиентов, программ обмена файлами и других источников.
  • В образцах с соответствующим модулем перечисляет локальные учетные записи Windows и пытается подобрать к ним пароль из встроенного словаря распространенных паролей.
  • Передает собранные данные на C&C-панель по HTTP.
  • При включенном загрузчике загружает и запускает одну или несколько дополнительных полезных нагрузок.
  • В описанной реализации копирует себя в профиль пользователя, а после запуска второй стадии может удалить загрузчик с диска, сокращая число артефактов для криминалистической экспертизы.

Таким образом, в описанных образцах логика включала доставку, распаковку, противодействие анализу, сбор учетных данных и словарный подбор паролей к локальным учетным записям, эксфильтрацию, загрузку второй стадии и самоудаление. Это не универсальная последовательность для всех сборок Pony.

Доставка: спам, ZIP-архивы и .scr

Pony почти всегда доставлялся через спам, но приманки и форматы файлов различались. В рассмотренных примерах использовались защищенный паролем ZIP-архив и ссылка на исполняемый файл, замаскированный расширением .scr.

Архив с паролем в тексте письма

В кампании 2013 года письмо имитировало «безопасное уведомление по электронной почте» от финансовой организации. Отправителем был указан «Fiserv Secure Notification» <secure[.]notification[at]fiserv[.]com>, но адрес был поддельным. К сообщению прикладывался файл SecureMessage_PS9AXIJV2G7OI6I.zip, а пароль lu1JsoKaQ был указан прямо в тексте письма.

В архиве находился SecureMessage_06032013.exe — исполняемый файл Pony. В этой кампании загрузчик затем доставлял банковский троян ZeuS/Zbot.

Парольный архив в этом случае важен не как отдельный признак Pony, а как элемент доставки: получателю предлагают самостоятельно распаковать вложение, уже предоставив пароль в письме.

Ссылка на файл .scr

В более поздней кампании вложения не было. Письмо содержало ссылки, ведущие к одному файлу:

hxxp://elemental.sgl.per[.]sg/security.scr

Расширение .scr использовалось для маскировки. Такие файлы являются заставками Windows, но технически представляют собой стандартные исполняемые файлы, которые система запускает так же, как .exe. Пользователь, настороженно относящийся к расширению .exe, может не распознать исполняемый характер файла .scr.

В обоих вариантах результат один: пользователь запускает исполняемый файл Windows, после чего устанавливается Pony.

Упаковка и «загрузчик внутри загрузчика»

Файл, который запускает жертва, может не быть самим Pony. Нередко это пакер или заглушка криптера, предназначенные для обфускации. Такая многоуровневая структура усложняет выявление по сигнатурам.

В образце 2013 года тело Pony было сжато упаковщиком aPLib v1.01. В бинарном файле сохранилась строка:

aPLib v1.01 — the smaller the better :)

Там же присутствовало указание авторских прав Joergen Ibsen за 1998–2009 годы.

В более позднем образце внешний файл security.scr был самостоятельным уровнем упаковки. При выполнении он загружал в память второй независимый исполняемый файл — Pony Loader. Затем загрузчик мог получить полезную нагрузку второй стадии. Схема выглядела так:

  • security.scr — внешний упаковщик или криптер;
  • Pony Loader — вредоносный компонент, распаковываемый в памяти;
  • полезная нагрузка второй стадии.

Внешний слой, распаковка в памяти и возможность менять упаковщики позволяли операторам получать разные бинарные файлы при сохранении поведенческой основы семейства.

Приемы против анализа

После распаковки Pony не шифрует строки и не скрывает вызовы Windows API, но обфусцирует поток управления в точке входа. Это усложняет работу дизассемблеров и ручной анализ. В исследованных образцах одновременно применялись два приема.

Переходы PUSH-to-RET

Вместо обычных CALL или JMP код помещает адрес назначения в стек инструкцией PUSH, затем выполняет RET. RET извлекает адрес из стека и передает на него управление. Между PUSH и RET добавляются фиктивные команды и ложный условный переход, который не должен выполняться.

В одном из примеров последовательность помещала в стек адрес 0040520A, после чего следовали фиктивные операции XOR, команды NOP и условный переход JB SHORT 00405209. Затем RETN снимала со стека адрес 0040520A и фактически использовалась как JMP.

Такая конструкция затрудняет восстановление логики линейными дизассемблерами. Отладчик также может неверно интерпретировать инструкции из-за смещения выравнивания: в приведенном случае OllyDbg обозначал PUSH 00405198 как ASCII hYQ@.

При планировании таких работ можно отдельно изучить в разделе услуг ИТБ по информационной безопасности доступные направления и сопоставить их с задачами своей организации.

Цикл с GetTickCount

Второй прием основан на GetTickCount. Pony вызывает эту функцию в плотном цикле и продолжает работу только тогда, когда остаток от деления полученного значения на 10 равен 5.

В логике образца значение времени работы системы в миллисекундах делится на 10, после чего остаток сравнивается с 5. Если условие не выполнено, цикл начинается заново; если выполнено — троян переходит к основной работе.

Поскольку значение времени в момент исполнения фактически непредсказуемо, число итераций до продолжения работы оказывается псевдослучайным. Это может мешать песочницам с фиксированными тайм-аутами и замедлять ручной пошаговый анализ.

Профилирование хоста и кража учетных данных

После распаковки и проверок Pony формирует профиль зараженного хоста с помощью стандартных API Windows. GetNativeSystemInfo дает сведения о процессоре и архитектуре, IsWow64Process позволяет определить 32-разрядный процесс в 64-разрядной Windows. Также вычисляется HWID — аппаратный идентификатор для дедупликации жертв на панели управления.

Затем троян просматривает известные пути к пользовательским данным и каталогам приложений, включая «Мои документы», AppData, Local AppData, Cache, Cookies и History. Цель — определить расположение данных, где приложения могут хранить учетные записи и пароли.

Логика кражи реализована модульно. В утекшем исходном коде поддержка каждого целевого приложения оформлена отдельным флагом условной компиляции. Создатель конкретной сборки мог включать или исключать отдельные модули сбора в зависимости от кампании.

Образец 2013 года содержал логику, связанную с данными Facebook. URL-адрес хранился в виде переставленных соседних пар символов:

xthpt/:w/wwf.cabeoo.koc/m

После преобразования строка становилась:

hxxp://www.facebook[.]com/

Pony ориентирован не только на секреты, сохраненные в приложениях. Он содержит встроенный словарь часто используемых паролей и использует его для попыток входа в локальные учетные записи Windows. Троян перечисляет учетные записи через NetUserEnum, затем циклически проверяет их по словарю с помощью LogonUserA. В исследованном коде первым словом словаря был пароль 123456.

При успешном входе Pony подменяет себя под эту учетную запись, загружает пользовательский профиль через LoadUserProfileA и собирает относящиеся к нему данные. Затем троян отменяет изменения и выгружает профиль, чтобы не оставить хост в неработоспособном состоянии.

Эксфильтрация по HTTP и вторая стадия

Для вывода данных Pony использует Winsock и вручную формирует HTTP POST-запрос. Собранные сведения передаются единым двоичным блоком. В шаблоне запроса присутствуют путь, Host, Content-Length, Content-Type и User-Agent; для тела данных указывается тип application/octet-stream.

Сетевая активность Pony не ограничивается отдельными обращениями за второй стадией. Троян передает оператору отчет с похищенными данными, а затем может использовать загрузочную функцию для получения дополнительных исполняемых файлов.

Встроенный загрузчик перебирает жестко заданный список URL-адресов. Он скачивает исполняемый файл с первого ответившего адреса, сохраняет его с расширением .exe и запускает. Набор полезных нагрузок определяет оператор конкретной кампании.

В кампании 2013 года второй стадией был ZeuS/Zbot. В других сценариях Pony мог доставлять банковский троян, программу-вымогатель или иной полезный груз. Поэтому обнаружение Pony не следует трактовать только как инцидент с кражей браузерных или почтовых паролей: в сборках с загрузчиком он способен перевести его в длительную многоэтапную компрометацию.

Копирование в профиль и самоудаление

В описанной реализации Pony копирует себя из исходного местоположения в пользовательский профиль, используя рандомизированные имена файлов и поддельные временные метки. Само по себе такое копирование не подтверждает закрепление: в рассмотренном описании не указан механизм автозапуска, задача планировщика, служба, Run-ключ или иной триггер повторного исполнения.

После запуска второй стадии троян удаляет свой загрузчик с диска, сокращая объем доступных для расследования следов.

Для удаления Pony создает в %TEMP% небольшой пакетный скрипт через ShellExecuteA и запускает его. Скрипт пытается удалить файл загрузчика в цикле: пока файл удерживается работающим процессом, операция повторяется. После успешного удаления загрузчика скрипт удаляет сам себя.

В описанной логике применяются команды вида:

:ktk del %1 if exist %1 goto ktk del %0

Здесь %1 соответствует пути к загрузчику Pony. Цикл продолжается, пока файл не удается удалить, после чего удаляется сам пакетный файл.

Последствия заражения и что проверять

Первый эффект Pony — быстрый и широкий сбор сохраненных паролей. За один проход троян может получить учетные данные из браузеров, FTP-клиентов, почтовых клиентов и SSH-инструментов. Украденные FTP-данные могут использоваться для компрометации хостинг-серверов и распространения вредоносного ПО на новых жертв.

Отдельный риск создают слабые пароли локальных учетных записей Windows. В сборках с соответствующим модулем Pony использует собственный словарь и проверяет перечисленные учетные записи через LogonUserA. При успешном входе он получает возможность загрузить профиль такой учетной записи и собрать связанные с ним данные.

Долгосрочные последствия определяет загрузчик. После кражи данных оператор может доставить банковский троян, вымогатель или другую выбранную полезную нагрузку. Устройство может быть включено в ботнет, а первоначальный инцидент с похищением учетных данных — перейти в продолжительное компрометирование с несколькими стадиями.

При обработке подозрительных писем следует учитывать оба показанных варианта доставки: ZIP-архивы с паролем в самом сообщении и ссылки на .scr-файлы. Расширение .scr не делает файл безопасным: в Windows это исполняемая заставка, запускаемая аналогично .exe. Однако это исторические способы доставки из двух рассмотренных кампаний, а не самостоятельные признаки Pony: способ доставки конкретного варианта может отличаться.

Если на хосте выявлен Pony или его загрузчик, проверка должна охватывать не только исходный файл. В описанных образцах значимы профиль пользователя, каталог %TEMP%, возможные пакетные скрипты самоудаления, HTTP POST-передача бинарных данных и последующие загрузки исполняемых файлов .exe. Эти артефакты распространены в Windows и сетевом трафике и не являются самостоятельными детекторами Pony; их следует использовать как контекстные корреляционные признаки вместе с данными о конкретном образце, его конфигурации и цепочке событий. Следует учитывать, что внешний файл мог быть упаковщиком или криптером, а Pony Loader — распаковываться в памяти.

Расследование затрагивает и учетные данные, сохраненные в пользовательских приложениях: Pony ищет данные браузеров, FTP- и почтовых клиентов, терминальных и SSH-инструментов, мессенджеров и других программ. Отдельного внимания требуют слабые пароли локальных учетных записей: в соответствующих сборках троян не ограничивается извлечением сохраненных секретов и использует встроенный словарь для подбора.

При обнаружении Pony необходима проверка вероятной второй стадии, если в конкретной сборке включен загрузчик. В кампании 2013 года ею был ZeuS/Zbot, но логика загрузчика рассчитана на получение любого исполняемого файла с первого доступного URL из заданного списка. Именно этот компонент в таких вариантах определяет, останется ли инцидент кражей учетных данных или разовьется в более длительную компрометацию.

Сценарии моделирования Pony

В исследовании упоминается библиотека угроз Picus со сценариями, связанными с Pony. В ней перечислены следующие идентификаторы и модули атак:

  • 77948: «Pony Infostealer Email Threat», проникновение через электронную почту;
  • 84827: «PonyLoader Malware Loader Email Threat», проникновение через электронную почту;
  • 93490: «Pony Banking Malware Email Threat», проникновение через электронную почту;
  • 78358: «Pony Infostealer Download Threat», проникновение через сеть;
  • 77682: «PonyLoader Malware Loader Download Threat», проникновение через сеть;
  • 32642: «Pony Banking Malware Download Threat», проникновение через сеть.

Эти сценарии отражают два основных пути, показанных в разборе: проникновение через почтовые сообщения и получение вредоносного файла из сети. Для оценки инцидента с Pony критично связать в единую цепочку возможную доставку, кражу учетных данных, HTTP-эксфильтрацию, попытки доступа к локальным учетным записям и загрузку следующей стадии с учетом того, что отдельные компоненты могли отсутствовать в конкретной сборке.

Источник: по материалу зарубежного исследования «What Is Pony Malware? Analysis of the Fareit Credential Stealer».

Источник: По материалу источника «What Is Pony Malware? Analysis of the Fareit Credential Stealer».