Beacons y Sesiones
Introducción
Esta entrada enseña a cómo utilizar los llamados implantes para controlar remotamente una máquina destino desde un servidor Sliver C2. Para familiarizarnos con los conceptos básicos de Sliver, se creará una máquina de destino (Windows) para elaborar diversos ataques. A continuación, veremos cómo entregar y utilizar un agente C2, que Sliver denomina "implante". Los implantes pueden operar en dos modos diferentes.
Session mode
Si se utilizan en modo sesión, los implantes crean una conexión de red permanente entre el objetivo y el servidor C2. Este modo te permite escribir comandos y obtener respuesta inmediata, casi como si estuvieras en una sesión SSH o PowerShell Remoting. Esto resulta muy cómodo para trabajar, pero, por supuesto, este tipo de conexiones de larga duración pueden hacer que algún día se levanten el equipo azul sospeche.
Beacon mode
Si se utilizan en modo beacon, los implantes crean conexiones de red temporales con el objetivo a intervalos regulares. Entre conexiones, los implantes entran en reposo. Si interactúas con una beacon, tus comandos no se ejecutarán inmediatamente. En su lugar, se pondrán en cola y se ejecutarán la próxima vez que el beacon se conecte. Esto es un poco menos conveniente, ya que tendrás que esperar a la respuesta, pero también puede parecer un poco menos sospechoso ante detecciones (dependiendo del entorno, por supuesto).
Sliver admite diferentes tipos de conexiones de red. Todas pueden utilizarse para beacon y session. Por ahora, sólo utilizaremos conexiones TLS mutuas (mTLS). En siguientes entradas exploraremos otros protocolos C2.
El gran plan para este post es simple: usar Sliver para generar implantes en modo beacon y en modo session, entregarlos al objetivo en forma de descarga web, y luego ejecutar los implantes e interactuar con ellos desde el servidor C2.
Para ello, son necesarios algunos preparativos. Tendrás que montar un laboratorio sencillo con un servidor C2 y una máquina objetivo.
Laboratorio
Esta primera sección trata sobre la preparación de la configuración del laboratorio. Asumo que has pasado antes por la parte de Instalación y tienes una máquina virtual con Sliver instalado en ella. Esta máquina se llamará el servidor C2.
Lo que falta es el objetivo que queremos controlar con un agente C2. Dado que Windows es el sistema operativo (SO) más popular, vamos a configurar una VM Windows para ello.
Mi configuración personal para este post se ve como se muestra a continuación. He añadido mis IPs locales para que sea más fácil seguir los fragmentos de código. También se incluyen los puertos para los dos servicios de red. El servidor C2 servirá archivos con python http.server
en el puerto 8000 y aceptará conexiones C2 en el puerto 8888.
Preparación del objetivo
Vaya a Microsoft Windows Evaluation Center y descargue una copia de windows, en mi caso usaré una copia de Windows 10 Enterprice. Use esta imagen para crear su propia Windows WM.
Solo requiere una instalación básica, no se preocupe si tiene una versión diferente a la mostrada en este blog. Después de la instalación, desactive el antivirus de windows, ya que en esta sección no se cubrirá la evasión de sistemas EDR o Antivirus. Puede hacerlo abriendo la GUI de windows “Virus & Threat Protection” y deshabilitar todas las protecciones. Debe quedar algo así:
Sesiones
Generación de implante
Para generar un implante C2 con sliver de tipó session, solo ocupe el comando generate
. Si tiene dudas de todas las opciones que puede modificar utilice la ayuda con generate --help
. A qui va una explicación de las banderas para generar un implante con mTLS:
--mtls 172.19.0.128
: Especifica el protocolo de comunicación que el implante usará en este caso TLS multiple. Otras banderas que se pueden utilizar son--wg
para WireGuard,--http
para HTTP(S) o--dns
para DNS-based C2.--os windows
: Especifica el sistema operativo objetivo el cual va a correr el implante, por defecto tiene windows y no es necesario especificarlo. MacOS Y Linux también son soportados.--arch amd64
: Especifica que queremos un implante de 64 bits (también por defecto, puede omitirse). Utilice--arch 386
para un implante de a 32-bit.--format exe
: Especifica que queremos un archivo ejecutable (de nuevo por defecto). Otras opciones son ,--format service
para bibliotecas dinámicas,--format shared
para un binario de servicio de Windows (puede usarse con el comandopsexec
) yshellcode
(sólo windows).--save ~/Documents/sliverTest
: Especifica donde guardar el implante
Debe verse algo parecido a esto:
Sliver generará un implante con nombre aleatorio si no se especifíca, en mi caso GROSS_DRIVER.exe es el candidato.
mTLS Listener
Luego de generar el implante, se requiere levanta un mTLS listener, esto es muy simple, solo se tiene que ocupar el comando mtls
y luego el comando jobs
para lista los listeners y sobre que puerto corren:
Deliver and execute
Para la entrega (deliver) y ejecución del malware, se optó por el uso de python -m http.server
en la carpeta donde se encuentra, el implante y luego en la maquina victima solo se tiene que descargar y ejecutar el implante. Existen muchas formas de deliver o entrega de malware, se puede llegar desde la ejecución de algún exploit, desde ingeniería social, por medio de un usb entre otras. En este post solo se explora la forma de deliver desde descarga web de los binarios, tome en cuenta que los implantes de sliver suelen ser detectados por Microsoft Defender, se puede crear un stager personalizado con alguna técnica de evasión de sistemas de detección, para eso se recomienda leer las entradas de Malware escritas en este blog:
Finalmente, cuando se de doble click en el implante, se debe ver una interacción en C2 como la siguiente:
También se puede ejecutar el comando sessions
para listar todas las sesiones remotas obtenidas:
Uso de sesiones
Para ocupar una sesión solo ocupe el comando use
. Sólo tienes que escribirlo, pulsar enter, y aparecerá un prompt interactivo que permite seleccionar una sesión. Vuelva a pulsar Intro y el indicador cambiará al nombre del implante, que en mi caso era GROSS_DRIVER. La sesión está ahora activa y lista para aceptar tus comandos. Con el comando info
, puede obtener más información sobre el implante:
Los implantes de sliver soportan varios comandos, para obtener una lista completa de que se puede hacer con cada uno de ellos, solo escriba el comando help. Entre sus funciones se incluyen la exploración del sistema de archivos, la carga y descarga de archivos, el reenvío de puertos (Port forwarding), la realización de capturas de pantalla y mucho más.
Por ejemplo ocupar el comando screenshot
para comar capturas de pantalla remota
Cuando se termine de realizar acciones con la sesión se puede escribir el comando background
para enviar en segunda tarea la sesión, o el comando session -k <ID>
para terminar la sesión
Beacons
Generación de implante
Para generar un implante de tipo beacon es muy similar a los implantes de tipo session. Solo ocupe el comando generate beacon
. De igual forma para saber todas la combinaciones y configuraciones disponibles solo coloque la bandera --help
delante del comando. Las banderas mas relevantes a configurar serían las siguientes:
--seconds 5
: Especifica al beacon cuanto tiempo en segundos debería conectarse al servidos C2. Se puede usar de forma alternativa los siguientes switches--minutes
,--hours
o--days
.--jitter 3
: Especificación adicional de un delay random entre conexiones, esto para evitar levantar sospechas de conexiones periódicas, en este caso es de 3 segundos.
mTLS Listerer
En este caso no es necesario configurar un servidor de escucha mTLS, dado que se configuró en sesiones mTLS Lister.
Deliver and execute
Para la entrega (deliver) y ejecución del malware, se seguirá usando el servidor python -m http.server
en la carpeta donde se encuentra, el implante y luego en la maquina victima solo se tiene que descargar y ejecutar el implante.
Finalmente, nuestra consola de python debería salir lo siguiente:
Los beacon como son asíncronos y tienen pedidos de conexión entre 1 a 5 segundos segund la configuración, a veces salga que la conexión fallado, deberían ver algo así:
Uso de beacons
Exactamente igual que en la sesiones, solo use el comando use
seguido del nombre o id del beacon a usar, o dar el comando use
y enter y selecione el beacon a usar:
Notese, que cuando se ejecuta el comando screenshot, se lanza como una tarea (task), esto es asi dado que la conexión no es continua, cuando el beacon se conecte con el cliente C2, este ejecutara todas las tareas en la pira de tareas.
Con el comando tasks, se pueden listar todas las tareas pendientes o completadas por el beacon.
Beacon to Session
Es posible cambiar de modo beacon a modo sesión con el comando interactive
. Esto ejecutará una tarea que obligará al beacon a convertirse en modo sesión:
Por defecto, la sesión se creada con el mismo protocolo de C2 que tiene el implante de beacon. Sin embargo, se puede especificar otro, para esto se recomienda la lectura de la ayuda de interative --help
Última actualización