Los investigadores de ESET han descubierto una familia de malware, que hasta ahora no había sido documentada, a la que han denominado KryptoCibule. Este malware es una triple amenaza en lo que respecta a las criptomonedas, ya que utiliza los recursos de la víctima para minar monedas, intenta tomar el control de las transacciones reemplazando las direcciones de las billeteras en el portapapeles, y exfiltra archivos relacionados con criptomonedas; todo esto mientras hace uso de múltiples técnicas para evitar la detección. Por otra parte, KryptoCibule hace un uso extensivo de la red Tor y el protocolo BitTorrent en su infraestructura de comunicación.

El malware, escrito en C#, también emplea algunos software legítimos. Algunos, como Tor y el cliente de torrents Transmission, están empaquetados con el instalador; otros se descargan en tiempo de ejecución, incluidos Apache httpd y el servidor SFTP Buru. En la Figura 1 se muestra una descripción general de los diversos componentes y sus interacciones.

Figura 1. Componentes y herramientas de KryptoCibule

Cuando el malware se ejecuta por primera vez, al host se le asigna un identificador único con el formato {adjective}-{noun} donde {adjective} y {noun} son palabras aleatorias tomadas de dos listas hardcodeadas que proporcionan más de 10 millones de combinaciones únicas. Este identificador se utiliza luego para identificar el host en las comunicaciones con los servidores C&C.

Además de los componentes relacionados con la criptografía, KryptoCibule también tiene funcionalidades de RAT. Entre los comandos que admite se encuentran EXEC, que permite la ejecución de comandos arbitrarios y SHELL, que descarga un script de PowerShell desde el C&C. Este script luego carga un backdoor generado con la herramienta de postexplotación Pupy.

El nombre KryptoCibule deriva de las palabras en checo y eslovaco para "cripto" y "cebolla".

Cronología

Hemos descubierto varias versiones de este malware, lo que nos permite rastrear su evolución desde diciembre de 2018. La Figura 2 muestra los cambios realizados en KryptoCibule a lo largo del tiempo.

Figura 2. Cronología de actualizaciones y cambios de funcionalidad

Blancos de ataque

Según la telemetría de ESET (que se muestra en la Figura 3), el malware parece apuntar principalmente a usuarios en Chequia (República Checa) y Eslovaquia. Esto refleja la base de usuarios del sitio en el que se encuentran los torrents infectados.

Figura 3. Según los datos de nuestra telemetría, más del 85% de las detecciones se ubicaron en Chequia y Eslovaquia.

Casi todos los torrents maliciosos estaban disponibles en uloz.to; un sitio de intercambio de archivos popular en Chequia y Eslovaquia (ver Figura 4). Explicaremos cómo se utilizan estos torrents para difundir KryptoCibule en la siguiente sección.

Figura 4. Uno de los torrents maliciosos en uloz.to

Como se detalla en la sección de Técnicas de antidetección y antianálisis más adelante en este artículo, KryptoCibule verifica específicamente los productos de seguridad para endpoints de ESET, Avast y AVG; ESET tiene su sede central en Eslovaquia, mientras que los otros dos son propiedad de Avast, que tiene su sede en Chequia.

Torrents

KryptoCibule utiliza el protocolo BitTorrent para propagarse a nuevas víctimas y descargar herramientas y actualizaciones adicionales.

Compromiso inicial

KryptoCibule se propaga a través de torrents maliciosos para archivos ZIP cuyo contenido se hace pasar por instaladores de software y juegos pirateados o crackeados. Aunque se pueden incluir otros archivos, como se ve en la Figura 5, hay cinco que son comunes a todos los archivos del instalador de KryptoCibule. packed.001 es el malware, mientras que packed.002 es el instalador del software esperado. Ambos están cifrados con XOR con claves contenidas en Setup.exe.

Cuando se ejecuta Setup.exe, decodifica tanto el malware como los archivos de instalación esperados. Luego lanza el malware (en segundo plano) y el instalador esperado (al frente y al centro), sin darle a la víctima ninguna indicación de que algo anda mal.

Figura 5. Contenido del archivo Dead.Cells.Incl.All.DLC  solo con el conjunto mínimo común de archivos de instalación de KryptoCibule mostrados

Software y actualizaciones adicionales

El protocolo BitTorrent también se utiliza para descargar actualizaciones tanto del malware como del software adicional.

KryptoCibule instala el cliente torrent transmission-daemon y lo administra emitiendo comandos a través de su interfaz RPC en el puerto 9091 con transmisión remota. La interfaz RPC utiliza las credenciales hardcodeadas superman:krypton.

Para instalar más software para el uso del malware, como el servidor SFTP, el componente Launcher realiza una solicitud HTTP GET a %C&C%/softwareinfo?title=<software name> y recibe una respuesta JSON que contiene una URI magnet para que se descargue el torrent y otra información que indica cómo instalar y ejecutar el programa. La Figura 6 muestra un ejemplo de tal respuesta.

{"Magnet": "magnet:?xt=urn[:]btih:67yd647nivxhumoedvwnwnzve55b3bxj&dn=free-BuruServer-x64-v1.7.3.zip", "Version": 1,"ExecutableRelativePath": "", "ExecutableFileName": "buru.exe","ExecutableArgs": "run", "InstallFile": "", "HasCustomConfig": true}

Figura 6. Ejemplo de respuesta para una solicitud GET /softwareinfo?title=ssh_server 

El mecanismo para obtener actualizaciones es similar. El malware primero obtiene la configuración global a través de HTTP desde %C&C%/settingsv5. Entre otras cosas, esta respuesta contiene una URI magnet para la última versión del malware. Luego realiza una solicitud GET a %C&C%/version para obtener el número de versión más reciente. Si la versión local es inferior a esa versión, el torrent se descarga e instala.

Los torrents se agregan a Transmission usando el siguiente comando:

transmission-remote localhost -n superman:krypton -a "<magnet URI>"

Se utiliza una lista hardcodeada de 50 rastreadores para obtener pares para todos los torrents.

Sembrando torrents maliciosos

Las víctimas también son utilizadas para sembrar tanto los torrents utilizados por el malware como los torrents maliciosos que ayudan a propagarlo. Los hosts infectados obtienen una lista de URI magnéticos de %C&C%/magnets, los descargan todos y los siguen sembrando. Esto asegura que estos archivos estén ampliamente disponibles para que otros los descarguen, lo que ayuda a acelerar las descargas y proporciona redundancia.

Técnicas antidetección y antianálisis

Este malware hace uso de una variedad de técnicas para evitar la detección junto con algunas protecciones básicas contra el análisis.

Comienza con el vector de acceso inicial. El ejecutable contenido dentro del archivo ZIP es un programa de instalación más bien benigno que se hace pasar por el programa InstallShield legítimo. Este archivo está codificado con el programa de código abierto Obfuscar. Esta misma herramienta se utiliza en todos los ejecutables personalizados del malware. El código malicioso en sí se encuentra dentro de un archivo cifrado con XOR, siendo la clave un GUID hardcodeado en Setup.exe.

Luego, el malware se instala en la ruta hardcodeada %ProgramFiles(x86)%\Adobe\Acrobat Reader DC\Reader\update y utiliza nombres de ejecutables legítimos de Adobe Acrobat Reader para el ejecutable Tor incluido y el suyo propio. Algunos de los archivos contenidos en la carpeta de instalación se pueden ver en la Figura 7.

Figura 7. Ejemplo de archivos de la carpeta de instalación, donde Armsvc.exe  es el malware y ADelRCP.exe es el ejecutable de Tor. Adobe Reader utiliza ambos nombres de archivo.

Para lograr la persistencia, KryptoCibule crea una tarea programada que se ejecutará cada cinco minutos con el siguiente comando. Una vez más, utiliza un nombre relacionado con Adobe Reader.

schtasks.exe /CREATE /SC MINUTE /MO 5 /TN "Adobe Update Task" /TR \""%ProgramFiles(x86)%\Adobe\Acrobat Reader DC\Reader\Update\armsvc.exe\"" [/RL HIGHEST] /F [/RU SYSTEM]

Antes de ejecutar por primera vez su payload y en cada iteración del loop principal, el malware realiza una verificación para ver si se está ejecutando software de análisis utilizando la siguiente lista. Si encuentra algún proceso cuyo nombre coincida con alguno de la lista, detiene todos los componentes en ejecución y sale.

  • cain
  • filemon
  • netmon
  • netstat
  • nmwifi
  • perfmon
  • processhacker
  • procexp
  • procexp64
  • procmon
  • regmon
  • tasklist
  • taskmgr
  • tcpvcon
  • tcpview
  • wireshark

Evasión de antivirus

Antes de inicializar los componentes para minar criptomonedas, el malware realiza una verificación sin distinción entre mayúsculas y minúsculas del objeto rootSecurityCenter2\AntiVirusProduct WMI para las strings avast, avg y eset, como se ve en el código descompilado en la Figura 8. Si se detecta alguna de ellas, los componentes del minero de criptomonedas no se instalarán.

Figura 8. Código descompilado limpiado de la función utilizada para verificar productos de seguridad específicos

Siempre que se instala el malware, una actualización o un nuevo componente, la ruta de instalación utilizada es excluida del análisis automático de Windows Defender mediante la emisión del siguiente comando:

powershell -c "Add-MpPreference -ExclusionPath '<install path>'"

También crea reglas de firewall para permitir explícitamente el tráfico entrante y saliente de sus componentes utilizando nombres de apariencia inofensiva. La función que se muestra en la Figura 9 también crea una regla para bloquear el tráfico saliente del Servicio Kernel de ESET (ekrn.exe).

Figura 9. Función que bloquea el tráfico saliente de ekrn.exe en el Firewall de Windows

Uso de la red Tor

KryptoCibule incluye la herramienta de línea de comandos tor.exe, enmascarada como ADelRCP.exe, y un archivo de configuración (que puede observarse en la Figura 10) como libstringutils.dll.

Figura 10. El archivo de configuración de Tor utilizado por la última versión del malware

Esto configura un proxy SOCKS en el puerto 9050 que es utilizado por el malware para transmitir todas las comunicaciones con los servidores C&C a través de la red Tor. Esto tiene el doble beneficio de cifrar las comunicaciones y hacer prácticamente imposible de rastrear el servidor o los servidores reales detrás de estas URIs.

La segunda parte del archivo de configuración establece los servicios onion en el host victimizado. Estos son accesibles por los operadores a través de la red Tor. Al iniciar estos servicios por primera vez, Tor genera automáticamente un URI .onion para el host. Este nombre de host único se envía luego %C&C%/transferhost/<unique name>. Discutiremos cómo se utilizan estos servicios onion en las próximas secciones.

Port Number Service
9091 Transmission Daemon RPC interface
9999 Apache httpd server
9187 Buru SFTP server
9188 Buru Web Admin
12461 MiniWeb HTTP server

Los URI de onion para dos servidores C&C están contenidos en el malware. Uno de ellos proporciona una API REST que el malware usa para la mayoría de las comunicaciones, mientras que el otro se usa para descargar archivos. Se pueden obtener URI adicionales de a una a la vez con una solicitud a %C&C%/server. Algunas versiones anteriores del malware las utilizan para descargar actualizaciones a través del puerto 12461. Creemos que estas URI apuntan a otros hosts infectados. Las versiones del malware que las utilizan tienen un código para colocar sus actualizaciones descargadas en un directorio servido por el servidor HTTP MiniWeb en ese mismo puerto.

Pudimos identificar una dirección IP para el servidor de archivos C&C en nuestros datos de telemetría.

Adquirir criptomonedas

KryptoCibule tiene tres componentes que aprovechan los hosts infectados para obtener criptomonedas.

Criptominería

Las últimas versiones de KryptoCibule usan XMRig, un programa de código abierto que mina Monero usando la CPU, y kawpowminer, otro programa de código abierto que mina Ethereum usando la GPU. El segundo solo se usa si se encuentra una GPU dedicada en el host. Ambos programas están configurados para conectarse a un servidor de minería controlado por un operador a través del proxy Tor.

En cada iteración del loop principal, el malware comprueba el nivel de la batería y el tiempo transcurrido desde la última entrada del usuario. Luego inicia o detiene el proceso del minero en función de esta información. Si el host no ha recibido información por parte del usuario en los últimos 3 minutos y tiene al menos un 30% de batería, tanto la GPU como la CPU se ejecutan sin límites. De lo contrario, el minero de GPU se suspende y el minero de CPU se limita a un subproceso. Si el nivel de la batería es inferior al 10%, ambos mineros se detienen. Esto se hace para reducir la probabilidad de que la víctima lo note.

Hijacking del portapapeles

El segundo componente se hace pasar por SystemArchitectureTranslation.exe. Utiliza la función AddClipboardFormatListener para monitorear los cambios en el portapapeles y aplicar las reglas de reemplazo obtenidas de %C&C%/regexes a su contenido. El código puede observarse en la Figura 11. El valor 0x31D corresponde a la constante WM_CLIPBOARDUPDATE.

Estas reglas, en la forma <regular_expresssion>!<wallet>, coinciden con el formato de las direcciones de billeteras de criptomonedas y las reemplazan con direcciones de billeteras controladas por el operador de malware. Esto tiene como fin redirigir las transacciones realizadas por la víctima a las billeteras del operador. Este componente utiliza un FileSystemWatcher para cargar nuevamente las reglas de reemplazo cada vez que se cambia el archivo settings.cfg.

Figura 11. Código descompilado para la función de escucha que utiliza el hook del portapapeles

Al momento de escribir este artículo, las billeteras utilizadas por el componente para tomar control del portapapeles habían recibido un poco más de 1800 dólares estadounidenses en Bitcoin y Ethereum. Una de esas carteras se muestra en la Figura 12. Al correlacionar las billeteras utilizadas como fuentes en las mismas transacciones que las conocidas, pudimos descubrir al menos cuatro billeteras de Bitcoin adicionales que probablemente pertenezcan a los operadores de KryptoCibule.

Figura 12. Una billetera de Bitcoin utilizada por el componente para el secuestro del portapapeles

Exfiltración de archivos

El tercer componente recorre el sistema de archivos de cada unidad disponible y busca nombres de archivo que contengan ciertos términos. En la Figura 13 se muestra una lista de dichos términos que obtuvimos durante nuestra investigación.

["wallet.dat", "utc--2014", "utc--2015", "utc--2016", "utc--2017", "utc--2018", "utc--2019", "utc--2020", ".address.txt", "electrum", "bitcoin", "litecoin", "ethereum", "cardano", "zcash", "monero", "cripto", "krypto", "binance", "tradeogre", "coinbase", "tether", "daedalus", "stellar", "tezos", "chainlink", "blockchain", "verge", "bittrex", "ontology", "vechain", "doge", "qtum", "augur", "omisego", "digibyte", "seele", "enjin", "steem", "bytecoin", "zilliqa", "zcoin", "miner", "xmrig", "xmr-stak","electroneum", "heslo", "waves", "banka", "crypto", "hesla", "seed", "metamask", "antminer", "trezor", "ledger", "private", "trx", "exodus", "password", "jaxx", "guarda", "atomic.exe", "copay.exe", "Green Address Wallet.exe", "msigna.exe", "ArmoryQT.exe", ".ssh", ".aws", "Desktop"]

Figura 13. Una lista de palabras para buscar, tomada de la respuesta GET %C&C%/settingsv5 

La mayoría de los términos se refieren a criptomonedas, billeteras o mineros, pero también están presentes algunos más genéricos como cripto (en varios idiomas), seed y password. La lista contiene términos similares en checo y eslovaco, como heslo, hesla y banka (estas son las palabras para "contraseña", "contraseñas" y "banco", respectivamente). Algunos términos también corresponden a rutas o archivos que podrían proporcionar otros datos interesantes (Desktop, private), incluidas claves privadas ( .ssh, .aws). Recopila la ruta completa de cada uno de los archivos coincidentes y envía la lista a %C&C%/found/<unique name>.

Creemos que esto funciona en conjunto con el servidor SFTP que se ejecuta como un servicio onion en el puerto 9187. Este servidor crea mapeos para cada unidad disponible y las pone a disposición usando credenciales hardcodeadas en el malware. Por lo tanto, las rutas recopiladas se pueden utilizar para la exfiltración de archivos haciendo que una máquina controlada por un atacante las solicite al host infectado a través de SFTP.

KryptoCibule también instala un servidor httpd Apache legítimo que está configurado para actuar como un proxy de reenvío sin restricciones y que es accesible como un servicio onion en el puerto 9999.

Conclusión

El malware KryptoCibule ha estado en estado activo “in the wild” desde finales de 2018 y se mantiene activo, pero no parece haber atraído mucha atención hasta ahora. Su uso de herramientas legítimas de código abierto junto con la amplia gama de métodos antidetección implementados probablemente sean responsables de esto. El número relativamente bajo de víctimas (de cientos) y el hecho de estar limitado en su mayoría a dos países también pueden contribuir a esto. Se han agregado de forma regular nuevas capacidades a KryptoCibule durante su vida útil y continúa en desarrollo activo.

Presumiblemente, los operadores detrás de este malware pudieron obtener más dinero robando billeteras y extrayendo criptomonedas que lo que encontramos en las billeteras utilizadas por el componente para la toma de control del portapapeles. Los ingresos generados por ese componente por sí solos no parecen suficientes para justificar el esfuerzo de desarrollo observado.

Indicadores de Compromiso (IoCs)

La lista completa de indicadores de compromiso (IoC) y muestras se pueden encontrar en nuestro repositorio de GitHub.

Muestras

SHA-1 Filename ESET detection name
3BCEF852639F85803974943FC34EFF2D6D7D916D armsvc.exe MSIL/KryptoCibule.A
352743EBE6A0638CC0614216AD000B6A43C4D46E SystemArchitectureTranslation.exe MSIL/KryptoCibule.A
70480D5F4CB10DE42DD2C863DDF57102BE6FA9E0 Updater.exe MSIL/KryptoCibule.A
2E568CDF9B28824FBA1D7C16D8D0BE1D73A3FEBA Setup.exe MSIL/KryptoCibule.A

Red

  • rlwryismmgjijryr55u5rqlbqghqvrwxe5qgxupuviyysxkky5wah6yd.onion
  • 4dtu3lxrpx6nn7snjovoc3ldiy4x67k7qsrgzftvkrttoqbwnsuirhqd.onion
  • v6lajszeqfkt3h2nptorindpf3mow5p3thrx2vuqbqzbv3tjrcqmgdqd.onion

Tareas programadas

Name Executable Path
GoogleUpdateTask %LocalAppData%\Microsoft\Architecture\SystemArchitectureTranslation.exe
Adobe Update Task %ProgramFiles(X86)%\Adobe\Acrobat Reader DC\Reader\Update\armsvc.exe

Técnicas de MITRE ATT&CK

Esta tabla fue creada usando la versión 7 del frameweork de ATT&CK . 

Tactic ID Name Description
Initial Access T1189 Drive-by Compromise KryptoCibule is spread through torrent and file-sharing websites.
Execution T1059.001 Command and Scripting Interpreter: PowerShell KryptoCibule directly executes PowerShell commands.
Some commands received from the C&C use PowerShell.
T1059.003 Command and Scripting Interpreter: Windows Command Shell Commands received from the KryptoCibule C&C are executed with cmd.exe.
T1106 Native API KryptoCibule uses the System.Diagnostics.Process C# class to run processes.
T1204.002 User Execution: Malicious File KryptoCibule requires victims to run an installer from a downloaded torrent.
Persistence T1053.005 Scheduled Task/Job: Scheduled Task KryptoCibule attains persistence by creating a scheduled task to run the main executable every five minutes.
Defense Evasion T1027 Obfuscated Files or Information KryptoCibule executables are obfuscated with Obfuscar.
T1036 Masquerading KryptoCibule components use misleading names and a configuration file masquerades as a DLL.
T1036.004 Masquerading: Masquerade Task or Service KryptoCibule tasks are named after legitimate and benign looking software.
T1036.005 Masquerading: Match Legitimate Name or Location KryptoCibule uses paths and filenames that match those of Adobe Reader for malware and Tor client.
BuruServer uses paths and filenames for OpenSSH.
Transmission is installed to Java runtime directories.
T1140 Deobfuscate/Decode Files or Information The files that come with the KryptoCibule installer are XOR-encrypted.
PowerShell commands from the KryptoCibule C&C are base64-encoded.
T1497 Virtualization/Sandbox Evasion The KryptoCibule payload is not executed if an analysis tool is detected.
T1497.002 Virtualization/Sandbox Evasion: User Activity Based Checks KryptoCibule uses the time since last input to set limits on cryptominer CPU usage.
T1562.001 Impair Defenses: Disable or Modify Tools KryptoCibule uses Add-MpPreference -ExclusionPath to exclude malware and installed tools from Windows Defender scanning.
T1562.004 Impair Defenses: Disable or Modify System Firewall KryptoCibule uses advfirewall firewall add rule to allow its tools and block the ESET Kernel Service.
T1564.003 Hide Artifacts: Hidden Window KryptoCibule hides process windows using the windowstyle hidden option.
Discovery T1057 Process Discovery KryptoCibule uses System.Diagnostics.Process.GetProcesses to get a list of running processes.
T1082 System Information Discovery KryptoCibule obtains information about host’s timezone, locale, power status, OS and hardware.
T1083 File and Directory Discovery KryptoCibule has a component that looks for files on the local file system.  
T1518.001 Software Discovery: Security Software Discovery KryptoCibule looks for antivirus software in the root\\SecurityCenter2 → AntivirusProduct ManagementObject.
The cryptominer component is not installed if it detects an installed antivirus product.
Collection T1005   Data from Local System KryptoCibule learches all attached drives for a list of filenames .
T1119 Automated Collection KryptoCibule programmatically collect paths for files to be exfiltrated.
Command and Control T1071.001 Application Layer Protocol: Web Protocols KryptoCibule uses HTTP for C&C communication.
T1071.002  File Transfer Protocols KryptoCibule downloads updates and additional tools via BitTorrent.
T1090.003 Proxy: Multi-hop Proxy KryptoCibule bundles Tor and uses it as a SOCKS proxy to communicate with its C&C.
T1105 Ingress Tool Transfer KryptoCibule downloads additional tools using BitTorrent.
T1568 Dynamic Resolution KryptoCibule gets additional onion URIs over HTTP.
T1571 Non-Standard Port KryptoCibule uses port 9187 for SFTP server, and 9999 and 12461 for HTTP servers.
Exfiltration T1020 Automated Exfiltration Logs, file locations and system info are automatically collected and sent to the KryptoCibule C&C.
T1041 Exfiltration Over C2   Channel Logs, file locations and system info are sent via the KryptoCibule HTTP C&C channel.
T1048 Exfiltration Over Alternative Protocol KryptoCibule exfiltrates files over SFTP.
Impact T1496 Resource Hijacking KryptoCibule uses XMRig and Kawpowminer to mine cryptocurrency on victim systems.
T1565 Data Manipulation KryptoCibule replaces cryptocurrency wallet addresses in the clipboard in an attempt to hijack transfers.