Это мой анализ BlackMatter Ransomware версии 2.0.
В этом анализе я рассматриваю только функции вымогателя BlackMatter и опускаю подробности об антианализе и обфускации. Основная причина этого в том, что я очень ленив.
BlackMatter использует схему гибридной криптографии RSA-1024 и модифицированной ChaCha20, для шифрования файлов и защиты своей матрицы ChaCha20.
Как и Darkside, его конфигурация зашифрована и в памяти сжимается с помощью aPLib.
Когда URL-адреса серверов указаны в конфигурации, вредоносная программа шифрует информацию о машине жертвы и статистику шифрования с помощью жестко запрограммированного ключа AES и отправляет их на удаленные серверы.
Подобно REvil, дочерние потоки BlackMatter используют разделяемую структуру для деления работы на несколько состояний при шифровании файла.
Благодаря тому, что в основе своей многопоточной лежит архитектуры REvil, шифрование BlackMatter выполняется относительно быстро.
IOCS
Этот сэмпл представляет собой 32-разрядный исполняемый файл Windows.
MD5: 50c4970003a84cab1bf2634631fe39d7
SHA256: 520bd9ed608c668810971dbd51184c6a29819674280b018dc4027bc38fc42e57
СЭМПЛ: https://bazaar.abuse.ch/sample/520bd9ed608c668810971dbd51184c6a29819674280b018dc4027bc38fc42e57/
Записка с требованием выкупа
Содержимое записки с требованием выкупа зашифровано в конфигурации BlackMatter, динамически расшифровывается и записывается в файл с запиской о выкупе в каждом каталоге.
Имя файла о выкупе имеет вид **. README.txt **.
Статический анализ кода
Антианализ: резолвинг API функций
Поскольку BlackMatter представляет собой комбинацию LockBit, Darkside и REvil, неудивительно, что программа-вымогатель скрывает свои вызовы API из статического анализа.
Обфускация довольно крутая, но я не буду ее здесь анализировать. Я настоятельно рекомендую коллегам-аналитикам проверить, как это работает, если у них будет время!
Ознакомьтесь с моими скриптами IDAPython dll_exports.py и revil_api_resolve.py, если вы хотите автоматизировать резолвинг этих API в IDA Pro и ускорить анализ.
Эти сценарии основаны на сценариях REVil из видео YouTube OALabs.
У Яна Г. есть действительно хорошая запись в блоге, в которой объясняется хеширование и обфускация API BlackMatter с помощью указателей-трамплинов. Если вам интересен технический анализ этого, не стесняйтесь проверить их работу.
Антианализ: шифрование строк
Как и в случае с другими крупными программами-вымогателями, большинство строк в BlackMatter зашифрованы и разрешаются во время выполнения.
Незашифрованные строки хранятся в стеке как строки стека. Для каждого зашифрованного файла зашифрованные байты/DWORD помещаются в стек и дешифруются с помощью операции XOR с константой.
Эта реализация действительно похожа на реализацию программы-вымогателя Conti, и, вероятно, есть хороший способ автоматизировать их разрешение с помощью сценария IDAPython.
Поскольку я ленив во время анализа, я просто использую x32dbg для динамического выполнения и разрешения этих строк стека.
Антианализ: сравнение строк
В частности, в программах-вымогателях сравнение строк имеет решающее значение для таких задач, как проверка имени процессов и служб, которые необходимо завершить, файлов и папок, чтобы избежать шифрования, поиска имен библиотек DLL и Windows API и т.д.
В результате, это помогает, если аналитики могут смотреть на сравниваемые строки, чтобы быстро определить определенные функции программы-вымогателя.
BlackMatter обфусцирует их с помощью односторонней хеш-функции и сравнивает только хеши строк, а не сами строки. Хеш строки - это просто сумма каждого байта, повернутого вправо на 13, с начальным сидом.
Суммирование делает невозможным работу в обратном направлении от хеша для создания строки, поэтому для разрешения этих хешей требуется эвристический анализ, взлом словаря и брутфорс.
Я использую и добавляю этот инструмент созданный @sisoma2 для поиска хэшей, которые использует BlackMatter! В его инструменте есть отличный словарь для взлома хэшей, поэтому обязательно используйте его для облегчения анализа!
Ниже приведен список хешей, используемых BlackMatter v2, и их строки.
Конфигурация
Конфигурация образцов BlackMatter зашифрована и сжимается в памяти, как и в Darkside.
Во время анализа я динамически выполняю расшифровку с помощью x32dbg и распаковываю конфигурацию с помощью aPLib в Python.
Ниже приведен список полей конфигурации, которые поддерживает BlackMatter, и их описание.
RSA_PUBLIC_KEY (128 байт): ключ RSA для шифрования ключа ChaCha20.
COMPANY_VICTIM_ID (16 байт): идентификатор компании, используемый в данных, отправляемых обратно на удаленный сервер для идентификации жертвы.
AES_KEY (16 байт): ключ AES для шифрования данных, отправляемых на удаленные серверы.
ENCRYPT_LARGE_FILE_FLAG (1 байт): включить фрагменты для шифрования больших файлов.
ATTEMPT_LOGON_FLAG (1 байт): разрешить попытку входа в систему с использованием учетных данных пользователя, указанных в конфигурации.
MOUNT_VOL_AND_ENCRYPT_FLAG (1 байт): включить шифрование почтового ящика Exchange, монтирование всех томов и их шифрование.
NETWORK_ENCRYPT_FLAG (1 байт): разрешить получение имен хостов DNS и шифрование их сетевых ресурсов.
TERMINATE_PROCESSES_FLAG (1 байт): разрешить завершающие процессы, указанные в поле конфигурации PROCESSES_TO_KILL.
STOP_SERVICES_AND_DELETE_FLAG (1 байт): разрешить остановку и удаление служб, указанных в поле конфигурации SERVICES_TO_KILL.
CREATE_MUTEX_FLAG (1 байт): разрешить создание и проверку мьютекса RunOnce.
PRINTER_PRINT_RANSOM_NOTE_FLAG (1 байт): разрешить печать записки о выкупе с использованием локального принтера по умолчанию.
SEND_DATA_TO_SERVER_FLAG (1 байт): разрешить отправку информации о жертве и шифрование статистики на удаленные серверы, указанные в поле конфигурации REMOTE_SERVER_URLS.
FOLDER_HASHES_TO_AVOID: закодированный в Base64 список 4-байтовых хэшей имен папок, чтобы избежать шифрования.
FILE_HASHES_TO_AVOID: закодированный в Base64 список 4-байтовых хэшей имен файлов, чтобы избежать шифрования.
EXTENSION_HASHES_TO_AVOID: закодированный в Base64 список 4-байтовых хэшей расширений, чтобы избежать шифрования.
COMPUTERNAMES_TO_AVOID: список имен компьютеров в кодировке Base64, чтобы избежать шифрования (не используется в этом примере).
PROCESSES_TO_KILL: список уничтожаемых процессов в кодировке Base64.
SERVICES_TO_KILL: список уничтожаемых служб в кодировке Base64.
REMOTE_SERVER_URLS: список удаленных серверов в кодировке Base64 для связи.
LOGIN_CREDENTIALS: список учетных данных для попытки входа в систему (не используется в этом примере).
RANSOM_NOTE_CONTENT: закодированное в Base64 и зашифрованное содержимое записки с требованием выкупа.
RANSOM_NOTE_CONTENT_HASH: Контрольная сумма содержания записки о выкупе.
Вот конфигурация этого образца версии 2 в форме JSON. Я генерирую это с помощью этого инструмента автоматического извлечения конфигурации и исправляю имена полей конфигурации в соответствии с моим анализом. Огромный привет ребятам из McAfee Advanced Threat Research за это!
Аргументы командной строки
BlackMatter может работать с аргументами командной строки или без них.
Ниже приведен список аргументов, которые может предоставить оператор.
-path <target> - Путь к каталогу, который будет специально зашифрован
<target> - Путь к каталогу, который будет специально зашифрован
-safe - Включить перезагрузку в безопасном режиме
-wall - Устанавить обои и распечатать записку с требованием выкупа
Настройка предварительного шифрования
Обход UAC
Во время установки BlackMatter проверяет, работает ли он в настоящее время с учетными данными администратора.
Во-первых, он вызывает SHTestTokenMembership, чтобы проверить, является ли токен его процесса членом группы администраторов во встроенном домене.
Затем, после запроса версии операционной системы через PEB, программа-вымогатель проверяет, является ли текущая ОС Windows 7 и выше.
Наконец, он проверяет, принадлежит ли токен текущего процесса к встроенным системным группам домена, используемым для администрирования.
Если проверки проходят и процесс имеет права администратора, вредоносная программа не пытается обходить UAC.
Для обхода UAC, используя LdrEnumerateLoadedModules, он регистрирует dllhost.exe в System32 как поле ImagePathName и CommandLine в поле ProcessParameters PEB процесса. Эта первоначальная настройка позволяет размещать и выполнять объекты COM как dllhost.exe.
Затем BlackMatter вызывает CoGetObject с указанным ниже именем объекта, чтобы получить COM-интерфейс ICMLuaUtil, который обычно используется для обхода UAC.
Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}
Затем вредоносная программа выполняет функцию ShellExec из интерфейса ICMLuaUtil, чтобы перезапустить себя с исходными аргументами командной строки, что повышает привилегию нового процесса.
Наконец, он завершает себя, вызывая NtTerminateProcess.
Создание зашифрованного расширения
Зашифрованное расширение динамически генерируется с использованием GUID компьютера жертвы, что делает его уникальным для каждой системы.
Сначала BlackMatter запрашивает значение указанного ниже раздела реестра, чтобы получить GUID компьютера.
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid
Затем вредоносная программа пропускает GUID компьютера через 3 раунда хеширования, обмена байтами и Base64-кодирования окончательного хеш-кода для генерации зашифрованного расширения.
Поскольку символы ASCII '+', '/' и '=' в строке Base64 не очень хорошо работают в расширении файла, BlackMatter заменяет '+' на 'x', '/' на 'i' и ' = ' на ' z '.
Вредоносная программа повторно использует это расширение файла в качестве имени записки с требованием выкупа, добавляя его перед .README.txt.
Получение токена олицетворения с помощью внедрения процесса
BlackMatter пытается получить и скопировать токен процесса с повышенными правами, запущенного в системе. Позже вредоносная программа запускает потоки и заставляет их олицетворять целевой процесс с помощью этого токена.
Во-первых, он проверяет, является ли пользователь текущего процесса LocalSystem, специальной учетной записью, используемой операционной системой. Затем он вызывает NtQueryInformationToken, чтобы запросить информацию о пользователе токена, и проверяет, является ли первый SID процесса SECURITY_LOCAL_SYSTEM_RID.
Если процесс выполняется как LocalSystem, BlackMatter использует токен текущего пользователя в качестве токена с повышенными правами.
В противном случае вредоносная программа вызывает NtQuerySystemInformation для запроса информации о процессах в системе. Для каждой записи процесса он проверяет, имеет ли процесс имя explorer.exe, и получает его уникальный идентификатор.
Затем он вызывает NtOpenProcess с идентификатором процесса, чтобы получить дескриптор процесса, и получает токен процесса с помощью NtOpenProcessToken.
Наконец, BlackMatter вызывает NtDuplicateToken для дублирования токена проводника.
Если это не удается, но токен текущего процесса является членом группы администраторов во встроенном домене, BlackMatter выполняет некоторые махинации внедрения процесса, чтобы получить токен процесса svchost.exe.
Во-первых, он использует тот же прием, что и на рисунке 16, для получения идентификатора процесса и дескриптора процесса svchost.exe.
Затем он проверяет, работает ли процесс svchost.exe как 64-разрядный.
Если он 64-битный, зловред расшифровывает два разных шеллкода в памяти. Необработанные шеллкоды можно найти здесь (https://github.com/cdong1012/IDAPyt...ob/master/Blackmatter/blackmattershellcode.7z).
После выделения памяти в процессе svchost.exe с помощью NtAllocateVirtualMemory BlackMatter записывает первый шелл-код в область памяти второго шелл-кода перед настройкой и выполнением второго шелл-кода.
После внедрения второй шелл-код выделяет виртуальную память в процессе svchost с помощью NtAllocateVirtualMemory, записывает первый шелл-код с помощью NtWriteVirtualMemory и создает новый поток для выполнения первого шелл-кода с помощью NtCreateThreadEx.
Первый шелл-код вызывает WTSQueryUserToken для получения первичного токена доступа вошедшего в систему пользователя и вызывает NtDuplicateObject для дублирования этого токена. Этот токен возвращается в основной поток программы-вымогателя.
Если вместо этого процесс svchost выполняется как 32-битный процесс, вредоносная программа расшифровывает третий шелл-код и вручную создает удаленный поток, используя CreateRemoteThread для его запуска. Этот шелл-код в основном представляет собой 32-битную версию первого шелл-кода.
Анализ учетных данных для входа в систему
~Небольшая пауза~
В этом анализе я рассматриваю только функции вымогателя BlackMatter и опускаю подробности об антианализе и обфускации. Основная причина этого в том, что я очень ленив.
BlackMatter использует схему гибридной криптографии RSA-1024 и модифицированной ChaCha20, для шифрования файлов и защиты своей матрицы ChaCha20.
Как и Darkside, его конфигурация зашифрована и в памяти сжимается с помощью aPLib.
Когда URL-адреса серверов указаны в конфигурации, вредоносная программа шифрует информацию о машине жертвы и статистику шифрования с помощью жестко запрограммированного ключа AES и отправляет их на удаленные серверы.
Подобно REvil, дочерние потоки BlackMatter используют разделяемую структуру для деления работы на несколько состояний при шифровании файла.
Благодаря тому, что в основе своей многопоточной лежит архитектуры REvil, шифрование BlackMatter выполняется относительно быстро.
IOCS
Этот сэмпл представляет собой 32-разрядный исполняемый файл Windows.
MD5: 50c4970003a84cab1bf2634631fe39d7
SHA256: 520bd9ed608c668810971dbd51184c6a29819674280b018dc4027bc38fc42e57
СЭМПЛ: https://bazaar.abuse.ch/sample/520bd9ed608c668810971dbd51184c6a29819674280b018dc4027bc38fc42e57/
Записка с требованием выкупа
Содержимое записки с требованием выкупа зашифровано в конфигурации BlackMatter, динамически расшифровывается и записывается в файл с запиской о выкупе в каждом каталоге.
Имя файла о выкупе имеет вид **. README.txt **.
Статический анализ кода
Антианализ: резолвинг API функций
Поскольку BlackMatter представляет собой комбинацию LockBit, Darkside и REvil, неудивительно, что программа-вымогатель скрывает свои вызовы API из статического анализа.
Обфускация довольно крутая, но я не буду ее здесь анализировать. Я настоятельно рекомендую коллегам-аналитикам проверить, как это работает, если у них будет время!
Ознакомьтесь с моими скриптами IDAPython dll_exports.py и revil_api_resolve.py, если вы хотите автоматизировать резолвинг этих API в IDA Pro и ускорить анализ.
Эти сценарии основаны на сценариях REVil из видео YouTube OALabs.
У Яна Г. есть действительно хорошая запись в блоге, в которой объясняется хеширование и обфускация API BlackMatter с помощью указателей-трамплинов. Если вам интересен технический анализ этого, не стесняйтесь проверить их работу.
Антианализ: шифрование строк
Как и в случае с другими крупными программами-вымогателями, большинство строк в BlackMatter зашифрованы и разрешаются во время выполнения.
Незашифрованные строки хранятся в стеке как строки стека. Для каждого зашифрованного файла зашифрованные байты/DWORD помещаются в стек и дешифруются с помощью операции XOR с константой.
Эта реализация действительно похожа на реализацию программы-вымогателя Conti, и, вероятно, есть хороший способ автоматизировать их разрешение с помощью сценария IDAPython.
Поскольку я ленив во время анализа, я просто использую x32dbg для динамического выполнения и разрешения этих строк стека.
Антианализ: сравнение строк
В частности, в программах-вымогателях сравнение строк имеет решающее значение для таких задач, как проверка имени процессов и служб, которые необходимо завершить, файлов и папок, чтобы избежать шифрования, поиска имен библиотек DLL и Windows API и т.д.
В результате, это помогает, если аналитики могут смотреть на сравниваемые строки, чтобы быстро определить определенные функции программы-вымогателя.
BlackMatter обфусцирует их с помощью односторонней хеш-функции и сравнивает только хеши строк, а не сами строки. Хеш строки - это просто сумма каждого байта, повернутого вправо на 13, с начальным сидом.
Суммирование делает невозможным работу в обратном направлении от хеша для создания строки, поэтому для разрешения этих хешей требуется эвристический анализ, взлом словаря и брутфорс.
Я использую и добавляю этот инструмент созданный @sisoma2 для поиска хэшей, которые использует BlackMatter! В его инструменте есть отличный словарь для взлома хэшей, поэтому обязательно используйте его для облегчения анализа!
Ниже приведен список хешей, используемых BlackMatter v2, и их строки.
0xd3801b00 -> hlp
0x5366e694 -> perflogs
0xe7681bc0 -> rom
0xdd481cc0 -> msi
0xd9c81940 -> key
0xef3a37b3 -> default
0xd57818c0 -> ico
0x67b00e00 -> 386
0xcd2e9b7a -> theme
0x6b66f975 -> intel
0xdd081c00 -> mpa
0xdd101900 -> mdb
0xe9981a00 -> shs
0x267078f5 -> $windows.~bt
0xcd101900 -> edb
0xc6ce6958 -> appdata
0xeb869d00 -> http
0x85aa57e4 -> ntuser.dat.log
0x4a6bb7db -> msstyles
0x4cca7837 -> nomedia
0x49164931 -> accdb
0xc9101840 -> cab
0xe1c018c0 -> ocx
0xdb301900 -> ldf
0x12018c0 -> c$
0xfcc8ab56 -> bootsect.bak
0xdf981b00 -> nls
0xe99018c0 -> scr
0xa6f2d1a7 -> application data
0x4c4b25d4 -> tor browser
0xe7801d00 -> rtp
0xdd201bc0 -> mod
0xf00cae96 -> bootfont.bin
0x846bec00 -> iconcache.db
0xd4aaebb2 -> admin$
0xc7a01840 -> bat
0xc8cef7d1 -> thumbs.db
0xdd301900 -> mdf
0xf1c01c00 -> wpx
0xe1a63bc0 -> boot
0xcbb01c80 -> drv
0xc5481b80 -> ani
0xcbe2aa35 -> ntuser.ini
0x2e75e394 -> programdata
0x4ae29631 -> diagcfg
0xba22623b -> all users
0x4aba94f1 -> diagcab
0xd5c01900 -> idx
0xdd801cc0 -> msp
0xdd181cc0 -> msc
0xeb9f5c34 -> https
0x3907099b -> boot.ini
0x64e29771 -> diagpkg
0x86ccaa15 -> autorun.inf
0xb7e02438 -> svchost.exe
0xe3301c80 -> prf
0xe9601c00 -> spl
0xc5b01900 -> adv
0x452f4997 -> -safe
0xe1881cc0 -> ps1
0xaf16c593 -> themepack
0xe3101900 -> pdb
0xd59818c0 -> ics
0xdb975937 -> ntldr
0xc23aa6f5 -> ntuser.dat
0x3eb272e6 -> explorer.exe
0xb7ea3892 -> msocache
0xe15ed8c0 -> lock
0xcb601b00 -> dll
0xe3426cd7 -> windows
0xc7701a40 -> bin
0xc9601c00 -> cpl
0x5cde3a7b -> public
0xc99eab80 -> icns
0xdf301900 -> ndf
0xd3081d00 -> hta
0x7f07935 -> windows.old
0x45678b17 -> -wall
0xdda81cc0 -> msu
0xe9981e40 -> sys
0x30a212d -> $recycle.bin
0x45471d17 -> -path
0x52cb0b38 -> google
0xdccab8dd -> mozilla
0xc9201b40 -> cmd
0xa1fccbfe -> deskthemepack
0x26687e35 -> $windows.~ws
0xc9901d40 -> cur
0xae018eae -> system volume information
0xdb581b80 -> lnk
0xcd281e00 -> exe
0x82d2a252 -> desktop.ini
0x8cf281cd -> config.msi
0xfe9e7c10 -> runonce.exe
0x36004e4e -> program files
0xd56018c0 -> icl
0xab086595 -> program files (x86)
0xc9681bc0 -> com
Конфигурация
Конфигурация образцов BlackMatter зашифрована и сжимается в памяти, как и в Darkside.
Во время анализа я динамически выполняю расшифровку с помощью x32dbg и распаковываю конфигурацию с помощью aPLib в Python.
Ниже приведен список полей конфигурации, которые поддерживает BlackMatter, и их описание.
RSA_PUBLIC_KEY (128 байт): ключ RSA для шифрования ключа ChaCha20.
COMPANY_VICTIM_ID (16 байт): идентификатор компании, используемый в данных, отправляемых обратно на удаленный сервер для идентификации жертвы.
AES_KEY (16 байт): ключ AES для шифрования данных, отправляемых на удаленные серверы.
ENCRYPT_LARGE_FILE_FLAG (1 байт): включить фрагменты для шифрования больших файлов.
ATTEMPT_LOGON_FLAG (1 байт): разрешить попытку входа в систему с использованием учетных данных пользователя, указанных в конфигурации.
MOUNT_VOL_AND_ENCRYPT_FLAG (1 байт): включить шифрование почтового ящика Exchange, монтирование всех томов и их шифрование.
NETWORK_ENCRYPT_FLAG (1 байт): разрешить получение имен хостов DNS и шифрование их сетевых ресурсов.
TERMINATE_PROCESSES_FLAG (1 байт): разрешить завершающие процессы, указанные в поле конфигурации PROCESSES_TO_KILL.
STOP_SERVICES_AND_DELETE_FLAG (1 байт): разрешить остановку и удаление служб, указанных в поле конфигурации SERVICES_TO_KILL.
CREATE_MUTEX_FLAG (1 байт): разрешить создание и проверку мьютекса RunOnce.
PRINTER_PRINT_RANSOM_NOTE_FLAG (1 байт): разрешить печать записки о выкупе с использованием локального принтера по умолчанию.
SEND_DATA_TO_SERVER_FLAG (1 байт): разрешить отправку информации о жертве и шифрование статистики на удаленные серверы, указанные в поле конфигурации REMOTE_SERVER_URLS.
FOLDER_HASHES_TO_AVOID: закодированный в Base64 список 4-байтовых хэшей имен папок, чтобы избежать шифрования.
FILE_HASHES_TO_AVOID: закодированный в Base64 список 4-байтовых хэшей имен файлов, чтобы избежать шифрования.
EXTENSION_HASHES_TO_AVOID: закодированный в Base64 список 4-байтовых хэшей расширений, чтобы избежать шифрования.
COMPUTERNAMES_TO_AVOID: список имен компьютеров в кодировке Base64, чтобы избежать шифрования (не используется в этом примере).
PROCESSES_TO_KILL: список уничтожаемых процессов в кодировке Base64.
SERVICES_TO_KILL: список уничтожаемых служб в кодировке Base64.
REMOTE_SERVER_URLS: список удаленных серверов в кодировке Base64 для связи.
LOGIN_CREDENTIALS: список учетных данных для попытки входа в систему (не используется в этом примере).
RANSOM_NOTE_CONTENT: закодированное в Base64 и зашифрованное содержимое записки с требованием выкупа.
RANSOM_NOTE_CONTENT_HASH: Контрольная сумма содержания записки о выкупе.
Вот конфигурация этого образца версии 2 в форме JSON. Я генерирую это с помощью этого инструмента автоматического извлечения конфигурации и исправляю имена полей конфигурации в соответствии с моим анализом. Огромный привет ребятам из McAfee Advanced Threat Research за это!
{
"RSA_PUBLIC_KEY": "4FDB27F0D5F8A0741EBE1A8C08E5B98ABECE2C281166A7FFDCF239A8A77FD2A4FC6B8828A5F3F9F5FA4B245CC90386953D6469368DAD281CA1D688F2556725D9422D08E1191230999B2E54E4103B1C19199C96E350C216B39B3D2ADDB315A4284A9A3C8C5058924AED366DD030FD4E211178BCDC4C79406B75C87EDC1851676A",
"COMPANY_VICTIM_ID": "24483508BCCFE72E63B26A1233058170",
"AES_KEY": "196387BAD88422E3F08474FA8F7E796E",
"ENCRYPT_LARGE_FILE_FLAG": "false",
"ATTEMPT_LOGON_FLAG": "false",
"MOUNT_VOL_AND_ENCRYPT_FLAG": "true",
"NETWORK_ENCRYPT_FLAG": "true",
"TERMINATE_PROCESSES_FLAG": "true",
"STOP_SERVICES_AND_DELETE_FLAG": "true",
"CREATE_MUTEX_FLAG": "true",
"SEND_DATA_TO_SERVER_FLAG": "true",
"PRINTER_PRINT_RANSOM_NOTE_FLAG": "true",
"PROCESSES_TO_KILL": [{
"": "encsvc"
}, {
"": "thebat"
}, {
"": "mydesktopqos"
}, {
"": "xfssvccon"
}, {
"": "firefox"
}, {
"": "infopath"
}, {
"": "winword"
}, {
"": "steam"
}, {
"": "synctime"
}, {
"": "notepad"
}, {
"": "ocomm"
}, {
"": "onenote"
}, {
"": "mspub"
}, {
"": "thunderbird"
}, {
"": "agntsvc"
}, {
"": "sql"
}, {
"": "excel"
}, {
"": "powerpnt"
}, {
"": "outlook"
}, {
"": "wordpad"
}, {
"": "dbeng50"
}, {
"": "isqlplussvc"
}, {
"": "sqbcoreservice"
}, {
"": "oracle"
}, {
"": "ocautoupds"
}, {
"": "dbsnmp"
}, {
"": "msaccess"
}, {
"": "tbirdconfig"
}, {
"": "ocssd"
}, {
"": "mydesktopservice"
}, {
"": "visio"
}],
"SERVICES_TO_KILL": [{
"": "mepocs"
}, {
"": "memtas"
}, {
"": "veeam"
}, {
"": "svc$"
}, {
"": "backup"
}, {
"": "sql"
}, {
"": "vss"
}, {
"": "msexchange"
}],
"REMOTE_SERVER_URLS": [{
"": "hxxps://mojobiden[.]com"
}, {
"": "hxxp://mojobiden[.]com"
}],
"RANSOM_NOTE_CONTENT": [{
"": " ~+
* +
' BLACK |
() .-.,='``'=. - o -
'=/_ \\ |
* | '=._ |
\\ `=./`, '
. '=.__.=' `=' *
+ Matter +
O * ' .
>>> What happens?
Your network is encrypted, and currently not operational.
We need only money, after payment we will give you a decryptor for the entire network and you will restore all the data.
>>> What guarantees?
We are not a politically motivated group and we do not need anything other than your money.
If you pay, we will provide you the programs for decryption and we will delete your data.
If we do not give you decrypters or we do not delete your data, no one will pay us in the future, this does not comply with our goals.
We always keep our promises.
>>> How to contact with us?
1. Download and install TOR Browser (hxxps://www[.]torproject[.]org/).
2. Open hxxp://supp24yy6a66hwszu2piygicgwzdtbwftb76htfj7vnip3getgqnzxid[.]onion/<REDACTED>
>>> Warning! Recovery recommendations.
We strongly recommend you to do not MODIFY or REPAIR your files, that will damage them."
}],
"RANSOM_NOTE_CONTENT_HASH": "38E73655"
}
Аргументы командной строки
BlackMatter может работать с аргументами командной строки или без них.
Ниже приведен список аргументов, которые может предоставить оператор.
-path <target> - Путь к каталогу, который будет специально зашифрован
<target> - Путь к каталогу, который будет специально зашифрован
-safe - Включить перезагрузку в безопасном режиме
-wall - Устанавить обои и распечатать записку с требованием выкупа
Настройка предварительного шифрования
Обход UAC
Во время установки BlackMatter проверяет, работает ли он в настоящее время с учетными данными администратора.
Во-первых, он вызывает SHTestTokenMembership, чтобы проверить, является ли токен его процесса членом группы администраторов во встроенном домене.
Затем, после запроса версии операционной системы через PEB, программа-вымогатель проверяет, является ли текущая ОС Windows 7 и выше.
Наконец, он проверяет, принадлежит ли токен текущего процесса к встроенным системным группам домена, используемым для администрирования.
Если проверки проходят и процесс имеет права администратора, вредоносная программа не пытается обходить UAC.
Для обхода UAC, используя LdrEnumerateLoadedModules, он регистрирует dllhost.exe в System32 как поле ImagePathName и CommandLine в поле ProcessParameters PEB процесса. Эта первоначальная настройка позволяет размещать и выполнять объекты COM как dllhost.exe.
Затем BlackMatter вызывает CoGetObject с указанным ниже именем объекта, чтобы получить COM-интерфейс ICMLuaUtil, который обычно используется для обхода UAC.
Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}
Затем вредоносная программа выполняет функцию ShellExec из интерфейса ICMLuaUtil, чтобы перезапустить себя с исходными аргументами командной строки, что повышает привилегию нового процесса.
Наконец, он завершает себя, вызывая NtTerminateProcess.
Создание зашифрованного расширения
Зашифрованное расширение динамически генерируется с использованием GUID компьютера жертвы, что делает его уникальным для каждой системы.
Сначала BlackMatter запрашивает значение указанного ниже раздела реестра, чтобы получить GUID компьютера.
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid
Затем вредоносная программа пропускает GUID компьютера через 3 раунда хеширования, обмена байтами и Base64-кодирования окончательного хеш-кода для генерации зашифрованного расширения.
Поскольку символы ASCII '+', '/' и '=' в строке Base64 не очень хорошо работают в расширении файла, BlackMatter заменяет '+' на 'x', '/' на 'i' и ' = ' на ' z '.
Вредоносная программа повторно использует это расширение файла в качестве имени записки с требованием выкупа, добавляя его перед .README.txt.
Получение токена олицетворения с помощью внедрения процесса
BlackMatter пытается получить и скопировать токен процесса с повышенными правами, запущенного в системе. Позже вредоносная программа запускает потоки и заставляет их олицетворять целевой процесс с помощью этого токена.
Во-первых, он проверяет, является ли пользователь текущего процесса LocalSystem, специальной учетной записью, используемой операционной системой. Затем он вызывает NtQueryInformationToken, чтобы запросить информацию о пользователе токена, и проверяет, является ли первый SID процесса SECURITY_LOCAL_SYSTEM_RID.
Если процесс выполняется как LocalSystem, BlackMatter использует токен текущего пользователя в качестве токена с повышенными правами.
В противном случае вредоносная программа вызывает NtQuerySystemInformation для запроса информации о процессах в системе. Для каждой записи процесса он проверяет, имеет ли процесс имя explorer.exe, и получает его уникальный идентификатор.
Затем он вызывает NtOpenProcess с идентификатором процесса, чтобы получить дескриптор процесса, и получает токен процесса с помощью NtOpenProcessToken.
Наконец, BlackMatter вызывает NtDuplicateToken для дублирования токена проводника.
Если это не удается, но токен текущего процесса является членом группы администраторов во встроенном домене, BlackMatter выполняет некоторые махинации внедрения процесса, чтобы получить токен процесса svchost.exe.
Во-первых, он использует тот же прием, что и на рисунке 16, для получения идентификатора процесса и дескриптора процесса svchost.exe.
Затем он проверяет, работает ли процесс svchost.exe как 64-разрядный.
Если он 64-битный, зловред расшифровывает два разных шеллкода в памяти. Необработанные шеллкоды можно найти здесь (https://github.com/cdong1012/IDAPyt...ob/master/Blackmatter/blackmattershellcode.7z).
После выделения памяти в процессе svchost.exe с помощью NtAllocateVirtualMemory BlackMatter записывает первый шелл-код в область памяти второго шелл-кода перед настройкой и выполнением второго шелл-кода.
После внедрения второй шелл-код выделяет виртуальную память в процессе svchost с помощью NtAllocateVirtualMemory, записывает первый шелл-код с помощью NtWriteVirtualMemory и создает новый поток для выполнения первого шелл-кода с помощью NtCreateThreadEx.
Первый шелл-код вызывает WTSQueryUserToken для получения первичного токена доступа вошедшего в систему пользователя и вызывает NtDuplicateObject для дублирования этого токена. Этот токен возвращается в основной поток программы-вымогателя.
Если вместо этого процесс svchost выполняется как 32-битный процесс, вредоносная программа расшифровывает третий шелл-код и вручную создает удаленный поток, используя CreateRemoteThread для его запуска. Этот шелл-код в основном представляет собой 32-битную версию первого шелл-кода.
Анализ учетных данных для входа в систему
~Небольшая пауза~