Группировка DoNot (APT-C-35), ассоциируемая с Индией, провела целенаправленную кибершпионскую операцию против министерства обороны и военных ведомств Бангладеш. Исследователи из Howler Cell Threat Research Team обнаружили, что начальным вектором проникновения стал файл RTF, замаскированный под биографию реального офицера ВВС Бангладеш. Жертва, открывшая документ, полагала, что читает биографию, однако в действительности запускала многоступенчатый имплант с геозонированием, который связывался с инфраструктурой атакующих ещё до того, как пользователь заканчивал чтение первой страницы.
Описание
Атака опирается на технику удалённого внедрения шаблона: сам RTF-файл не содержит вредоносного макроса. Вместо этого он хранит последовательность юникод-escape-символов, которые после декодирования формируют URL для загрузки шаблона с сервера злоумышленников. Этот URL ведёт на домен greezupdto[.]info, который выступает в роли командно-контрольного сервера (C2) первого уровня. Сервер, в свою очередь, проверяет геолокацию и User-Agent запроса. Если запрос исходит из-за пределов Бангладеш или не соответствует сигнатуре Microsoft Word, возвращается пустой безвредный шаблон. Только целевые жертвы получают RTF-документ с внедрённым проектом VBA.
Макрос внутри шаблона содержит два массива байтов - для 32-разрядной и 64-разрядной версий Office. Выбор массива происходит на этапе компиляции в зависимости от архитектуры процесса. Сам макрос использует три Windows API-функции: ZwAllocateVirtualMemory для выделения исполняемой памяти, RtlMoveMemory для копирования данных и Internal_EnumUILanguages, которая злоупотребляется как примитив для выполнения кода через callback. Shellcode внутри массивов дополнительно закодирован двухшаговым преобразованием: побитовое NOT с последующим XOR с ключом 0x65, что эквивалентно одному XOR с ключом 0x9A.
После запуска initial shellcode выполняет цикл расшифровки на месте, используя классическую технику GetEIP через инструкцию FPU (fldpi и fnstenv), чтобы определить собственное положение в памяти. Затем он загружает следующий этап с того же C2-домена, но с расширением .ico, имитируя загрузку иконки. Этот этап также закодирован - применяется XOR с ключом 0x34, а затем с ключом 0x57. В итоге получаются два URL: один на .mp3 (содержащий DLL-агент), другой на .doc (чистый отвлекающий документ). На момент анализа сервер уже не отдавал DOC-файл, но исследователи смогли получить .mp3-файл с финальной полезной нагрузкой.
Финальный DLL-импорт, названный Stage 4, экспортирует одну функцию a4Strau, вызываемую через rundll32.exe. Его конфигурация зашифрована AES-128-CBC с жёстко заданными ключом и вектором инициализации. При расшифровке становятся видны все параметры: домен второго C2 (reggyupdated[.]info), имя задачи в планировщике (OneDrive Reporting Task с подставленным SID), интервал повторения (PT1M - одна минута), директория для копирования (%TEMP%\Inititate\), а также команда самоудаления после запуска.
Перед связью с C2 агент собирает информацию о системе: модель процессора, версию ОС, имя компьютера, имя пользователя, а также список установленного ПО. Все эти данные объединяются в структуру с разделителями и шифруются AES-128-CBC, затем кодируются base64 и отправляются в POST-запросе с параметром mopd= на URL вида /ZxStpliGBsfdutMawer/sIOklbgrTYULKcsdGBZxsfetmw. Сервер отвечает одним из трёх типов ответов: "finder" - сигнал ожидания; "MFG?<value>" - подтверждение, что полезная нагрузка готова к выдаче; ответ с префиксом "%PDF" - собственно модуль второго этапа. Исследователи напрямую отправили POST-запрос на URL доставки payload и получили живой модуль ejtest.dll с сервера exessupdate[.]info.
Полученный модуль продемонстрировал полную криптографическую связь с ранее задокументированными образцами DoNot. Его AES-ключ (32 A3 D5 97 6E 5A BC F5 C4 68 A8 24 69 E5 C7 91) и вектор инициализации (29 A9 B9 E9 E7 E5 E1 A3 A8 67 54 28 BC B7 A2 BE) совпадают байт-в-байт с ключами из независимого анализа DoNot-образца. Таким образом, атрибуция основывается на четырёх независимых линиях: идентичные пути URI C2, совпадение криптографического материала, соответствие тактики VBA-инъекций и общая инфраструктурная кластеризация доменов.
Howler Cell в предоставленном анализе также выявила целый кластер из 16 дополнительных доменов, распределённых по подсетям 193[.]149[.]0[.]0/16, 45[.]61[.]0[.]0/16 и 149[.]248[.]0[.]0/16. Домены используют намеренно искажённые названия (greezupdto, reggyupdated, tiffyservics, shadoworkz), часто с повторяющимися префиксами "reggy" и "program", а также с темами "updated/updto/update". Почти все используют TLD .info. Некоторые домены, например, rollededpack[.]info и programseeget[.]info, меняли хостинг, но их исторические IP связывают их с тем же кластером через общий IP 91[.]195[.]240[.]123.
Обнаружение живого модуля второго этапа, который всё ещё раздавался с активного C2, исключает версию о тестовом или спящем наборе инструментов. Инфраструктура работает в режиме реального времени, жертвы получают дополнительные модули. Атака нацелена исключительно на бангладешских военных через персональные приманки и региональное геозонирование, что указывает на целенаправленный сбор разведывательной информации, а не на оппортунистическую активность. Учитывая, что DoNot активна как минимум с 2016 года и известна операциями против Пакистана, Бангладеш, Шри-Ланки и соседних стран, эта кампания представляет собой систематическую угрозу для правительственных и военных организаций Южной Азии. Защитникам следует обратить внимание на HTTPS-трафик с POST-параметрами mopd= и malp=, на наличие задач планировщика, маскирующихся под OneDrive, а также на DNS-запросы к .info-доменам с искажёнными названиями.
Индикаторы компрометации
IPv4
- 139.180.186.155
- 149.248.76.118
- 149.248.76.218
- 149.248.77.205
- 149.248.78.232
- 149.248.78.4
- 149.248.79.86
- 149.28.128.239
- 168.100.11.239
- 193.149.185.148
- 193.149.190.162
- 193.149.190.30
- 206.71.149.167
- 216.245.184.186
- 45.61.136.27
- 45.61.139.243
- 45.61.139.33
- 64.111.92.6
Domain
- altzserberin.info
- cosmicupto.info
- exessupdate.info
- getsupdated.info
- golledsack.info
- greezupdto.info
- hafybreaks.info
- hillisolutions.info
- makerolleds.info
- programgreedz.info
- programseeget.info
- reggysolution.info
- reggyupdated.info
- rollededpack.info
- scriptlydev.com
- shadoworkz.info
- solutionlogz.info
- solutionpelle.info
- tiffyservics.info
SHA256
- 1cf7b7bb094821cc6518c21958a8e4b597c232c1d9b87082c5e0861aececb7de
- ad844edf7104d73d9dd45569ba8cebbf0a248546c1be4f53b8387a1371ab8eda
- d2af373a6da05fb7a9d06b83ff82ecd12952c655551673f8bbd8dc6d21cecea8
- feab754463aeb5e97f429b4db8c882c3db5a114434527fe3397ff95101d86521