LARRYCHATTER: comunicaciones con el C&C encubiertas en redes sociales

APT29, al que se le relaciona con el gobierno ruso, es un grupo de los más avanzados y capaces que oculta su actividad comunicándose a través de canales encubiertos de redes sociales como Twitter o GitHub, así como servicios de almacenamiento en la nube, para transmitir comandos y extraer datos de redes comprometidas. Además mantiene un ciclo de desarrollo muy rápido para su malware, alterando rápidamente las herramientas para dificultar la detección, utiliza servidores comprometidos para la comunicación con el C2 e incluso monitoriza la actividad de la red para mantener el control sobre los sistemas.

En 2015, FireEye publicó un informe de HAMMERTOSS, el backdoor de este grupo que añade niveles y niveles de ofuscación y mimetiza sus comunicaciones para asemejarse el comportamiento de los usuarios legítimos y, 5 años después, el mismo inspiro al (creo) indio Upayan Saha para crear su (manteniendo las distancias) homónimo en Python3: LARRYCHATTER, una excelente PoC que demuestra la magia de los C2 sobre canales encubiertos en redes sociales, en este caso a través de Twitter y Dropbox como se muestra en el siguiente diagrama:

Como veis el operador del malware (CommandPost) va publicando en Twitter imágenes esteganográficas que luego el ordenador de la víctima con el implante lee y descifra para ejecutar los comandos pertinentes. Además ambos se mantienen sincronizados mediante el uso de THGA, que es básicamente un generador de cadenas pseudoaleatorio que hace que la predicción del handler del día siguiente sea muy difícil utilizando solo análisis estadístico. Posteriormente, utiliza Dropbox como medio para exfiltrar información.


De esta manera, nada tiene que estar hardcodeado en el lado del implante, lo que aumenta su resistencia a los takedowns de cuenta y garantiza la longevidad del implante en una máquina host.

Demo


Detecciones VT del implante



Proyecto: https://github.com/slaeryan/LARRYCHATTER

El repo contiene cuatro archivos de código fuente en Python3:
  • LARRYCHATTER_CommandPost.py, que es el código fuente del Command Post(CP).
  • LARRYCHATTERImplant.py, que es el código fuente del implante LARRYCHATTER.
  • decrypter.py para descifrar la info recogida por el implante de la máquina de la víctima y subida a Dropbox.
  • generateHandle.py que contiene el código para el algoritmo de generación de identificadores de Twitter.
Características
  • Sencilla lógica detrás del código: fácil de comprender y replicar en nuestros propios proyectos C2.
  • No es necesario hardcodear nada en el lado del implante, incluidas las claves API, lo que lo hace resistente a las eliminaciones de cuentas, etc.
  • No hay tráfico sospechoso HTTP/HTTPS a dominios externos desconocidos de C&C. Solo el tráfico observable es Twitter y Dropbox. Esto podría ayudar a la evasión de Firewalls/IDS ya que está básicamente diseñado para imitar el comportamiento humano para hacer que el tráfico del malware parezca legítimo con la esperanza de saltarse las distintas soluciones de seguridad.
  • Módulo 'kill': termina el implante en la máquina de destino.
  • Módulo 'recon': realiza un reconocimiento inicial en el sistema de la víctima, como información básica del sistema, parches instalados, toma capturas de pantalla en un intervalo aleatorio durante 'x' minutos y busca todos los tipos de tipos de archivos jugosos para su posterior filtración y cifra toda la info recopilada y la comprime en un solo archivo antes de subirla a Dropbox para que los operadores lo recuperen más tarde. Actualmente solo admite Windows. Por el momento sin subrutinas de evasión de AV pero completamente funcional.
  • Esteganografía básica integrada.
  • Soporta cifrado simétrico con AES de 128 bits en modo CBC.
  • Programado en Python 3.
  • Soporte un único implante por CommandPost ya que esta es solo una versión prototipo.
  •  Para probar el handler del Algoritmo de Generación en Twitter, necesitaríamos múltiples claves API de desarrollo, pero vincular el THGA con el código debería ser muy fácil. Por simplicidad, no viene integrado para poder probarlo fácilmente.
Pre-requisitos
  • Una cuenta de desarrollo de Twitter (¡usa una cuenta dedicada! ¡NO uses una cuenta personal!) Crea una aplicación con acceso de lectura y escritura. Específicamente anota los valores de CONSUMER KEY, CONSUMER SECRET, ACCESS TOKEN y ACCESS TOKEN SECRET. Además, anota el Identificador/Nombre de usuario de la cuenta de Twitter.
  • Una cuenta de Dropbox. (Nuevamente, ¡usa una cuenta dedicada! ¡NO uses tu cuenta personal!) Genera un token API. Nuevamente, una tarea bastante fácil.
  • Una máquina virtual Linux y una máquina virtual Windows 7/8/10 con Python3 instalado en ambas máquinas.
Guía para probar el PoC en 10 sencillos pasos

1. Clonar el repositorio usando:

git clone https://github.com/slaeryan/LARRYCHATTER.git

2. Instalar las dependencias de Python requeridas en ambas máquinas.

pip install -r requirements.txt

3. Ejecutar LARRYCHATTER_CommandPost.py en la máquina virtual Linux (máquina del operador) y seguir las instrucciones. Tenemos también el parámetro de ayuda para más info.

python3 LARRYCHATTER_CommandPost.py

4. Abrir el archivo LARRYCHATTER_Implant.py desde la VM de Windows, modificar la variable del nombre de usuario de Twitter creado y escribir esto para generar un ejecutable de Windows desde el script de Python:

pip install pyinstaller
pyinstaller -F -w LARRYCHATTER_Implant.py

5. Ejecutar el binario generado en el paso anterior en la VM de Windows.

6. Ejecutar el comando de reconocimiento en el Command Post y seguir las instrucciones en pantalla. En el repo se incluye una imagen de muestra llamada caravaggio.jpg. El tamaño del archivo debe ser inferior a 5 MB para que funcione la PoC.

7. Esperar un momento para que el implante haga su trabajo y recopile la información.

8. Comprobar en Dropbox el archivo ZIP exfiltrado, descárgarlo y extraerlo en la máquina del operador.

9. Ejecutar el comando kill en el Command Post para cerrar el implante en la máquina de destino cuando haya terminado.

10. Descifrar el archivo con la ayuda de decrypter.py y enjoy!

Nota: ¡No olvidar cambiar las claves de cifrado!

Comentarios