Введение
Специалисты PT Expert Security Center (PT ESC) регулярно отслеживают активность хакерских группировок и появление новых угроз ИБ (threat intelligence). Во время такого мониторинга в апреле 2021 года была обнаружена отправленная в Монголию рассылка с вредоносным содержимым, неизвестным ранее. Некоторые из обнаруженных во время исследования файлов имели достаточно интересные названия — «хавсралт.scr» (монг. вложение), «Информация_Рб_июнь_2021_года_2021062826109.exe» — и, как показало исследование, содержали троян удаленного доступа (remote access trojan, RAT). Впоследствии аналогичные атаки были выявлены в России, Республике Беларусь, Канаде и США. По данным аналитиков threat intelligence из PT ESC, в общей сложности с января по июль 2021 года было проведено около десятка атак, где использовались найденные образцы ВПО. Детальный анализ вредоносного ПО, данные о путях, по которым располагались рабочие директории и ключи реестра, техники и механизмы, применяемые злоумышленниками (начиная с внедрения вредоносного кода и заканчивая используемыми логическими блоками и структурами), позволили соотнести этот зловред с активностью группы APT31.
Данная группировка, также известная как Judgment Panda (CrowdStrike) и Zirconium (Microsoft), активна по крайней мере с 2016 года. Предположительно, имеет китайское происхождение и предоставляет данные китайскому правительству и государственным предприятиям для достижения политических, экономических и военных преимуществ. Ключевой интерес — кибершпионаж. Среди целей злоумышленников — правительственный сектор, аэрокосмические и оборонные предприятия, а также международные финансовые компании и сектор высоких технологий. Жертвами группировки в разные годы становились правительство Финляндии, а также, предположительно, правительства Норвегии и Германии. Кроме того, группа атаковала организации и лица, близкие к кандидатам в президенты США во время предвыборной кампании 2020-го. Недавние атаки на компании во Франции, связанные со взломом домашних и офисных маршрутизаторов, также связывают с активностью этой группировки. В этой статье мы изучим созданное группировкой ВПО, подробнее остановимся на обнаруженных видах дропперов и уловках, используемых его разработчиками, а также приведем критерии, на основании которых проведена атрибуция атак.
Анализ вредоносного содержимого
Дроппер
Основная задача дроппера, внешний вид основной функции которого представлен на рис. 1, — создание на зараженном компьютере двух файлов: вредоносной библиотеки и уязвимого для DLL Sideloading приложения (позднее это приложение запускается). Оба файла создаются всегда по одному пути: C:\ProgramData\Apacha. При отсутствии данной директории происходит ее создание и перезапуск процесса.
На втором этапе запущенное дроппером приложение подгружает вредоносную библиотеку и вызывает одну из ее функций. Примечательно, что в качестве имени вредоносной библиотеки во всех случаях было выбрано MSVCR100.dll. Библиотека с идентичным именем входит в состав Visual C++ для Microsoft Visual Studio и есть почти на всех ПК, однако в легитимном случае она находится в папке System32 (рис. 2). Кроме того, размер вредоносной библиотеки намного меньше легитимной.
Стоит также отметить хитрость разработчиков ВПО: в качестве экспортов в библиотеке содержатся имена, которые можно найти в легитимной MSVCR100.dll. Без сомнения, это сделано с целью «приблизить» вредоносную библиотеку к оригинальной версии.
Впрочем, число экспортов во вредоносном образце намного меньше, а большинство из них — это вызовы ExitProcess.
Ниже представлен пример вызова вредоносной функции из созданной библиотеки, после чего управление передается вредоносному коду. Заметим, что чаще всего в качестве имени вредоносных функций выбирались те, которые используются при обычной загрузке приложений.
В ходе анализа экземпляров ВПО специалисты PT ESC обнаружили различные версии дропперов, содержащие один и тот же набор функций. Основное различие — имя директории, в которой будут созданы файлы, содержащиеся в дроппере. Однако во всех изученных случаях использовались директории, находящиеся в C:\ProgramData\.
На версию дроппера, загружающую все файлы с контрольного сервера, стоит обратить особое внимание. Рассмотрим его подробнее. На первом этапе также проверяется наличие рабочей директории, после чего происходит соединение с контрольным сервером и загрузка с него необходимых данных.
Коммуникация с сервером ничем не шифруется, также не шифруется и адрес контрольного сервера внутри ВПО. Загруженные файлы записываются в созданной рабочей директории.
На рис. 7 показаны участки кода, отвечающие за загрузку всех файлов с сервера (последний рассмотренный случай), а на рис. 8 — код загрузки основной библиотеки (первый случай).
Исследование открытых директорий контрольных серверов позволило обнаружить библиотеки в незашифрованном виде (рис. 9).
Также стоит отметить, что в ряде случаев, в частности при атаках на Монголию, дроппер был подписан валидной цифровой подписью (рис. 10). По мнению экспертов PT ESC, данная подпись, скорее всего, была украдена.
Вредоносная библиотека
Исполнение начинается с получения списка запущенных процессов, что, однако, ни на что не влияет и нигде не используется. Далее библиотека проверяет наличие файла C:\\ProgramData\\Apacha\\ssvagent.dll — это загруженная с сервера зашифрованная основная нагрузка. Если этого файла нет, то расшифровывается адрес контрольного сервера, с которого будет произведено скачивание.
По факту, это 5-байтный XOR со встроенным внутрь библиотеки ключом. Внутри бинарного файла ключ хранится в виде xmmword константой 9000000090000000900000009h (пятый байт добавляется по прямому адресу в память самой вредоносной программой), на самом деле шифрование производится с байтом 0x9. После расшифрования адреса C2 происходит соединение с контрольным сервером и загрузка с него зашифрованной полезной нагрузки. Затем полученные данные сохраняются в файле C:\\ProgramData\\Apacha\\ssvagent.dll, и легитимное приложение ssvagent.exe перезапускается. Основная часть описанных функций представлена на рис. 11.
В случае если полезная нагрузка загружена ранее, происходит проверка на уже запущенное приложение. Для этого создается мьютекс с именем ssvagent — если и он был создан, приложение завершается.
Далее библиотека записывает легитимный ssvagent.exe в автозагрузку через реестр, как показано на рис. 12.
После этого загруженный с сервера файл расшифровывается операцией XOR с 5-байтным ключом. (Алгоритм и ключ, показанные на рис. 10, отличаются от используемых при расшифровании адреса контрольного сервера.) Ключ, так же как и в случае с расшифрованием адреса контрольного сервера, хранится в виде xmmword и представляет собой константу 1100000033000000060000000Eh. Пятый байт во всех случаях идентичен — его значение 0x12.
После этого расшифрованные данные размещаются в памяти приложения, и на них передается управление.
Полезная нагрузка
Основная библиотека начинает свое исполнение с создания пакета, который будет отправлен на сервер. Формально пакет создается из трех частей:
- основной заголовок,
- хеш,
- зашифрованные данные.
Основной заголовок представляет собой следующую структуру:
typedef struct _MAIN_HEADER { DWORD sizeOfPacket; //без учета самого поля DWORD const_1; DWORD const_2; } MAIN_HEADER, *PMAIN_HEADER;
Значения const_1 и const_2 одинаковы и не меняются от пакета к пакету (выравненное до 4 байтов значение единицы).
Для формирования хеша, которого предваряет основной заголовок, вредоносное ПО получает MAC-адрес и имя ПК (результат исполнения GetComputerNameExW). Данные значения конкатенируются (не используя при этом никакие разделители), после чего от полученного значения берется MD5-хеш, который потом конвертируется в строку. Пример формирования хеша представлен на рис. 14.
Далее формируется третья часть пакета — описывающая его структура, представлена ниже:
typedef struct _FIRST_PACKET { char pcName[]; //результат GetComputerNameExW BYTE splitByte_0x09; char userName[]; // результат GetUserNameW BYTE splitByte_0x09; char hostIp[]; BYTE splitByte_0x09; char decrStr_1[2]; BYTE splitByte_0x2E; char decrStr_2[1]; BYTE splitByte_0x2E; char decrStr_3[5]; BYTE splitByte_0x2E; char decrStr_4[2]; BYTE splitByte_0x2E; char osVersion_inverted[2]; BYTE splitByte_0x09; char version[3]; BYTE splitByte_0x09; char macAddr[]; BYTE splitByte_0x09; } _FIRST_PACKET, *_FIRST_PACKET;
Каждое поле отделяется от другого значением 0x09, некоторые поля разделены значением 0x2E.
Поля заголовка, начиная с decrStr_1 и по decrStr_4, не генерируются вредоносной программой и не собираются на зараженном компьютере. Все значения находятся внутри вредоносной программы в зашифрованном виде. Каждое значение отдельно расшифровывается и добавляется в заголовок. Поле decrStr_4 зависит от разрядности операционной системы, что в конечном счете приводит к разным смещениям зашифрованных данных, передаваемых в функцию расшифрования (рис. 17) в качестве аргумента.
Ниже представлен формат полного сформированного пакета. Зеленым отмечен основной заголовок, красным — хеш, желтым — зашифрованные данные.
Сформированный пакет шифруется RC-4 с ключом 0x16CCA81F, который вшит в зашифрованные данные, и отправляется на сервер, после чего вредоносная программа ожидает команд от сервера.
Рассмотрим список команд, выполняемых ВПО:
- 0x3 — получить информацию о подключенных дисках;
- 0x4 — выполнить поиск файла;
- 0x5 — создать процесс, коммуникация через пайп;
- 0xA — создать процесс через ShellExecute;
- 0xC — создать новый поток с загрузкой файла с сервера;
- 0x6, 0x7, 0x8, 0x9 (идентичны) — выполнить поиск файла или выполнить нужную операцию через SHFileOperationW (копирование файла, перемещение файла, переименование файла, удаление файла);
- 0xB — создать директорию;
- 0xD — создать новый поток с отправкой файла на сервер;
- 0x11 — выполнить самоудаление.
Стоит отметить, что часть из них дублируют функции друг друга, а некоторые идентичны в плане кодовой имплементации. Скорее всего, это связано с тем, что потенциальная версия ВПО — 1.0. Предположение основано на значении, вшитом в код и содержащемся в сетевых пакетах.
Весьма любопытен код обработки последней команды: при помощи bat-файла удаляются все созданные файлы и ключи реестра.
Атрибуция
В ходе расследования специалистами PT ESC был найден отчет компании Secureworks, в котором описан троян DropboxAES RAT группы APT31. Анализ обнаруженных экземпляров ВПО позволяет утверждать, что за изученной нами атакой тоже стоит эта группировка: были найдены многочисленные пересечения по функционалу, используемым техникам и механизмам — начиная с внедрения вредоносного кода (вплоть до имен используемых библиотек) и заканчивая используемыми внутри программного кода логическими блоками и структурами. Идентичными также являются пути, по которым располагаются рабочие директории ВПО, и ключи реестра, через которые обеспечивается механизм персистентности и их идентичность рабочим директориям. Помимо этого, в высокой степени схожими оказались обработчики команд, исполняемые ВПО, а механизм самоудаления идентичен.
Главное отличие данной версии вредоносного ПО от рассмотренного Secureworks заключается в коммуникации основной нагрузки с управляющим сервером. В изучаемых образцах ВПО в качестве контрольного сервера не использовался Dropbox.
Сетевая инфраструктура
Обнаруженные образцы ВПО, в том числе и зашифрованные, не позволили выявить каких-либо пересечений между ними по сетевой инфраструктуре. Тем не менее в ряде случаев полезная нагрузка обращалась на узлы, отличные от тех, с которых загружалась.
В одном из последних образцов вредоносного ПО был выявлен интересный домен inst.rsnet-devel[.]com, имитирующий домен федеральных органов государственной власти и органов государственной власти субъектов РФ для сегмента сети Интернет, что может говорить об атаке на правительственные организации в России.
Авторы: Денис Кувшинов, Даниил Колосков, PT ESCЗаключение
В ходе исследования специалисты PT ESC проанализировали новые версии ВПО, используемого группировкой APT31 в атаках с января по июль текущего года. Обнаруженные сходства с более ранними версиями вредоносных образцов, описанными исследователями, например, в 2020 году, позволяют предположить, что группа расширяет географию интересов на страны, где ее растущая активность может быть обнаружена, в частности на Россию. Мы полагаем, что в ближайшее время будет выявлено применение этой группой в атаках, в том числе на Россию, и другого инструментария, который можно будет идентифицировать по кодовому соответствию либо сетевой инфраструктуре.
IOCs
Файл | MD5 | SHA-1 | SHA-256 |
Дропперы |
|||
jconsole.exe | 3f5ea95a5076b473cf8218170e820784 | 765bd2fd32318a4cb9e4658194fe0fb5d94568e0 | 33f136069d7c3a030b2e0738a5ee80d442dee1a202f6937121fa4e92a775fead |
- | db1673a1e8316287cb940725bb6caa68 | 6a358afdd2c59f0bbfc7b1982ae6b0a782399923 | 2affdebbaa4f0cfa64e5c42e70d78665ef9ccb2c731c5fe07582ccdfdc05b0cc |
- | 2798b66475cf0794e9b868d656defca7 | 0c3e0a5553cc29049fd8c5fc3a1af3ae6c0c298e | 002dc9f6823ad8d3de23bcb5e41bcefd895df573ed3d89e0821243aa9b7bb4a8 |
- | 626270d5bf16eb2c4dda2d9f6e0c4ef9 | f585917fdb89b9dc849621676376b0b1e6b348fa | 2b495829b8b3319f98e22f35d7bd48c4dea1b9bafe80749d628da99fede6d694 |
news.exe | 56450799fe4e44d7c5aff84d173760e8 | 10037b4533df13983a75d74dcea32dc73665700c | 679955ff2a97ea11a181ae60c775eff78fadd767bc641ca0d1cff86a26df8ac8 |
- | d919fed03ec53654be59e15525c1448f | 9db9fe7b04bc5b2fc10f78da3891eb30c19a48b6 | efdbb19fb65bcf5c4a8feb3eab784682d01f3e75f711674e4d469d4dfe4a21f3 |
хавсралт.scr | d22670ab9b13de79e442100f56985032 | 6e7540fa001fc992d2050b97ea17686d34863740 | 78cc364e761701455bdc4bce100c2836566e662b87b5c28251c178eba2e9ce7e |
president_email.exe | 8e744f7b07484afcf87c454c6292e944 | da845d8219d3315c02f84c27094965d02cdaa76c | 5d0872d07c6837dbc3bfa85fd8f79da3d83d7bb7504a6de7305833090b214f2c |
Информация_Рб_июнь_2021_года_2021062826109.exe | 49bca397674f67e4c069068b596cab3e | d13d6d683855f5a547b96b6e2365c6f49a899d62 | 874b946b674715c580e7b379e9597e48c85c04cca3a2790d943f56600b575d2f |
Вредоносные библиотеки |
|||
MSVCR100.dll | 8cefaa146178f5c3a297a7895cd3d1fc | 81779c94dbe2887ff1ff0fd4c15ee0c373bd0b40 | c15a475f8324fdfcd959ffc40bcbee655cbdc5ab9cbda0caf59d63700989766f |
MSVCR100.dll | 326024bc9222ebec281ec53ca5598cc1 | 5c25b93ebcedafcff0c85bcde2a0857ca72dc73e | 0229404a146bb43ebc6d25d2145b493e950b2f92483be1b964f4f1c90ec6cf70 |
MSVCR100.dll | 6f3047277719e2351ce14a54a39f7b15 | 7de335e005b0766268df918e7e3b64f4b3521c1e | 640128a35efc0ad83fe5b1461090f1b869c7a6ed0a8a661be403359d48a78085 |
Сетевые индикаторы
gitcloudcache[.]com
edgecloudc[.]com
api[.]hostupoeui[.]com
api[.]flushcdn[.]com
const[.]be-government[.]com
drmtake[.]tk
inst[.]rsnet-devel[.]com
20[.]11[.]11[.]67
Сетевые сигнатуры
В результате исследования формата полного сформированного пакета экспертам Positive Technologies удалось разработать правила для детектирования данной угрозы в сетевом трафике. Скачать свободно распространяемые правила можно из нашего репозитория по адресу - https://github.com/ptresearch/AttackDetection/tree/master/APT31
MITRE
ID | Name | Description |
Resource Development |
||
T1587.001 | Malware | Группа APT31 использовала вредоносные программы для различных операций |
T1587.002 | Develop Capabilities: Code Signing Certificates | Группа APT31 использовала валидные цифровые подписи для своих вредоносных компонентов |
Initial Access |
||
T1566 | Phishing | Группа APT31 использовала фишинг для рассылки своих компонентов |
Execution |
||
T1204.002 | User Execution: Malicious File | Группа APT31 занималась рассылкой вредоносных файлов с иконками документов Microsoft Office |
T1059.003 | Command and Scripting Interpreter: Windows Command Shell | Группа APT31 использовала командную строку для исполнения команд |
T1106 | Native API | Группа APT31 использовала системные API для исполнения команд |
Persistence |
||
T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | Группа APT31 использовала реестр Windows для закрепления |
T1574 | Hijack Execution Flow: DLL Search Order Hijacking | Группа APT31 использовала для закрепления технику DLL hijacking |
Defense Evasion |
||
T1036 | Masquerading | Группа APT31 использовала маскировку под файлы Microsoft Office |
T1140 | Deobfuscate/Decode Files or Information | Группа APT31 использовала загрузчики, расшифровывающие находящуюся внутри полезную нагрузку |
T1027 | Obfuscated Files or Information | Группа APT31 использовала шифрование полезной нагрузки |
T1112 | Modify Registry | Группа APT31 использовала реестр Windows для закрепления |
Discovery |
||
T1082 | System Information Discovery | Группа APT31 собирала системную информацию с зараженных компьютеров |
Collection |
||
T1005 | Data from Local System | Группа APT31 использовала бэкдор-функции для эксфильтрации любого файла на зараженном устройстве |
Command and control |
||
T1001 | Data Obfuscation | Группа APT31 использовала сокрытие данных в C&C |
T1032 | Standard Cryptographic Protocol | Группа APT31 использовала сокрытие данных в C&C при помощи RC4 |
T1043 | Commonly Used Port | Группа APT31 использовала порты 80 и 443 для коммуникации |
T1071.001 | Application Layer Protocol: Web Protocols | Группа APT31 использовала протоколы HTTP и HTTPS для коммуникации с серверами управления |
Exfiltration |
||
T1020 | Automated Exfiltration | Группа APT31 использовала автоматическую эксфильтрацию похищенных файлов |
T1041 | Exfiltration Over C2 Channel | Группа APT31 использовала C&C-канал для эксфильтрации данных |