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