You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
396 lines
27 KiB
396 lines
27 KiB
BACKDOOR
|
|
РУКОВОДСТВО ОПЕРАТОРА
|
|
|
|
Backdoor - это бот с акцентом на скрытность и легковесность:
|
|
- легковесность: ничего лишнего, только самый необходимый минимум функциональности
|
|
- двухступенчатая загрузка: загрузчик (1-я ступень), функционал в основном боте (2-я ступень)
|
|
- возможность автоматического и ручного закрепления в системе
|
|
- на жестком диске сохраняется только загрузчик, на него скидываются все детекты АВ
|
|
- резервирование связи с C&C-серверами:
|
|
- жестко вшитый список прокладок
|
|
- резервные домены Emercoin
|
|
- генерация доменов Emercoin по дате
|
|
- валидация сервера по криптоключу (защита от перехвата управления путем захвата домена)
|
|
- возможность автоматической подгрузки нужной разрядности (x86->x64)
|
|
- поштучное обновление только отдельных ботов
|
|
- скрытность: минимизируем запись на диск при любой операции
|
|
- обход антивирусов путем снятия хуков
|
|
- регулярная чистка
|
|
|
|
Функционал бота минимален, но достаточен для запуска сторонних инструментов.
|
|
Можно:
|
|
- получить инфу о системе
|
|
- запустить .exe
|
|
- запустить .dll через rundll32
|
|
- запустить .bat-файлы и выполнять отдельные команды через cmd.exe
|
|
- запустить .ps1-файлы и выполнять отдельные команды PowerShell
|
|
- выполнить shell-код
|
|
- скачать произвольный файл (ограничение на размер 10М)
|
|
- убить процесс
|
|
- удалиться с диска
|
|
|
|
В бот НЕ ВСТРОЕНЫ никакие стилеры паролей, инжекторы, граберы, сканеры, горизонтальное распространение, сплойты и прочие инструменты.
|
|
Используете либо сторонних производителей, либо при необходимости предоставляем свои, исполненные как ОТДЕЛЬНЫЙ СОФТ.
|
|
Ибо акцент на легковесность.
|
|
|
|
Управление осуществляется с помощью панели оператора.
|
|
|
|
РЕКОМЕНДУЕМАЯ ТАКТИКА
|
|
|
|
Бэкдор предназначен для использования как command shell - командная оболочка.
|
|
Это не только запускалка для вашей сессии Cobalt Strike (хотя в основном бэкдором пользуются именно так).
|
|
Вы можете делать главное из того, что позволяют фреймворки пост-эксплуатации - выполнять ЛЮБЫЕ команды.
|
|
Как уже имеющиеся на целевой машине (тактика living off the land - "жизнь с подножного корма"),
|
|
так и ваши приватные инструменты, загружаемые через админку на цель.
|
|
В случаях, когда сессию фреймворка поднять не удается, все равно остается возможность отработать цель, используя свое мастерство.
|
|
|
|
Любые сторонние инструменты должны быть оформлены как .exe или .dll с совместимой точкой входа.
|
|
Авторы готовы всячески содействовать тестированию инструментов на совместимость с бэкдором, но инициатива в этом должна происходить от пен-тестера.
|
|
|
|
По умолчанию, после первого запуска бот выполняет минимум активности - не пытается получить информацию о системе, не пытается закрепиться (если собран как нерезидентный).
|
|
Все эти действия опасны. Для уменьшения вероятности детекта между стартом бота и этими действиями должно пройти достаточно времени.
|
|
Тем не менее можно заказать резидентный загрузчик (с автоматическим закреплением),
|
|
либо можно воспользоваться функцией автозапуска команд для автоматизации этих действий (см.соотв.раздел).
|
|
К примеру, можно прописать в автозапуск паузу после старта в 1 час, выполнение команды SysInfo, паузу, выполнение команды Anchor (закрепление).
|
|
Уникальность пауз/последовательности при каждом прогрузе усложнит поведенческий анализ для АВ/Yara.
|
|
|
|
Для каждого нового прогруза следует создавать новый комплект бинарников, меняя при этом профиль трафика и ключи шифрования (см.соотв.раздел),
|
|
тем самым обеспечивая уникальность формата сетевых запросов и ответов к командному серверу.
|
|
|
|
Нужно уделять внимание клоакингу (отсеву исследовательских запросов) - см.соотв.раздел.
|
|
Попавшие в раздел Honeypots боты получают ответы 500 на любые запросы.
|
|
|
|
Бот старается минимизировать дисковую активность насколько можно, реализуя stateless-поведение.
|
|
То есть, не храня где-либо на диске никакие конфиги (адреса C&C и группа прошиты в него самого),
|
|
не храня свой идентификатор (он генерируется всегда одинаковым для одного и того же компьютера).
|
|
Вследствие этого, время его жизни ограничено временем жизни прокладок (обратных прокси, защищающих C&C-сервера).
|
|
Как правило это недели, иногда месяцы, в наихудшем случае - сутки.
|
|
На случай отмирания прокладок есть процедура холодного старта, при которой бот использует алгоритм DGA (генерацию доменных имен) для поиска адресов C&C.
|
|
В случае необходимости поднять отмерших из-за прокладок ботов об этом следует уведомить администраторов системы, для регистрации резервных доменов.
|
|
|
|
Предусмотрена функция обновления бота, для:
|
|
- замены списка прокладок в боте;
|
|
- чистки от детектов АВ.
|
|
|
|
Для обновления нужно:
|
|
- заказать у кодера комплект бинарников с измененной версией
|
|
- дать команду обновления "Force update now" на нужных ботах, указав при этом новый бинарник лоадера
|
|
|
|
Выбирайте правильно параметр timeout при выполнении команд/запуске файлов.
|
|
Если вы подымаете сессию другого фреймворка, сгружаете бота, одним словом - запускаете процесс, который будет работать долго (вечно), выбирайте значение "Background run".
|
|
При выборе любого другого таймаута, ваша команда должна успеть завершиться до его истечения.
|
|
В противном случае команда будет завершена ботом принудительно - для вас же это будет выглядеть "я запускаю сессию, она работает 5 минут и рвется",
|
|
или "я сгрузил другого бота, он отработал 5 минут и его прибили".
|
|
|
|
В случае если ваша нагрузка не запускается, но бот выживает, делайте анализ причин.
|
|
Проверяйте реакцию АВ, читайте логи.
|
|
Лог Windows Defender можно прочесть так (powershell):
|
|
|
|
Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" |
|
|
Where-Object {
|
|
$_.TimeCreated -ge '2021-01-01 00:00:00' -and
|
|
$_.Id -in 1006,1015,1116,1117 }
|
|
|
|
|
|
|
|
****************
|
|
ПАНЕЛЬ ОПЕРАТОРА
|
|
****************
|
|
|
|
Вход через тор-домен.
|
|
В меню присутствует 4 реестра ботов:
|
|
- Bots - важные боты (истинные)
|
|
- Unimportant - истинные боты, не имеющие особой ценности (Workgroups и т.п.)
|
|
- Honeypots - ханипоты, облачные АВ, машины исследователей
|
|
- Test Bots - боты, на которых происходит тестирование
|
|
Справа есть иконка |> - это переход к информации к карточке бота.
|
|
В реестрах ботов имеется механизм группового выполнения команд и переноса ботов между реестрами.
|
|
|
|
На странице бота есть секции:
|
|
- билдер команд
|
|
- инфа о боте
|
|
- история команд
|
|
|
|
|
|
ВЫПОЛНЕНИЕ КОМАНД
|
|
|
|
Бот вертится в цикле ожидания команды.
|
|
Между запросами на сервер "дай команду" есть интервал.
|
|
По умолчанию используется случайный интервал от 30 секунд до 2 минут - когда команд от оператора нету - это спящий режим.
|
|
После ввода команды оператором, бот выходит из спящего режима.
|
|
Максимальный интервал запросов при этом равен значению таймаута в билдере команд для выбранной команды.
|
|
Следует понимать, результат выполнения команды может прийти раньше, чем истечет таймаут команды - и тогда фактическое время реакции бота будет меньше.
|
|
|
|
Это сделано для того, чтобы неактивные боты поменьше светились в сетевом трафике. Цена за это - иногда надо подождать.
|
|
|
|
Еще раз, по-простому:
|
|
- пока команд нету, то мы вертимся в 5м-минутном цикле запроса команды;
|
|
- когда команды есть, то скорость отстука зависит от таймаута в прошлой команде.
|
|
|
|
Большинство команд блокирующие: то есть, нельзя выполнить следующую команду, не дождавшись ответа от предыдущей.
|
|
На случай если вдруг бот подвис, а ответа так и не было, есть возможность сброса команды - Reset (см.ниже).
|
|
|
|
Далее подробнее о настройках команд.
|
|
|
|
|
|
NO OPERATION
|
|
|
|
Это способ изменить интервал запроса команд, на указанную величину времени. При этом бот выбирает случайный интервал до очередного отсука в диапазоне от одинарного до двойного таймаута, указанного в команде.
|
|
Также это способ пингануть бота.
|
|
Больше ничего не делает.
|
|
|
|
SYSTEM INFO
|
|
|
|
Получает информацию о системе и отправляет на сервер.
|
|
По умолчанию, бот этого не делает при попадании в систему, дабы не светиться
|
|
(запросы такой инфы могут быть триггерами по поведению).
|
|
Состав и формат информации о системе задан жестко на уровне бота.
|
|
|
|
SYSINFO.BAT
|
|
|
|
Также получает информацию о системе. В отличии от команды "System Info", данные получаются с помощью внешнего bat-скрипта. Состав и формат такой информации определяется с учетом предпочтений оператора.
|
|
Текст скрипта приведен в приложении.
|
|
|
|
RUN .EXE
|
|
|
|
Запуск .exe-файла на выполнение.
|
|
Загружаем файл через админку (или выбираем из истории ранее загруженый).
|
|
|
|
Далее нюансы:
|
|
|
|
* для успеха запуска, файл должен быть статически слинкован (ну то есть не должен тащить за собой ворох .dll)
|
|
для большинства хакерских инструментов это так и есть
|
|
|
|
* выбираем тип запуска:
|
|
- Process Hollowing - безфайловый запуск №1 (предпочтительный вариант, выбираем когда не знаем что делаем)
|
|
- Process Doppelganging - безфайловый запуск №2 (в последних версиях Windows 10 не работает)
|
|
- CreateProcess - запуск со сбросом запускаемого файла на диск. Использовать, когда больше никак, или это безопасно (нет АВ итд)
|
|
Файл естественно подчищается после выполнения
|
|
|
|
Для бесфайлового запуска, ЗАПУСКАЕМЫЙ ФАЙЛ ДОЛЖЕН БЫТЬ ТОЙ ЖЕ РАЗРЯДНОСТИ, что и сам бот (или как разрядность целевой ОС для режима, когда используется автоматическая прогрузка нужной разрядности).
|
|
В будущих версиях это ограничение будет снято.
|
|
|
|
* timeout
|
|
- background run - запуск команды в фоне и немедленный переход к ожиданию следующей команды.
|
|
Так запускаем фоновые сервисы, демоны итд итп.
|
|
Вывод команды при этом не регистрируется, ее судьбой бот не интересуется.
|
|
- остальные значения таймаута - если за это время команда не завершится, фиксируем ошибку и переходим к запросу следующей команды.
|
|
До завершения команды, другие команды не принимаем (кроме Reset).
|
|
Здесь и далее, для всех команд интерактивного запуска, вывод команды регистрируется (stdout и stderr).
|
|
Если команда завершена по таймауту, то
|
|
- процесс завершится принудительно и помечен как terminated
|
|
- вывод процесса (stdout/stderr) будет передан в админку по принципу "сколько успели".
|
|
|
|
Все файлы отслеживаемых процессов удаляются после завершения процесса (штатно или по таймауту).
|
|
Для неотслеживаемых процессов (background run) файлы не трогаются.
|
|
|
|
* Host Process
|
|
Для бесфайлового запуска (Process Hollowing/Process Doppelganging) нужно выбрать процесс-зомби, под видом которого мы будем работать.
|
|
Выбирать процесс надо так, чтобы для консольных приложений хост-процесс также был консольным (cmd.exe),
|
|
для оконных же (собранных с ключом /SUBSYSTEM Windows) это безразлично (такого ограничения нет).
|
|
|
|
Для запуска CreateProcess это поле неактуально.
|
|
|
|
* Select/Upload execution file
|
|
Тут все понятно. Загруженные файлы сохраняются в истории.
|
|
|
|
* Script params/PID/File name
|
|
Командная строка.
|
|
|
|
RUN .DLL
|
|
|
|
Запуск функции из выбранной .dll с помощью утилиты rundll32.exe.
|
|
Все параметры как у Run .exe; в поле "Script params/PID/File name" вводим имя и аргументы выполняемой из .dll функции.
|
|
Ну например, если ввести
|
|
|
|
Start 1 2 3 4
|
|
|
|
то выполнится имеющаяся в .dll функция Start() и ей будут переданы параметры 1, 2, 3, 4
|
|
|
|
Функция должна быть оформлена как
|
|
|
|
void CALLBACK NameFuction(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
|
|
|
|
Из википедии:
|
|
|
|
Типичные источники ошибок
|
|
Предполагается, что функция, вызываемая Rundll32.exe, имеет следующую сигнатуру[6]:
|
|
|
|
void CALLBACK NameFuction(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
|
|
Этим, однако, нередко пренебрегают[7] (подобные примеры на этой странице).
|
|
Это часто приводит к повреждению стека[8] и к непредсказуемому поведению, например, зацикливанию.
|
|
|
|
|
|
RUN .BAT
|
|
|
|
Все параметры как описано раньше, кроме;
|
|
* Run Type
|
|
- Run From Memory - запуск бесфайловый (из памяти)
|
|
- Dump And Run - запуск со сбросом скрипта на диск и удалением после выполнения
|
|
* Script params/PID/File name - можно залить скрипт в виде файла
|
|
или
|
|
* Script - можно набить скрипт руками (поле ресайзится, захват мышью справа внизу)
|
|
|
|
При запуске из памяти, каждая строка скрипта обязана заканчиваться \r\n.
|
|
При запуске с диска, это некритично.
|
|
|
|
RUN POWERSHELL
|
|
|
|
Все как в Run .bat
|
|
Скрипт запускается так:
|
|
powershell -executionpolicy bypass -file tmpscript.ps1 %cmdline%
|
|
|
|
|
|
RESET
|
|
|
|
Предназначено для сброса зависшей команды.
|
|
Говорим боту об отмене предыдущей команды, если она была.
|
|
|
|
|
|
FORCE UPDATE NOW
|
|
|
|
Обновление загрузчика.
|
|
В команде выбираем новый файл - бот скачивает и дропает его на диск вместо старого файла загрузчика, затем запускает.
|
|
|
|
RUN SHELL CODE
|
|
|
|
Выполнение заданного shell-кода в рамках текущего процесса.
|
|
ЗАПУСКАТЬ С ПРЕДЕЛЬНОЙ ОСТОРОЖНОСТЬЮ!
|
|
|
|
Shell-код задается в 16-ричном представлении, в любом из возможных форматов, т.е.:
|
|
|
|
aa bb cc dd ee ff ..
|
|
aa bbcc dd eeff ..
|
|
aabbccddeeff ..
|
|
\xAA, \xBB, \xCC, \xDD, ..
|
|
|
|
Регистр символов не учитывается.
|
|
|
|
Shell-код НИКАК НЕ ПРОВЕРЯЕТСЯ ПЕРЕД ЗАПУСКОМ!
|
|
Вероятность обрушить бота - высокая!
|
|
Это крайнее средство. Вы должны быть уверены в том, что вы делаете.
|
|
Рекомендуется сначала протестировать на тестовом боте.
|
|
|
|
|
|
TERMINATE PROCESS
|
|
|
|
Убить произвольный процесс (если хватит прав).
|
|
В Script params/PID/File name вводим PID процесса.
|
|
|
|
|
|
ANCHOR
|
|
|
|
Дать команду боту "закрепиться в системе". Применяется для сборок с ручным режимом закрепления.
|
|
При необходимости можно использовать ручной режим для закрепления вместо автоматического, при этом закреплять в системе только нужных ботов.
|
|
|
|
|
|
DOWNLOAD FILE
|
|
|
|
Запрос на скачивание произвольного файла с диска.
|
|
В поле Script params/PID/File name вводим ПОЛНЫЙ ПУТЬ к файлу.
|
|
Ограничение по размеру - 10М (пока что).
|
|
Нужно для скрытности в основном, а также потому, что это требует существенных ресурсов жесткого диска на сервере.
|
|
|
|
|
|
SUICIDE
|
|
|
|
Удаляет загрузчик и все следы деятельности с диска.
|
|
Сам бот на диск не сохраняется ни в каком виде.
|
|
|
|
|
|
DASHBOARD
|
|
|
|
На dashboard отображается статистика по ботам, с разбивкой по группам и разделам (реестрам) ботов.
|
|
|
|
|
|
ГРУППЫ
|
|
|
|
Группы нужны для разделения ботнетов разных клиентов, а также для логической организации ботов.
|
|
Группа прошивается в боте и не может быть изменена ни при каких условиях.
|
|
Группа фиксируется в БД при первом отстуке бота и далее привязывается к идентификатору бота.
|
|
|
|
ПРОФИЛИ ТРАФИКА БОТА
|
|
|
|
Для усложнения детектирования бота по его трафику есть возможность изменять вид HTTP-запросов для связи с C&C:
|
|
- добавлять ложные Cookie для внесения уникальности в запросы
|
|
- менять суффиксы URI для обмена с C&C
|
|
- задавать ключи шифрования RSA, которыми шифруется обмен.
|
|
Профили меняются в разрезе группы.
|
|
|
|
АВТОЗАГРУЗКА КОМАНД
|
|
|
|
Можно автоматизировать обработку новых ботов - сформировать последовательность команд, которая будет добавляться в очередь команд впервые отстучавшим ботам.
|
|
Для этого реализован функционал "пакеты автозагрузки". Группы можно разбить по способу обработки поступающих ботов, для каждой задать разную последовательность команд.
|
|
|
|
КЛОАКИНГ
|
|
|
|
Имеется возможность автоматической фильтрации ботов по странам и/или диапазонам адресов в разрезе групп.
|
|
На основе правил фильтрации определяем нужные боты, остальные будут автоматически попадать в раздел Honeypots.
|
|
|
|
|
|
ГОСТЕВОЙ ДОСТУП
|
|
|
|
Можно разграничить доступ для пен-тестеров: они смогут видеть не всех ботов группы, а только тех, с которыми им нужно работать.
|
|
Для этого имеется возможность создания гостевых учетных записей.
|
|
Данные учетные записи имеют доступ к определенным ботам, которые назначаются вручную оператором.
|
|
|
|
|
|
МАССОВОЕ ВЫПОЛНЕНИЕ КОМАНД
|
|
|
|
Имеется механизм группового выполнения действий для нескольких ботов одновременно:
|
|
Нескольким выделенным в реестре ботам можно дать одинаковую команду или перенести их в другой реестр.
|
|
Тем самым сокращается количество требуемых ручных действий при выполнении однотипных команд.
|
|
|
|
|
|
ОТЧЕТЫ
|
|
|
|
VALUE REPORT
|
|
|
|
Сводка по полезным ботам, используется для оценки деятельности по выбранным группам и датам.
|
|
Есть выгрузка в текстовый формат.
|
|
|
|
|
|
ПРИЛОЖЕНИЕ
|
|
РЕКОМЕНДУЕМЫЙ СКРИПТ ДЛЯ КОМАНДЫ SYSINFO.BAT
|
|
|
|
@echo off
|
|
|
|
echo General Info:
|
|
systeminfo
|
|
|
|
echo.
|
|
echo My Username:
|
|
whoami
|
|
|
|
echo.
|
|
echo Network Neighbourghoud:
|
|
net view /all
|
|
|
|
echo.
|
|
echo Domain Neighbourghoud:
|
|
net view /all /domain
|
|
|
|
echo.
|
|
echo Domain Trust:
|
|
nltest /domain_trusts /all_trusts
|
|
|
|
echo.
|
|
echo Installed Programs:
|
|
reg query hklm\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /v "DisplayName" /s
|
|
|
|
echo.
|
|
echo Installed Programs (wow64):
|
|
reg query hklm\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /v "DisplayName" /s
|
|
|
|
echo.
|
|
echo Installed Programs (current user):
|
|
reg query hkcu\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /v "DisplayName" /s
|
|
|
|
echo.
|
|
echo Installed Programs (current user, wow64):
|
|
reg query hkcu\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /v "DisplayName" /s
|
|
|
|
echo.
|
|
echo Process List:
|
|
tasklist
|
|
|