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

Статья Краткий Обзор Лоадера "Amadey"

lukas

(L3) cache
Пользователь
Регистрация
11.10.2018
Сообщения
282
Реакции
691
Краткий обзор лоадера «Amadey»


Описание

Проект 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ки),

os.png


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

user.png


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


статика

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

compiler.png


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

sections.png


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

imports.png


static-scan.png


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


динамика

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

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


startupr.png


лоадер стартует нормально копирует себя в 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-h.png


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

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

uac.png


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

xrefs.png


func.png


asadmin.png



2) Автозапуск.

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

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

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

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

reg.png


autoruns.png


12) Установленые АВ

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

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


av1.png


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

idata-av.png


контрольная панель траф и таски
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 соответственно траф не шифруется как и передаваемые параметры бикона

bikon.png


pe-exec.png


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

socket1.png

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) Имя файла во всех случаях остается оригинальное, из урл на сервере.
таски отрабатывают без проблем

tasks.png


DLL

dll.png


EXE

exe.png


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

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

return $res;
   }

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

rus.png


main1.png


tasks.png


stat.png



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

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

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

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

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

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

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

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

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

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

автор: pixe1
взято с эксплойта
 
pixe1 вообще молодчина (он и тут есть). Хотелось бы почаще видеть обзоры на xss, в т.ч. как первоисточник. Тем более это как раз основная тематика дамаги.
 
Хороший анализ, читается легко и все по теме, только одно чуть бы поправить:
● Автозапуск не из реестра Windows
Это не много не верно, так как в реестр все-же вносятся изменения:
a) Вносит изменения в HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Startup -> ProgramData/xxxxxx/
Я понимаю что скорее всего автор говорил о том что ветки Run* не используются, я бы уточнил а то вводит в заблуждение.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Хотелось бы почаще видеть обзоры на xss, в т.ч. как первоисточник. Тем более это как раз основная тематика дамаги.
Я не против делать обзоры, но нечего. На днях писал автор андройд-бота, спишемся, посмотрю, но в андройдах я не особо шарю. А по виндовс малваре - был тут видар этот и какой-то супер-локер. С обоими не получилось прийти к конструктивному диалогу.
 
А знаете в чем проблема текущих паблик лоудеров? Что они все ужасны, используют древние/странные техники.
Я сразу после беглого просмотра статьи могу сказать, что заявленный функционал не работает на Windows XP. На XP банально нет "ProgramData", через которую идет проверка уровня доступа.
 
Ты бы ещё 98-ю вспомнил :D

Да я вспомнил об Winodws XP только из-за этой строчки:
"Полная совместимость со всеми версиями Windows семейства NT (тесты на XP и новее, включая 10/2016), 32/64 -"

Что там за тесты проводил разработчик остается загадкой.
 


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