Как пользоваться программами-вымогателями

Как пользоваться программами-вымогателями

Группа Vice Society внедрила новую полезную нагрузку программы-вымогателя под своим брендом во время недавних вторжений. Этот вариант программы-вымогателя, получивший название «PolyVice», реализует надежную схему шифрования с использованием алгоритмов NTRUEncrypt и ChaCha20-Poly1305. В этой статье рассмотрим как пользоваться программами-вымогателями.

Фон

Vice Society, впервые обнаруженная в июне 2021 года, представляет собой хорошо обеспеченную ресурсами группу, занимающуюся вымогательством, которая успешно взламывает различные типы организаций. Используя классическую технику двойного вымогательства, они приступили к максимизации финансовой выгоды, используя исключительно оппортунистические цели. В последние месяцы Vice Society расширила свою стратегию выбора целей, включив в нее дополнительные чувствительные сектора.

В ТТП нет ничего нового. Они включают первоначальный доступ к сети через скомпрометированные учетные данные, использование известных уязвимостей (например, PrintNightmare), разведку внутренней сети, злоупотребление законными инструментами (также известными как COTS и LOLBins), бэкдоры и кражу данных.

Вместо того, чтобы использовать или разрабатывать собственную полезную нагрузку для шкафчиков, операторы Vice Society при своих вторжениях используют сторонние программы-вымогатели, в том числе HelloKitty, Five Hands и Zeppelin.

Программы-вымогатели Vice Society и ссылки на другие варианты программ-вымогателей

В ходе недавнего вторжения мы обнаружили развертывание программы-вымогателя, которая добавляла расширение .ViceSociety ко всем зашифрованным файлам, а также размещала в каждом зашифрованном каталоге заметки о выкупе с именем файла «AllYFilesAE».

Наш первоначальный анализ показал, что программа-вымогатель, которую мы назвали «PolyVice», находилась на ранних стадиях разработки. Наличие отладочных сообщений позволило предположить, что группа Vice Society, возможно, разрабатывает собственную реализацию программы-вымогателя.

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

Однако дальнейшее расследование показало, что дешифратор, связанный с вариантом PolyVice, впервые появился в свободной продаже 13 июля 2022 года, что указывает на то, что шкафчик не мог находиться на ранних стадиях разработки и что «релизная» версия существовала до того, как группа использование Zeppelin и других вариантов программ-вымогателей.

Наш анализ показывает, что Vice Society использовала набор инструментов, переполненный различными штаммами и вариантами программ-вымогателей.

  • Мы обнаружили значительное совпадение в реализации шифрования, наблюдаемое в программе-вымогателе RedAlert, варианте блокировки Linux, нацеленном на серверы VMware ESXi, что позволяет предположить, что оба варианта были разработаны одной и той же группой людей.
  • По данным Microsoft, Vice Society приняла вариант RedAlert в конце сентября 2022 года. Нам не удалось подтвердить, существовала ли в то время полезная нагрузка варианта RedAlert для Windows, или имеет ли вариант Windows, который мы отслеживаем как PolyVice, какое-либо отношение к этому.

Дальнейшее расследование также показало, что кодовая база, использованная для создания полезной нагрузки Windows Vice Society, использовалась для создания специальных полезных нагрузок для других групп угроз, включая программы-вымогатели «Chily» и «SunnyDay».

Code similarities between PolyVice and Chily Ransomware

Сходство кода между Vice Society и Chily Ransomware

Code similarities between PolyVice and SunnyDay Ransomware

Сходство кода между Vice Society и SunnyDay Ransomware

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

  • Полезная нагрузка под брендом Vice Society на 100 % совпадает по функциям с полезной нагрузкой под брендом Chily, что указывает на идентичность базы исполняемого кода.
  • Полезная нагрузка под брендом SunnyDay представляет собой более старую версию кодовой базы, которая имеет 100% совпадение по 410 функциям и не содержит дополнительных 37 новых функций, реализованных в кодовой базе Vice Society.

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

Data section comparison Vice Society (above) Chily Ransomware (below)

Сравнение разделов данных Vice Society (вверху) Chily Ransomware (внизу)

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

Способ доставки этого «локера как услуги» неясен, но дизайн кода предполагает, что разработчик программы-вымогателя предоставляет сборщик, который позволяет покупателям самостоятельно создавать любое количество локеров/дешифраторов путем двоичного исправления полезных данных шаблона. Это позволяет покупателям настраивать свои программы-вымогатели, не раскрывая исходного кода. В отличие от других известных разработчиков RaaS, покупатели могут создавать фирменные полезные нагрузки, что позволяет им запускать свои собственные программы RaaS.

Анализ PolyVice | Инициализация асимметричных ключей NTRU

Программа-вымогатель PolyVice — это 64-битный двоичный файл Windows, скомпилированный с помощью MinGW (SHA1: c8e7ecbbe78a26bea813eeed6801a0ac9d1eacac).

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

Для асимметричного шифрования он использует реализацию алгоритма NTRUEncrypt с открытым исходным кодом, который, как известно, является квантово-устойчивым. Для симметричного шифрования он использует реализацию алгоритма ChaCha20-Poly1305 с открытым исходным кодом, поточный шифр с аутентификацией сообщений, 256-битный ключ и 96-битный одноразовый номер.

На этапе инициализации он импортирует жестко закодированный открытый ключ NTRU, сгенерированный в автономном режиме с помощью поставщика EES587EP1 (стойкость 192 бита):

Code to import the hardcoded master NTRU public key

Код для импорта жестко закодированного главного открытого ключа NTRU

Впоследствии в системе-жертве во время выполнения с помощью провайдера EES401EP2 генерируется новая случайная пара ключей NTRU (мощность 112 бит):

NTRU key pairs runtime initialization

Инициализация во время выполнения пар ключей NTRU

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

Чтобы защитить сгенерированный закрытый ключ NTRU, программа-вымогатель шифрует его с помощью функции ntru_encrypt с помощью жестко запрограммированного открытого ключа NTRU (также называемого главным открытым ключом):

Code to protect the NTRU private key

Код для защиты закрытого ключа NTRU

Зашифрованный закрытый ключ NTRU системы, созданный во время выполнения, хранится в конфигурационном BLOB-объекте. Большой двоичный объект конфигурации содержится в пользовательской структуре данных «CustomConfigBlog»:

CustomConfigBlog data structure definition

Определение структуры данных CustomConfigBlog

Более того, в конфигурационном объекте хранится случайный открытый ключ NTRU, сгенерированный в системе:

Code to export the NTRU public key generated at runtime

Код для экспорта открытого ключа NTRU, созданного во время выполнения.

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

Параллельное шифрование

Шкафчик PolyVice использует многопоточный подход для распараллеливания шифрования файлов.

Это достигается с помощью функции CreateThread для создания нескольких рабочих процессов, а синхронизация с основным потоком происходит с помощью вызова WaitForMultipleObject.

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

Более конкретно, PolyVice использует следующую структуру данных для обмена данными между основным потоком и рабочими процессами:

CustomCompletionPortStruct data structure definition

Определение структуры данных CustomCompletionPortStruct

Рабочие потоки

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

Каждый рабочий поток реализует все операции по чтению содержимого файла, выполнению шифрования ChaCha20-Poly1305, записи зашифрованных блоков обратно в файл и добавлению нижнего колонтитула файла:

Worker threads code

Код рабочих потоков

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

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

Две функции для чтения и записи содержимого файла показаны ниже:

File blocks Read (left) / Write (right) logics

Файловые блоки Логика чтения (слева)/записи (справа)

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

  • Файлы размером менее 5 МБ полностью зашифрованы.
  • Файлы размером от 5 до 100 МБ частично зашифрованы:

-Всего 5 МБ контента шифруется путем разделения его на 2 фрагмента по 2,5 МБ. Первый фрагмент сверху и второй фрагмент снизу файла.

  • Файлы размером более 100 МБ шифруются частично:

-Всего 25 МБ контента шифруется в прерывистом режиме, разделенном на 10 фрагментов по 2,5 МБ, распределенных по 10 % размера файла.

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

Следующая структура данных добавляется в нижний колонтитул к каждому зашифрованному файлу:

CustomFileFooter data structure definition

Определение структуры данных CustomFileFooter

Функциональность основного потока

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

Это включает в себя перечисление всех локальных и удаленных дисков, включая общие сетевые ресурсы:

Main thread file enumeration routine

Процедура перечисления файлов основного потока

Для каждого обнаруженного диска вызывается функция EnumAndEncryptFilesFromPath (псевдоимя) с корневым путем в качестве входного параметра. Эта функция использует вызовы Win32 API FindFirstFile и FindNextFile для получения путей ко всем файлам из всех каталогов и подкаталогов в пределах начального пути.

При обнаружении нового файла этап подготовки симметричного шифрования вызывается через функциюPrepareFileForSymmetricEncryption (pseudo) , и записка о выкупе копируется в перечисляемый каталог:

Code for EnumAndEncryptFilesFromPath function

Код функции EnumAndEncryptFilesFromPath

Подготовка FileForSymmetricEncryption используется на этапе подготовки симметричного шифрования:

Code for PrepareFileForSymmetricEncryption function

Код функции Подготовка FileForSymmetricEncryption

Функция настраивает структуру данных CustomCompletionPortStruct с информацией, необходимой для симметричного шифрования файла. Затем он генерирует и сохраняет новый симметричный ключ ChaChaPoly и одноразовый номер в структуре данных. Важно отметить, что эта инициализация выполняется для каждого шифруемого файла, гарантируя, что каждый файл имеет уникальный симметричный ключ. Симметричный ключ ChaChaPoly и одноразовый номер затем шифруются с использованием открытого ключа NTRU, сгенерированного во время выполнения в системе-жертве. Как только это будет сделано, файл готов к шифрованию, и все необходимые данные будут настроены в структуре данных.

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

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

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

Заключение

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click to rate this post!
[Total: 0 Average: 0]

Leave a reply:

Your email address will not be published.