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

Статья Обзор TriumphLoader

Expiro

RAID-массив
Пользователь
Регистрация
17.11.2020
Сообщения
99
Реакции
61
Депозит
0.0019
Всем привет.
На борде уже был обзор лоадера Matanbuchus, но его предыдущую версию ( TriumphLoader ) с небольшими модификациями льют до сих пор. Меня заинтересовал семпл, я решил выловить его на трекерах и отреверсить.

Первоначальный анализ файла

Исходный файл весит 368 кб, упакован, собран в VS 2008.
Поверхностный анализ файла не выявил сигнатур известных инструментов защиты, секция кода содержит шифрованные данные, на что указывает высокая энтропия. Секция импорта содержит скудный набор применяемых функций, следовательно делаем выводы, что лоадер ищет нужны для работы api динамически.

В коде выявлены признаки применения алгоритма шифрования TEA (наличие констант и сам граф управления), в том числе применение характерных констант:
5.png

Динамический анализ образца

Защищаемый модуль расшифровывается при помощи алгоритма TEA в выделенный сегмент памяти, далее ему присваиваются соответствующие права с использованием функции VirtualProtect.
Указанный код расшифровывает в новый сегмент памяти ещё часть кода и PE файл после кода.
Новая расшифрованная часть кода находит необходимые для работы функции при помощи GetProcAddress и списка захардкодженных названий, после чего копирует PE файл во вновь выделенный сегмент ( теперь начало сегмента - начало PE файла ).
Новый сегмент вновь копируется в первоначальный сегмент загрузки (ImageBase 0x400000 в данном случае), предварительно заполненный нулями.
При передаче управления на код полученного PE файла осуществляется парсинг экспорта ntdll и kernel32 с целью поиска специфических функций.

Мьютекс выставляется с названием имени пользователя. Проверяется наличие ключа реестра NetHelper. Созадется директория C:\ProgramData\NetHelper\Cache\<случайное значение>, путь вписывается в указанный ключ реестра. Расшифровывается URL, представленный на рисунке:
photo-2021-05-30-23-02-14.jpg


Функционал по загрузке модуля с указанного URL посредством WinInet API:
6.png

Проверяется раскладка клавиатуры на предмет принадлежности к РФ и ряду стран СНГ, при совпадении осуществляется завершение.
Далее происходит сбор данных о системе (переменные окружения, оборудование, состояние памяти).

Для закрепления в системе лоадер создаёт задание в планировщике посредством запуска schtasks.exe через cmd :)
SCHTASKS /Create /SC MINUTE /MO 1 /TN "Service for windows Network Helper updates" /TR C:\ProgramData\NetHelper\Cache\<случайные значения>\<nethelper>.exe /F

Механизмы защиты

Для защиты лоадер использует сугубо стандартные средства - IsDebuggerPresent, OutputDebugString, GetTickCount.
В ходе анализа были выявлены дебаг строки:
4.png


Взаимодействие с CnC

После сбора информации о системе в админку осуществляется POST запрос по пути "/zalupauwuna/gate.php" с параметром request, закодированным в base64.
После декодировки получаем следующее:
7.png

Пример формирования json'a:
8.png

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

Значения полей:

"bn":"0hex" - константа
"bt":"NewLoader" - константа
"bu":"v0.1" - константа
"hw" - MAC адрес
"un" - имя пользователя
"cn" - имя компьютера
"os" - версия ОС
"pr" - уровень привилегий
"ip" - IP адрес, маска подсети, шлюз
"cp" - модель процессора
"ca" - разрядность ОС
"cc" - количество ядер
"gp" - название контроллера домена
"ra":4095 - константа

На рисунке представлен участок шифрования и кодирования в base64 собранных данных (видны принимаемые в качестве аргументов ключи bu и hw):
9.png


Таблица кодирования в base64 в сдампленном сэмпле:
10.png

В ответ с сервера управления поступает также закодированный в base64 json {task: <значение в base64>}, в логике лоадера подразумевается работа с командами:
Update
Uninstall
RunPE & CMD
DLL & Execute
AutoRunExe & Execute
MEMLOAD & DLL
RunPE & PS
RunPE & WERFAULT
EXE & Execute
MEMLOAD & NET
MEMLOAD & NATIVE
А также с ключами taskParm и taskId. Примеры некоторых строк, указывающих на работу с перечисленными командами:
2312312.jpg


P.S: Спасибо killanas за помощь в реверсе сэмпла
 
Пожалуйста, обратите внимание, что пользователь заблокирован
/zalupa
Это, видимо, все, что нужно знать об этом проекте)). Так а нахера ему DLL выкачивать и дропать в програмдату?
 
Это, видимо, все, что нужно знать об этом проекте)). Так а нахера ему DLL выкачивать и дропать в програмдату?
Меня больше интересует, зачем слать жсон под base64, а потом шифровать параметры внутри жсона. У автора своё видение реализации этого вопроса)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Меня больше интересует, зачем слать жсон под base64, а потом шифровать параметры внутри жсона. У автора своё видение реализации этого вопроса)
Да. Я помню, что мы уже к этому придерались в новых версиях (Матанбухус или как там). Ну любит человек, чтобы потрахаться, два дырявых презерватива надевать, ну кто мы такие, чтобы ему это запрещать).
 


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