El grupo de espionaje Turla ha estado apuntando a varias instituciones durante muchos años. Recientemente encontramos varias nuevas versiones de Carbon, un backdoor que participa en la segunda instancia del proceso de infección y forma parte de su arsenal.

El año pasado, el GovCERT.ch de Suiza hizo un análisis técnico de este componente como parte de su reporte, detallando el ataque que una firma de defensa propiedad del gobierno suizo, RUAG, había sufrido anteriormente.

En este artículo remarcamos las innovaciones técnicas que encontramos en las últimas versiones de Carbon que descubrimos.

Echando un vistazo a sus diferentes números, está claro que Carbon todavía está siendo desarrollado activamente. A través de las versiones internas embebidas en el código, vemos que las nuevas se lanzan en forma regular. El grupo también es conocido por cambiar sus herramientas una vez que fueron expuestas; hemos visto que entre dos grandes lanzamientos, los mutexes y nombres de archivo están cambiando.

Vectores de infección

El grupo Turla es muy cuidadoso y trabaja en etapas, primero haciendo un reconocimiento en el sistema de su víctima antes de liberar allí sus herramientas más sofisticadas, como Carbon.

El proceso clásico que involucra a este componente comienza cuando el usuario recibe un correo de phishing dirigido (spear phishing) o visita un sitio web previamente comprometido, generalmente uno que visita regularmente y es factible de levantar menos sospechas; esta técnica se denomina ataque watering hole.

Si el ataque es exitoso, se instala en la máquina un backdoor de primera instancia como Tavdig o Skipper. Cuando termina la fase de reconocimiento, se instala un backdoor de segunda instancia, como Carbon, en los sistemas clave.

Análisis técnico

Carbon es un backdoor sofisticado usado para robar información sensible de objetivos que resultan de interés para Turla.

Este malware comparte algunas similitudes con Uroburos, un rootkit que usa este mismo grupo. La coincidencia más relevante está en la estructura de comunicación, ya que ambos proveen canales de comunicación entre diferentes componentes del malware. Los objetos se implementan de la misma manera y las estructuras y tablas virtuales lucen idénticas, excepto que hay menos canales de comunicación provistos por Carbon. De hecho, Carbon podría ser una versión limitada de Uroburos, sin componentes de kernel y sin exploits.

En resumen: para que Turla decida instalar Carbon en un sistema, generalmente se envía una herramienta de reconocimiento de "fase 1" al blanco, la cual recolecta información diversa sobre la máquina de la víctima y su red, como es el caso de Tavdig o Skipper, por ejemplo. Si se considera a este objetivo lo suficientemente interesante, recibirá un malware más sofisticado, como Carbon o Uroburos.

Entonces, la estructura de Carbon está compuesta por:

  • Un dropper que instala sus componentes y su archivo de configuración
  • Un componente que se comunica con el C&C
  • Un despachador que maneja las tareas, las despacha a otras computadoras de la red e inyecta en un proceso legítimo al DLL que se comunica con el C&C
  • Un loader que ejecuta al despachador

Archivos de Carbon

Los archivos de la estructura de Carbon pueden tener diferentes nombres dependiendo de la versión, pero mantienen el mismo nombre interno (de los metadatos) sin importar la versión:

  • El dropper: "SERVICE.EXE"
  • El loader: "SERVICE.DLL" o "KmSvc.DLL"
  • El despachador: "MSIMGHLP.DLL"
  • La librería inyectada: "MSXIML.DLL"

Cada uno de estos archivos existen en 32 bits y 64 bits.

Directorio de trabajo

Carbon crea varios archivos para mantener registros, tareas a ejecutar y configuración que modificará el comportamiento del malware. El contenido de la mayoría de estos archivos se cifra con el algoritmo CAST-128.

Un directorio de trabajo base contendrá los archivos/carpetas relacionados a Carbon; se elige en forma aleatoria entre las carpetas en %ProgramFiles% pero excluyendo "WindowsApps".

Los nombres de archivo están codificados en el despachador y se usan los mismos en la variante 3.7x; dado que la librería inyectada accede a los mismos archivos que el despachador, es otra forma fácil de enlazar una versión de librería con un despachador.

Vista del árbol de archivos de Carbon 3.7x:
\%carbon_working_folder\%   // carpeta base
├── 0208 // resultados de tareas y registros de archivos
│   ├── C_56743.NLS // contiene la lista de archivos a enviar al servidor de C&C; no está comprimido ni cifrado
├── asmcerts.rs
├── getcerts.rs
├── miniport.dat  // archivo de configuración
├── msximl.dll    // librería inyectada (x32)
├── Nls // contiene tareas (comandos a ser ejecutados o archivo PE) y sus archivos de configuración
│   ├── a67ncodc.ax  // tareas a ser ejecutadas por el despachador
│   ├── b9s3coff.ax  // tareas a ser ejecutadas por la librería inyectada
├── System   // carpeta de plugins
│   ├── bootmisc.sdi // no utilizado
├── qavscr.dat    // registro de errores
├── vndkrmn.dic   // log
└── ximarsh.dll   // librería inyectada (x64)

Desde la versión 3.80, todos los nombres de archivo han cambiado.

Vista del árbol de archivos de Carbon 3.8x:
\carbon_working_folder\%   // carpeta base
├── 0409  // contiene tareas (comandos a ser ejecutados o archivo PE) y sus archivos de configuración
│   ├── cifrado.xml    // tareas a ser ejecutadas por la librería inyectada
│   ├── encodebase.inf // tareas a ser ejecutadas por el despachador
├── 1033 // resultados de tareas y registros de archivos
│   ├── dsntype.gif // contiene la lista de archivos a enviar al servidor de C&C; no está comprimido ni cifrado
├── en-US  // carpeta de plugins
│   ├── asmlang.jpg // no utilizado
├── fsbootfail.dat  // registro de errores
├── mkfieldsec.dll  // librería inyectada (x32)
├── preinsta.jpg    // log
├── wkstrend.xml    // archivo de configuración
├── xmlrts.png
└── zcerterror.png

Acceso a archivos

En la mayoría de los archivos de la carpeta de trabajo de Carbon, cuando el malware accede a uno, se dan los siguientes pasos:

  • Se usa un mutex específico para asegurar su acceso exclusivo
  • Se descifra el archivo (CAST-128)
  • Cuando las operaciones en el archivo terminaron, se vuelve a cifrar (CAST-128)
  • Se libera el mutex

Mutexes

En Carbon 3.7x el despachador crea los siguientes mutexes:

  • "Global\\MSCTF.Shared.MUTEX.ZRX" (usado para asegurar acceso exclusivo a "vndkrmn.dic")
  • "Global\\DBWindowsBase" (usado para asegurar acceso exclusivo a "C_56743.NLS")
  • "Global\\IEFrame.LockDefaultBrowser" (usado para asegurar acceso exclusivo a "b9s3coss.ax")
  • "Global\\WinSta0_DesktopSessionMut" (usado para asegurar acceso exclusivo a "a67ncodc.ax")
  • "Global\{5FA3BC02-920F-D42A-68BC-04F2A75BE158}" (usado para asegurar acceso exclusivo a nuevos archivos creados en la carpeta "Nls")
  • "Global\\SENS.LockStarterCacheResource" (usado para asegurar acceso exclusivo a "miniport.dat")
  • "Global\\ShimSharedMemoryLock" (usado para asegurar acceso exclusivo a "asmcerts.rs")

En Carbon 3.8x, los nombres de archivo y de mutex han cambiado:

  • "Global\\Stack.Trace.Multi.TOS" (usado para asegurar acceso exclusivo a  "preinsta.jpg")
  • "Global\\TrackFirleSystemIntegrity" (usado para asegurar acceso exclusivo a "dsntype.gif")
  • "Global\\BitswapNormalOps" (usado para asegurar acceso exclusivo a "cifrado.xml")
  • "Global\\VB_crypto_library_backend" (usado para asegurar acceso exclusivo a "encodebase.inf")
  • "Global\{E41B9AF4-B4E1-063B-7352-4AB6E8F355C7}" (usado para asegurar acceso exclusivo a nuevos archivos creados en la carpeta "0409")
  • "Global\\Exchange.Properties.B" (usado para asegurar acceso exclusivo a "wkstrend.xml")
  • "Global\\DatabaseTransSecurityLock" (usado para asegurar acceso exclusivo a "xmlrts.png")

Estos mutexes también se usan en el DLL inyectado para asegurar que el despachador se ha ejecutado.

Archivo de configuración

El archivo de configuración afecta el comportamiento del malware. Su formato es similar a los "inf" usados en Windows.

Contiene, entre otras cosas:

  • Un "object_id" que es un uuid único usado para identificar a la víctima; cuando el valor no está fijado en el archivo, el malware lo genera en forma aleatoria
  • Una lista de procesos en la cual se inyecta código (iproc)
  • La frecuencia y hora de ejecución de tareas, registros de backup y conexiones al C&C ([TIME])
  • Las direcciones IP de otras computadoras en la red ([CW_LOCAL])
  • Las direcciones del servidor de C&C ([CW_INET])
  • Los atajos con nombre que se usan para comunicarse con la librería inyectada y con los otros componentes ([TRANSPORT])

Puede que este archivo se actualice más adelante.

De hecho, en la librería de comunicaciones, algunas llaves criptográficas se usan para cifrar/descifrar datos y se obtienen de la sección [CRYPTO] en el archivo de configuración, la cual no existe cuando el archivo se ejecuta desde los recursos del loader.

Archivo de configuración de Carbon 3.77:
[NAME]
object_id=
iproc = iexplore.exe,outlook.exe,msimn.exe,firefox.exe,opera.exe,chrome.exe
ex = #,netscape.exe,mozilla.exe,adobeupdater.exe,chrome.exe


[TIME]
user_winmin = 1800000
user_winmax = 3600000
sys_winmin = 3600000
sys_winmax = 3700000
task_min = 20000
task_max = 30000
checkmin = 60000
checkmax = 70000
logmin =  60000
logmax = 120000
lastconnect=111
timestop=
active_con = 900000
time2task=3600000


[CW_LOCAL]
quantity = 0

[CW_INET]
quantity = 3
address1 = doctorshand.org:80:/wp-content/about/
address2 = www.lasac.eu:80:/credit_payment/url/
address3 = www.shoppingexpert.it:80:/wp-content/gallery/

[TRANSPORT]
system_pipe = comnap
spstatus = yes
adaptable = no


[DHCP]
server = 135


[LOG]
logperiod = 7200

[WORKDATA]
run_task=
run_task_system=

Archivo de registro

Se usa para registrar acciones ejecutadas por el malware e información del sistema que puede ser útil para el atacante; por ejemplo, si se está ejecutando una herramienta de análisis como WireShark.

Su formato no ha cambiado desde Carbon 3.71:

  • Date|Time|Object-Id|Source|Message
Ejemplo:
[LOG]
start=1
20/02/17|12:48:24|8hTdJtUBB57ieReZAOSgUYacts|s|OPER|New object ID generated '8hTdJtUBB57ieReZAOSgUYacts'|
20/02/17|12:48:24|8hTdJtUBB57ieReZAOSgUYacts|s|ST|3/81|0|
20/02/17|12:48:24|8hTdJtUBB57ieReZAOSgUYacts|s|START OK

Este archivo se respalda periódicamente y se envía al C&C.

¿Te interesa conocer más detalles técnicos sobre Carbon? En el análisis completo, disponible en inglés, encontrarás mas información sobre el dropper, el loader, el despachador, la ejecución de tareas, los canales de comunicación, el envío de tareas a otros equipos, los componentes cifrados y más.

La huella de Carbon

Tabla 1: Hashes de las muestras de Carbon

Hash SHA1
7f3a60613a3bdb5f1f8616e6ca469d3b78b1b45b
a08b8371ead1919500a4759c2f46553620d5a9d9
4636dccac5acf1d95a474747bb7bcd9b1a506cc3
cbde204e7641830017bb84b89223131b2126bc46
1ad46547e3dc264f940bf62df455b26e65b0101f
a28164de29e51f154be12d163ce5818fceb69233
7c43f5df784bf50423620d8f1c96e43d8d9a9b28
7ce746bb988cb3b7e64f08174bdb02938555ea53
20393222d4eb1ba72a6536f7e67e139aadfa47fe
1dbfcb9005abb2c83ffa6a3127257a009612798c
2f7e335e092e04f3f4734b60c5345003d10aa15d
311f399c299741e80db8bec65bbf4b56109eedaf
fbc43636e3c9378162f3b9712cb6d87bd48ddbd3
554f59c1578f4ee77dbba6a23507401359a59f23
2227fd6fc9d669a9b66c59593533750477669557
87d718f2d6e46c53490c6a22de399c13f05336f0
1b233af41106d7915f6fa6fd1448b7f070b47eb3
851e538357598ed96f0123b47694e25c2d52552b
744b43d8c0fe8b217acf0494ad992df6d5191ed9
bcf52240cc7940185ce424224d39564257610340
777e2695ae408e1578a16991373144333732c3f6
56b5627debb93790fdbcc9ecbffc3260adeafbab
678d486e21b001deb58353ca0255e3e5678f9614
Tabla 2: Dirección del servidor de C&C
Dirección del servidor de C&C
soheylistore.ir:80:/modules/mod_feed/feed.php
tazohor.com:80:/wp-includes/feed-rss-comments.php
jucheafrica.com:80:/wp-includes/class-wp-edit.php
61paris.fr:80:/wp-includes/ms-set.php
doctorshand.org:80:/wp-content/about/
www.lasac.eu:80:/credit_payment/url/