Как раскрывать бэкдор BLOODALCHEMY

Как раскрывать бэкдор BLOODALCHEMY

BLOODALCHEMY — это бэкдор для x86, написанный на C и обнаруженный в виде шелл-кода, внедренного в подписанный безопасный процесс. Он был обнаружен в ходе нашего анализа и является частью набора вторжений REF5961, о котором вы можете прочитать здесь. В этой статье рассмотрим как раскрывать бэкдор BLOODALCHEMY

Ключевые выводы

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

Первоначальное исполнение

На начальном этапе выполнения злоумышленник развернул неопасную утилиту BrDifxapi.exe, которая уязвима для загрузки неопубликованных DLL. При развертывании этой уязвимой утилиты злоумышленник может загрузить неподписанный загрузчик BLOODALCHEMY (BrLogAPI.dll) и внедрить шеллкод в текущий процесс.

alt_text

Командная строка, используемая для запуска загрузчика BLOODALCHEMY.

 

alt_text

Поддельный BrLogApi.dll, часть набора инструментов BLOODALCHEMY, загруженный BrDifxapi.exe.

BrDifxapi.exe — это двоичный файл, разработанный японской компанией Brother Industries, и наблюдаемая нами версия имеет отозванную подпись.

alt_text

BrDifxapi.exe с отозванной подписью

Законная DLL с именем BrLogApi.dll — это неподписанная DLL, также созданная Brother Industries. BLOODALCHEMY использует то же имя DLL.

alt_text

Настоящий BrLogApi.dll представляет собой неподписанный файл DLL.

Анализ кода

Обфускация данных

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

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

Blob = Key0 :EncryptedString0 + Key1:EncryptedString1 + ... + KeyN:EncryptedStringN

Реализация на Python алгоритма дешифрования строк приведена ниже:

def decrypt_bytes(encrypted_data: bytes, offset: int, size: int) -> bytes:
    decrypted_size = size - 1
    decrypted_data = bytearray(decrypted_size)

    encrypted_data_ = encrypted_data[offset : offset + size]
    key = encrypted_data_[0]

    i = 0
    while i != decrypted_size:
            decrypted_data[i] = key ^ encrypted_data_[i + 1]
           key = (key + ((key << ((i % 5) + 1)) | (key >> (7 - (i % 5))))) & 0xFF
           i += 1

    return bytes(decrypted_data)

Строки, содержащиеся в BLOB-объекте конфигурации, шифруются по той же схеме, однако идентификаторы (или смещения) каждой строки запутываются; он добавляет два дополнительных уровня запутывания, которые необходимо устранить. Ниже мы можем разрешить дополнительные уровни обфускации для расшифровки строк из конфигурации:

def decrypt_configuration_string(id: int) -> bytes:
        return decrypt_bytes(
                *get_configuration_encrypted_string(
                        get_configuration_dword(id)))

Каждая функция представлена ​​ниже:

Функция get_configuration_dword

def get_configuration_dword(id: int) -> int:
        b = ida_bytes.get_bytes(CONFIGURATION_VA + id, 4)
        return b[0] + (b[1] + (b[2] + (b[3] << 8) << 8) << 8)

Функция get_configuration_encrypted_strng

def get_configuration_encrypted_string(id: int) -> tuple[int, int]:
         ea = CONFIGURATION_VA + id

        v2 = 0
        i = 0

        while i <= 63:
            c = ida_bytes.get_byte(ea)

            v6 = (c & 127) << i
            v2 = (v2 | v6) & 0xFFFFFFFF

            ea += 1

            if c >= 0:
                break
            
            i += 7
            return ea, v2

Упорство

BLOODALCHEMY сохраняет постоянство, копируя себя в свою постоянную папку с суффиксом пути \Test\test.exe,

alt_text

Папка BLOODALCHEMY и двоичное имя

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

    • %ProgramFiles%
    • %ProgramFiles(x86)%
    • %Appdata%
    • %LocalAppData%\Programs

alt_text

BLOODALCHEMY root persistence folder choice

Сохранение достигается разными методами в зависимости от конфигурации:

      • Как услуга
      • В качестве ключа реестра
      • Как запланированная задача
      • Использование COM-интерфейсов

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

В качестве службы с именем Test.

alt_text

BLOODALCHEMY удаление ранее установленного сервиса

В качестве ключа реестра в CurrentVersion\Run.

alt_text

BLOODALCHEMY удаляет постоянный ключ реестра «CurrentVersion\Run»

В качестве запланированной задачи, выполняемой с привилегиями СИСТЕМЫ через schtask.exe:

b'schtasks.exe /CREATE /SC %s /TN "%s" /TR "\'%s\'" /RU "NT AUTHORITY\\SYSTEM" /Fb'

Использование COM-интерфейса TaskScheduler::ITaskService. Назначение этого механизма сохранения в настоящее время неизвестно.

alt_text

Создание экземпляра COM-интерфейса ITaskService.

Режимы бега

Вредоносная программа имеет разные режимы работы в зависимости от ее конфигурации:

    • В основном или отдельном потоке процесса
    • Создайте процесс Windows и внедрите в него шеллкод.
    • Создайте процесс Windows и внедрите в него шеллкод.
    • Как услуга

Вредоносное ПО может работать либо в основном потоке процесса.

alt_text

Функция возможностей, вызываемая внутри основной функции

Или запускайте в отдельном потоке.

alt_text

Функция возможностей, вызываемая в новом потоке

Или создайте процесс Windows из жестко запрограммированного списка и внедрите шеллкод, передаваемый параметром, в точку входа с помощью метода WriteProcessMemory+QueueUserAPC+ResumeThr

alt_text

Метод технологического впрыска

alt_text

Список целевых двоичных файлов для внедрения в процесс

Шелл-код содержится в параметрах, которые мы называем p_interesting_data. На самом деле этот параметр является указателем на структуру, содержащую как конфигурацию вредоносного ПО, так и исполняемые двоичные данные.

alt_text

Прототип точки входа

alt_text

Предоставленный шеллкод, скопированный в удаленном процессе

alt_text

Заключительная часть процедуры технологического внедрения

Или установите и запустите себя как службу. В этом сценарии именем и описанием службы будет «Система тестирования и цифровой обработки изображений»:

alt_text

Строки имени и описания, используемые для установки службы BLOODALCHEMY.

Кроме того, при запуске в качестве службы и запуске диспетчером служб вредоносная программа маскируется как остановленная, сначала устанавливая статус службы на «SERVICE_RUNNING», а затем устанавливая статус на «SERVICE_STOPPED», хотя на самом деле вредоносная программа все еще работает.

alt_text

Точка входа в сервис BLOODALCHEMY маскирует статус сервиса

Коммуникация

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

При использовании протокола HTTP вредоносная программа запрашивает следующий URI /Inform/logger/.

alt_text

URI, используемый для подключения к C2

В этом сценарии BLOODALCHEMY попытается использовать любой прокси-сервер, найденный в разделе реестра SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings.

alt_text

Информация о прокси-сервере хоста, полученная из реестра

В нашем образце мы не обнаружили никакой инфраструктуры C2, но URL-адрес может выглядеть примерно так: https://malwa[.]re/Inform/logger

При использовании именованного канала имя генерируется случайным образом с использованием текущего PID в качестве начального числа.

alt_text

Генерация случайного имени канала с использованием текущего PID

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

alt_text

Получить родительский PID

alt_text

Неверная проверка ограничения доступа к каналу родительского процесса

Из строк вредоносного ПО и импорта мы знаем, что вредоносное ПО также может работать с использованием сокетов TCP/UDP.

alt_text

Использование API сокетов в одной из реализаций «коммуникационного» интерфейса

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

    • DNS://
    • HTTP://
    • HTTPS://
    • MUX://
    • UDP://
    • SMB://
    • SOCKS5://
    • SOCKS4://
    • TCP://

Для всех протоколов данные могут быть зашифрованы, сжаты LZNT1 и/или закодированы в Base64.

Команды

Вредоносная программа содержит лишь несколько команд с реальными эффектами:

    • Write/overwrite набор инструментов вредоносного ПО
    • Запустите вредоносный двоичный файл Test.exe.
    • Удалить и прекратить
    • Соберите информацию о хосте

Существует три команды, которые записывают (или перезаписывают) набор вредоносных инструментов полученными двоичными данными в кодировке Base64:

      • Либо двоичный файл вредоносного ПО (Test.exe)
      • загруженная неопубликованная DLL (BrLogAPI.dll)
      • или основной доверенный двоичный файл (BrDifxapi.exe)

alt_text

Набор инструментов BLOODALCHEMY перезаписывает команды

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

alt_text

Команда BLOODALCHEMY для запуска исполняемого двоичного файла вредоносной программы

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

alt_text

Команда для удаления и завершения себя

alt_text

Функция удаления

Одна команда сбора информации о хосте: процессор, ОС, дисплей, сеть и т. д.

alt_text

Команда сбора информации

YARA

Elastic Security создал правила YARA для идентификации этой активности. Ниже приведены правила YARA для идентификации вредоносного ПО BLOODALCHEMY:

BLOODALCHEMY
rule Windows_Trojan_BloodAlchemy_1 {
    meta:
        author = "Elastic Security"
        creation_date = "2023-05-09"
        last_modified = "2023-06-13"
        threat_name = "Windows.Trojan.BloodAlchemy"
        license = "Elastic License v2"
        os = "windows"

    strings:
        $a1 = { 55 8B EC 51 83 65 FC 00 53 56 57 BF 00 20 00 00 57 6A 40 FF 15 }
        $a2 = { 55 8B EC 81 EC 80 00 00 00 53 56 57 33 FF 8D 45 80 6A 64 57 50 89 7D E4 89 7D EC 89 7D F0 89 7D }

    condition:
        all of them
}

rule Windows_Trojan_BloodAlchemy_2 {
    meta:
        author = "Elastic Security"
        creation_date = "2023-05-09"
        last_modified = "2023-06-13"
        threat_name = "Windows.Trojan.BloodAlchemy"
        license = "Elastic License v2"
        os = "windows"

    strings:
        $a1 = { 55 8B EC 83 EC 54 53 8B 5D 08 56 57 33 FF 89 55 F4 89 4D F0 BE 00 00 00 02 89 7D F8 89 7D FC 85 DB }
        $a2 = { 55 8B EC 83 EC 0C 56 57 33 C0 8D 7D F4 AB 8D 4D F4 AB AB E8 42 10 00 00 8B 7D F4 33 F6 85 FF 74 03 8B 77 08 }

    condition:
        any of them
}

rule Windows_Trojan_BloodAlchemy_3 {
    meta:
        author = "Elastic Security"
        creation_date = "2023-05-10"
        last_modified = "2023-06-13"
        threat_name = "Windows.Trojan.BloodAlchemy"
        license = "Elastic License v2"
        os = "windows"

    strings:
        $a = { 55 8B EC 83 EC 38 53 56 57 8B 75 08 8D 7D F0 33 C0 33 DB AB 89 5D C8 89 5D D0 89 5D D4 AB 89 5D }

    condition:
        all of them
}

rule Windows_Trojan_BloodAlchemy_4 {
    meta:
        author = "Elastic Security"
        creation_date = "2023-05-10"
        last_modified = "2023-06-13"
        threat_name = "Windows.Trojan.BloodAlchemy"
        license = "Elastic License v2"
        os = "windows"

    strings:
        $a = { 55 8B EC 83 EC 30 53 56 57 33 C0 8D 7D F0 AB 33 DB 68 02 80 00 00 6A 40 89 5D FC AB AB FF 15 28 }

    condition:
        all of them
}

Заключение

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Leave a reply:

Your email address will not be published.