[Разбор]Borr Malware - C#

k$$

0x00000001
0x00000001
1 lvl
Joined
Feb 3, 2020
Messages
113
Reaction score
39
Данная статья достаточно массивная и берет расчет НЕ на новичков.
Статья не моя
Реверс
Для начала откроем файл в ExeInfoPe.

(Исходный семпл)​
DotNet файл, накрытый SmartAssembly. Первым делом попытаемся скормить его De4dot.

Результат не порадовал, чистого файла мы не получили. Придется смотреть вручную. Открываем файл в DnSpy, переходим в .cctor

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

Значит, в каком то куске кода он будет расшифрован и подгружен. Пропускаем методы (ставим брекпоинт в конце .cctor), шагаем и смотрим модули

Подгрузилась Dll (1thzpxouagh). Сохраняем ее и открываем в DnSpy.

Оказывается, стиллер накрыт криптом из SmartAssembly + RunPE. Стаб использует RunPE, а значит скорее всего в ресурсах нативный файл.


Смотрим ресурсы, видим шифрованный файл. В самом коде все главные методы без обфускации. Написать декриптор будет просто.

(Пишем декриптор)
После расшифровки получаем чистый билд. Откроем его в ExeInfoPE.

(Чистый билд)

Файл нативен, и это правда. Но несовсем. Данный софт использует технологию CRL-Hosting. Грубо говоря, перед нами сейчас нативная обертка DotNet файла.

С точки зрения написания малвари кажется, что этот способ сокрытия кода наиболее эффективен. Однако это не панацея. В процессе работы будет подгружен .net модуль, который легко сдампить.

В нашем случае все еще проще. Стиллер работает какое-то время, а значит можно даже не искать нужные брекпоинты - просто запускаем приложение в дебаггере, ждем несколько секунд и ставим паузу. Net модуль загружен, можно дампить.

Лично я испльзовал x32dbg и ExtremeDumper.


(Дампим, дампим, дампим...)​
Неизвестный обфускатор. Ничего страшного, открываем в DnSpy и видим мод конфузера.


Ставим брекпоинт на Main, чекаем переменные.


Сохраняем, открываем, уже лучше. Однако строки и методы все равно обфусцированны.

Теперь пришло время заюзать спец тулзы для конфузера. В конце концов имеем чистые сурсы.


Анализ кода
Первое что бросается в глаза - конфиг передается открытым текстом. Неужели так сложно было сделать банальный XOR+base64? Просто несерьезно.

Лоадер дропает EXE со статичным именем в TEMP. Привет рантайм.

Далее меня привлек конфиг. Как я понял, при запуске стиллер проверяет, действительна ли лицензия, и если все ок то продолжает работу. Как по мне это не самый лучший подход. Что если сервер/ip забанят? Как этот запрос в сеть скажется на рантайме, учитывая что все билды будут стучать на этот хост?

Кстати, вот сюда стучит софт при запуске.


Сбор данных с браузера осуществляется с помощью дроченого SqliteHandler.

Я не знаю почему все юзают CryptUnprotectData, когда есть System.Security.Cryptography.ProtectedData

Стиллер outlook в наглую спизжен с сурсов. Даже не оптимизировали по нормальному.


Можно было бы добавить больше FTP.


Лог собирается на диске, причем папка дропа статична. Снова рантайм.


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

В топике было написано о обходе WindowsDefender, но где этот обход находится я так и не нашел. Детект чистого файла.

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

На этом желание копать дальше пропало - все это я уже видел.
Итог
Borr Stealer - салат из правленных исходников с гитхаба с минимумом новизны и щепоткой конфузера.

-Путей сбора файлов мало

-При этом добалять свои пути невозможно

-Судя по стилю написания кода, создается впечатление, что софт написан не малвар-кодером, а фрилансером за еду

Как по мне, данный продукт не соответствует цене (30$ в неделю без крипта).
Единственное что понравилось - обфускация (было интересно реверсить) и панель.

Исходник - https://github.com/onek1lo/Borr-Stealer
Бинарник - https://anonfile.com/53406bVfn2/BINS_rar
 
Top