В прошлой части нашего исследования, посвященного шифровальщику TorrentLocker, мы описали общие механизмы его работы, а также рассмотрели возможные сценарии его распространения. Вторая часть посвящена анализу этой вредоносной программы, ее работе с удаленным C&C-сервером, а также статистике заражений различных стран.
Перед непосредственным исполнением полезной нагрузки (payload), TorrentLocker осуществляет внедрение своего кода (injection) в другие процессы. Этот процесс выполняется в два этапа. На первом этапе дроппер запускает специальный процесс – загрузчик. Загрузчик расшифровывает вспомогательный код, который затем внедряется в процесс explorer.exe. TorrentLocker удаленно создает поток в explorer.exe, причем в качестве стартовой функции выступает экспортируемая функция __remote_entry.
Мы наблюдали несколько различных версий дроппера, но этот анализ посвящен одной из таких версий, которая имеет дату компиляции 15 октября 2014 г. (SHA-1 хэш этого семпла начинается с 40B1D84B).
Дроппер содержит несколько широко известных трюков для усложнения анализа исполняемого файла. Один из таких трюков заключается в использовании динамических экспортов. Он также использует анти-отладочный прием, который заключается в многократном использовании API-функции OutputDebugString. При вызове OutputDebugString из контекста процесса, к которому не подключен отладчик, она не выполняет никаких полезных функций. Однако, если к процессу подключен отладчик, она посылает ему строку для вывода. Код дроппера вызывает эту функцию 320,500 раз, что заставляет отладчик зависнуть. Такой метод также позволяет вредоносной программе обойти механизм песочницы (sandbox), который запускает программу в режиме отладки.
Рис. Код дроппера вызывает функцию OutputDebugString 320,500 раз.
Упаковщик дроппера использует два ресурса исполняемого PE-файла для извлечения полезной нагрузки. Первый ресурс содержит 16-битный ключ в начале своих данных. Этот ключ используется для расшифровки остальной части данных этого ресурса. Эта часть содержит ключ, который будет использоваться для расшифровки второго ресурса. Второй ресурс представляет из себя конфигурацию упаковщика. Конфигурация может задавать поведение самого упаковщика, например, задавать для него использование приемов обнаружения виртуальных машин через использование инструкций in и vpcext. Обе инструкции используются для обнаружения VMWare и VirtualPC.
Вышеупомянутые ресурсы зашифрованы с использованием модифицированной версии алгоритма RC4. Процесс расшифровки содержит ошибку, так как одна из переменных, которая должна быть инициализирована нулем, остается нетронутой. Схожую ошибку в коде расшифровщика содержит одна из версий вредоносной программы MiniDuke, которая была описана специалистами F-Secure.
Данные второй секции после правильной расшифровки представляют из себя PE-файл. При этом дроппер создает новый процесс в приостановленном состоянии (suspended), выделяет регион памяти в этом новом процессе и записывает содержимое этого PE-файла в этот регион. Далее процесс возобновляет свою работу с точки входа в скопированном PE-файле. Этот процесс мы называем загрузчиком (launcher).
Компонент TorrentLocker, называемый загрузчиком, довольно прост. Он выполняет две функции: копирует файл дроппера в другую директорию и запускает на исполнение другой компонент вредоносной программы под названием «core». Компонент core находится в теле вредоносной программы в сжатом и зашифрованном виде. Загрузчик распаковывает его с помощью библиотеки aPlib и внедряет его код в системные процессы explorer.exe и svchost.exe. В случае, если загрузчику не хватит привилегий для выполнения этой операции (администратор), он запросит эти привилегии и перезапустит свой исполняемый файл.
TorrentLocker хранит в системе некоторую конфигурационную информацию. Для этого используется раздел системного реестра. Более новые варианты вредоносной программы также могут хранить конфигурационные данные внутри директории с произвольным именем внутри системных директорий Application Data или директории Programs в All Users. Файлы, расположенные там, зашифрованы с помощью алгоритма AES-256-CBC. Ключ расшифровки жестко зашит в теле исполняемого файла вредоносной программы и различается в зависимости от используемой злоумышленниками кампании. Дроппер также содержит код по генерации AES ключа. Он формируется на основе даты установки ОС на компьютер. Однако, самой вредоносной программой этот код не используется, возможно, он зарезервирован для будущего использования.
TorrentLocker специализируется на сборе информации используемого пользователем почтового клиента. Он может похищать данные аутентификации для SMTP-сервера и адресной книги жертвы. Поддерживаются различные почтовые клиенты, включая Thunderbird, Outlook, Outlook Express, Windows Mail.
Рис. TorrentLocker использует Protected Storage API для получения конфигурации почтового клиента.
Рис. Часть кода TorrentLocker, которая отвечает за разбор адресной книги почтового клиента Thunderbird.
Учитывая тот факт, что злоумышленники используют сообщения электронной почты в качестве основного вектора доставки вредоносной программы, кража такой информации как список контактов, может существенно облегчить задачу последующего распространения TorrentLocker. Они также могут использовать похищенную информацию SMTP с целью использования легитимного сервера для рассылки фишинговых сообщений.
Вредоносная программа TorrentLocker взаимодействует с управляющим C&C-сервером используя жестко зашитый в тело дроппера URL-адрес. Он может использовать различные модификации своего сетевого протокола для работы с C&C и описываемая далее модификация использовалась в семплах, которые распространялись злоумышленниками с октября по декабрь 2014 г. В случае недоступности C&C-сервера по указанному в теле вредоносной программы URL-адресу, она использует специальный Domain Generation Algorithm (DGA) для получения вспомогательного списка из 30-ти новых доменов. Механизм DGA для получения новых адресов C&C был добавлен в семплах TorrentLocker, которые были обнаружены в октябре 2014 г.
На самом деле TorrentLocker использует достаточно простой протокол для взаимодействия с C&C-сервером. Однако, как упоминалось, в предыдущем абзаце, он может различаться в зависимости от версии вредоносной программы. Для работы с C&C используется SSL-протокол, который использует шифрование для передаваемого трафика. Некоторые модификации вместо SSL используют для шифрования т. н. chain XOR алгоритм. Каждый HTTPS POST-запрос к C&C-серверу со стороны вредоносной программы имеет следующий формат.
Рис. Пример сообщения, которое вредоносное программа отправляет на C&C-сервер.
Рис. Соответствия полей запроса с данными из сообщения, которое приведено выше.
Когда TorrentLocker на зараженном компьютере контактирует со своим C&C-сервером, происходит генерация специального «ID пользователя» или «код пользователя». Этот ID используется в дальнейшем для идентификации жертвы и на его основе C&C-сервер передает TorrentLocker URL-ссылку на страницу оплаты выкупа и получения инструмента расшифровки файлов. Такой URL-адрес имеет следующий вид.
Для более простого доступа к .onion домену, веб-страница с требованием выкупа содержит ссылки на веб-сайты с доступом через Tor2Web. Использование такого механизма позволяет жертве получить доступ к веб-странице оплаты выкупа даже из браузера, который не поддерживает Tor.
Упоминаемый выше ID пользователя представляет из себя строку из шести произвольным образом подобранных символов. Однако, если два заражения вредоносной программой происходят в одно и то же время, ID зараженных систем могут быть похожи. Дальнейший анализ этого алгоритма показал, что код генерации идентификаторов является предсказуемым. В качестве примера рассмотрим три подобранных C&C-сервером идентификатора.
Для идентификатора используется тридцати шестеричная основа (base 36). После конвертации в десятичную систему (base 10) идентификатор предстает в виде обычной комбинации цифр от нуля до десяти. Если отделить пять последних цифр, то получится две серии. При этом видно, что к старшей серии применяется операции инкрементации, когда к младшей применяется декрементация. Видно, что если сложить два числа по такой схеме, то в сумме всегда будет получаться число 99999. Это позволяет проверять корректность идентификатора со стороны оператора вредоносной программы. Зная алгоритм генерации идентификатора, мы смогли получить с удаленного сервера все возможные веб-страницы с требованием выкупа. При чем это было сделано для различных C&C-серверов.
В сентябре 2014 security-ресерчер Nixu опубликовал пост с описанием различных трюков, которые позволяли расшифровать файлы, зашифрованные TorrentLocker. Также был выпущен специальный инструмент с графическим интерфейсом, который позволял выполнять операцию расшифровки автоматически. Такая ситуация с «несанкционированной» расшифровкой стала возможным из-за используемого вредоносной программой алгоритма AES-256 в режиме шифрования Counter Mode (CTR). При этом для всех файлов использовался один и тот же ключ, а также вектор инициализации (IV), что делало алгоритм уязвимым. Более новые версии TorrentLocker используют AES в режиме шифрования CBC (Cipher Block Chaining), что исключают возможную расшифровку файлов. Для работы с этим криптографическим алгоритмом код вредоносной программы использует библиотеку LibTomCrypt.
Единственный ключ AES-256 для шифрования файлов генерируется при исполнении дроппера. Он используется для шифрования всех файлов в системе. При этом для самой процедуры генерации ключа используется генератор псевдослучайных чисел Yarrow и следующие Windows API-функции (возвращаемые ими значения).
- GetTickCount
- GetCurrentProcessId
- GetCurrentThreadId
- GetDesktopWindow
- GetForegroundWindow
- GetShellWindow
- GetCapture
- GetClipboardOwner
- GetOpenClipboardOwner
- GetFocus
- GetActiveWindow
- GetKBCodePage
- GetProcessHeap
- GetThreadTimes(GetCurrentThread())
- GetProcessTimes(GetCurrentProcess())
Перед непосредственным шифрованием файлов, AES-ключ шифруется публичным ключом RSA, который находится в файле вредоносной программы. Затем он отправляется на удаленный C&C-сервер с установленным значением типа запроса (request type) в единицу.
Во избежание накладных расходов, связанных с производительностью, TorrentLocker шифрует только первые 2MB файла. Очевидно, что даже в случае больших файлов, такой длины достаточно, чтобы сделать файл полностью неработоспособным или непригодным для использования. В конец каждого зашифрованного файла вредоносная программа добавляет три специальных поля, формат которых указан ниже.
Контрольная сумма Adler-32, которая указана в таблице, возможно, используется для проверки AES ключа и того факта, что сам файл зашифрован именно TorrentLocker. Такой способ хранения AES ключа в зашифрованном файле позволяет операторам TorrentLocker или другому обладателю закрытого ключа RSA, легко расшифровать содержимое файла, не обращаясь к другим источникам. Он также может использоваться для восстановления AES ключа в случае, если C&C-сервер недоступен.
Сходства TorrentLocker и Hesperbot
Банковский троян Hesperbot был обнаружен аналитиками ESET в 2013 г. и представляет из себя сложный вредоносный инструмент, который использовался злоумышленниками для кражи денежных средств со счетов онлайн-банкинга пользователей в разных странах по всему миру. Он использовал внедрение своего вредоносного HTML и JavaScript кода в веб-страницы запущенного браузера. Мы обнаружили сходство между TorrentLocker и Hesperbot. Похоже, что авторство кода обеих вредоносных программ принадлежит одной преступной группе, которая также занимается кампаниями по их распространению. Спам-кампании по распространению обоих троянов направлены на одни и те же страны, например, Турцию, Чехию, Австралию.
Веб-страницы, которые использовались для распространения Hesperbot в начале 2014 г. были очень похожи на те, которые привлекались для распространения в случае с TorrentLocker. В марте этого года один из security-ресерчеров Zoltan Balazs опубликовал информацию о веб-страницах распространения Hesperbot, которые содержали механизм CAPTCHA. Это очень похоже на метод дистрибуции TorrentLocker. Шаблон URL-адреса, в некоторых случаях, заканчивался на .php?id=[digits].
Рис. Сравнение URL-адресов, которые использовались для распространения вредоносных программ.
Стоит отметить, что IP-адреса C&C-серверов обеих вредоносных программ также совпадают. Hesperbot использовал в качестве удаленного C&C-сервера домен updatesecurehost1.ru с IP адресом 46.149.111.178. Тот же IP-адрес использовался семплом TorrentLocker в сентябре 2014 г. В качестве домена выступал nigerianpride.net.
В обоих семействах вредоносных программ, их ранние версии содержали строку пути к PDB-файлу. Для того, чтобы увидеть этот путь, семпл должен быть распакован. Для Hesperbot (модуль procblock) путь к pdb имел вид.
В августе 2014, к нам в руки попал семпл TorrentLocker, который содержал очень похожий путь (модуль rack-core).
Другой семпл содержал путь к модулю rack-dropper.
Идентичность иерархии директорий в путях может свидетельствовать, что исполняемые файлы компилировались одной группой лиц или на одном компьютере.
Статистика
Выше мы описывали механизм генерации ID пользователей, который использовался авторами вредоносной программы для опознания зараженных TorrentLocker компьютеров. Используя эти идентификаторы, нам удалось извлечь информацию о жертвах с удаленного C&C-сервера. Этот эксперимент был проведен 24 ноября 2014 г. Ниже указан список удаленных C&C-серверов, которые использовались для извлечения упоминаемой информации.
Мы получили 47,365 веб-страниц с выкупом от пяти различных C&C-серверов. Из этого числа, 39,670 веб-страниц представляли настоящих пользователей, идентификаторы которых были сгенерированы зараженной системой. Другие идентификаторы были удалены из базы операторами, поскольку являлись уже устаревшими или вообще не являлись результатом успешного заражения пользователя вредоносной программой (могли быть созданы исследователями вредоносной программы). Из упоминавшегося числа реальных жертв, 570 пользователей оплатили выкуп злоумышленникам и получили ссылку на ПО для расшифровки файлов. Так же 20 веб-страниц свидетельствуют о том, что сумма выкупа была получена не полностью.
Рис. Статистика оплаты выкупа TorrentLocker.
Веб-страницы оплаты выкупа переведены на соответствующий для региона язык. Всего поддерживается 13 различных стран. Ниже представлена статистика, которая наглядно демонстрирует количество заражений TorrentLocker в разных странах.
Рис. Статистика заражений по странам.
Заключение
Киберпреступники распространяли TorrentLocker как минимум с февраля 2014 г. Им удалось собрать со своих жертв большое количество биткоинов. Пользователи готовы были выложить свои денежные средства для восстановления доступа к своим файлам. Использование криптовалюты биткоинов делает злоумышленников практически неуязвимыми для правоохранительных органов, которые не смогут установить адрес назначения при проведении платежа.
Авторы TorrentLocker переключились на использование режима CBC симметричного алгоритма шифрования AES, вместо ранее используемого CTR. Таким образом, они свели к нулю возможность «несанкционированной» расшифровки файлов. Расшифровка возможна только в случае получения закрытого ключа RSA от злоумышленников, с помощью которого можно расшифровать AES ключ. Этот зашифрованный публичным RSA ключом AES ключ хранится в конце зашифрованного файла и используется для непосредственной расшифровки файла (или его первых 2-х MB). Как мы описывали выше, публичный RSA ключ располагается в теле вредоносной программы.
В качестве основной защитной меры от последствий заражения TorrentLocker и шифрования файлов следует использовать резервное копирование файлов на жестком диске. Следует помнить, что TorrentLocker специализируется на шифровании файлов, расположенных на сетевых дисках, которые подключены к зараженному компьютеру. В этом случае файлы с резервной копией данных лучше хранить на удаленном устройстве, которое не подключено к компьютеру, в противном случае, они также могут быть скомпрометированы TorrentLocker.
Рис. Типы файлов, которые шифрует TorrentLocker.
Автор: esetnod32