# Wagner Wiper. Запланированная кампания или неудачная шутка?

Приветствую. Сегодня мы рассмотрим Wagner Wiper - вредоносное ПО, "кошмарившее" российские компании пару месяцев назад, и попытаемся понять, была ли это рекламная кампания ЧВК Вагнер или неудачная шутка неизвестных хактивистов. В общем, приступим.
##### Содержание:
- [Общая информация](##Общая-информация)
- [Технический анализ](##Технический-анализ)
- [Логический анализ](##Логический-анализ)
- [Индикаторы компрометации](##Индикаторы-компрометации)
## Общая информация
**Wagner Wiper** - вредоносное ПО, атаковавшее российские компании в начале этого лета. После заражения данное ПО шифрует чувствительные файлы и выводит информационное сообщение с призывом вступить в ЧВК Вагнер.
Текст выводимого сообщения:
```
Официальный вирус ЧВК Вагнера по трудоустройству ®
Вакансии. Служба в ЧВК Вагнер
По сотрудничеству:
Канал не предназначен для агитации, склонения, вербовки и иного вовлечения лиц в совершение противоправных деяний.
Братья хватит терпеть Власть! идем на войну против Шойгу!
Москва: +7(985)008-02-40
Московская область: +7(985)008-02-73 если хотите пойти против чиновников!
Привет от Пригожина! https://t.me/wagnernew
```
Все контакты и ссылки, указанные в сообщении, **действительно** связаны с ЧВК Вагнер, в связи с чем данное вредоносное ПО и получило свое название.
## Технический анализ
Для анализа использовался следующий [семпл](https://samples.vx-underground.org/root/Samples/Families/WagnerWiper/1238ab3dd3ed620536969ee438e99a33a418ba20f5e691962ed07904e075b2a4.7z).
При загрузке в dnSpy можно увидеть, что название сборки - "**ConsoleApplication7**". Вероятнее всего, проект был создан в Visual Studio.

### Поток исполнения
Функция Main выглядит довольно просто (семпл чистый, следов обфускации не замечено):
```
private static void Main(string[] args)
{
if (Program.AlreadyRunning()) // Проверка на повторный запуск
{
Environment.Exit(1);
}
if (Program.checkSleep) // Уклонение от запуска путём "засыпания" на опредёленный промежуток времени
{
Program.sleepOutOfTempFolder();
}
if (Program.checkAdminPrivilage)
{
Program.copyResistForAdmin(Program.processName); // Копирование в "AppData\Roaming" и запуск с правами администратора (при их наличии)
}
else if (Program.checkCopyRoaming)
{
Program.copyRoaming(Program.processName); // Копирование в "AppData\Roaming", если файл запущен по другому пути
}
if (Program.checkStartupFolder)
{
Program.addLinkToStartup(); // Добавление в автозагрузку
}
Program.lookForDirectories(); // Запуск процесса шифрования
if (Program.checkAdminPrivilage)
{
if (Program.checkdeleteShadowCopies)
{
Program.deleteShadowCopies(); // Удаление теневых копий томов
}
if (Program.checkdisableRecoveryMode)
{
Program.disableRecoveryMode(); // Отключение режима восстановления
}
if (Program.checkdeleteBackupCatalog)
{
Program.deleteBackupCatalog(); // Удаление бэкапа
}
}
if (Program.checkSpread)
{
Program.spreadIt(Program.spreadName); // Запись семпла в корневую директорию каждого диска, доступного устройству
}
Program.addAndOpenNote(); // Запись сообщения, показанного выше, и его открытие
Program.SetWallpaper(Program.base64Image); // Установка обоев с помощью WinAPI
new Thread(delegate
{
Program.Run(); // Подмена BTC криптокошелька из буфера обмена
}).Start();
}
```
### Проверка на копии
Данная функция осуществляет проверку на то, запущено ли более одной копии данного вредоносного ПО в настоящий момент.
Примечательно то, что вместо привычной проверки через мьютекс, Wagner Wiper получает все процессы в системе и пути к создавшим их программам, после чего сравнивает их со своим нынешним путем.

### Закрепление на устройстве
Функция "**copyResistForAdmin**" существляет попытку запуска вредоносного ПО с привилегиями администратора при помощи "runas" и копирования в "**AppData\\Roaming**".

При запуске ПО с правами обычного пользователя активируется функция "**copyRoaming**", осуществляющая практически те же действия, что и "**copyResistForAdmin**".
### Удаление бэкапов и точек восстановления
Функции "**deleteShadowCopies**", "**disableRecoveryMode**" и "**deleteBackupCatalog**" закрывают возможность восстановления данных из бэкапов, если вредоносное ПО было запущено с правами администратора.
Осуществляется это с помощью трех комманд:
1. vssadmin delete shadows /all /quiet & wmic shadowcopy delete
2. bcdedit /set {default} bootstatuspolicy ignoreallfailures & bcdedit /set {default} recoveryenabled no
3. wbadmin delete catalog -quiet
### Шифрование файлов
Вредоносное ПО шифрует все файлы, находящиеся в следующих директориях:
- Desktop
- Links
- Contacts
- Documents
- Downloads
- Pictures
- Music
- OneDrive
- Saved Games
- Favorites
- Searches
- Videos
- Application Data
- Common Documents
- Common Pictures
- Common Music
- Common Videos
- Common Desktop Directory
В них ПО получает список директорий и файлов, которые, в зависимости от их размера, либо шифруются с помощью **AES** со случайным паролем, либо перезаписываются **случайными** данными.

### Установка заднего фона
В конце своей работы Wagner Wiper устанавливает на задний фон следующее изображение:

Происходит это с помощью WinAPI функции "[**SystemParametersInfo**](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa)" с флагом "**SPI_SETDESKWALLPAPER**".
## Логический анализ
> **Внимание**: все, что сказано в данном разделе, является личным мнением автора и может не совпадать с мнением читателя и / или реальностью. Соглашаться с высказываниями, представленными ниже, или нет - ваш выбор.
Вот мы и подобрались к самому интересному вопросу: было ли это вредоносное ПО оригинальной рекламной кампанией ЧВК Вагнер или нет?
На мой взгляд - **нет**.
Почему? Все очень просто.
1. В ПО присутствует адрес [биткоин кошелька](https://www.blockchain.com/explorer/addresses/btc/bc1qw0ll8p9m8uezhqhyd7z459ajrk722yn8c5j4fg), который, однако, никак не фигурирует в записке о выкупе. Из этого можно сделать вывод, что данный шифровальщик является модифицированной версией какого-либо опенсорсного продукта. Также операции, связанные с данным кошельком, не похожи на переводы в качестве выкупа.
2. Слабо верится в то, что ЧВК Вагнер атаковал российские кампании (а именно на них атакующие и делали упор). У них хватало путей наема кадров и без подрыва деятельности российских компаний.
3. В указанном в записке канале не появлялось какой-либо информации, аффилирующей данное ПО с вышеуказанной организацией.
4. Написано ПО достаточно небрежно, есть синтаксические и логические ошибки, а, следовательно, разработкой занимался, скорее всего, не профессионал. а энтузиаст.
Таким образом, за данной вредоносной кампанией скорее всего стояла хактивистская группа, не связанная с ЧВК Вагнер, но поддерживающая ее.
## Индикаторы компрометации
**MD5**: d26b2c8fc07cb5c72bfc40779f09d491
**SHA1**: 8ee7fc0171b980aa93b687e334d1e29a8d634085
YARA правило, которое детектирует данное вредоносное ПО:
```
import "pe"
rule wagner_wiper {
meta:
filetype = "Win32 EXE"
date = "07/06/2023"
md5 = "f5ef8c420c99bbddfe27c7046bf67986"
description = "Detects Phemedrone Stealer - C# open source infostealer."
strings:
$filename = "WAGNER.exe"
$spreadname = "surprise.exe"
$appmutex1 = "7z459ajrk722yn8c5j4fg"
$appmutex2 = "2X28tfRmWaPyPQgvoHV"
condition:
pe.is_pe
and pe.imports("mscoree.dll")
and all of them
}
```
**Telegram**: [File Exploit](https://t.me/filexploit)