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

Статья Анализ рансома RegretLocker

yashechka

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

Резюме


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

Как правило, файлы VHD имеют огромный размер с максимальным размером почти 2 ТБ, потому что они в основном используются для хранения содержимого жесткого диска виртуальной машины, включая разделы диска и файловые системы. Из-за этого программы-вымогатели не могут тратить время на шифрование просто потому, что они слишком велики.

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

Для шифрования RegretLocker обращается к C&C-серверу за ключом RSA, чтобы зашифровать и создать уникальный ключ AES. Этот ключ AES будет использоваться для шифрования всех файлов на дисках. Однако, если машина находится в автономном режиме или не может связаться с C&C, она просто использует жестко запрограммированный ключ RSA в памяти, что упрощает написание инструмента для расшифровки!

Все зашифрованные файлы имеют расширение .mouse.

Большое спасибо Виталию Кремезу и MalwareHunterTeam за то, что они обратили мое внимание на эту программу-вымогатель!

1643386410027.png


IOCS​


RegretLocker поставляется в виде 32-битного PE-файла.

MD5: 3265b2b0afc6d2ad0bdd55af8edb9b37

SHA256: a188e147ba147455ce5e3a6eb8ac1a46bdd58588de7af53d4ad542c6986491f4

1643386427366.png


Зависимости

Advapi32.dll и Crypt32.dll: основные функции шифрования, такие как шифрование RSA и AES.

VirtDisk.dll: монтирование функций виртуального диска

tor-lib.dll: DLL, которая используется для связи с C&C через Tor

Сеть

RegretLocker связывается с C&C-сервером по адресу http://regretzjibibtcgb.onion/input через Tor 3 раза:

Прежде чем связаться с C&C, он отправляет запрос GET на http://api.ipify.org/ для получения общедоступного IP-адреса ПК. Если это не удается, вредоносное ПО может предположить, что оно работает в автономном режиме, и будет использовать жестко запрограммированный ключ RSA.

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

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

1643386490441.png


Вы можете найти лог вредоносных программ здесь (https://chuongdong.com/uploads/locker.log).

Анализ кода

Работает только один процесс


Сначала RegretLocker проверяет, работает ли только одна его версия, перебирая все запущенные процессы с помощью CreateToolhelp32Snapshot, Process32First и Process32Next.

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

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

1643386502128.png


Дропиинг tor-lib.dll

Вредоносное ПО извлекает путь к текущему каталогу, в котором оно находится, через GetModuleFileNameA и привязывает к нему "\tor-lib.dll", что означает, что оно сбрасывает эту dll в тот же каталог вредоносного ПО.

1643386512811.png


Затем он вызывает функцию для извлечения dll из своего раздела ресурсов с помощью FindResourceA, LoadResource и LockResource. Как мы видим в Resource Hacker, dll хранится в незашифрованном виде в разделе ресурсов. После извлечения dll он вызывает LoadLibrary, чтобы получить дескриптор dll. Этот дескриптор будет использоваться вредоносным ПО для связи с C&C.

1643386522451.png


Проверка ПК

ПО имеет 2 странные проверки для проверки определенного имени пользователя и имени ПК (WIN-295748OMAKG). Если имя пользователя или имя ПК совпадают, вредоносное ПО немедленно завершит работу.

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

Как разработчик я разочарован таким непрофессионализмом Почистите свой чертов код, пожалуйста!

1643386537547.png


Персистенс

Для сохранения вредоносное ПО задает в реестре SOFTWARE\Microsoft\Windows\CurrentVersion\Run путь вредоносного ПО. Это гарантирует, что вредоносное ПО автоматически запускается каждый раз, когда пользователь входит в систему.

1643386547579.png


Затем он также запускает вредоносное ПО как задачу каждую минуту с помощью этой команды Schtasks.exe, которая запускается из cmd.exe с помощью ShellExecuteA.

schtasks /Create /SC MINUTE /TN "Mouse Application" /TR "RegretLocker_path" /f

1643386565447.png


Настройка шифрования


Вредоносная программа создает и выполняет эту команду из cmd.exe.

cmd.exe /C wmic SHADOWCOPY DELETE & wbadmin DELETE SYSTEMSTATEBACKUP & bcdedit.exe / set{ default } bootstatuspolicy ignoreallfailures & bcdedit.exe / set{ default } recoveryenabled No

-wmic SHADOWCOPY DELETE: это удалит все теневые копии файлов в системе, предотвращая возврат зашифрованных файлов в их предыдущее состояние.

-wbadmin DELETE SYSTEMSTATEBACKUP: удалить резервную копию системы. Предотвращение возврата системы к предыдущему снимку

-bcdedit.exe / set{ default } bootstatuspolicy ignoreallfailures: настройка политики статуса загрузки на игнорирование ошибок во время неудачной загрузки. Убедитесь, что ПК не переходит в режим восстановления или перезагрузки Windows.

-bcdedit.exe / set{ default } recoveryenabled No : убедитесь, что система не может быть восстановлена.


Затем он перебирает все диски и добавляет имена дисков с типом DRIVE_FIXED, DRIVE_REMOVABLE или DRIVE_REMOTE.

1643386594936.png


Эти имена подключаются к диску C с помощью GetVolumePathNamesForVolumeNameA, SetVolumeMountPointA, FindFirstVolumeA и FindNextVolumeA. Поскольку имя этой функции помечено как show_hided_drives(), эта функция, вероятно, просто монтирует все действительные диски, чтобы не пропустить ни одного скрытого диска.

1643386607594.png


Получение ключа RSA

Как обсуждалось выше, вредоносное ПО сначала обратится к C&C по адресу http://regretzjibibtcgb.onion/input с помощью get_key в запросе, чтобы запросить ключ RSA.

1643386638584.png


Глобальная переменная RSA_KEY будет записана соответственно с ключом RSA в зависимости от того, сможет ли он дойти до C&C или нет. Если это невозможно, он будет использовать этот жестко запрограммированный ключ RSA.

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1ZQInrnhxXCtAN/LsOX2GmgbvBxMsO49lc1/qodshkUvRQLazWv61UbMLKx2gaRQrCYuVrR1Cgd7LxY4ueGo50TqZioAJbCcfzdiXlEkJqLlz4RTU9RFZ/wFjWxChek2NsU6vLLSowPPTw+JhwTooI+QPAIYeoxCf4xz7Kvu9CQIDAQAB
-----END PUBLIC KEY-----

Генерация AES-ключа


Используя ключ RSA, он вызовет CryptAcquireContextA, CryptDecodeObjectEx, CryptImportPublicKeyInfo и CryptEncrypt для шифрования буфера "AES" в памяти, генерируя новый ключ AES.

1643386658192.png


С помощью этого метода вредоносное ПО может генерировать другой ключ AES, если он получает другой ключ RSA от C&C. Однако этот ключ AES остается постоянным после этого шифрования, если вредоносное ПО запускается в автономном режиме, поэтому должно быть просто создать инструмент дешифрования, если C&C не работает или ПК не подключен к Интернету.

Шифрование — USB-накопители

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

1643386669175.png


Затем он перебирает все эти USB-накопители и вызывает функцию для шифрования их содержимого. Я обозначил это как small_encrypt(), потому что он используется только для шифрования USB-накопителей и небольших файлов.

1643386678691.png


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

Шифрование — сканер SMB

Вредоносное ПО написано на C++, и в нем есть класс smb_scanner. Функция SMB пытается сканировать SMB, чтобы найти

- Имена адаптеров и диапазоны адресов на адаптере

- IP-адреса NetServers и имена машин на сервере с использованием NetServerEnum.

1643386692602.png


Результатом является буфер всех папок SMB в строковой форме.

Затем он проходит через цикл while, вызывая функцию для шифрования этих папок SMB, поэтому я обозначил эту функцию шифрования как smb_encrypt(). На самом деле я не настраивал SMB на своей виртуальной машине, поэтому, когда я запускал это, я не знал, может ли он на самом деле шифровать папки SMB или нет…

1643386706227.png


Шифрование — большие файлы

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

1643386718549.png


Автор вредоносного ПО назвал эту функцию шифрования encrypt_large_file(). Похоже, что это то же самое, что и большинство других функций шифрования, за исключением того, что в нем есть дополнительные данные для учета размера файла. Суть этой функции по-прежнему сводится к шифрованию AES.

1643386729859.png


После шифрования он переименует зашифрованный файл в то же имя, но с расширением .mouse и перезапишет файловый буфер этим новым зашифрованным буфером.

Шифрование - все остальное

После шифрования большого файла RegretLocker переходит в цикл while, чтобы зашифровать все остальное с помощью small_encrypt().

1643386740531.png


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

- RegretLocker file
- .log
- HOW TO RESTORE FILES.TXT
- Windows folder
- ProgramData
- Microsoft
-System


Далее он проверяет тип файла. Если тип файла FILE_ATTRIBUTE_DIRECTORY, он вызовет функцию рекурсивного шифрования для рекурсивного прохождения каждого слоя внутри папки. Если тип файла не является папкой, он просто вызовет основную функцию шифрования для его шифрования.

1643386786753.png


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

- Cheat
- Notepad
- x96dbg
- Hex Editor
- tor-lib.dll
- .mouse


Поскольку диски смонтированы, RegretLocker проверяет расширение файла на «.vhd», чтобы обнаружить любой виртуальный диск. Если он найден, RegretLocker вызовет функцию, чтобы открыть виртуальный диск, чтобы начать шифрование всего внутри, рекурсивно вызывая рекурсивную функцию. Программа-вымогатель использует серию вызовов OpenVirtualDisk, AttachVirtualDisk, GetVirtualDiskPhysicalPath, FindFirstVolumeW, CreateFileW, DeviceIoControl, GetVolumePathNamesForVolumeNameW и FindNextVolumeW для получения списка имен файлов и папок внутри.

1643386819598.png


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

Эта функция разделена на 2 блока условий. Если размер файла больше 104857600 байт или около 105 МБ, файл считается большим и будет зашифрован с помощью функции encrypt_large_file(). Если это не так, то RegretLocker продолжает шифровать его с помощью AES.

1643386828666.png


Здесь есть загвоздка. Если шифрование не удается, это означает, что файл запущен или используется каким-то процессом. В этом случае RegretLocker найдет процесс, который в данный момент использует этот файл, и попытается его завершить. Это достигается за счет использования Restart Manager с этими вызовами API.

- RmStartSession: начать новый сеанс для Restart Manager
- RmRegisterResources: регистрация файла для шифрования в качестве ресурса.
- RmGetList: получить список приложений служб/процессов, использующих этот ресурс.
- CreateToolhelp32Snapshot, Process32FirstW и Process32NextW: проверьте идентификаторы всех запущенных процессов по сравнению с процессами, указанными выше.

1643386886171.png


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

- vnc
- ssh
- mstsc
- System
- svchost.exe

1643386922859.png


Затем RegretLocker создает командную строку taskkill /F /IM \имя_процесса и запускает ее с помощью cmd.exe. Эта команда в основном просто отфильтровывает процесс с заданным именем процесса и завершает его.

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

Шифрование — AES

Ядром функций шифрования, описанных выше, является одна функция шифрования AES. По сути, он просто использует сгенерированный ключ AES для шифрования файла с помощью серии вызовов CryptAcquireContextA, CryptImportKey, CryptSetKeyParam и CryptEncrypt, что довольно стандартно.

После шифрования он запишет этот зашифрованный буфер обратно в файл с новым расширением .mouse. Он также проверит путь к папке, чтобы увидеть, был ли уже создан файл HOW TO RESTORE FILES.TXT, и создал ли он его, если это не так.

1643386935749.png


Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://chuongdong.com/reverse engineering/2020/11/17/RegretLocker/
 

Вложения

  • 1643386878904.png
    1643386878904.png
    12.4 КБ · Просмотры: 11


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