Mythic

NOTA: El contenido de este artículo es educativo e informativo. El objetivo es aprender cómo funciona la aplicación Mythic y cómo identificar sus capacidades. El autor no se hace responsable de una mala utilización de la información aquí expuesta ni las consecuencias legales que se pudieran derivar de ella.

¿Qué es Mythic?

Mythic es una plataforma de código abierto que busca proporcionar un entorno para las fases de post explotación de C2 (Comando y control).

Entre sus características destaca que es altamente personalizable, rápidamente desplegable, modular y pensado para el trabajo de múltiples operadores al mismo tiempo.

Mirando con lupa

Mythic se compone de diferentes servicios que conforman el conjunto de funcionalidades que es la plataforma.

Operadores

Por un lado, tenemos los operadores (lo que serían las cuentas de usuario) que acceden a la interfaz mediante un servidor web, desde donde se gestionan todas las operaciones.

Los operadores pueden tener distintos roles (con la granularidad de acceso a las distintas capacidades y proyectos), permitiendo organizar fácilmente múltiples operaciones.

Servidor web

El servidor web es la interfaz principal de control de Mythic. Todo el ciclo de vida del ataque se realiza desde aquí.

Este servicio web utiliza PostreSQL para el almacenamiento de la información y RabbitMQ como sistema de colas de mensajería.

También cuenta con una documentación propia que permite acceder rápidamente a la información de cualquiera de los componentes instalados.

Agentes y Perfiles C2

Ahora pasamos a los dos elementos principales de Mythic: los agentes y los perfiles C2.

Los agentes son los subproyectos que contienen el malware para generar los ejecutables o componentes de acuerdo a las necesidades del operador que serán instalados en los equipos a atacar.

Estos permiten múltiples comandos y acciones que se ajustan a las necesidades del sistema operativo (macOS, Linux o Windows), desde un simple ls hasta la utilidad de mimikatz.

La funcionalidad base puede ser ampliada también mediante scripts, que, en base al output de un comando, pueden realizar automáticamente operaciones más complejas.

Los agentes van siempre asociados a un perfil C2.

Los perfiles C2 son, a fin de cuentas, el modo de comunicación que van a utilizar los agentes para comunicarse con nuestra plataforma Mythic. Encontramos perfiles C2 desde websocket, DNS pasando por HTTP.

Pero, ¿y qué ofrece?

Mythic contiene innumerables funcionalidades y su objetivo principal es el de automatizar y simplificar los ataques mediante C2.

Es por ello que todo se despliega usando contenedores Docker. Esto convierte el añadir nuevos elementos en algo casi instantáneo, por no mencionar la despreocupación de las dependencias.

Existen agentes y perfiles C2 en los repositorios oficiales de Mythic que deberán ser instalados aparte (Agentes y Perfiles C2)

Sin embargo, la potencia de esta plataforma radica en la facilidad y alta customización que permite a la hora de crear nuestros propios componentes.

Finalmente, la utilidad web está enfocada para suplir todas las necesidades del proceso de ataque.

Operations

Mythic engloba todo en operaciones. De esta manera, se pueden separar completamente los diferentes ataques, ficheros e incluso el acceso por parte de los operadores.

Callbacks

Esta es la zona donde ocurre la magia. Cuando Mythic recibe una conexión de uno de los agentes desplegados se genera un callback.

Desde aquí es desde donde se mandan las acciones y desde donde se reciben los resultados.

La interfaz permite cambiar entre los distintos callbacks activos instantáneamente, conocer el estado de los agentes y mucha mas información.

Files, credentials, screenshots y keylogs

Mythic hace también de biblioteca en la que catalogar toda la información obtenida.

Hay zonas designadas para guardar todos los ficheros que han sido descargados desde los callbacks, credenciales obtenidas, capturas de pantalla realizadas y keylogs generados.

De esta manera, independientemente de qué agente generó qué información podemos encontrar todo lo que necesitamos organizado y en único punto.

Reporting

Otra de las funcionalidades principales que encontramos es la capacidad de generar informes de todo el proceso.

Especial mención a la utilidad que permite generar y rellenar la matriz de ATT&CK a través de las operaciones realizadas mediante los callbacks.

Otras características

La aplicación también cuenta con múltiples sistemas de recolección y análisis de los eventos generados en la plataforma, lo que permite mantener un log de todo lo ocurrido.

En caso de necesitar acceder a información de quién, cómo y cuándo hizo qué, Mythic se encarga de todo por nosotros de manera completamente directa y transparente.

Prueba real

Una vez entendido cómo funciona la plataforma, vamos a pasar a una prueba real.

Vamos a infectar un ordenador con un sistema operativo Windows mediante el agente .NET Apollo y vamos a utilizar el perfil de C2 http.

Es decir, vamos a generar un ejecutable que va a quedar corriendo en background en el objetivo y que se va a comunicar mediante mensajes HTTP con nuestro servidor web que desplegó el perfil de C2 http. Una vez recibidos los mensajes, el servidor se los comunicará a la interfaz de Mythic.

En el siguiente video se enseña el proceso de creación del agente y la posterior interacción una vez activo en el objetivo.

Oh, la ironía: securizando tráfico HTTP mediante certificados inseguros

Por defecto, los perfiles C2 de HTTP trabajan ambos sobre HTTP plano. Esto no supone un gran problema respecto a exponer información en caso de inspeccionar los paquetes ya que el contenido va cifrado.

Sin embargo, un administrador de sistema rápidamente se daría cuenta de que algo raro ocurre, pues se producen de manera periódica peticiones a un servidor mediante HTTP, rasgo común entre malware que usa C2.

Esto nos lleva a la necesidad de utilizar HTTPS para ocultar aún más el comportamiento de nuestro agente en el sistema objetivo.

Mi sorpresa llega cuando genero unos certificados autofirmados, activo el HTTPS en el perfil C2 http, genero el agente de Medusa y… no funciona.

Tras debuggear el comportamiento me doy cuenta de que, al no poder verificar los certificados, no llega a establecerse la conexión.

Considero que, teniendo en cuenta el uso que se le da a la plataforma, es muy útil no tener que depender de certificados firmados para realizar estas prácticas.

Por ello, me descargo el código del agente, modifico las líneas correspondientes y añado al proceso de generación del agente la opción de elegir si se quiere validar el certificado HTTPS.

Despliego de nuevo y, ahora sí, establezco conexión con mi servidor y el tráfico va completamente oculto sobre TCP.

(Esto tampoco permite una ocultación total de la actividad de red del proceso. puesto que un administrador decidido a descubrir lo que ocurre tiene todas las piezas para averiguarlo, pero sí le dificulta detectar un comportamiento anómalo en primera instancia).

El código será subido mediante una pull request al repositorio de Medusa para que otras personas puedan también aprovechar este trabajo.