MoustachedBouncer — это группа кибершпионажа, обнаруженная ESET Research и впервые публично раскрытая в этой статье. Группа действует как минимум с 2014 года и нацелена исключительно на иностранные посольства в Беларуси. С 2020 года MoustachedBouncer, скорее всего, получила возможность проводить атаки «злоумышленник посередине» (AitM) на уровне интернет-провайдера (ISP) в Беларуси, чтобы компрометировать свои цели. Группа использует два отдельных набора инструментов, которые мы назвали NightClub и Disco.
Ключевые моменты этого отчета:
- MoustachedBouncer действует как минимум с 2014 года.
- Мы с умеренной уверенностью предполагаем, что они связаны с интересами Беларуси.
- MoustachedBouncer специализируется на шпионаже за иностранными посольствами в Беларуси.
- MoustachedBouncer использует технику «злоумышленник посередине» с 2020 года для перенаправления проверок captive portal на сервер C&C и доставки вредоносных плагинов через общие ресурсы SMB.
- Мы полагаем, что MoustachedBouncer использует систему законного перехвата (например, SORM) для проведения своих операций AitM.
- Мы с низкой уверенностью предполагаем, что MoustachedBouncer тесно сотрудничает с Winter Vivern, другой группой, нацеленной на европейских дипломатов, но использующей другие TTP.
- С 2014 года группа эксплуатирует фреймворк вредоносного ПО, который мы назвали NightClub. Он использует протоколы SMTP и IMAP (электронная почта) для связи C&C.
- Начиная с 2020 года, группа параллельно использует второй фреймворк вредоносного ПО, который мы назвали Disco.
- Как NightClub, так и Disco поддерживают дополнительные шпионские плагины, включая средство для создания снимков экрана, средство записи звука и похититель файлов.
Сложные тактики, техники и процедуры группы также обсуждались в подкасте ESET Research. Просто нажмите play, чтобы узнать больше от директора отдела исследований угроз ESET Жана-Яна Бутена и ведущего исследователя ESET Арье Горецкого.
Жертвы
Согласно телеметрии ESET, группа нацелена на иностранные посольства в Беларуси, и мы выявили четыре страны, сотрудники посольств которых стали мишенями: две из Европы, одна из Южной Азии и одна из Африки. Ключевые даты показаны на Рисунке 1.

Атрибуция
Хотя мы отслеживаем MoustachedBouncer как отдельную группу, мы обнаружили элементы, которые позволяют нам с низкой уверенностью предполагать, что они тесно сотрудничают с другой группой, известной как Winter Vivern. Последняя была обнаружена в 2021 году и остается активной по состоянию на 2023 год. В марте 2023 года Winter Vivern использовала известную уязвимость XSS (CVE-2022-27926) в почтовом портале Zimbra для кражи учетных данных веб-почты дипломатов нескольких европейских стран. Эта кампания была публично раскрыта исследователями Proofpoint.
Деятельность MoustachedBouncer охватывает период с 2014 по 2022 год, и TTP группы со временем развивались. Например, мы впервые увидели использование ими атак AitM только в 2020 году. Однако целевая вертикаль оставалась прежней.
Таблица 1 показывает характеристики каждой кампании. Учитывая эти элементы, мы с высокой уверенностью предполагаем, что все они связаны с MoustachedBouncer.
Таблица 1. Связи между кампаниями MoustachedBouncer
|
|
VirusTotal |
Жертва A (2017) |
Жертва B |
Жертва C |
Жертва D |
|
имплант NightClub |
X |
X |
|
X |
|
|
плагины NightClub |
|
X |
X |
X |
|
|
имплант Disco |
|
|
X |
|
X |
|
дроппер SharpDisco |
|
|
X |
|
|
|
Компрометация через AitM |
? |
? |
? |
? |
X |
|
Доставка вредоносного ПО через AitM по SMB-шарам |
|
|
X |
|
X |
|
Жертвы: иностранные посольства в Беларуси |
? |
X |
X |
X |
X |
Вектор компрометации: AitM
В этом разделе мы подробно описываем первоначальный доступ для Disco. Мы еще не знаем метод первоначального доступа, который MoustachedBouncer использует для установки NightClub.
Фейковое обновление Windows
Для компрометации своих целей операторы MoustachedBouncer вмешиваются в интернет-соединение своих жертв, вероятно, на уровне интернет-провайдера, чтобы заставить Windows поверить, что она находится за captive portal. Windows 10 проверяет, имеет ли она доступ в Интернет, отправляя HTTP-запрос на http://www.msftconnecttest.com/connecttest.txt. Если ответ не «Microsoft Connect Test», открывается окно браузера по адресу http://www.msftconnecttest.com/redirect. Для IP-диапазонов, на которые нацелена MoustachedBouncer, сетевой трафик перехватывается на уровне интернет-провайдера, и последний URL перенаправляет на якобы легитимный, но поддельный URL обновления Windows, http://updates.microsoft[.]com/. Таким образом, поддельная страница обновления Windows будет показана потенциальной жертве при подключении к сети. Поддельная страница обновления показана на Рисунке 2. Текст, который мы наблюдали, на русском языке, скорее всего, потому, что это основной язык, используемый в Беларуси, но возможно существование версий на других языках. На странице указано, что имеются критические обновления безопасности системы, которые необходимо установить.

Обратите внимание, что используется незашифрованный HTTP, а не HTTPS, и что поддомен updates.microsoft[.]com не существует в DNS-серверах Microsoft, поэтому он не разрешается в открытом Интернете. Во время атаки этот домен разрешался в 5.45.121[.]106 на машине цели. Этот IP-адрес используется для парковки доменов и не имеет отношения к Microsoft. Хотя это IP-адрес, маршрутизируемый в Интернете, трафик на этот IP-адрес никогда не достигает Интернета во время активной атаки AitM. Как разрешение DNS, так и ответы HTTP были внедрены в транзит, вероятно, на уровне интернет-провайдера.
Важно отметить, что техника «злоумышленник посередине» (AitM) применяется только против нескольких выбранных организаций (возможно, только посольств), а не по всей стране. Невозможно воспроизвести перенаправление, просто выйдя из случайного IP-адреса в Беларуси.
Доставка вредоносного ПО
HTML-страница, показанная на Рисунке 2, загружает JavaScript-код с http://updates.microsoft[.]com/jdrop.js. Этот скрипт сначала вызывает setTimeout для выполнения функции jdrop через одну секунду после загрузки страницы. Эта функция (см. Рисунок 3) отображает модальное окно с кнопкой Получить обновления.

Щелчок по кнопке выполняет функцию update, показанную на Рисунке 4.

Эта функция запускает загрузку фейкового установщика обновлений Windows с легитимно выглядящего URL http://updates.microsoft[.]com/MicrosoftUpdate845255.zip. Она также отображает инструкции по установке обновления: Для установки обновлений, скачайте и запустите «MicrosoftUpdate845255.msi».
Нам не удалось получить загруженный файл MicrosoftUpdate845255.zip, но наша телеметрия показывает, что он содержит вредоносный исполняемый файл под названием MicrosoftUpdate845255.exe.
Написанный на Go, он создает запланированную задачу, которая каждую минуту выполняет \35.214.56[.]2OfficeBrokerOfficeBroker.exe. Как следует из пути, он извлекает исполняемый файл через SMB с 35.214.56[.]2. Этот IP-адрес принадлежит клиенту Google Cloud, но, как и HTTP-сервер, мы считаем, что ответы SMB внедряются на лету через AitM, и что злоумышленники не контролируют фактический IP-адрес, маршрутизируемый в Интернете.
Мы также наблюдали следующие SMB-серверы, перехваченные через AitM:
- \209.19.37[.]184
- \38.9.8[.]78
- \59.6.8[.]25
Мы наблюдали это поведение в двух отдельных сетях интернет-провайдеров: Unitary Enterprise A1 и Beltelecom. Это позволяет предположить, что эти интернет-провайдеры могут не обеспечивать полную конфиденциальность и целостность данных. Мы настоятельно рекомендуем иностранным организациям в Беларуси использовать сквозной зашифрованный VPN-туннель, желательно внеполосный (то есть не с конечной точки), обеспечивающий подключение к Интернету из доверенной сети.
Рисунок 5 изображает нашу гипотезу о векторе компрометации и перехвате трафика.

AitM – Общие соображения
Сценарий AitM напоминает нам о злоумышленниках Turla и StrongPity, которые подменяли установщики программ на лету на уровне интернет-провайдера.
Обычно этот метод первоначального доступа используется злоумышленниками, действующими в своей стране, поскольку он требует значительного доступа к интернет-провайдерам или их вышестоящим поставщикам. Во многих странах службы безопасности имеют право выполнять так называемый «законный перехват» с использованием специальных устройств, установленных в помещениях интернет-провайдеров.
В России закон 2014 года требует от интернет-провайдеров установки устройств под названием СОРМ-3, которые позволяют Федеральной службе безопасности (ФСБ) проводить целевую слежку. Устройства обладают возможностями глубокой проверки пакетов (DPI) и, вероятно, использовались Turla в их кампании Mosquito.
В 2018 году Citizen Lab обнаружила, что устройства DPI, разработанные канадской компанией Sandvine, использовались для изменения HTTP-трафика в Турции и Египте. В Турции устройства, предположительно, использовались для перенаправления интернет-пользователей на вредоносный сервер при попытке загрузки определенных приложений Windows, что соответствует деятельности StrongPity. В Египте эти устройства, предположительно, использовались для показа рекламы и скриптов майнинга криптовалют с целью получения прибыли.
В 2020 году статья Bloomberg показала, что белорусский Национальный центр обмена трафиком приобрел то же оборудование DPI от Sandvine, но, согласно статье Cyberscoop, контракт был расторгнут в сентябре 2020 года.
Согласно отчету Amnesty International, опубликованному в 2021 году, «Согласно белорусскому законодательству, все телекоммуникационные провайдеры в стране должны обеспечить совместимость своего оборудования с системой СОРМ». Они также заявляют, что «Система СОРМ предоставляет властям прямой удаленный доступ ко всем коммуникациям пользователей и связанным с ними данным без уведомления провайдера». Мы с низкой уверенностью полагаем, что MoustachedBouncer использует эту систему СОРМ для проведения своих операций.
Хотя компрометация маршрутизаторов для проведения AitM в сетях посольств не может быть полностью исключена, наличие возможностей законного перехвата в Беларуси предполагает, что манипуляции с трафиком происходят на уровне интернет-провайдера, а не на маршрутизаторах целей.
Импланты: NightClub и Disco
С 2014 года используемые MoustachedBouncer семейства вредоносных программ эволюционировали, и в 2020 году произошли большие изменения, когда группа начала использовать атаки AitM. В то же время она начала использовать гораздо более простые инструменты, разработанные на .NET и Go. В отношении NightClub мы назвали этот новый набор инструментов Disco.
MoustachedBouncer эксплуатирует два семейства имплантов параллельно, но на конкретной машине развернут только один. Мы считаем, что Disco используется в сочетании с атаками AitM, в то время как NightClub используется для жертв, где перехват трафика на уровне интернет-провайдера невозможен из-за такой меры, как использование сквозного зашифрованного VPN, где интернет-трафик маршрутизируется за пределы Беларуси.
Disco
Как упоминалось в предыдущем разделе, поддельная страница обновления Windows доставляет первую стадию (SHA-1: E65EB4467DDB1C99B09AE87BA0A964C36BAB4C30). Это простой дроппер, написанный на Go, который создает запланированную задачу для ежеминутного выполнения \35.214.56[.]2OfficeBrokerOfficeBroker.exe. OfficeBroker.exe загружается по протоколу SMB через атаку AitM. Основная функция дроппера показана на Рисунке 6.

Наконец, дроппер выполняет DNS-запрос для windows.system.update[.]com. Этот домен не существует, но DNS-запрос, вероятно, перехватывается через AitM и, скорее всего, является маяком для уведомления операторов об успешной компрометации машины.
Нам не удалось получить файл OfficeBroker.exe, но весьма вероятно, что он действует как загрузчик, поскольку мы наблюдали выполнение дополнительных плагинов из общих ресурсов SMB. Плагины разработаны на Go и довольно просты, поскольку в основном полагаются на внешние библиотеки Go. Таблица 2 обобщает различные плагины.
Таблица 2. Плагины на Go, используемые MoustachedBouncer в 2021–2022 гг.
|
URL загрузки / Путь на диске |
Описание |
|
\209.19.37[.]184driverpackaact.exe |
Делает снимки экрана с использованием библиотеки kbinani/screenshot. Снимки сохраняются в .AActdata<d>_<s>.dat (на SMB-шаре), где <d> — номер активного дисплея, а <s> — дата. Он спит 15 секунд между каждым снимком экрана. |
|
C:UsersPublicdriverpackdriverpackUpdate.exe |
Выполняет скрипты PowerShell с помощью powershell.exe -NoProfile -NonInteractive <command>, где <command> считывается из файла .idata. Вывод записывается в .odata. |
|
C:UsersPublicdriverpacksdrive.exe |
Выполняет C:UsersPublicdriverpackdriverpackUpdate.exe (предыдущий плагин) с повышенными правами через CVE-2021-1732. Код, вероятно, был вдохновлен PoC на GitHub и использует библиотеку генерации кода zydis. |
|
\209.19.37[.]184driverpackofficetelemetry.exe |
Обратный прокси, сильно вдохновленный репозиторием GitHub revsocks. Нам не удалось получить параметры командной строки с IP-адресом прокси. |
|
\38.9.8[.]78driverpackDPU.exe |
Еще один пример плагина PowerShell. |
|
%userprofile%appdatanod32updatenod32update.exe |
Еще один пример плагина обратного прокси. |
|
\59.6.8[.]25outlooksyncoutlooksync.exe |
Делает снимки экрана; похож на первый плагин. Изображения сохраняются в ./logs/${DATETIME}.dat. |
|
\52.3.8[.]25oracleoracleTelemetry.exe |
Плагин для снимков экрана, упакованный с помощью Themida. |
Интересно, что плагины также используют SMB-шары для эксфильтрации данных. Нет никакого C&C-сервера вне помещений злоумышленников, на который можно было бы посмотреть или который можно было бы вывести из строя. Также, похоже, нет способа связаться с этим C&C-сервером из Интернета. Это обеспечивает высокую устойчивость инфраструктуры сети злоумышленников.
SharpDisco и плагины NightClub
В январе 2020 года мы наблюдали дроппер MoustachedBouncer, который мы назвали SharpDisco, загружаемый с https://mail.mfa.gov.<redacted>/EdgeUpdate.exe процессом Microsoft Edge. Неясно, как злоумышленникам удалось подменить HTTPS-трафик, но возможно, что жертве было показано предупреждение о недопустимом TLS-сертификате. Другая возможность заключается в том, что MoustachedBouncer скомпрометировала этот правительственный веб-сайт.
SharpDisco (SHA-1: A3AE82B19FEE2756D6354E85A094F1A4598314AB)
SharpDisco — это дроппер, разработанный на C#. Он отображает фейковое окно обновления, показанное на Рисунке 7, создавая одновременно две запланированные задачи в фоновом режиме.

Эти запланированные задачи:

WINCMDA.EXE и WINCMDB.EXE, вероятно, просто переименованные cmd.exe. Каждую минуту задача считывает содержимое файла \24.9.51[.]94EDGEUPDATEEDGEAIN (на SMB-шаре), передает его в cmd.exe и записывает вывод в \24.9.51[.]94EDGEUPDATEEDGEAOUT. То же самое происходит со второй задачей, но с файлами EDGEBIN и EDGEBOUT. В целом, эти задачи представляют собой обратные оболочки с задержкой в одну секунду.
Затем, как показано на Рисунке 8, дроппер отправляет DNS-запрос для незарегистрированного домена edgeupdate-security-windows[.]com. Это похоже на то, что делает дроппер Disco 2022 года.

Телеметрия ESET показывает, что обратная оболочка использовалась для размещения настоящего интерпретатора Python в C:UsersPublicWinTNWinTN.exe. Затем мы наблюдали, как cmd.exe разместил два плагина на диске, что означает, что они, скорее всего, также были размещены обратной оболочкой. Два плагина:
- Сборщик недавно открытых файлов в C:UsersPublicWinSrcNTIt11.exe
- Монитор внешних дисков в C:UsersPublicIt3.exe
Интересно, что эти плагины имеют общий код с NightClub (описанным ниже в разделе NightClub – 2017 (SHA-1: F92FE4DD679903F75ADE64DC8A20D46DFBD3B277)). Это позволило нам связать наборы инструментов Disco и NightClub.
Сборщик недавно открытых файлов (SHA-1: 0DAEA89F91A55F46D33C294CFE84EF06CE22E393)
Этот плагин представляет собой исполняемый файл Windows с именем It11.exe. Мы полагаем, что он был запущен через упомянутую выше обратную оболочку (reverse shell). В плагине нет механизма постоянства (persistence mechanism).
Он получает недавно открытые файлы на машине, читая содержимое папки %USERPROFILE%Recent (в Windows XP) или %APPDATA%MicrosoftWindowsRecent (в более новых версиях Windows). Эти папки содержат LNK-файлы, каждый из которых указывает на недавно открытый файл.
Плагин включает собственный парсер LNK-формата для извлечения пути к исходному файлу.
Нам не удалось заставить этот плагин работать, но статический анализ показывает, что файлы эксфильтруются в SMB-ресурс \24.9.51[.]94EDGEUPDATEupdate. Плагин хранит список уже эксфильтрованных файлов и их CRC-32 хеш в %TEMP%index.dat. Это, вероятно, позволяет избежать повторной передачи одного и того же файла.
Монитор внешних дисков (SHA-1: 11CF38D971534D9B619581CEDC19319962F3B996)
Этот плагин — исполняемый файл Windows с именем It3.exe. Как и в случае со сборщиком недавних файлов, он не реализует никакого механизма постоянства.
Плагин в цикле вызывает GetLogicalDrives для получения списка всех подключенных дисков, включая съемные, такие как USB-накопители. Затем он выполняет прямое копирование NTFS-тома каждого съемного диска и записывает его в текущий рабочий каталог, в нашем примере C:UsersPublic. Имя файла — это случайно сгенерированная строка из шести-восьми буквенно-цифровых символов, например heNNYwmY.
Он ведет лог-файл в <рабочий каталог>index.dat с CRC-32 хешами скопированных дисков.
Похоже, что у плагина нет никаких возможностей для эксфильтрации. Вероятно, что дампы дисков, собранные таким образом, позже извлекаются с помощью обратной оболочки.
NightClub
С 2014 года MoustachedBouncer использует фреймворк вредоносного ПО, который мы назвали NightClub, потому что он содержит C++ класс с именем nightclub. Мы нашли образцы от 2014, 2017, 2020 и 2022 годов. В этом разделе описывается эволюция NightClub от простого бэкдора до полностью модульного C++ импланта.
Вкратце, NightClub — это семейство имплантов, использующих электронную почту для связи с C&C. С 2016 года дополнительные модули могли доставляться по электронной почте для расширения его шпионских возможностей.
NightClub – 2014
Это самая старая известная версия NightClub. Мы нашли дроппер и оркестратор.
Дроппер (SHA-1: 0401EE7F3BC384734BF7E352C4C4BC372840C30D) — это исполняемый файл с именем EsetUpdate-0117583943.exe, который был загружен на VirusTotal из Украины 19.11.2014. Мы не знаем, как он распространялся в то время.
Основная функция, проиллюстрированная на Рисунке 9, загружает ресурс MEMORY и записывает его содержимое в %SystemRoot%System32creh.dll. Он хранится в открытом виде в PE-ресурсе.

Затем дроппер изменяет временные метки создания, доступа и записи creh.dll, устанавливая их такими же, как у подлинного DLL-файла Windows user32.dll.
Наконец, он создает службу Windows с именем WmdmPmSp и устанавливает в реестре ее ServiceDll на %SystemRoot%System32creh.dll – см. Рисунок 10.

Ранее размещенный DLL-файл, creh.dll (SHA-1: 5B55250CC0DA407201B5F042322CFDBF56041632), является оркестратором NightClub. Он имеет один экспорт с именем ServiceMain, а путь к его PDB — D:ProgrammingProjectsWorkSwampThingReleaseWin32WorkingDll.pdb.
Он написан на C++, и имена некоторых методов и классов присутствуют в данных RTTI – см. Рисунок 11.

Некоторые строки зашифрованы с использованием следующего линейного конгруэнтного генератора (LCG): staten+1 = (690069 × staten + 1) mod 232. Для каждой зашифрованной строки предоставляется начальное значение (state0) от 0 до 255. Для расшифровки строки staten вычитается из каждого зашифрованного byten. Пример структуры зашифрованной строки показан на Рисунке 12.

Нешифрованный лог-файл присутствует в C:WindowsSystem32servdll.log. Он содержит очень базовую информацию об инициализации оркестратора – см. Рисунок 13.

NightClub имеет две основные возможности:
•
Мониторинг файлов
•
Эксфильтрация данных через SMTP (электронная почта)
Монитор файлов
Реализованная здесь функциональность очень похожа на плагин монитора недавних файлов, замеченный в 2020 году и описанный выше. Он также просматривает каталоги %USERPROFILE%Recent в Windows XP и в более новых версиях Windows %APPDATA%MicrosoftWindowsRecent, и реализует тот же парсер LNK – см. Рисунки 14 и 15.

Рисунок 14. Парсер LNK (образец 2014 года – 5B55250CC0DA407201B5F042322CFDBF56041632)

Рисунок 15. Парсер LNK (образец 2020 года – 0DAEA89F91A55F46D33C294CFE84EF06CE22E393)
Файлы, полученные из LNK-файлов, копируются в %TEMP%<исходное имя файла>.bin. Обратите внимание, что в отличие от варианта 2020 года, копируются только файлы с расширениями .doc, .docx, .xls, .xslx или .pdf.
Он также отслеживает съемные диски в цикле, чтобы красть файлы с них.
SMTP C&C коммуникации
NightClub использует протокол SMTP для эксфильтрации данных. Хотя C&C коммуникация по электронной почте не уникальна для MoustachedBouncer и используется другими злоумышленниками, такими как Turla (см. LightNeuron и Outlook backdoor), она встречается довольно редко. Код основан на проекте CSmtp, доступном на GitHub. Информация об учетных записях электронной почты жестко закодирована и зашифрована с помощью алгоритма LCG. В проанализированном нами образце конфигурация почты следующая:
•
SMTP сервер: smtp.seznam.cz
•
Адрес отправителя: glen.morriss75@seznam[.]cz
•
Пароль отправителя: <удалено>
•
Адрес получателя: SunyaF@seznam[.]cz
seznam.cz — это чешский веб-портал, предлагающий бесплатный сервис веб-почты. Мы полагаем, что злоумышленники создали свои собственные учетные записи электронной почты, а не компрометировали существующие.
NightClub эксфильтрует файлы, ранее скопированные в %TEMP% функцией мониторинга файлов (FileMonitor на Рисунке 11). Они закодированы в base64 и добавляются как вложения. Имя вложения — это исходное имя файла с расширением .bin.
На Рисунке 16 показана эксфильтрация файла через SMTP. NightClub аутентифицируется с использованием учетных данных для аккаунта glen.morriss75@seznam[.]cz и отправляет электронное письмо на SunyaF@seznam[.]cz с прикрепленным украденным файлом.

Рисунок 16. TCP-поток SMTP-коммуникации с нашей тестовой машины
Обратите внимание, что некоторые заголовки, которые на первый взгляд могут показаться подозрительными, являются значениями по умолчанию из проекта CSmtp, поэтому они, вероятно, не являются отличительными. К ним относятся:
•
X-Mailer: The Bat! (v3.02) Professional
•
Content-Type: multipart/mixed; boundary=»__MESSAGE__ID__54yg6f6h6y456345″
The Bat! — это почтовый клиент, широко используемый в Восточной Европе. Таким образом, заголовок X-Mailer, вероятно, смешивается с почтовым трафиком в Беларуси.
NightClub – 2017 (SHA-1: F92FE4DD679903F75ADE64DC8A20D46DFBD3B277)
В 2017 году мы обнаружили более новую версию NightClub, скомпилированную 05.06.2017. На машине жертвы она располагалась по пути C:WindowsSystem32metamn.dll. Ее имя файла в каталоге экспорта DLL — DownloaderService.dll, и она имеет один экспорт с именем ServiceMain. Она содержит путь к PDB D:AbcdMainProjectRootsrcProjectsMainSInkReleasex64EtfFavoriteFinder.pdb.
Для обеспечения постоянства она создает службу Windows с именем WmdmPmSp, как и в предыдущих версиях. К сожалению, мы не смогли восстановить дроппер.
Эта версия NightClub также включает несколько имен C++ классов и методов, включая nightclub, в данных RTTI – см. Рисунок 17.

Рисунок 17. Имена методов и классов из данных RTTI версии NightClub 2017 года
Как и в предыдущих версиях, C&C коммуникации используют протокол SMTP через библиотеку CSmtp с жестко закодированными учетными данными. В проанализированном нами образце конфигурация почты следующая:
•
SMTP сервер: smtp.mail.ru
•
Адрес отправителя: fhtgbbwi@mail[.]ru
•
Пароль отправителя: [удалено]
•
Адрес получателя: nvjfnvjfnjf@mail[.]ru
Основное отличие заключается в том, что они сменили бесплатного почтового провайдера с Seznam.cz на Mail.ru.
Эта версия NightClub использует внешние плагины, хранящиеся в папке %APPDATA%NvmFilter. Это DLL-файлы с именем <случайная строка>.cr (например, et2z7q0FREZ.cr) с одним экспортом с именем Starts. Мы идентифицировали два плагина: кейлоггер и монитор файлов.
Кейлоггер (SHA-1: 6999730D0715606D14ACD19329AF0685B8AD0299)
Этот плагин хранился в %APPDATA%NvmFilteret2z7q0FREZ.cr и является DLL с одним экспортом, Starts. Он содержит путь к PDB D:ProgrammingProjectsAutogenKhAutogenAlgReleasex64SearchIdxDll.pdb и был разработан на C++. Данные RTTI показывают несколько имен классов – см. Рисунок 18.

Рисунок 18. Имена методов и классов из данных RTTI плагина кейлоггера NightClub
Реализация кейлоггера довольно традиционна, используется функция Windows GetKeyState – см. Рисунок 19.

Кейлоггер ведет лог-файл в открытом виде в %TEMP%uirtl.tmp. Он содержит дату, заголовок приложения и записанные нажатия клавиш для конкретного приложения. Пример, который мы сгенерировали, приведен на Рисунке 20.

Монитор файлов (SHA-1: 6E729E84C7672F048ED8AE847F20A0219E917FA)
Этот плагин хранился в %APPDATA%NvmFiltersTUlsWa1.cr и является DLL с одним экспортом с именем Starts. Его путь к PDB, D:ProgrammingProjectsAutogenKhAutogenAlgReleasex64FileMonitoringModule.pdb, не был удален, и он повторно использует код из мониторов файлов 2014 и 2020 годов, описанных выше. Он отслеживает диски и недавние файлы, а также копирует файлы для эксфильтрации в %TEMP%AcmSymrm. Его лог-файл хранится в %TEMP%indexwti.sxd.
NightClub – 2020–2022
В 2020-11 годах мы наблюдали новую версию NightClub, развернутую в Беларуси на компьютерах дипломатического персонала европейской страны. В 2022-07 годах MoustachedBouncer снова скомпрометировал некоторые из тех же компьютеров. Версии NightClub 2020 и 2022 годов почти идентичны, а вектор компрометации остается неизвестным.
Его архитектура немного отличается от предыдущих версий, так как оркестратор также реализует сетевые функции. Второй компонент, который разработчики называют модульным агентом (module agent), отвечает только за загрузку плагинов. Все образцы были найдены в папке %APPDATA%microsoftdef и написаны на C++ со статически связанными библиотеками, такими как CSmtp или cpprestsdk. В результате исполняемые файлы довольно большие – около 5 МБ.
Оркестратор
На машинах жертв оба варианта оркестратора (SHA-1: 92115E21E565440B1A26ECC20D2552A214155669 и D14D9118335C9BF6633CB2A41023486DACBEB052) назывались svhvost.exe. Мы полагаем, что MoustachedBouncer пытался замаскироваться под имя легитимного исполняемого файла svchost.exe. Для обеспечения постоянства он создает службу с именем vAwast.
В отличие от предыдущих версий, для шифрования строк они просто добавляют 0x01 к каждому байту. Например, строка cmd.exe будет зашифрована как dne/fyf. Другое отличие заключается в том, что конфигурация хранится во внешнем файле, а не жестко закодирована в бинарном файле. Она хранится по жестко закодированному пути %APPDATA%MicrosoftdefGfr45.cfg, а данные расшифровываются с помощью закрытого RSA-ключа длиной 2048 бит (см. Рисунок 21) с использованием функции BCryptImportKeyPair и BCryptDecrypt.

Конфигурация форматируется в JSON, как показано на Рисунке 22.

Наиболее важными ключами являются transport и modules. Первый содержит информацию о почтовом ящике, используемом для C&C коммуникаций, как и в предыдущих версиях. Второй содержит список модулей.
Модульный агент
Два варианта модульного агента (SHA-1: DE0B38E12C0AF0FD63A67B03DD1F8C1BF7FA6128 и E6DE72516C1D4338D7E45E028340B54DCDC7A8AC) назывались schvost.exe, что является еще одной имитацией имени файла svchost.exe.
Этот компонент отвечает за запуск модулей, указанных в конфигурации. Это DLL-файлы, каждый с экспортом с именем Start или
Starts. Они хранятся на диске незашифрованными с расширением .ini, но на самом деле являются DLL.
Модули
За время нашего расследования мы обнаружили пять различных модулей: аудиорекордер, два почти идентичных скриншоттера, кейлоггер и DNS-бэкдор. Для всех них: их конфигурация, отформатированная в JSON, передается в качестве аргумента функции Start или
Starts.
По умолчанию вывод плагина записывается в %TEMP%tmp123.tmp. Это можно изменить с помощью поля конфигурации file. Таблица 3 показывает различные плагины.
Таблица 3. Плагины NightClub
|
Имя экспорта DLL |
Конфигурация |
Описание |
|
NotifyLoggers.dll |
{
} |
Аудиорекордер, использующий библиотеку Lame и mciSendStringW для управления аудиоустройством. Дополнительные поля конфигурации, вероятно, используются для указания параметров Lame. |
|
MicroServiceRun.dll |
{
} |
Скриншоттер, использующий CreateCompatibleDC и GdipSaveImageToStream, и записывающий захваченные изображения в файл, указанный в file на диск. Если app_keywords не пуст, он использует GetForegroundWindow для проверки имени активного окна и захватывает его только в том случае, если оно соответствует app_keywords. |
|
JobTesterDll.dll |
{
} |
Кейлоггер, использующий API GetKeyState. Он записывает лог в файл, указанный в file на диск, и формат следующий: <Дата><Заголовок окна><Содержимое>. |
|
ParametersParserer.dll |
{
} |
DNS-туннельный бэкдор. cc_server_address указывает IP-адрес DNS-сервера, на который отправляются запросы. Подробности далее. |
DNS-туннельный бэкдор (ParametersParserer.dll) использует пользовательский протокол для отправки и получения данных от вредоносного DNS-сервера (cc_server_address). Рисунок 23 показывает, что DNS-запрос отправляется на IP-адрес, указанный в конфигурации, с использованием параметра pExtra функции DnsQuery_A.

Плагин добавляет данные для эксфильтрации как часть имени поддомена домена, используемого в DNS-запросе (pszName выше). Домен всегда 11.1.1.cid, а данные содержатся в поддомене. Он использует следующий формат, где x — это буква, а не переменная:
The plugin adds the data to exfiltrate as part of the subdomain name of the domain that is used in the DNS request (pszName above). The domain is always 11.1.1.cid and the data is contained in the subdomain. It uses the following format, where x is the letter, not some variable:
x + <модифицированный base64(buffer)> + x.11.1.1.cid
Например, первый DNS-запрос, который отправляет плагин, выглядит так: xZW1wdHkx.11.1.1.cid, где ZW1wdHk расшифровывается как empty (пусто).
Обратите внимание, что функция base64 здесь нестандартная. Она убирает символ =, если он есть, из результата base64-кодирования, а также заменяет символы / на -s и + на -p. Это делается для создания валидных поддоменов, потому что стандартное base64-кодирование может выдавать символы +, / и =, которые недопустимы в доменных именах и могут быть обнаружены в сетевом трафике.
Затем плагин читает результат, который должен представлять собой одну или несколько TXT-записей DNS, так как флаг DNS_TYPE_TEXT передается в DnsQuery_A. Microsoft называет базовую структуру DNS_TXT_DATAA. Она содержит массив строк, которые объединяются для формирования выходного буфера.

Figure 24. Плагин читает TXT-запись
Ожидаемый формат ответа:
x + <аргумент, закодированный модифицированным base64> + x.<cmd_id>.<неизвестный integer>.1.<cmd_name>
Это похоже на формат запросов. <аргумент, закодированный модифицированным base64> также использует кастомное base64-кодирование без = и с заменой + на -p и / на -s. <cmd_name> — это произвольная строка, которую бэкдор не использует; скорее всего, она нужна операторам для отслеживания разных команд. <cmd_id> — это целочисленный идентификатор команды в switch-операторе бэкдора.
Например, если бы операторы захотели выполнить calc.exe, DNS C&C сервер прислал бы ответ xYzpcd2luZG93c1xzeXN0ZW0zMlxjYWxjLmV4ZQx.27.2.1.calc, где Yzpcd2luZG93c1xzeXN0ZW0zMlxjYWxjLmV4ZQ расшифровывается как c:windowssystem32calc.exe, а 27 — это ID команды на создание нового процесса. Все команды, поддерживаемые этим бэкдором, перечислены в Таблице 4.
Таблица 4. Команды, реализованные в DNS-бэкдоре
|
ID |
Описание |
|
0x15 (21) |
Копировать каталог (из источника в назначение) |
|
0x16 (22) |
Переместить файл (из источника в назначение) |
|
0x17 (23) |
Удалить файл или каталог |
|
0x18 (24) |
Поиск файла по заданному шаблону (Примечание: мы не уверены в точном поведении этой команды) |
|
0x19 (25) |
Запись буфера в файл |
|
0x1A (26) |
Чтение файла |
|
0x1B (27) |
Создание процесса |
Результат выполнения команд также выводится злоумышленнику через DNS-запросы, как описано выше. Единственное отличие — вместо 11 в доменном имени используется 12, как показано в этом примере: xdGltZW91dAx.12.1.1.cid. В данном случае плагин отправил сообщение о тайм-ауте на C&C сервер.
Заключение
MoustachedBouncer — это искусный хакер, нацеленный на иностранных дипломатов в Беларуси. Он использует довольно продвинутые методы для связи с C&C, включая перехват трафика на уровне провайдера для импланта Disco, электронные письма для импланта NightClub и DNS для одного из плагинов NightClub.
Главный вывод: организациям, находящимся в зарубежных странах, где интернет небезопасен, следует использовать VPN-туннель с end-to-end шифрованием до доверенного местоположения для всего интернет-трафика, чтобы обойти любые устройства инспекции сети.
По всем вопросам, связанным с нашим исследованием, опубликованным на WeLiveSecurity, обращайтесь по адресу: threatintel@eset.com.
ESET Research предлагает частные отчеты по APT-разведке и потоки данных. По всем вопросам, связанным с этой услугой, посетите страницу ESET Threat Intelligence.
Подкаст ESET Research
Если вы хотите узнать, как исследователи ESET назвали MoustachedBouncer и его инструменты Disco и NightClub, что делает эту группу достойной звания «продвинутая», или могли ли сотрудники целевых посольств принести вредоносное ПО домой с работы, то послушайте последний выпуск подкаста ESET Research. Жан-Ян Бутен, директор отдела исследований угроз ESET, объясняет сложности MoustachedBouncer нашему ведущему и выдающемуся исследователю ESET Арье Горецкому. Если вам нравится слушать о кибербезопасности, подписывайтесь на наш подкаст ESET Research на Spotify, Google Podcasts, Apple Podcasts или PodBean.
IoCs
Файлы
|
SHA-1 |
Имя файла |
Обнаружение |
Описание |
|
02790DC4B276DFBB26C714F29D19E53129BB6186 |
index.html |
JS/TrojanDownloader.Agent.YJJ |
Фейковая веб-страница обновления Windows. |
|
6EFF58EDF7AC0FC60F0B8F7E22CFE243566E2A13 |
jdrop.js |
JS/TrojanDownloader.Agent.YJJ |
JavaScript-код, запускающий запрос на загрузку фейкового обновления Windows. |
|
E65EB4467DDB1C99B09AE87BA0A964C36BAB4C30 |
MicrosoftUpdate845255.exe |
WinGo/Agent.ET |
Disco dropper. |
|
3A9B699A25257CBD0476CB1239FF9B25810305FE |
driverpackUpdate.exe |
WinGo/Runner.B |
Disco-плагин. Выполняет PowerShell-скрипты. |
|
19E3D06FBE276D4AAEA25ABC36CC40EA88435630 |
DPU.exe |
WinGo/Runner.C |
Disco-плагин. Выполняет PowerShell-скрипты. |
|
52BE04C420795B0D9C7CD1A4ACBF8D5953FAFD16 |
sdrive.exe |
Win64/Exploit.CVE-2021-1732.I |
Disco-плагин. Эксплойт LPE для CVE-2021-1732. |
|
0241A01D4B03BD360DD09165B59B63AC2CECEAFB |
nod32update.exe |
WinGo/Agent.EV |
Disco-плагин. Обратный прокси на базе revsocks. |
|
A01F1A9336C83FFE1B13410C93C1B04E15E2996C |
aact.exe |
WinGo/Spy.Agent.W |
Disco-плагин. Делает скриншоты. |
|
C2AA90B441391ADEFAA3A841AA8CE777D6EC7E18 |
officetelemetry.exe |
WinGo/Agent.BT |
Disco-плагин. Обратный прокси на базе revsocks. |
|
C5B2323EAE5E01A6019931CE35FF7623DF7346BA |
oracleTelemetry.exe |
WinGo/Spy.Agent.W |
Disco-плагин, упакованный Themida. Делает скриншоты. |
|
C46CB98D0CECCB83EC7DE070B3FA7AFEE7F41189 |
outlooksync.exe |
WinGo/Spy.Agent.W |
Disco-плагин. Делает скриншоты. |
|
A3AE82B19FEE2756D6354E85A094F1A4598314AB |
kb4480959_EdgeUpdate.exe |
MSIL/TrojanDropper.Agent.FKQ |
Disco .NET dropper. |
|
4F1CECF6D05571AE35ED00AC02D5E8E0F878A984 |
WinSrcNT.exe |
Win32/Nightclub.B |
Плагин NightClub, используемый Disco. Крадет последние файлы. |
|
0DAEA89F91A55F46D33C294CFE84EF06CE22E393 |
It11.exe |
Win32/Nightclub.B |
Плагин NightClub, используемый Disco. Крадет последние файлы. |
|
11CF38D971534D9B619581CEDC19319962F3B996 |
It3.exe |
Win32/Nightclub.B |
Плагин NightClub, используемый Disco. Делает полные дампы съемных носителей. |
|
F92FE4DD679903F75ADE64DC8A20D46DFBD3B277 |
metamn.dll |
Win64/Nightclub.B |
NightClub (версия 2017). |
|
6999730D0715606D14ACD19329AF0685B8AD0299 |
et2z7q0FREZ.cr |
Win64/Nightclub.B |
Плагин NightClub. Кейлоггер. |
|
6E729E84C7672F048ED8AE847F20A0219E917FA3 |
sTUlsWa1.cr |
Win64/Nightclub.A |
Плагин NightClub. Шпион за файлами. |
|
0401EE7F3BC384734BF7E352C4C4BC372840C30D |
EsetUpdate-0117583943.exe |
Win32/Nightclub.C |
NightClub dropper. |
|
5B55250CC0DA407201B5F042322CFDBF56041632 |
creh.dll |
Win32/Nightclub.C |
NightClub (2014). |
|
D14D9118335C9BF6633CB2A41023486DACBEB052 |
svhvost.exe |
Win32/Nightclub.D |
Оркестратор (NightClub). |
|
E6DE72516C1D4338D7E45E028340B54DCDC7A8AC |
schvost.exe |
Win32/Nightclub.D |
Модульный агент (NightClub). |
|
3AD77281640E7BA754E9B203C8B6ABFD3F6A7BDD |
nullnat.ini |
Win32/Nightclub.D |
Бэкдор с DNS-туннелированием (плагин NightClub). |
|
142FF0770BC6E3D077FBB64D6F23499D9DEB9093 |
soccix.ini |
Win32/Nightclub.D |
Кейлоггер (плагин NightClub). |
|
FE9527277C06D7F986161291CE7854EE79788CB8 |
oreonion.ini |
Win32/Nightclub.D |
Скриншоттер (плагин NightClub). |
|
92115E21E565440B1A26ECC20D2552A214155669 |
svhvost.exe |
Win32/Nightclub.D |
Оркестратор (NightClub). |
|
DE0B38E12C0AF0FD63A67B03DD1F8C1BF7FA6128 |
schvost.exe |
Win32/Nightclub.D |
Модульный агент (NightClub). |
|
D2B715A72BBA307CC9BF7690439D34F62EDF1324 |
sysleg.ini |
Win32/Nightclub.D |
Записывает аудио (плагин NightClub). |
|
DF8DED42F9B7DE1F439AEC50F9C2A13CD5EB1DB6 |
oreonion.ini |
Win32/Nightclub.D |
Делает скриншоты (плагин NightClub). |
C&C серверы
|
IP |
Домен |
Замечен впервые |
Комментарий |
|
185.87.148[.]86 |
centrocspupdate[.]com |
3 ноября 2021 |
Предполагаемый C&C сервер NightClub. |
|
185.87.151[.]130 |
ocsp-atomsecure[.]com |
11 ноября 2021 |
Предполагаемый C&C сервер NightClub. |
|
45.136.199[.]67 |
securityocspdev[.]com |
5 июля 2022 |
C&C сервер NightClub. |
|
45.136.199[.]129 |
dervasopssec[.]com |
12 октября 2022 |
Предполагаемый C&C сервер NightClub. |
«Фейковые» домены, используемые в AitM
Примечание: Эти домены используются в контексте, когда DNS-запросы перехватываются до их отправки в интернет. Они не разрешаются вне контекста атаки AitM.
windows.network.troubleshooter[.]com
updates.microsoft[.]com
IP-адреса SMB-шар, пока идет AitM
Примечание: Эти IP-адреса используются в контексте, когда трафик к ним перехватывается до отправки в интернет. Эти маршрутизируемые в интернете IP-адреса не являются вредоносными вне контекста атаки AitM.
24.9.51[.]94
35.214.56[.]2
38.9.8[.]78
52.3.8[.]25
59.6.8[.]25
209.19.37[.]184
Email-адреса
fhtgbbwi@mail[.]ru
nvjfnvjfnjf@mail[.]ru
glen.morriss75@seznam[.]cz
SunyaF@seznam[.]cz
Техники MITRE ATT&CK
Эта таблица составлена с использованием версии 13 фреймворка MITRE ATT&CK.
|
Тактика |
ID |
Название |
Описание |
|
Разведка (Reconnaissance) |
Сбор информации о сети жертвы: IP-адреса |
Операторы MoustachedBouncer собирали IP-адреса или блоки адресов своих целей, чтобы модифицировать сетевой трафик только для этих адресов. |
|
|
Первоначальный доступ (Initial Access) |
Компрометация через браузер (Drive-by Compromise) |
Disco доставляется через поддельный сайт обновлений Windows. |
|
|
Выполнение (Execution) |
Выполнение пользователем: вредоносный файл |
Disco требует ручного запуска жертвой. |
|
|
Закрепление (Persistence) |
Планировщик заданий/Задание: Планировщик заданий |
Disco закрепляется как запланированная задача, которая каждую минуту скачивает исполняемый файл из «поддельного» SMB-ресурса. |
|
|
Создание или изменение системного процесса: Служба Windows |
NightClub закрепляется как ServiceDll службы с именем WmdmPmSp. |
||
|
Повышение привилегий (Privilege Escalation) |
Эксплуатация для повышения привилегий |
Disco имеет плагин для эксплуатации уязвимости повышения локальных привилегий CVE-2021-1732. |
|
|
Обход защиты (Defense Evasion) |
Деобфускация/декодирование файлов или информации |
С 2020 года NightClub использует внешний конфигурационный файл, зашифрованный RSA. |
|
|
Сбор данных (Collection) |
Данные с локальной системы |
NightClub крадет недавние файлы с локальной системы. |
|
|
Данные со съемных носителей |
NightClub крадет файлы с локальной системы. |
||
|
Захват ввода: Кейлоггер (Keylogging) |
NightClub имеет плагин для записи нажатий клавиш. |
||
|
Захват экрана (Screen Capture) |
NightClub и Disco имеют плагин для создания скриншотов. |
||
|
Захват аудио (Audio Capture) |
NightClub имеет плагин для записи аудио. |
||
|
Командование и управление (Command and Control) |
Протокол прикладного уровня: Протоколы передачи файлов (File Transfer Protocols) |
Disco общается через протокол SMB. |
|
|
Протокол прикладного уровня: Почтовые протоколы (Mail Protocols) |
NightClub общается через протокол SMTP. |
||
|
Протокол прикладного уровня: DNS |
Один из плагинов NightClub — это backdoor, который общается через DNS. |
||
|
Кодирование данных: Стандартное кодирование (Standard Encoding) |
NightClub кодирует файлы, прикрепленные к письмам, в base64. |
||
|
Кодирование данных: Нестандартное кодирование (Non-Standard Encoding) |
NightClub кодирует команды и ответы, отправляемые через свой DNS C&C канал, с использованием модифицированной формы base64. |
||
|
Зашифрованный канал: Симметричная криптография (Symmetric Cryptography) |
NightClub получает плагины в виде вложений электронной почты, зашифрованных с использованием AES-CBC. |
||
|
Атака «человек посередине» (Adversary-in-the-Middle) |
MoustachedBouncer выполнял AitM на уровне интернет-провайдера, чтобы перенаправить свои цели на поддельную страницу обновлений Windows. Также они использовали AitM по протоколу SMB для доставки вредоносных файлов с «поддельных» серверов. |
||
|
Кража данных (Exfiltration) |
Кража данных через C2 канал (Exfiltration Over C2 Channel) |
NightClub и Disco крадут данные через C&C канал (SMTP, SMB и DNS). |
|
|
Воздействие (Impact) |
Манипуляция данными: Манипуляция переданными данными (Transmitted Data Manipulation) |
MoustachedBouncer модифицировал HTTP-трафик с определенных IP-адресов на уровне интернет-провайдера, чтобы перенаправить свои цели на поддельную страницу обновлений Windows. |
