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

Статья Под капотом DarkGate: разбираем ВПО-мультитул

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
DarkGate — вредоносное ПО, которое реализует функциональность загрузчика, стилера и RAT. Таким образом, оно представляет собой комплексный тулкит для кражи различной информации, удаленного управления зараженным хостом, майнинга криптовалюты. Интересно, что разработчик позиционирует DarkGate как загрузчик. Но в то же время это ВПО предоставляет богатый набор инструментов для заражения, закрепления на зараженном хосте, повышения привилегий, кражи учетных и других данных, а также является полноценным трояном удаленного доступа. В итоге DarkGate может использоваться в любой противоправной деятельности, в частности в распространении программ-вымогателей или в кибершпионаже.

История появления DarkGate и методы его распространения​

Стоит остановиться подробнее на том, почему вообще DarkGate начал фигурировать в отчетах и сообщениях исследователей. Дело в том, что cразу после того, как ФБР в августе 2023 года ликвидировало инфраструктуру QakBot, независимые исследователи и компании начали обращать внимание на рост заражений с использованием PikaBot и DarkGate. Распространенная точка зрения по поводу того, почему так произошло, следующая: клиенты и крупные операторы QakBot, чтобы избежать простоя, сразу после этих событий начали искать замену своему почившему инструменту, так что DarkGate и PikaBot попытались заполнить эту нишу. Соответственно, и основной способ распространения был унаследован от QakBot: им стал фишинг.

Отдельно отметим, что очевидной связи между DarkGate, QakBot или PikaBot нет. Кроме того, реверс-инжиниринг экземпляров этих семейств ВПО также не выявил никаких сходств.
По информации Cofense, летом текущего года количество вредоносных писем, распространяющих DarkGate, значительно увеличилось, а в октябре 2023 года злоумышленники перешли к использованию PikaBot в качестве основной полезной нагрузки.
Хакер
e32efad7754d7fb5d5e84cfdcc2abd6a.jpg

Кто разрабатывает DarkGate​

Объявление о сдаче в аренду ВПО под названием DarkGate Loader было размещено в закрытом разделе одного из известных русскоязычных подпольных форумов. Со слов продавца, он создавал это ВПО с 2017 года. Разработка заняла к моменту продажи не менее 20 000 часов. Интересный момент: продавец заявлял о том, что не собирается сдавать в аренду ВПО более чем 10 клиентам, позиционируя его как приватное. Продавец указывал следующие расценки:
  • 1000 $ за набор ПО для теста (1 day package).
  • 15 000 $ ежемесячно.
Через некоторое время «разработчик» удалил тред на форуме, предположительно набрав 10 партнеров в свой продукт. Однако позднее на форуме снова появился пользователь, который занимался продажей DarkGate, при этом сообщив, что «разработчик» с форума ушел окончательно, а он является лишь посредником.

Характерно, что разработчик ВПО старается затруднить использование его продукта в атаках на российские компании. Но, вопреки его стараниям, в течение 2023 года мы неоднократно видели использование DarkGate в атаках на российский бизнес.

Что отличает DarkGate​

DarkGate существенно отличается от типового ВПО, с которым аналитики сталкиваются ежедневно. Прежде всего, стоит отметить следующие характеристики DarkGate:
  • Написан на языке Delphi + wrapper для RDP на Delphi.
  • Использует кастомный пакер (unity.dll).
  • Использует кастомные маппинги Base64.
  • Имеет свою реализацию MD5 в комплекте с нестандартным шифрованием сетевого трафика.
  • Содержит большое количество сигнатурных абсолютных или относительных системных путей, используемых в работе ВПО. Их можно задействовать в качестве детектирующих правил (HWID-пути).
  • Содержит абсолютные пути, жестко закодированные в ВПО (/tmpp).
  • Имеет в скомпилированном виде большой размер (~ 500 КБ).

Процесс реверс-инжиниринга​

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

Как выглядит процесс работы DarkGate​

Читать статью ->

Снятие пакера​

Пакер состоит из трех частей:
  • DLL, которая распаковывает Autoit3.exe и test.au3.
  • AutoIt3-скрипт, который загружает в память шелл-код / исполняемый файл.
  • Шелл-код, который достает из AU3-файла тело DarkGate, расшифровывает его и запускает.
Рассмотрим каждую из этих частей.

DLL​

Здесь используется техника DLL hijacking, поэтому в библиотеке есть несколько экспортных функций, таких как UnityMain, DebugCreate, KSInit и т. д., что соответствует функциям из Unity, dbghelp.dll и продукта KeyScrambler Pro. Так или иначе все они сводятся к одной и той же функции — KSFFInit.

2e17755a9932d55c90e0724b5fe1b914.png

Эта функция вызывается из DllEntryPoint.

2ea533269f6f29042d5482af2696a241.png

Функция загружает из DLL-файла ресурс с названием ResA. При открытии этого ресурса нас встречает большая Base64-строка (так кажется на первый взгляд). Но, если попытаться декодировать стандартным словарем, ничего не получится. И мы приходим к одному из основных методов шифрования в DarkGate — кастомным Base64-маппингам. Сам ресурс разделен словом splitres.

91a164a4b26d52edd0e9cc34d9111e7e.png

В результате разделение происходит на три разные части, каждая из которых обозначает следующее:
  1. Base64-маппинг для расшифровки остальных частей.
  2. Данные, которые пойдут в файл C:\tmpp\test.au3.
  3. Данные, которые пойдут в файл C:\tmpp\Autoit3.exe.
Интересно, что Base64-маппинг был перемешан с использованием алгоритма из Delphi. После этого управление передается скрипту test.au3.

bcd866de9303ffe67a5422ef878172c6.png

AU3-скрипт​

Сам скрипт поставляется в скомпилированном виде, и декомпилировать его не составляет труда. Для решения этой задачи мы воспользовались данным скриптом с небольшими модификациями, чтобы можно было подавать на вход не EXE-файл, а сам скрипт. Однако возникает интересная особенность: скрипт в скомпилированном виде весит 493 КБ, а скрипт, который был декомпилирован, весит 250 КБ. Это говорит о том, что декомпилировалась лишь часть скрипта. Все попытки извлечь оставшуюся часть не увенчались успехом. По мере продолжения процесса разбора ВПО станет ясно, почему так вышло. Сам скрипт не обфусцирован и выглядит следующим образом:
Код:
      Local $ZXJNIG
#NoTrayIcon
      
Local $XNJM
$MVPLXXLL = "90E9B903000000"
Local $ESBHNXGC
$MVPLXXLL &= "5472785841655A"
Local $OFBKBJJJ
...
$MVPLXXLL &= ""
Local $VTDKEDNE
Local $XZTUTDEIT
$SVAIDD = DllStructCreate ( "byte[" & 49425 & "]" )
Local $ZEJEH
If Not FileExists ( "C:\Program Files (x86)\Sophos" ) Then
    Local $JUGTJAX
    DllCall("kernel32.dll", "BOOL", "VirtualProtect", "ptr", DllStructGetPtr($svaidd), "int", 49425, "dword", 0x40, "dword*", null)
    Local $PZXPHWQ
EndIf
Local $QNVVBPPJ
DllStructSetData($svaidd, 1, BinaryToString("0x"&$MVpLXXLl))
Local $BROBKJK
DllCall("user32.dll", "int", "EnumWindows", "ptr", DllStructGetPtr($svaidd), "lparam", 0)
Стоит отметить одну деталь: DarkGate уже на этапе работы скрипта C:\tmpp\test.au3 проверяет наличие в системе антивирусного ПО, а именно Sophos. В отдельном материале с детальными результатами реверс-инжиниринга мы разобрали, какие антивирусные продукты находит DarkGate и какие действия предпринимает для борьбы с вендорами антивирусов.
Логика же скрипта тривиальна: собирается HEX-строка, которая затем загружается в память и исполняется. Таким образом, мы добрались до этапа с шелл-кодом.

Шелл-код​

На этом этапе разработчик DarkGate позволяет себе слабость, а именно добавление в шелл-код самого PE-файла, который будет исполнять нагрузку. Опытные реверсеры могли уже заметить, что начало шелл-кода — 90e9b903, что соответствует следующим инструкциям:
Код:
nop
jmp 0x3BF
Посмотрим, как выглядит этот адрес:
ffc555372e7166e849c9aef4c7984fde.png


Подмечаем строку This program must be run under Win32, что намекает нам на DOS Stub. При этом конкретно эта строка вшивается в DOS Stub, если используется Delphi, однако об этом немного позже. Но где MZ? dec ebp и pop edx транслируются ассемблером в 2 байта 4d5a, что, если перевести из HEX-формата, как раз и является MZ. Теперь можно смотреть не шелл-код, а полноценный PE-файл.

В процессе изучения PE-файла замечаем следующий псевдокод:

36b8cb7d4b5e394079499d889ad68ba3.png


На данном этапе появилось понимание, что мы столкнулись с Delphi. Возможно, мы имеем дело с пакером, разработанным на Delphi. Сама нагрузка делает следующее:
  • Читает файл C:\tmpp\test.au3.
  • Разбивает содержимое файла подстрокой AU3!EA06, берет третью подстроку.
  • Берет первые восемь символов — XOR-ключ для расшифровки.
  • Расшифровывает все, что идет дальше, XOR-ключом.
В результате создается PE-файл. Так это выглядит в самом AU3-файле.
88a26efb9d1adab3a6b90c38d87c8840.png

Так можно получить сам DarkGate.
b08b1d29290106e635d25a2052baf412.png

Язык разработки​

Как мы упоминали ранее, у нас фигурирует Delphi. В результате исследования выяснилось, что на Delphi написан и сам DarkGate. На это указывают некоторые строки, например TStringList или THandleStream. Также для Delphi/Pascal характерно использование TEB и выполнение следующей последовательности инструкций.
9ad53df6138bdd7b1d736e9dff0dd73a.png

Конечно, реверсить Delphi могло бы быть весьма неприятно, если бы не было IDR, который содержит в себе полноценные базы для различных версий Delphi, а также позволяет загрузить метадату в базу IDA PRO. Таким образом, имея названия большинства библиотечных функций и некоторые структуры, процесс реверса можно сильно упростить. Об этом также читайте в подробном материале.

Кастомное шифрование общения с C2​

Любой распространенный RAT или стилер шифрует свое общение с C2 каким-либо способом. Что же использует DarkGate? AES? Salsa20? Может быть, RC4? Нет, нет и нет. Base64. Для многих это алгоритм, которым можно передать бинарные данные в alphanumeric-формате, а для DarkGate это действительно алгоритм шифрования общения. Рассмотрим, как создатели ВПО это реализовали. В детальном материале мы описали алгоритм создания ключа, здесь же коротко его опишем.

Приведенный ниже псевдокод отвечает за сбор информации о компьютере.
2b764a1555edea6263661b4d89462bd9.png


ВПО извлекает следующую информацию:
  1. Версия операционной системы. Используется путь реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion. Берутся ключи ProductName, CSDVersion и CurrentBuildNumber.
  2. ProductId из того же пути, что и версия операционной системы.
  3. Имя процессора и количество ядер.
  4. Имя пользователя, от имени которого запущен DarkGate.
  5. Сетевое имя компьютера.
Затем строки конкатенируются в следующем порядке: <Имя пользователя><Сетевое имя><ProductId><Имя процессора и количество ядер>. Берется модифицированный MD5 (информация о том, как он модифицирован, и Python-скрипт, который считает MD5 так же, как и DarkGate, представлены в подробном анализе в разделе GetAgentInformation). Далее эта сумма превращается в HEX-строку (тоже модифицированную), и уже именно она используется для генерации ключа. Происходит этот процесс следующим образом:
  • Считается сумма символов HEX-строки, сгенерированной в начале функции, она будет служить сидом рандома.
  • Берется встроенный чарсет Base64 (zLAxuU0kQKf3sWE7ePRO2imyg9GSpVoYC6rhlX48ZHnvjJDBNFtMd1I5acwbqT+=), и происходит его перемешивание.
Выполняется кодирование данных с этим чарсетом, и получается своего рода защищенный канал.

Заключение​

Мы наблюдаем, как ранее широко распространенные инструменты становятся неактуальными, а им на смену приходят новые игроки, о которых, вероятно, мы услышим в будущем. Стоит отметить, что по большей части рынок вредоносного ПО живет по законам рыночной экономики. Такие события, как остановка ботнетов QakBot и Emotet, несомненно, ведут к появлению новых инструментов и акторов, эта ниша быстро наполняется новым, ранее неизвестным широкой публике ВПО.

Источник BI.ZONE @BiZone_team
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Любой распространенный RAT или стилер шифрует свое общение с C2 каким-либо способом. Что же использует DarkGate? AES? Salsa20? Может быть, RC4? Нет, нет и нет. Base64. Для многих это алгоритм, которым можно передать бинарные данные в alphanumeric-формате, а для DarkGate это действительно алгоритм шифрования общения
Со слов продавца, он создавал это ВПО с 2017 года. Разработка заняла к моменту продажи не менее 20 000 часов
149482235716057051.jpg
 
Переоцененый конечно у него прайс
Мне не понравился дизайн как будто на рат дешевом, но дело привычки конечно.

Судя по функционалу
Софт прям для сетей создан все там есть
Вообщем мне не зашел он

А решения которые выкатывает кодер реально рабочие
 


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