El reciente brote de malware similar a Petya obtuvo mucha atención de los medios. Sin embargo, debería notarse que no fue un incidente aislado: es el último de una serie de ataques similares en Ucrania. Este artículo revela muchos detalles sobre Win32/Diskcoder.C, también conocido como ExPetr, PetrWrap, Petya, o NotPetya, así como información sobre ataques que no habían sido reportados.
TeleBots
En diciembre de 2016 publicamos dos artículos detallados sobre ataques disruptivos perpetrados por el grupo que llamamos TeleBots, escpecíficamente contra instituciones financieras y una versión para Linux del malware KillDisk usado por este grupo.
Los objetivos de TeleBots fueron varios sistemas informáticos de Ucrania, que podemos definir como infraestructuras críticas. Además, el grupo tiene conexiones con el infame grupo BlackEnergy que fue responsable de los cortes de electricidad en Ucrania ocurridos en diciembre de 2015.
En la etapa final de sus ataques, TeleBots siempre usó al malware KillDisk para sobrescribir archivos con extensiones específicas en el disco de la víctima; recolectar el dinero del rescate nunca fue su prioridad principal.
En la primera ola de ataques de diciembre de 2016, en vez de cifrar, KillDisk sobrescribía los archivos objetivo. Pero no proveía información de contacto para comunicarse con el atacante, solo mostraba una imagen de la serie Mr. Robot.
En la segunda ola de ataques, los cibercriminales añadieron información de contacto, para que pareciera un típico ransomware. Sin embargo, pedían un número extraordinario de bitcoins: 222 BTC, equivalentes a 250.000 dólares en ese entonces. Esto podría indicar que no estaban interesados en los bitcoins, sino que su objetivo real era causar daño a las compañías atacadas, más allá de que no pudieran pagar el rescate.
En 2017, el grupo TeleBots continuó con sus ataques; de hecho, se hizo más sofisticado. En el período entre enero y marzo de este año, sus integrantes comprometieron una compañía de software de Ucrania (no relacionada a M.E. Doc) y, usando túneles VPN desde allí, obtuvieron acceso a las redes internas de muchas instituciones financieras.
Durante ese ataque, agrandaron su arsenal con dos piezas de ransomware y versiones actualizadas de las herramientas que habíamos descrito en las investigaciones mencionadas.
El primer backdoor era Python/TeleBot.A, que fue reescrito en el lenguaje de programación Rust. La funcionalidad sigue siendo la misma: es un backdoor estándar que utiliza la API Telegram Bot para recibir comandos y enviar respuestas al operador de malware.
El segundo backdoor, que fue escrito en VBS y empaquetado usando el programa script2exe, estaba densamente ofuscado, pero la funcionalidad seguía siendo la misma que en ataques previos.
Esta vez, el backdoor VBS usó el servidor de C&C en 130.185.250[.]171. Para hacer las conexiones menos sospechosas para quienes chequean los logs del firewall, los atacantes registraron el dominio transfinance.com[.]ua y lo alojaron en esa dirección IP. Como es evidente en la imagen 6, este servidor también estaba ejecutando el relay de Tor llamado severalwdadwajunior.
Además, usaron las siguientes herramientas:
- CredRaptor (para robar contraseñas)
- Plainpwd (Mimikatz modificado usado para recuperar credenciales de Windows de memoria)
- PsExec de SysInternals (usado para movimiento lateral)
Como mencionamos arriba, en la etapa final de sus ataques, el grupo TeleBots usó ransomware valiéndose de credenciales de Windows robadas y de PsExec de Sysinternals. Este nuevo ransomware se detectaba como Win32/Filecoder.NKH en los productos de ESET. Una vez ejecutado, cifra todos los archivos (excepto los ubicados en el directorio C:\Windows) usando algoritmos AES-128 y RSA-1024. El malware añade la extensión .xcrypted a los archivos cifrados.
Cuando el cifrado termina, crea un archivo de texto llamado "!readme.txt" con el siguiente contenido:
Por favor contáctenos: openy0urm1nd@protonmail.ch
Además de malware para Windows, el grupo usó ransomware para Linux en servidores que no corren Windows. Este ransomware es detectado por los productos de ESET como Python/Filecoder.R y, de manera predecible, está escrito en Python. Esta vez, los atacantes ejecutan utilidades de terceros como openssl para cifrar archivos. El cifrado se realiza usando los algoritmos RSA-2048 y AES-256.
En el código del script en Python, los atacantes dejaron un comentario con el siguiente texto:
feedback: openy0urm1nd[@]protonmail.ch
Win32/Filecoder.AESNI.C
El 18 de mayo de 2017, notamos que había nueva actividad de parte de otra familia de ransomware, Win32/Filecoder.AESNI.C (también llamada XData).
Se propagó mayormente en Ucrania, a raíz de un interesante vector inicial. Según la telemetría de nuestro sistema ESET LiveGrid®, el malware se creó justo después de la ejecución del software M.E.Doc, que es muy utilizado por personal contable en este país.
Win32/Filecoder.AESNI.C tenía un mecanismo de propagación que le permitía hacer movimiento lateral de manera automática dentro de la red LAN comprometida de una compañía. Específicamente, tenía un DLL que usaba para extraer credenciales de cuentas de Windows de la memoria de una PC comprometida. Con ellas, se propagaba en la red local usando la utilidad PsExec de Sysinternals.
Parece que los atacantes no lograron su objetivo en esa ocasión, o bien fue una prueba para un posterior ataque más efectivo. Publicaron claves maestras de descifrado en el foro de BleepingComputer, y afirmaron que el motivo era que, según el autor original, el código fuente había sido robado y usado en el incidente de Ucrania.
ESET publicó una herramienta de descifrado para el ransomware Win32/Filecoder.AESNI, y este evento no obtuvo mucha atención de los medios.
El brote de Diskcoder.C ("similar a Petya")
Lo que sí obtuvo mucha atención de los medios fue el brote del malware similar a Petya originado esta semana, el 27 de junio de 2017. La razón fue que logró comprometer muchos sistemas de infraestructura crítica y otras organizaciones en Ucrania, y luego en otros países.
Este malware tiene la habilidad de reemplazar el Master Boot Record (MBR) con su propio código malicioso, que tomó prestado del ransomware Petya. Es por eso que otros investigadores llamaron a esta amenaza ExPetr, PetrWrap, Petya o NotPetya.
Sin embargo, a diferencia del original ransomware Petya, los autores de Diskcoder.C modificaron el código de MBR de manera tal que la recuperación no será posible. El atacante no puede proveer una clave de descifrado y de todas formas no podría ser ingresada en la pantalla de pedido de rescate, porque se generaría incluyendo caracteres no aceptados.
Visualmente, esta parte de Diskcoder.C dedicada al MBR se ve como una versión ligeramente modificada de Petya: primero muestra un mensaje que se hace pasar por CHKDSK, la utilidad de verificación de disco de Microsoft. Durante el falso chequeo de CHKDISK, el malware cifra la información.
Cuando el cifrado termina, la parte de MBR muestra el siguiente mensaje con las instrucciones de pago, pero, como señalamos arriba, esta información es inútil.
El resto del código, excluyendo la parte de MBR prestada, fue implementado por los propios autores. Esto incluye el cifrado de archivos que puede ser usado como complemento del MBR que cifra el disco. Para los archivos, el malware usa los algoritmos AES-128 y RSA-2048.
Cabe destacar que los autores cometieron errores que hacen que descifrar los archivos sea menos posible. Específicamente, el malware cifra solo el primer MB de datos y no escribe ningún encabezado o estructura específica, solo datos cifrados crudos, y no cambia el nombre de los archivos cifrados, por lo que es difícil decir qué archivos están cifrados y cuáles no.
Además de eso, los archivos que son mayores a 1MB después del cifrado no contienen bytes de relleno o separación, por lo que no hay forma de verificar la clave.
Es interesante remarcar que la lista de extensiones de archivos objetivo no es idéntica pero sí muy similar a la que KillDisk usó en los ataques de diciembre de 2016.
Una vez que el malware es ejecutado, intenta propagarse usando el infame exploit EternalBlue, aprovechando el backdoor de DoublePulsar, que se ejecuta en modo kernel. Fue exactamente el mismo método usado en el ransomware WannaCryptor.D.
Diskcoder.C también adoptó el método del ransomware Win32/Filecoder.AESNI.C (XData): usa una versión más liviana de Mimikatz para obtener credenciales y luego ejecuta el malware usando PsExec en otras máquinas de la red de área local. Además de eso, los atacantes implementaron un tercer método de propagación usando un mecanismo WMI.
Los tres métodos han sido usados para propagar malware dentro de redes LAN. A diferencia del infame WannaCryptor, Diskcoder.C usa el exploit EternalBlue solo contra computadoras dentro del espacio de direcciones de red local.
¿Por qué hay infecciones en otros países además de Ucrania? Nuestra investigación reveló que las compañías afectadas en otros países tenían conexiones VPN a sus filiales o a socios comerciales en Ucrania.
Vector de infección inicial
Tanto Diskcoder.C como Win32/Filecoder.AESNI.C usaron ataques a la cadena de suministro como vector de infección inicial. Estas familias de malware se propagaron usando un software contable ucraniano llamado M.E.Doc.
Hay varias opciones que permiten implementar este ataque. M.E.Doc tiene un sistema interno de mensajería e intercambio de documentos, por lo que los atacantes podrían enviar mensajes de phishing dirigido a las víctimas. Se requiere intacción del usuario para ejecutar algo malicioso de esta forma; por lo tanto, habría técnicas de ingeniería social involucradas. Como Win32/Filecoder.AESNI.C no se propagó tanto, asumimos erróneamente que se habían usado estas técnicas en este caso.
Sin embargo, el subsecuente brote de Diskcoder.C sugiere que los atacantes tuvieron acceso al servidor de actualización del software legítimo. Usándolo, subieron una actualización maliciosa que fue aplicada automáticamente sin la interacción de los usuarios. Fue por eso que tantos sistemas en Ucrania se vieron afectados. De todas formas, parece que los autores del malware subestimaron las capacidades de propagación de Diskcoder.C.
Investigadores de ESET encontraron evidencia que soporta esta teoría. Específicamente, identificamos un backdoor PHP malicioso que desplegaba medoc_online.php en uno de los directorios FTP en el servidor de M.E.Doc. Este backdoor era accesible desde HTTP; sin embargo, estaba cifrado, por lo que el atacante debía tener la contraseña para usarlo.
Debemos decir que hay señales que sugieren que Diskcoder.C y Win32/Filecoder.AESNI.C no fueron las únicas familias de malware que se desplegaron usando ese vector de infección. Podemos especular que estas actualizaciones maliciosas fueron desplegadas de manera sigilosa en redes que pertenecen a blancos de alto perfil.
Un malware con el que se usó este mecanismo fue el backdoor VBS usado por el grupo TeleBots. Esta vez, el atacante volvió a usar un nombre de dominio que tiene que ver con lo financiero: bankstat.kiev[.]ua.
El día del brote de Diskcoder.C, el registro de tipo A de este dominio se cambió a 10.0.0.1.
Conclusiones
El grupo TeleBots sigue evolucionando para ejecutar ataques disruptivos en Ucrania. En vez de correos de spear phishing con documentos que contienen macros maliciosas, usaron un esquema mucho más sofisticado conocido como ataque a la cadena de suministro.
Antes del brote, TeleBots apuntaba mayormente al sector financiero. La última oleada estuvo dirigida contra empresas en Ucrania, pero aparentemente subestimaron las capacidades de propagación del malware. Es por eso que se salió de control.
Indicadores de sistema comprometido (IoC)
Detecciones de ESET:
Troyano Win32/TeleBot
Troyano VBS/Agent.BB
Troyano VBS/Agent.BD
Troyano VBS/Agent.BE
Troyano Win32/PSW.Agent.ODE
Troyano Win64/PSW.Agent.K
Troyano Python/Filecoder.R
Troyano Win32/Filecoder.AESNI.C
Troyano Win32/Filecoder.NKH
Troyano Win32/Diskcoder.C
Aplicación Win64/Riskware.Mimikatz
Aplicación Win32/RiskWare.Mimikatz
Servidores de C&C:
transfinance.com[.]ua (IP: 130.185.250.171)
bankstat.kiev[.]ua (IP: 82.221.128.27)
www.capital-investing.com[.]ua (IP: 82.221.131.52)
Servidores legítimos de los cuales los autores del malware abusaron:
api.telegram.org (IP: 149.154.167.200, 149.154.167.197, 149.154.167.198, 149.154.167.199)
Backdoor VBS:
1557E59985FAAB8EE3630641378D232541A8F6F9
31098779CE95235FED873FF32BB547FFF02AC2F5
CF7B558726527551CDD94D71F7F21E2757ECD109
Mimikatz:
91D955D6AC6264FBD4324DB2202F68D097DEB241
DCF47141069AECF6291746D4CDF10A6482F2EE2B
4CEA7E552C82FA986A8D99F9DF0EA04802C5AB5D
4134AE8F447659B465B294C131842009173A786B
698474A332580464D04162E6A75B89DE030AA768
00141A5F0B269CE182B7C4AC06C10DEA93C91664
271023936A084F52FEC50130755A41CD17D6B3B1
D7FB7927E19E483CD0F58A8AD4277686B2669831
56C03D8E43F50568741704AEE482704A4F5005AD
38E2855E11E353CEDF9A8A4F2F2747F1C5C07FCF
4EAAC7CFBAADE00BB526E6B52C43A45AA13FD82B
F4068E3528D7232CCC016975C89937B3C54AD0D1
Win32/TeleBot:
A4F2FF043693828A46321CCB11C5513F73444E34
5251EDD77D46511100FEF7EBAE10F633C1C5FC53
Win32/PSW.Agent.ODE (CredRaptor):
759DCDDDA26CF2CC61628611CF14CFABE4C27423
77C1C31AD4B9EBF5DB77CC8B9FE9782350294D70
EAEDC201D83328AF6A77AF3B1E7C4CAC65C05A88
EE275908790F63AFCD58E6963DC255A54FD7512A
EE9DC32621F52EDC857394E4F509C7D2559DA26B
FC68089D1A7DFB2EB4644576810068F7F451D5AA
Win32/Filecoder.NKH:
1C69F2F7DEE471B1369BF2036B94FDC8E4EDA03E
Python/Filecoder.R:
AF07AB5950D35424B1ECCC3DD0EEBC05AE7DDB5E
Win32/Filecoder.AESNI.C:
BDD2ECF290406B8A09EB01016C7658A283C407C3
9C694094BCBEB6E87CD8DD03B80B48AC1041ADC9
D2C8D76B1B97AE4CB57D0D8BE739586F82043DBD
Win32/Diskcoder.C:
34F917AABA5684FBE56D3C57D48EF2A1AA7CF06D
Shell PHP:
D297281C2BF03CE2DE2359F0CE68F16317BF0A86