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