Разработка DL лоадера

KraZz

(L3) cache
Пользователь
Регистрация
18.06.2009
Сообщения
196
Реакции
7
Пока не ясно кто будет, а кто нет.
Предлагаю обсудить для начала вариант с лоадером, вернее решить, что это будет EXE или DLL
У DLL есть ряд преимуществ
1. DLL не видно в диспетчере задач
Если даже загуглить (по теме как скрыть EXE в диспетчере задач), то можно заметить, что советуют, либо как сервис заюзать, либо скрыть без вариантов, если только хучить что-то там...
2. у DLL есть приоритет (пусть и небольшой) что DLL реже будут детектить.
А я даже хотел бы больше сказать...
Был у меня один заказ, так вот там чел юзает одного троя (в сущности это DLL, но имеет еще дополнительно для инсталла дроппер), так вот дроппер криптуют без проблем, а с DLL у него постоянные траблы выскакивают, но он не хочет слезать с этого троя, потому что хост очень долго живет и в трекер не попадает, имя этому трою - лимбо.
Был у него криптовальщик один, криптор у него долго не палицца, но проблема что он не может криптануть этот лимбо (при этом у меня много было заказов именно таких, что не могут криптануть DLL)
Так вот мне предстояла задача решить эту проблему, я взял этот криптор и снял с него исходники %))), кому расскажи какой там ламеризм юзается - не поверят.
Но мне стало не смешно, когда я в течение нескольких месяцев слал на VT сЭмплы и они нихуя так и не палились, постоянный результат - 1/42
Потом я реально заинтересовался, почему же такая х#йня происходит
Взял из паблика криптор от этого же автора и криптанул UFR (EXE), проверил и увидел что там, около десятка факают AV, вот так получается у нас "как бы есть" еще и криптор для DLL и экспериментов...
3. Юзер может из диспетчера задач запалить левый процесс, заинтересоваться, убить процесс или даже на проверку отправить на VT, они обычно диспетчер задач вызывают, чтобы убить какую-нибудь игрульку зависшую или даже скайп, аську и т.д.
4. ...
Хотелось бы общего обсуждения, поэтому ограничусь пока этой инфой.
Как-то не хочется читать монолог...
 
Есть проблема в том, что связки чаще всего не умеют грузить DLL. Некоторые умеют (говнопуерто например), но большинство под это не заточено и авторам лень затачивать, а самому писать связку лень вдвойне.
-------------------------
Имхо, лоадер должен представлять из себя EXE, который выплёвывает из себя DLL, при чём шифрует её, используя в качестве ключа аппаратные характеристики системы, на которой запускается EXE, после чего EXE умирает. Профит в том, что в итоге на компе лоха работает DLL, и она будет уникальная для каждого отдельного лоха, и не запустится на компах АВшников, т.к. в шифре аппаратная привязка.
 
Left4Dead
+1, железно и аргументировано.
Дополню немного - эти стереотипы как раз и есть непреодолимый барьер и даже непонятно что нужно делать, может брать секиру и отрубать им головы растущие у них из жопы.
Left4Dead пишет:
лоадер должен представлять из себя EXE
Назовем этот EXE - "Хитрым" дроппером
Предлагаю пока остановиться на идее (пока не появицца что-то лучше), которую предложил Left4Dead, да и видел несколько тем (попадались на глаза), где аверы побаиваются таких зловредов с привязкой, а я даже думаю, что привязку к железу нужно сделать будет обязательно + если это завернуть в адскую BM...
Кстати Left4Dead, ты как-то мимо обошел тему с BM, что думаешь вообще по этому поводу?
На счет DLL, есть некоторые проблемы:
Ее видно (если добавлять в "автозагрузку" (здесь я имею многочисленные варианты)) в autoruns, аверы все равно будут видеть запись в реестре, если какой-то юзер спалит подозрительные действия лоадера, да еще плюс к этому могут добавиться дополнительно проблемы, так как пробить юзера могут несколько связок и даже если он не запалит наш лоадер, то в логах autoruns буден виден весь зоопарк...
Ну, вот для примера тема:
http://forum.xakep.ru/m_2452231/printable.htm - не запускаются программы на Windows 7
http://forum.xakep.ru/m_2452231/mpage_1/tm.htm полная версия.
Дроппер запалить не могут, а саму DLL видят через autoruns (есть правда вариант, но... сейчас надо обсуждать ситуации как правильно сказал Left4Dead, опираясь на реальность на то, что происходит на "рынке" (если его вообще можно назвать рынком) - ИМХО)
 
1. дроппер будет иметь статичный набор данных. Следовательно криптовать придется его самого. Но это уже не наша проблема, за одним исключением. Data-блок должен быть легко криптуем - это раз.
После дропа должна передоваться комманда на старт - это да. И с этим часто при крипте возникает огромное количество бед. Поверьте, я натрахался с этим когда-то выше крыши. У волка была такая схема т она принесла немало головняка мне. Там лоадер подгружал dll-руткит. И часто после крипта никакой dll не было и в помине. Криптеры убивали этот функционал в хлам.
2. для прогруза со связки dll нужно переписывать шелл-код на связке. А это гемор ибо сплоиты юзаются как самостоятельные единицы.
 
Ar3s
"Криптор" свой должен быть, доверять всяким говносервисам это себе дороже. Вообще имхо разработка универсального "криптора" это даже более интересно, чем бота-лоадера.
Хороший "криптор" по сути это 3 столпа:

1) запускатель - передача управления малваре в памяти (без создания нового процесса, как в говнокрипторах, которую зарубит любая проактивка)

2) антиэмуляция. Тут важна автоматизация нахождения пригодных функций для антиэмуля, т.к. завтра функцию начинают эмулить, и нужна будет новая.

3) обфускация. Фишка должна быть в том, чтобы мусор, которым разбавляется код запускателя, был полезным, например генерировал какие-то константы (в противном случае аверы научатся выделять мусорный подграф в структуре кода).

На эту тему у меня есть некоторые наработки, но готового продукта я пока не создал.
 
У лоадера все равно должен быть свой криптор.
Взять, к примеру, тот же лимбо2, там автор криптовал лимбо сам - за 40 баксов; криптовал он EXE (дроппера), а DLL паковал аспаком, упиксом (короче разными пакерами) и те, кто юзал говорили, что в течение недели держал крипт (на трафе 2-3k)
Или если взять, к примеру, зевса.. у него тоже был свой криптор, даже это можно заметить по исходникам (правда, самих сорцов там нет)
Я это к тому, что для EXE можно любой заюзать криптор (даже паблик, если трафф халявный), а вот для DLL - это да, нужно мутить будет свой криптор - ИМХО
Короче у любого нормального бота, лоадера и т.д. должен быть свой персональный криптор...

P. S.
Надо уже, наверное, че-то накодить, а то как-то... или еще рано?
Left4Dead пишет:
на которой запускается EXE, после чего EXE умирает.
Предлагаю начать с дроппера, вернее с кода самоудаления; тут на форуме была уже тема (надо будет ее поискать)
Короче могу создать отдельную тему (через пару дней) с базовой инфой, а там уже в ней и решим конкретно какой код будем юзать...
 
что то типа тз

из того что я понял, получается вам надо сделать 3 вещи, начнем с простого
1 базонезависимый пе лоадер, такое в принципе если покопаться есть у каждого
2 криптор по типу который описывал Left4Dead, а именно берем образ того что криптовать, присобачиваем к нему пе лоадер и этот буфер размазывается на 100500 всяких операций, которые в итоге соберут его в кучу и передадут управление, сделать это проще всего скриптом, создав сорец а потом собрав его.
3 ну и лоадер, тут уже конечно надо бы думать что да как лучше, но раз у нас есть уже есть ( будет вернее, пункт 2 ) скрипт который размазывает стаб на черт пойми что, то лучше всего имхо сделать дропер такого плана:

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

по поводу авто старта екзе или длл, тут смотря откуда идет старт, если всякие лса и апплиб, то длл придется делать х64. ну а так какая разница как стартовать все равно все это в умелы руках спалится, достаточно взять Autoruns и посмотреть, а у пользователя не подкованного хоть в рег ран его ничего не смутит, к тому же лоадер все равно будет сразу же убегать в другой процесс.

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

лучше не парится и юзать устоявшиеся вещи типа https, xml, bzip, rsa, aes и не выдумывать свои костыли, как то так

ах ну да тут еще же самый главный дропер который собирает данные о машине и получает инструкции, тут можно сделать в принципе, что угодно легкое без выкрутасов, на временных доменах, все равно на это всем плевать, главное сохранить ботнет.
 
2 криптор по типу который описывал Left4Dead, а именно берем образ того что криптовать, присобачиваем к нему пе лоадер и этот буфер размазывается на 100500 всяких операций, которые в итоге соберут его в кучу и передадут управление, сделать это проще всего скриптом, создав сорец а потом собрав его.

здесь проблема в размере. Короткий шеллкод размазался таким макаром на ХХХ килобайт кода. Соответственно код, реализующий полноценный функционал, будет размазан в мегабайты, что наверняка не есть гуд.

Можно конечно сократить размазню, но тогда нужно будет хранить большой статический буфер данных. Но в таком случае получится, что легче использовать тупо XOR, а не извращаться с математикой.
 
да, можно к пе лоадеру присобачить еще анпакер дабы немного скинуть веса, плюс свой образ ( а не пе экзе ) срезать лишние заголовки, заменить апи на хеши и т.д, разделить потом все это счастье на блоки и обрабатывать их отдельно полиморфными дескрипторами собирая все в кучу, вес меньше результат тот же. не так круто конечно, но увы круто не значит функционально, мой первый js обфускатор например не хило накидывал мусора и всячески извращал код, все это сказывалось на скорости работы и как следствие на скорости срабатывания. скорость срабатывания для лоадера наоборот не важна, лучше стучаться с задержкой, но вот вес дело критичное
 
вес <40кб
обращение к админке по схеме: стучим на microsoft.com, wsus.microsoft.com, update.microsoft.com, на реальную админку. Что бы АВ при срабатывании (если вдруг) показали пользователю обращение к красивому сайту. Лучше конечно adobe.com/flash/blablabla_update.php

Ну это на мой взгляд. Да и у карабаса была эта схема. Удачно.
 
el- пишет:
1 базонезависимый пе лоадер, такое в принципе если покопаться есть у каждого
+1, я тоже так думаю.. хоть какой-то, но есть...
el- пишет:
начнут думать а это не надо, пусть лучше ловят по мд5, и путям которые мы им даем.
Красиво сказано, но еще нужно учесть их лень и нищебродскую зп. (сомневаюсь, что кто-то из аверов за идею будет работать, скорое - нам бы день продержацца, да до утра дожить...)

Я как бы склонен, чтобы лоадер развивался в направлении.., лоадер - который вообще не имеет "админки" (СС) - в инете столько халявных ресурсов, грех их не заюзать...
Есть уже наработки, но пока еще думаю рано об этом, надо обсудить все (или большую часть) варианты и выбрать лучшее...
Да и вообще думаю el- прав, нужно более четко структурировать ТЗ
Я заметил, что тут движется другая проблема, у каждого из нас (уж извиняйте, что сразу на личности) есть характерная черта в том, что мы стараемся каждый двигать свою "тему", в которой имеем более сильные стороны знаний, вполне возможно, что будет напряжно из-за, а "нужно ли оно мне" (лени) что-то новое познавать...
Мне кажется, все-таки, если возникают вопросы по ходу обсуждения лучше их сразу задавать, а не игнорировать, иначе все может через некоторое время зайти в тупик - ИМХО.
я думаю, что дроппер это гуд, он будет как часть нерезидентного лоадера, а DLL как резидентная (или наоборот я в этой терминологии не селен)
мое маленькое ТЗ.
после пробива связкой компа (но я больше предпочитаю трафф с приватных уязвимостей, так больше контроля над "ботами" и подальше от этого говнорынка), "прогруженный" лоадер (вернее его часть - дроппер) собирает инфу о железе и на основе этой инфы выплевывает лоадер (DLL), который под видом СИ (ну, к примеру, lang.dll (Language Support DLL)) инсталлицца на комп жертвы, а сам дроппер умерает; связь со "связкой" потеряна, источник "заражения" не известен.. лоадер на другой машине не запустишь... (думаю, все понимают, что это утрированно, естественно нужно это детально обмозговывать)
теперь лоадер качает нужный софт с "расшаренного" ресурса, но при этом у него нет СС.
Дроппер и длл покриптованы (0/42), а весь функционал дроппера и длл завернут в адскую VM, которую из аверов никто не захочет реверсить...
Вот примерно в моем представлении лоадер таким должен быть (естественно все написано без мелких деталей)
Надо решить, что будет просто EXE или просто DLL, или EXE+DLL
Для просто DLL - очень много минусов получилось исходя из реальности...
 
Дроппер - ессно exe
Лоадер - по барабану какой. Можно и dll
Насчет децентрализации - это p2p попахивает. В крайнем случае использование того же вконтакте для выдачи новых заданий через (допустим) фото. В котором в отдельном блоке шифруется задание. Мы кстати проверяли. Вконтакт не полностью херит картинки и мы свой текст в них вставляли.
эм. свет клином на вконтакте не сошелся и это просто метафора. Использовать можно что угодно.
 
P2P это тупиковая ветвь развития. Все стремятся к централизации и не случайно. Мы много рассуждали над этим и пришлы к выводу, что использовать надо поисковики. Кода минимум: Нагуглить хеш от текущей даты, распарсить полученную фразу вида хеш_дынные_хеш. Расшифровать данные и получить следующий адрес управления. Мало того, что мешает прмо в Данных харнить не CC а саму команду. Для троя полноценного может быть накладно, много текста, а для лоадера - самое то.


Если есть дропер, а при привязке к железу без него крайне сложно сморфить самого себя, то паралельно выплывает свой криптор...
 
каково же будет удивление когда из-за смены выдачи, гугла, контакта, твитера или что вы там собрались юзать, будет профукан весь ботнет. зачем все это выдумывать чем плохи свои сервера на которые все это чудо будет стучаться
 
Невозможно сменитьв 1 момент формат выдачи гугла, бинга, яхху, рамблера.... а запрос у них у всех одного вида, код не распухнет от этого. Свои серваки плохи тем, что они сдохнут от абуз. Вот у меня щас подконтрольная мне админка одной партнерки, вижу что после включения например нового JAVA сплоента у них номены дохнут раз в 15 минут и за сутки уже 1 раз сменили IP связки. Такая же кухня может быть с лоадером. Чего стоит отправить 1 GET и в ответе по всей старнице найти свой хеш. Небуду я даже парсить выдачу там правильно по тегам, тупо strpos(all_page,my_hash);
 
в гугл вся команда не попадет, типа хеш_экзе_хеш, а если скидывать линки на управляющий сервер то это просто костыль над сервером, к тому же нету быстрого реагирования гугл иногда тупит и в выдачу не сразу попадает нужное. лучше тогда регать какие то блоги с именем в виде хеша, но это все костыли на время пока что то не случится и надо будит искать дальше и что то думать.

лучше сразу оценить масштаб и принять соответствующие меры, продумав выдачу дропера, выдачу полезной нагрузки ( привязанное к железу ядро бота ), протокол и т.д. дабы как можно сильнее усложнить получение актуальной информации на основание пойманного билда.
 
Ar3s пишет:
Мы кстати проверяли. Вконтакт не полностью херит картинки и мы свой текст в них вставляли.
А кто еще?, если не секрет...

Ar3s пишет:
El- накидал предварительное ТЗ. Попробую его вечером откорректировать.
?

Итак, нарисовалась в ходе обсуждения следующая картина:
Есть изначально (неизвестно, сколько их еще может появиться) несколько вариантов:
1. делаем с CC как обычно, но с акцентом на то, что аверам будет очень трудно отреверсить лоадер, поймать дроппер и т.д.
2. p2p ну или что-то там свое такое "загадочное"...
3. без CC (децентрализация - слово понравилось :) )
4. парсим выдачу и т.д.
ЗЫ: Сколько людей - столько и мнений :)
Также стали видны некоторые минусы из этих вариантов, но они незначительные пока...
Каждый тянет одеяло в свою сторону и "непонятно" что выбрать.. и в каком направлении двигаться...
 
2 el-: А в гугл она и не должна попасть, что мне мешает найти сайт на котором она размешена, гугл мне просто найдет на него урл
Я не настаиваю на таком подходе. Если другие варианты сделать "неумирайку" - прошу высказываться. Купить нормальный сервак скажете вы?! Ну он будет стоить скажем 400$ в месяц, и это вместо того, чтобы 1 раз написать нормальную неумирайку?! ("да впизду") как говорит обычно L4D )))

Имхо вкомпиливаем 2-3 домена как обычно, обновляем их с ЦЦ как обычно, но елси сдохло все разом, включится механизм какой то дополнительный, типа того что предложил я или любой другой. Но неумирающий ЦЦ можно и нужно делать на этапе проэктирования а не вешать это на плечи покупателя, мол "мне по@#й купи сервер на луне..."
 
паук пишет:
Ну пофилософствовали и хватит. Лучше скажите мне вот такую вещь: Есть несколько вариантов упаковки файла для уменьшения размера и его последующего запуска.
1) Выплюнунуть на диск и запустить
2) Запустить в памяти через CreateProcess с флагом CREATE_SUSPEND
3) Свой маленький загрузчик который в памяти распакует файл, перестроит в нем всю адресацию, починит таблицу импорта, разместит секции по нужным адресам и передаст на него управления аля UPX
4) свой вариант

Правильно было бы конечно попробовать самому, но как известно за спрос денег не берут: Как на 2й вариант отреагируют антивирусные программы, если упаковываемый файл, как это щас модно гооврить "ПАЛИТСЯ".
Вопросы:
1) Порождение нового процесса повлечет за собой повторное пробуждение антивируса и пересканирование вновь созданного процесса, или успешно отвалившийся эмулятор на этапе запуска файла больше не притронется к файлу?!
2) Лишен ли 3й вариант недостатков 2го метода, или история та-же ?!

Столкнулся с необходимостью анализа крипторов для одной работы и пришел к выводу, что большинство современных "говнокриптов" действуют именно по 2му варианту.
Чет я вообще там, в паблик топе, дохрена постов паука не видел, епт.. куда смотрел даже не пойму...
 
Что касается Гугла, Вконтакте и других: да в пизду! :D
На случай убийства управляющих доменов, предлагаю такой алгоритм спасения ботнета:
генерировать каждый день 1000 имён доменов (или 10000 например, надо подсчитать экономическую часть :))
Был крупный ботнет, который генерировал по 1 домену в день, аверы тупо купили все домены на год вперёд и ботнет умер. Выкупать 1000-10000 доменов в день у них просто не хватит денег. + тут обязательно нужно применять ЭЦП.
 


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