• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Анализ вымогателя Diavol Ransomware

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Обзор

Это мой анализ программы-вымогателя DIAVOL.

DIAVOL — это относительно новая программа-вымогатель, которая использует уникальный метод с шелл-кодом для запуска своих основных функций и RSA для шифрования файлов.

Вредоносная программа содержит жестко закодированную конфигурацию, в которой хранится такая информация, как файлы для шифрования и открытый ключ RSA, но она также может запрашивать эту информацию с удаленного сервера злоумышленника.

В отличие от большинства основных программ-вымогателей, схема шифрования этой новой вредоносной программы относительно медленная из-за рекурсивного метода обхода файлов.

1642847394143.png


IOCS

Большое спасибо Curated Intelligence (https://twitter.com/CuratedIntel )за предоставленный образец.

Анализируемый образец представляет собой 64-битный исполняемый файл Windows.

MD5: f4928b5365a0bd6db2e9d654a77308d7

SHA256: ee13d59ae3601c948bd10560188447e6faaeef5336dcd605b52ee558ff2a8588

Сэмпл: (https://bazaar.abuse.ch/sample/ee13d59ae3601c948bd10560188447e6faaeef5336dcd605b52ee558ff2a8588/)

1642847411421.png


Записка с требованием выкупа

Содержимое примечания о выкупе по умолчанию хранится в виде открытого текста в конфигурации DIAVOL. Вредоносная программа также может запросить записку о выкупе со своего удаленного сервера и переопределить ее по умолчанию.

Имя файла примечания о выкупе от DIAVOL — README-FOR-DECRYPT.txt.

1642847429837.png


Статический анализ кода

Анти-анализ: запуск функций с шеллкодом


Для анти-анализа DIAVOL загружает шелл-код, содержащий его основные функции, в память и выполняет его динамически, что немного усложняет статический анализ.

Сначала вредоносное ПО вызывает VirtualAlloc, чтобы выделить два буфера памяти для последующей загрузки этих шелл-кодов.

1642847442393.png


Когда DIAVOL хочет выполнить определенную функцию, он вызывает функцию для загрузки шелл-кода в память и выполняет инструкцию вызова для передачи управления шелл-коду.

1642847451422.png


Во-первых, чтобы загрузить шелл-код в память, DIAVOL извлекает растровое изображение, соответствующее заданному имени ресурса, вызывая LoadBitmapW, CreateCompatibleDC, SelectObject и GetObjectW.

Затем он вызывает GetDIBits для получения битов растрового изображения и копирует их в буфер шеллкода в виде DIB.

1642847464165.png


В отличие от обычного шеллкода, DIAVOL не использует вручную PEB для динамического разрешения импорта. Вредоносное ПО загружает "JPEG" с тем же именем в разделе ресурсов, извлекает список импортированных функций с соответствующими DLL и вручную вызывает LoadLibraryA и GetProcAddress для разрешения его для шелл-кода. Разрешенные адреса API хранятся в конце буфера, поэтому шелл-код может вызывать эти API, используя их точные смещения, что делает загруженную полезную нагрузку независимой от позиции.

1642847476884.png


Ниже приведено растровое изображение и список импортированных API, извлеченных из Resource Hacker.

1642847487340.png


Поскольку каждый шелл-код должен быть независимым от позиции, мы можем просто загрузить его в IDA для статического анализа после извлечения. Однако адреса API не будут иметь смысла, когда IDA загрузит шелл-код, потому что они относятся к тому месту, где в памяти вредоносного ПО находятся библиотеки DLL.

1642847501275.png

Чтобы исправить это, нам просто нужно переименовать адреса API в том порядке, в котором они появляются в соответствующем ресурсе JPEG. После переименования шеллкод должен корректно декомпилироваться, и мы можем начать на нем наш статический анализ.

1642847518165.png


Аргументы командной строки

DIAVOL может работать как с аргументами командной строки, так и без них.

Ниже приведен список аргументов, которые могут быть предоставлены оператором.

1642847532130.png


Создание идентификатора бота

Первая функция, которую выполняет DIAVOL, — это генерация идентификатора бота путем загрузки и выполнения шелл-кода из ресурса GENBOTID.

Перед запуском шелл-кода DIAVOL вызывает time64, чтобы получить текущую метку времени в системе, и использует ее в качестве начального значения для srand для инициализации генератора псевдослучайных чисел.

Затем он генерирует следующую структуру и передает ее шелл-коду. Поле bot_ID позже используется для регистрации жертвы на удаленном сервере злоумышленника, а жертва_ID — это идентификатор жертвы, который записывается в записке с требованием выкупа. RSA_CRYPT_BUFF — это буфер, который позже используется для шифрования файлов.

1642847549606.png


1642847559623.png


Чтобы сгенерировать идентификатор жертвы, шелл-код создает уникальный GUID с помощью CoCreateGuid и использует его как случайное число для индексации строки "0123456789ABCDEF", чтобы сгенерировать случайную 32-символьную строку.

1642847575002.png


1642847584409.png


Чтобы сгенерировать идентификатор бота, вредоносное ПО сначала вызывает GetComputerNameA и GetUserNameA, чтобы получить имя компьютера и имя пользователя. Он также вызывает RtlGetVersion для получения версии компьютера жертвы и использует ее для индексации строки "0123456789ABCDEF" для создания 8-символьной строки.

Затем идентификатор бота создается в следующем строковом формате.

** + + "_W" + <8_character_string_from_OS_version> + "."**

1642847609438.png


1642847619067.png


Наконец, чтобы заполнить поле RSA_CRYPT_BUFF, вредоносная программа вызывает функцию rand для создания случайного 1024-байтового буфера.

1642847655972.png

Жестко закодированная конфигурация

Конфигурация DIAVOL хранится в памяти в открытом виде.

Чтобы извлечь его, вредоносное ПО выделяет следующую структуру с помощью LocalAlloc и заполняет ее, используя жестко запрограммированные значения из памяти.

1642847669530.png


1642847688868.png


1642847699504.png

Ниже приведены жестко запрограммированные значения конфигурации.

1642847714698.png


Регистрация бота

Чтобы зарегистрировать жертву как бота, DIAVOL сначала формирует содержимое POST-запроса, который затем отправляется на удаленный сервер регистрации.

Это делается путем объединения идентификатора бота , сгенерированного при создании идентификатора бота, и жестко запрограммированного идентификатора группы в конфигурации в следующем формате.

cid=<bot_ID>&group=<group_ID>&ip_local1=111.111.111.111&ip_local2=222.222.222.222&ip_external=2.16.7.12

1642847738186.png


Далее вредоносное ПО выделяет память для следующей структуры перед загрузкой и выполнением шелл-кода из ресурса REGISTER.

1642847750871.png



1642847766008.png


Для отправки POST-запроса используется шелл-код InternetOpenA для инициализации использования приложением функций WinINet, InternetConnectA для подключения к серверу C2, HttpOpenRequestA для открытия POST-запроса в указанном доменном каталоге и HttpSendRequestA для отправки созданного POST-запроса.

Наконец, вредоносная программа вызывает HttpQueryInfoA для запроса и возврата ответа сервера.

1642847803255.png


Переопределение конфигурации

Помимо использования параметров командной строки, DIAVOL также может запрашивать различные значения со своего удаленного сервера, чтобы переопределить поля конфигурации, в отличие от большинства основных программ-вымогателей.

Сначала вредоносное ПО проверяет, правильно ли зарегистрирована жертва в качестве бота на главном сервере регистрации, проверяя, соответствует ли код ответа сервера 200.

1642847823150.png


Затем он загружает и выполняет шелл-код из ресурса FROMNET для запроса различных значений конфигурации.

Для вызовов шелл-кода вредоносное ПО выделяет следующую структуру, прежде чем передать ее в качестве параметра.

1642847834202.png


Для каталога домена адреса сервера имя поля зависит от поля конфигурации, которое запрашивает вредоносное ПО. После завершения регистрации DIAVOL запрашивает следующие имена полей:

-key: ключ RSA в кодировке Base64.
-services: стоп-лист служб
-priority: целевые файлы для шифрования в первую очередь
-ignore: имена файлов, чтобы избежать шифрования
-ext: имена файлов для включения шифрования
-wipe: имена файлов для удаления
-landing: записка о выкупе


1642847859642.png


Шелл-код вызывает InternetConnectA для подключения к серверу C2, HttpOpenRequestA для открытия GET-запроса и HttpSendRequestA для отправки запроса. Затем он вызывает InternetReadFile, чтобы прочитать ответ сервера для запрошенного поля и вернуть его.

1642847875978.png


Далее, поскольку списки в конфигурации содержат переменные среды, DIAVOL разрешает их, вызывая GetEnvironmentVariableW, и преобразует их в нижний регистр с помощью CharLowerBuffW.

1642847888715.png


Наконец, записка о выкупе в конфигурации переворачивается, а строка "%cid_bot%" заменяется сгенерированным идентификатором жертвы.

1642847905016.png


Остановка служб

DIAVOL загружает и выполняет шелл-код из ресурса SERVPROC, чтобы остановить службы, указанные в конфигурации.

1642847915426.png


Получив список служб, которые необходимо остановить, шелл-код перебирает список и останавливает их с помощью диспетчера управления службами.

Сначала он вызывает OpenSCManagerW для получения дескриптора диспетчера управления службами со всеми правами доступа, OpenServiceW для получения дескриптора целевой службы и ControlService для отправки кода остановки управления для ее остановки.

1642847931901.png


Завершающие процессы

DIAVOL загружает и выполняет шелл-код из ресурса KILLPR для завершения процессов, указанных в конфигурации.

1642847941640.png


Сначала шелл-код вызывает CreateToolhelp32Snapshot, чтобы сделать снимок всех процессов в системе. Используя моментальный снимок, он перебирает каждый процесс, используя Process32FirstW и Process32NextW. Для каждого процесса его исполняемое имя сравнивается с каждым именем в списке процессов конфигурации, которые должны быть завершены.

1642847957080.png


1642847971670.png


Инициализация RSA

Перед шифрованием файлов DIAVOL устанавливает криптографические буферы, которые впоследствии используются для шифрования файлов.

Во-первых, он выделяет память для следующей структуры перед загрузкой и выполнением шелл-кода из ресурса RSAINIT.

1642847984568.png


1642848000235.png


Задача шеллкода состоит в том, чтобы заполнить поле RSA_FOOTER для последующего использования при шифровании файла.

Во-первых, он вызывает CryptStringToBinaryW для декодирования открытого ключа RSA с помощью Base64 и CryptAcquireContextW для получения дескриптора соответствующего поставщика криптографических услуг.

1642848017662.png


Затем вредоносное ПО вызывает CryptImportKey, чтобы импортировать открытый ключ RSA и получить дескриптор ключа. Он вызывает VirtualAlloc для выделения буфера памяти и делит буфер RSA_CRYPT_BUFF на 117-байтовые блоки. Для каждого блока DIAVOL добавляет его в выделенный буфер и вызывает CryptEncrypt, чтобы зашифровать его с помощью дескриптора ключа RSA.

1642848032068.png


Наконец, закодированный буфер размером 2304 байта будет скопирован в буфер RSA_FOOTER. Как это и буфер RSA_CRYPT_BUFF используются, будет обсуждаться позже при шифровании файлов

1642848041266.png

Поиск дисков для шифрования

DIAVOL загружает и выполняет шелл-код из ресурса ENMDSKS для перечисления и поиска всех дисков в системе, когда режим шифрования из командной строки — локальный, сетевой, сканирование или все.

В качестве параметров шелл-код получает список файлов, чтобы избежать шифрования, и буфер для хранения имен дисков, найденных при переборе.

1642848052637.png


Сначала шелл-код вызывает GetLogicalDriveStringsW для получения списка всех дисков в системе. Для каждого диска его имя преобразуется в нижний регистр и передается в GetDriveTypeW в качестве параметра для получения его типа.

Диск обрабатывается только в том случае, если его тип DRIVE_REMOTE или DRIVE_FIXED и его имя отсутствует в списке файлов, которые следует избегать.

1642848072024.png


Если диск подходит для шифрования, его имя добавляется к буферу дисков из параметра шеллкода.

1642848084584.png


Если диск является удаленным, вредоносное ПО вызывает WNetGetConnectionW для получения имени связанного с ним сетевого ресурса.

1642848098799.png


Наконец, используя имя сетевого ресурса, вредоносная программа вызывает gethostbyname для получения структуры хоста, которая содержит IP-адрес удаленного хоста.

Наконец, DIAVOL добавляет этот IP-адрес в список файлов, чтобы избежать шифрования.

1642848113628.png

Сканирование целевых сетевых ресурсов через SMB

DIAVOL имеет два разных шеллкода для сканирования сетевых ресурсов с использованием SMB в ресурсах SMBFAST и SMB.

Шелл-код SMBFAST используется для сканирования общих сетевых ресурсов из списка целевых хостов, заданного параметром командной строки «-h».

Перед запуском этого шелл-кода DIAVOL выделяет память для следующей структуры, содержащей информацию о сетевых хостах, подлежащих перечислению для общих ресурсов.

1642848133114.png

Вредонос также выделяет память для этой структуры, чтобы получить имя всех сканируемых сетевых ресурсов. Затем обе структуры передаются шеллкоду в качестве параметров.

1642848148817.png



1642848157608.png


Поскольку шелл-код SMBFAST сканирует только имена хостов в заданном целевом списке, он просматривает список и записывает каждое имя общего сетевого ресурса в поле curr_network_share_name для обработки.

Во-первых, вредоносное ПО вызывает gethostbyname, чтобы получить структуру хоста для текущего имени общего ресурса. Используя структуру, он извлекает список IP-адресов хоста и добавляет его в поле remote_host_IP_list.

1642848170247.png


Затем для каждого полученного от хоста IP-адреса вредоносное ПО записывает его в буфер DIAVOL_SMB_STRUCT->DNS_server_name. Затем он передается в качестве параметра вызову NetShareEnum для получения информации о каждом общем ресурсе на сервере с этим IP-адресом.

1642848183569.png


Затем для каждого ресурса на сервере DIAVOL добавляет его в буфер DIAVOL_SMB_LIST->SMB_net_share_list в следующем формате.

<Server_IP_Address>//<Resource_Name>//

Имя ресурса извлекается из shi1_netname из структуры SHARE_INFO_1, полученной в результате предыдущего вызова NetShareEnum.

1642848207057.png


1642848222766.png


Окончательный список позже используется для шифрования этих общих ресурсов.

Сканирование сетевых ресурсов в таблице ARP через SMB

Шелл-код SMB используется для сканирования общих сетевых ресурсов с хостов, извлеченных из таблицы протокола разрешения адресов (ARP).

Перед запуском этого шелл-кода DIAVOL выделяет память для структуры DIAVOL_SMB_STRUCT и структуры DIAVOL_SMB_LIST, аналогичной шелл-коду SMBFAST.

1642848245218.png


Сначала шелл-код вызывает GetIpNetTable для получения таблицы сопоставления IPv4-физических адресов на машине жертвы.

Используя эту таблицу, вредоносное ПО извлекает список структур MIB_IPNETROW, содержащих записи для IP-адресов в таблице ARP. Для каждой структуры MIB_IPNETROW DIAVOL вызывает GetIfEntry для получения информации для указанного интерфейса на локальном компьютере.

1642848263528.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Хоть инглиш знаю и спокойно могу читать статьи этого корейца, но лайк тебе за старания не влепить не могу :)
 
Вечером дополню 2ю часть
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Для отправки POST-запроса используется шелл-код InternetOpenA для инициализации использования приложением функций WinINet, InternetConnectA для подключения к серверу C2, HttpOpenRequestA для открытия POST-запроса в указанном доменном каталоге и HttpSendRequestA для отправки созданного POST-запроса.

Наконец, вредоносная программа вызывает HttpQueryInfoA для запроса и возврата ответа сервера.
Че за ебала
Регистрация бота

Чтобы зарегистрировать жертву как бота, DIAVOL сначала формирует содержимое POST-запроса, который затем отправляется на удаленный сервер регистрации.

Это делается путем объединения идентификатора бота , сгенерированного при создании идентификатора бота, и жестко запрограммированного идентификатора группы в конфигурации в следующем формате.

cid=<bot_ID>&group=<group_ID>&ip_local1=111.111.111.111&ip_local2=222.222.222.222&ip_external=2.16.7.12
Шкафчик ходит кудато по хттп. Это даже не смешно уже. Пздц
 
Че за ебала

Шкафчик ходит кудато по хттп. Это даже не смешно уже. Пздц
:):) :)
 
Затем вредоносное ПО перебирает буфер DIAVOL_SMB_STRUCT->remote_host_IP_list, чтобы проверить, есть ли какой-либо IP-адрес из параметра командной строки "-h" в таблице ARP.

1642869125179.png


Для каждого целевого IP-адреса, который также находится в таблице ARP, вредоносное ПО записывает его в буфер DIAVOL_SMB_STRUCT->DNS_server_name. Затем он передается в качестве параметра вызову NetShareEnum для получения информации о каждом общем ресурсе на сервере с этим IP-адресом.

1642869142406.png


Остальной код аналогичен шеллкоду SMBFAST. Для каждого ресурса на сервере DIAVOL добавляет его в буфер DIAVOL_SMB_LIST->SMB_net_share_list в следующем формате.

<Server_IP_Address>//<Resource_Name>//

Шифрование: перечисление целевых файлов


Шифрование файлов DIAVOL разделено на три части. Первая часть — перечисление и шифрование всех файлов из целевого списка в конфигурации вредоносного ПО.

До этого момента файлы и каталоги в списке могут исходить из жестко запрограммированных значений в памяти или из параметра командной строки " -p ".

Во-первых, он выделяет память для следующей структуры перед загрузкой и выполнением шелл-кода из ресурса FINDFILES.

1642869165754.png


Для поля target_file вредоносное ПО перебирает список целевых файлов и запускает шелл-код FINDFILES для шифрования каждого из них.

1642869178946.png


Шелл-код FINDFILES сначала преобразует имя целевого файла в нижний регистр и проверяет, не совпадает ли имя файла с чем-либо в файле конфигурации для игнорирования или списке целевого файла (чтобы избежать двойного перечисления каталога).

Поскольку имена в списке могут содержать подстановочные знаки (" * " для совпадения с нулем или более символов и "? " для совпадения с одним символом), шелл-код содержит некоторый дополнительный код для проверки на соответствие имени целевого файла.

1642869212520.png


Затем DIAVOL вызывает FindFirstFileW, чтобы начать перечисление целевого файла. Для каждого найденного файла вредоносная программа проверяет и избегает файлы с именем ". " или ".." для бесконечной рекурсии при перечислении.

1642869224020.png


Если текущий обрабатываемый файл является каталогом, вредоносная программа аналогичным образом преобразует его в нижний регистр и проверяет, чтобы имя файла не было в списке файлов для игнорирования или в списке целевых файлов.

Если найденный каталог подходит для перечисления, вредоносная программа обновляет поле target_file именем каталога и снова рекурсивно вызывает функцию шеллкода FINDFILES.

Если он недействителен, DIAVOL вызывает FindNextFileW, чтобы перейти к поиску другого файла.

1642869236176.png


Если текущий обрабатываемый файл является каталогом, вредоносное ПО также преобразует его в нижний регистр и проверяет, не находится ли имя файла в списке файлов для игнорирования или в списке целевых файлов.

Если имя файла находится в списке файлов конфигурации для очистки, вредоносное ПО вызывает DeleteFileW для его удаления.

1642869249165.png


Затем, если формат имени файла совпадает с каким-либо файлом конфигурации для включения в список, вредоносная программа вызывает LocalAlloc для выделения памяти и записи туда имени файла. Наконец, он передает выделенный буфер функции DIAVOL_FINDFILES_STRUCT->encrypt_file для его шифрования.

1642869263941.png


Как только перечисление для исходного целевого файла выполнено, вредоносная программа вызывает FindClose, чтобы закрыть дескриптор поиска файла и передать имя целевого файла функции DIAVOL_FINDFILES_STRUCT->encrypt_file для его шифрования.

1642869276470.png


Функция encrypt_file будет проанализирована в следующем разделе. Эта функция может принимать в качестве параметра имя каталога или имя файла.

Шифрование: удаленный перечисление файлов через SMB

После сканирования сети на наличие общих сетевых ресурсов с помощью шелл-кодов SMBFAST и SMB вредоносная программа создает потоки для перечисления ресурсов в этих списках.

Перед каждым вызовом thread_encrypt вредоносное ПО обновляет поле target_file, чтобы оно содержало каждый список ресурсов из двух шеллкодов.

1642869288802.png


Функция thread_encrypt вызывает CreateThread для создания приостановленного потока, запускающего внутреннюю функцию со структурой FINDFILES, переданной в качестве параметра.

DIAVOL также передает дескриптор потока в глобальный массив дескрипторов для последующего запуска.

1642869302326.png


Для каждого ресурса в списке поток выполняет FINDFILES для его перечисления.

1642869315344.png


Наконец, чтобы запустить все эти потоки для начала перечисления удаленных файлов, вредоносное ПО перебирает глобальный массив дескрипторов и вызывает ResumeThread для каждого дескриптора потока.

1642869330700.png


Шифрование: перечисление системных дисков

Заключительная часть перечисления относится к локальным и сетевым дискам, извлеченным из шелл-кода ENMDSKS в предыдущем разделе.

Список дисков для шифрования передается в поле target_file в структуре FINDFILES, и вредоносное ПО запускает шелл-код FINDFILES для перечисления и шифрования каждого диска.

1642869344632.png


Шифрование файлов

encrypt_file, используемый в шелл-коде FINDFILES, принимает имя каталога/файла для шифрования.

Во-первых, он устанавливает следующую структуру.

1642869360694.png


Если имя из параметра является каталогом, DIAVOL вызывает SetCurrentDirectoryW, чтобы изменить текущий каталог для процесса вредоносного ПО на имя каталога.

Затем он вызывает CreateFileW, чтобы создать файл заметки о выкупе, и WriteFile, чтобы записать туда записку о выкупе.

1642869371958.png


Ранее перед установкой шелл-кода FINDFILES вредоносная программа также загружала шелл-код ENCDEFILE в другой буфер в памяти.

Когда имя из параметра соответствует файлу, вредоносная программа запускает шелл-код ENCDEFILE для его шифрования.
1642869403588.png


Чтобы зашифровать файл, шелл-код сначала вызывает CreateFileW для получения дескриптора целевого файла.
Затем он вызывает GetFileSizeEx для получения размера файла и вычисляет максимальный размер для шифрования файла. Это делается путем вычисления процента MAX_FILE_CRYPT_PERCENT от общего размера файла.

Далее файл шифруется блоками по 2048 байт каждый, и вредоносное ПО выделяет 2048-байтовый буфер с помощью VirtualAlloc для размещения этих данных. Для каждого блока DIAVOL вызывает ReadFile для чтения данных в выделенный буфер и шифрует их с помощью буфера RSA_CRYPT_BUFF.

Затем он вызывает SetFilePointerEx, чтобы установить указатель файла на начало нового зашифрованного блока, и вызывает WriteFile, чтобы записать зашифрованный блок обратно.

После завершения шифрования DIAVOL вызывает SetFilePointerEx, чтобы установить указатель файла на конец файла. Затем он вызывает WriteFile для записи в конец буфера RSA_FOOTER, максимального размера файла для шифрования и отрицания каждого байта этого размера.

Используя этот нижний колонтитул файла, дешифратор злоумышленника может получить буфер RSA_FOOTER и расшифровать его в буфер RSA_CRYPT_BUFF, используя свой закрытый ключ RSA для расшифровки файла.

1642869425723.png

Наконец, DIAVOL вызывает VirtualAlloc, чтобы выделить буфер для хранения зашифрованного имени файла. Он записывает исходное имя файла в этот буфер и добавляет к нему расширение ".lock64 " перед вызовом MoveFileW для изменения имени файла.

1642869441096.png


Удаление теневых копий

Чтобы удалить все теневые копии в системе, DIAVOL загружает и выполняет шелл-код из ресурса VSSMOD.

1642869453101.png


Во-первых, шелл-код разрешает эти две строки стека:

- " CompSpec "
“/c vssadmin Delete Shadows /All /Quiet » NULL”


1642869467649.png


1642869490312.png


Затем он вызывает GetEnvironmentVariableW для строки " CompSpec ", чтобы получить полный путь к интерпретатору командной строки.

При этом он вызывает ShellExecuteW для выполнения команды " vssadmin Delete Shadows /All /Quiet " NULL ", чтобы удалить все теневые копии в системе.

1642869505750.png


Изменение изображения рабочего стола

Чтобы изменить изображение рабочего стола, DIAVOL загружает и выполняет шелл-код из ресурса CHNGDESK.

1642869516225.png


Сначала шелл-код разрешает следующие строки стека:

”.\encr.bmp”
“Control Panel\Desktop”
“Wallpaper”
“WallpaperOld”


Затем он вызывает RegOpenKeyExW для получения раздела реестра с помощью подраздела “Control Panel\Desktop”.

С помощью ключа реестра вредоносное ПО вызывает RegQueryValueExW для запроса пути к текущему изображению обоев и RegSetValueExW, чтобы установить этот путь в качестве значения " WallpaperOld ".

1642869533857.png


Чтобы построить растровый путь для сброса в систему, вредоносное ПО вызывает GetDesktopWindow и SHGetSpecialFolderPathW для получения пути к специальной папке, содержащей файлы изображений, общие для всех пользователей.

Затем к этому пути добавляется " encr.bmp ".

1642869548558.png


Чтобы создать растровое изображение с нуля, DIAVOL вызывает CreateCompatibleDC, GetDesktopWindow и CreateDIBSection для создания растрового изображения размером с текущий размер окна рабочего стола. Он также вызывает GetStockObject, чтобы установить черный фон растрового изображения, и SetTextColor, чтобы установить белый цвет текста.

1642869569433.png


Затем он разрешает следующие строки стека:

- "Все ваши файлы зашифрованы!"
- "Для получения дополнительной информации см. README-FOR-DECRYPT.txt "

Затем вредоносная программа вызывает DrawTextW для записи этих двух строк в растровое изображение, CreateFileW для создания файла растрового изображения в специальной папке и WriteFile для записи сгенерированного растрового изображения в файл.

1642869584293.png


Наконец, он вызывает SystemParametersInfoW, чтобы установить обои для только что созданного растрового файла.

1642869597244.png


Самостоятельное удаление

После завершения шифрования файлов и смены обоев вредоносное ПО удаляет собственный исполняемый файл.

Во-первых, он вызывает GetModuleFileNameW для получения собственного пути к исполняемому файлу. Затем он строит следующую строку, используя это.

"/c del <malware_executable_path> >> NULL"

1642869621041.png


Затем он вызывает GetEnvironmentVariableW для строки " CompSpec ", чтобы получить полный путь к интерпретатору командной строки.

При этом он вызывает ShellExecuteW для выполнения указанного выше параметра для удаления собственного исполняемого файла.

1642869659833.png


Логирование

Во время своего выполнения DIAVOL регистрирует все свои операции, если ведение журнала включено через командную строку.

В функции ведения журнала вредоносная программа получает в качестве параметра строку. Он вызывает GetLocalTime, чтобы получить текущее системное время, когда происходит ведение журнала, и записывает его в буфер файла журнала.

Затем вредоносная программа добавляет параметр входной строки в буфер файла журнала и вызывает WriteFile для записи в файл журнала.

1642869676881.png


Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://chuongdong.com/reverse engineering/2021/12/17/DiavolRansomware/
 
Ya I'm the author 😄
Ну да, а я Дэвид Соломон, а мой папа Марк Руссинович
 
Пожалуйста, обратите внимание, что пользователь заблокирован
I put a note for yashechka at the end of the Diavol analysis on my website ;)
Then welcome to our forum, you are a very good specialist, I wish there were more people like you :)
 
Теперь я выучу китайский, а может даже и корейский 🤗 🤗 🤗
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх