Упаковщик: нет
Дата компиляции: 2021-09-03 12:04:44
- SHA1-хеш: 595b5a7f25834df7a4af757a6f1c2838eea09f7b
Описание
Троян написан на языке C. Программа содержит несколько файлов, каждый из которых последовательно используется трояном. Основная задача трояна — расшифровка шелл-кода и его выполнение. Расшифрованный шелл-код содержит BackDoor.Whitebird.30, модуль для обхода UAC, а также конфигурацию бэкдора.
Принцип действия
В папке с трояном находятся следующие файлы:
- mcupdui.exe — исполняемый файл, в который с помощью DLL Hijacking загружается вредоносная библиотека, имеет действительную подпись McAfee: 4F638B91E12390598F037E533C0AEA529AD1A371: CN=McAfee, Inc., OU=IIS, OU=Digital ID Class 3 - Microsoft Software Validation v2, O=McAfee, Inc., L=Santa Clara, S=California, C=US;
- McUiCfg.dll — загрузчик;
- mscuicfg.dat — зашифрованный шелл-код;
- mcupdui.ini — конфигурация трояна.
Для перехода к основной вредоносной функциональности троян модифицирует память процесса:
Модифицируется инструкция, следующая за загрузкой вредоносной библиотеки:
Trojan.Loader.891 находит все необходимые для работы функции по хешам с помощью структуры PEB (Process Environment Block).
При этом имена библиотек и функций хешируются неодинаково: имена библиотек — как Unicode-строки, приведенные к верхнему регистру, а имена функций — как ASCII-строки без изменения регистра. Полученные два хеша складываются, после чего сравниваются с искомым.
ror = lambda val, r_bits, max_bits: \
((val & (2 ** max_bits - 1)) >> r_bits % max_bits) | \
(val << (max_bits - (r_bits % max_bits)) & (2 ** max_bits - 1))
def hash_lib_whitebird(name: bytes) -> int:
a = name.upper() + b'\x00'
c = 0
for i in range(0, len(a)):
c = (a[i] + ror(c, 13, 32)) & 0xffffffff
# library name is a unicode string
c = (0 + ror(c, 13, 32))
return c
def hash_func_whitebird(name: bytes) -> int:
a = name + b'\x00'
c = 0
for i in range(0, len(a)):
c = (a[i] + ror(c, 13, 32)) & 0xffffffff
return c
Основные функции трояна зашифрованы. При вызове функции он расшифровывает свой код, а при выходе — шифрует обратно.
Основная функция:
Trojan.Loader.891 получает MAC-адреса всех сетевых интерфейсов компьютера. Далее троян читает данные из файла mscuicfg.dat. Если последние 6 байт нулевые, то записывает в них первый MAC-адреc из списка и шифрует этот файл алгоритмом RC4. При этом ключ равен записанному в файл MAC-адресу, зашифрованные данные сохраняются в файл mscuicfg.dat.
После этого троян в любом случае снова читает файл, перебирает каждый из полученных MAC-адресов, пока не найдет нужный. Правильность расшифровки проверяется совпадением последних 6 расшифрованных байт с ключом шифрования. При удачной расшифровке троян обрезает их и расшифровывает файл еще раз по алгоритму RC4, но в качестве ключа берет строку mscuicfg.dat. Полученные данные представляют собой шелл-код с конфигурацией и полезной нагрузкой.
Шелл-код
Шелл-код обфусцирован множеством команд JMP и вычислением каждого значения путем множества операций SUB, ADD и XOR:
Принцип действия шелл-кода сводится к расшифровыванию полезной нагрузки и ее последующей загрузке в память для выполнения.
Последний DWORD шелл-кода содержит OFFSET до начала полезной нагрузки.
Зашифрованные данные на этом этапе:
Для расшифровки используется XOR с динамическим ключом:
k = 0x37
s = bytearray()
for i in range(len(d)):
c = d[i] ^ k
s.append(c)
k = (k + c) & 0xff
Расшифрованные данные содержат MZPE-файл с замененными сигнатурами:
Расшифрованный модуль представляет собой BackDoor.Whitebird.30. Кроме того, в оверлее модуля присутствуют зашифрованные конфигурация и модуль для обхода UAC: