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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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