Подразделение реагирования на угрозы (Threat Response Unit, TRU) компании eSentire, известное по расследованиям крупных инцидентов, таких как взлом Kaseya MSP и вредоносное ПО more_eggs, обнаружило и проанализировало новую целенаправленную атаку на клиента из manufacturing-сектора. Атака, зафиксированная в сентябре 2025 года, использовала фишинговую приманку с финансовой тематикой для доставки на компьютер-жертву информационного вора DarkCloud.
Описание
Инцидент начался с целевого фишингового письма, отправленного на почтовый ящик службы поддержки клиента, работающего на платформе Zendesk. Отправителем значился адрес "procure@bmuxitq[.]shop". Тема письма, "Swift Message MT103 Addiko Bank ad: FT2521935SVT", и его текст были тщательно стилизованы под легитимную банковскую корреспонденцию, что повышало вероятность успешной атаки на сотрудника. К письму был прикреплен архивный ZIP-файл с именем "Swift Message MT103 FT2521935SVT.zip", внутри которого находился упакованный исполняемый файл вредоносной программы DarkCloud версии 3.2.
DarkCloud - это постоянно развивающееся вредоносное ПО, известное как похититель информации (information stealer). Ранее оно продавалось на хакерском форуме XSS.is, который сейчас не функционирует. Изначально написанный на .NET, DarkCloud с тех пор претерпел значительные изменения, включая полный рефакторинг основной части (stub) на языке Visual Basic 6 (VB6), внедрение шифрования строк и улучшения для противодействия обнаружению. Основная цель DarkCloud - кража конфиденциальных данных: паролей и cookie-файлов браузеров, данных кредитных карт, истории нажатий клавиш, учетных данных FTP, содержимого буфера обмена, данных почтовых клиентов, файлов с диска и информации, связанной с криптовалютными кошельками. Похищенные данные передаются на контролируемые злоумышленниками серверы через Telegram, FTP, SMTP или специальную веб-панель на PHP.
Актуальные версии DarkCloud (на момент публикации - версия 4.2) продвигаются через веб-сайт darkcloud.onlinewebshop[.]net и канал в Telegram пользователя @BluCoder. Внешний вид сайта создает впечатление легитимного программного обеспечения для восстановления паролей, однако на деле это интерфейс для покупки и настройки вредоносной программы.
Технический анализ, проведенный специалистами eSentire TRU, показал, что для сборки DarkCloud злоумышленникам требуется установленная среда разработки Visual Basic 6. Автор предоставляет исходный код, который покупатель должен самостоятельно скомпилировать. Такой подход создает уязвимость для самого автора вредоносного ПО, поскольку увеличивает риск утечки исходного кода и появления неконтролируемых версий в дикой природе, что уже происходило с таким ПО, как Redline Stealer.
Одной из особенностей последней версии DarkCloud является опциональное шифрование строк с использованием модифицированного шифра Цезаря. Ключ для шифрования генерируется с помощью встроенного в VB6 генератора псевдослучайных чисел (ГПСЧ). Алгоритмы функций "Randomize" и "Rnd" уникальны для VB6, что изначально затрудняет декомпиляцию. Однако эксперты eSentire смогли реверсировать эти алгоритмы и создать инструменты для расшифровки строк в памяти, что упрощает анализ образцов DarkCloud.
Для сбора информации о системе DarkCloud использует запросы к инструментарию WMI (Windows Management Instrumentation), чтобы получить данные о процессоре и операционной системе, а также переменные окружения для определения имени пользователя и компьютера. Программа также использует объекты VBScript для проверки и категоризации украденных номеров кредитных карт по типам (например, American Express). Кроме того, DarkCloud способен извлекать контакты из почтовых клиентов, таких как Thunderbird, MailMaster и eM Client.
DarkCloud применяет несколько методов для обнаружения виртуальных сред и анализаторского окружения. Функция "IsProcessListReliable" проверяет список запущенных процессов через WMI на предмет наличия подстрок, связанных с инструментами анализа (например, "fiddler", "wireshark", "procmon"). Если количество процессов в системе меньше 50, проверка также считается неудачной, хотя это может приводить к ложным срабатываниям на реальных маломощных системах. Функция "IsHardwareReliable" проверяет объем жесткого диска (меньше 60 ГБ приводит к провалу проверки), объем оперативной памяти (меньше 1 ГБ) и количество логических процессоров (меньше 2). Дополнительные проверки ищут следы виртуальных машин (VMware, VirtualBox) по моделям оборудования и наличию специфических драйверов в системе.
Для обеспечения постоянного присутствия в системе (persistence) DarkCloud может прописываться в реестр Windows, в ключ "RunOnce", используя случайно сгенерированные имена для значения. Программа также включает функцию "сборщика файлов" (file grabber), которая ищет документы с определенными расширениями (.txt, .docx, .pdf и др.) в папках "Рабочий стол", "Документы" и других.
Особое внимание DarkCloud уделяет криптовалютным кошелькам. Вредоносное ПО целенаправленно ищет файлы и директории, связанные с популярными кошельками, включая Exodus, Electrum, Atomic Wallet, Coinomi и расширение MetaMask для браузеров Chrome и Edge.
Похищенные данные структурируются в логи определенного формата и передаются злоумышленникам. DarkCloud поддерживает несколько способов эксфильтрации: SMTP (включая SSL), Telegram Bot API, FTP и загрузку на веб-сервер через PHP-скрипт. Перед отправкой данных программа определяет внешний IP-адрес жертвы, запрашивая его у внешних сервисов, таких как showip[.]net.
Для помощи сообществу специалистов по безопасности eSentire разработала и опубликовала два инструмента. Первый инструмент позволяет извлекать конфигурацию из образцов DarkCloud, показывая параметры для эксфильтрации данных. Второй инструмент, скрипт для IDA Pro, автоматически расшифровывает зашифрованные строки в дизассемблированном коде и добавляет к ним комментарии, что значительно ускоряет анализ.
Данный инцидент еще раз подчеркивает, что фишинг остается высокоэффективным вектором атак. Специалисты eSentire рекомендуют организациям, особенно в производственном секторе, усилить обучение сотрудников по распознаванию фишинговых писем, внедрить строгие правила обработки вложений из ненадежных источников и использовать многофакторную аутентификацию для критичных учетных записей. Постоянный мониторинг сетевой активности и анализ угроз, предоставляемые сервисами управляемого обнаружения и реагирования (MDR), позволяют выявлять и останавливать подобные атаки на ранних стадиях.
Индикаторы компрометации
Domains
- mail.apexpharmabd.com
Emails
SHA256
- 6a3b4e62a8262a0bf527ad8ea27eb19a0fcb48a76d6fc2868785362e40491432
- e013fb82188cb7ea231183197e12c189b4637e7d92e277793d607405e16da1e2
Yara
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | rule DarkCloud { meta: author = "YungBinary" description = "Detects DarkCloud infostealer in memory" strings: $darkcloud1 = "===============DARKCLOUD===============" fullword wide $creds1 = "@GateUrl" wide $creds2 = "@StrFtpUser" wide $creds3 = "@StrFtpPass" wide $creds4 = "@StrFtpServer" wide $creds5 = "@StrReceiver" wide $creds6 = "@StrSmtpUser" wide $creds7 = "@StrSmtpPass" wide $sql1 = "SELECT item1 FROM metadata" wide $sql2 = "SELECT name_on_card, expiration_month, expiration_year, card_number_encrypted FROM credit_cards" wide $sql3 = "SELECT hostname, encryptedUsername, encryptedPassword FROM moz_logins" wide $sql4 = "SELECT address FROM ConversationRecipients" wide $sql5 = "SELECT address FROM ConversationSenders" wide $app1 = "Application : Pidgin" wide $app2 = "Application: CoreFTP" wide $app3 = "Application: WinSCP" wide $app4 = "Application: Outlook" wide $app5 = "Application : FileZilla" fullword wide $fingerprint1 = "Computer Name: " fullword wide $fingerprint2 = "OS FullName: " fullword wide $fingerprint3 = "CPU: " fullword wide $fingerprint4 = "SELECT * FROM Win32_Processor" fullword wide $fingerprint5 = "SELECT * FROM Win32_OperatingSystem" fullword wide condition: uint16(0) == 0x5a4d and ( $darkcloud1 and 1 of ($creds*) or (3 of ($creds*) and 1 of ($sql*)) or (2 of ($sql*) and 2 of ($app*)) or (2 of ($creds*) and 2 of ($fingerprint*)) or (2 of ($app*) and 2 of ($fingerprint*) and 1 of ($sql*)) ) } |