Análisis de malware
Análisis de DarkComet: comprensión del troyano utilizado en el levantamiento sirio
16 de marzo de por Quequero
¿Se utilizó DarkComet en el conflicto sirio?
El 17 de febreroLa CNN publicó un artículo interesante, donde algunos opositores al régimen sirio afirmaban que el gobierno estaba usando un troyano para monitorear e interrumpir la red de los manifestantes. Al parecer, el régimen ha estado utilizando una conocida técnica de ingeniería social: hacerse pasar por una persona de confianza y luego atacar desde dentro. No es posible confirmar la historia, pero esto es lo que cuentan los opositores al régimen: aparentemente uno de los manifestantes fue encarcelado y rápidamente obligado a entregar sus contraseñas. Esas contraseñas sirvieron posteriormente para acceder a su cuenta de Skype e infiltrarse en la red de manifestantes, difundiendo a través del chat un programa que contenía algún código malicioso. En otros casos, el mismo archivo se entregó como una actualización de seguridad del chat de Facebook, junto con un ícono de Facebook. mientras que otras personas afirman que también fue enviado por correo. Cualquiera que sea el medio, el signo común entre todas las historias es que este archivo, después de ser abierto, simplemente no hizo nada y ni siquiera el antivirus se quejó en absoluto.
Analisis preliminar
No tenemos muchos elementos para el análisis; pero podemos especular un poco: en primer lugar, el malware no se entregó a través de un exploit sino como un simple archivo ejecutable, por lo que aparentemente no estamos ante un ataque de alto perfil. Luego, en un caso, el archivo de malware ni siquiera estaba integrado en otra aplicación, lo que reforzó la hipótesis de que el ataque, después de todo, podría haberse configurado de forma rápida y sucia. No sería demasiado irreal suponer que el malware ni siquiera fue codificado por el gobierno, sino adquirido en el «mercado negro», o peor aún, en Internet como herramienta comercial o gratuita. Afortunadamente, TrendMicro pudo recopilar dos muestras diferentes entregadas a los opositores del régimen y descubrieron que ambas eran versiones diferentes del popular DarkComet RAT.Aplicación de cambio de MAC . Esto también podría indicar que el gobierno comenzó a monitorear a los contendientes desde el comienzo mismo del levantamiento; de hecho, DarkComet v3.3 se lanzó a finales de abril de, apenas un mes después de que comenzaran las demostraciones. ¿El gobierno realmente eligió a DarkComet para luchar contra la oposición? Al parecer sí, y para nosotros es una buena oportunidad para analizar este programa para profundizar en su conocimiento y, posiblemente, poder detectarlo y eliminarlo.
¡Conviértete en un ingeniero inverso certificado!
Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender
¡Conviértete en un ingeniero inverso certificado!
Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender
DarkComet v5
En primer lugar, debemos descargar DarkComet desde su sitio web: www.darkcomet-rat.com , viene como un paquete, no requiere instalación, simplemente descomprímalo en algún lugar y ejecute DarkCometRAT.exe . Claramente tendremos que dividir la configuración en dos partes: el cliente y el servidor, opcionalmente también podemos configurar el módulo de descarga, que es el vector principal utilizado para capturar el ejecutable personalizado de la web, y aparentemente es el mismo módulo que’ Se ha utilizado en ataques sirios, por lo que puede que valga la pena echarle un vistazo. También podría ser una buena idea ejecutar todos los componentes dentro de una máquina virtual… Ya sabes, por si acaso…
Configurar el módulo del servidor
Después de abrir el cliente simplemente haga clic en el menú principal y abra la sección del módulo Servidor :
Este es el lugar donde instalaremos la puerta trasera; Vamos a utilizar una configuración plausible. Primero que nada, contu contraseña, se usará para cifrar todo el tráfico, y esto es realmente importante. Genere los nombres utilizados por la puerta trasera para el mutex y la identificación del servidor, luego, solo para hacer nuestra sesión de ingeniería inversa más interesante, active el FWB . Elija la dirección IP de la red donde desea que el objetivo infectado envíe los datos, el puerto (885 en nuestro caso) y luego configure los parámetros de Inicio del módulo :
Se le permite elegir entre varias ubicaciones predefinidas: directorio de documentos, carpeta de favoritos, escritorio, directorio de Windows, ruta de cookies, etc. En este caso, la ruta y el nombre final del archivo no son importantes, no estamos haciendo análisis forenses y sabemos exactamente qué busca, así que para tu comodidad puedes usar algo fácil de recordar. No olvide marcar la opción Instalación de persistencia . Decide si quieres o no mostrar un mensaje al iniciar la puerta trasera (yo decidí no hacerlo) y salta a la sección Module Shield :
Queremos que la puerta trasera sea lo más utilizable posible, por lo que habilitaremos solo las tres primeras opciones. En una configuración real, no me equivocaría con el firewall, UAC y la notificación AV, eso probablemente sería demasiado «ruidoso» y cualquier usuario con un poco de conocimiento sobre lo que está haciendo entenderá que algo anda mal. Después de configurar todo lo que queramos, podemos saltar a la configuración del keylogger:
El servidor ftp es opcional y sólo es necesario si desea transferir datos de registro de teclas a través de ftp. Si lo desea, configure su FTP (solo use FileZilla Server si aún no tiene uno ejecutándose) y complete las credenciales, mi contraseña es la misma que se usa para cifrar el tráfico: quepassword . Decide si quieres cambiar el ícono o estropear el archivo de hosts de la víctima y ve a la sección Crear módulo . No estamos usando el carpeta de archivos porque no se usó en el ataque original; de todos modos, si tienes curiosidad, lo que debes saber es que es un empaquetador simple que inicia un archivo y coloca el otro en el directorio %tmp%. , ejecutándolo al mismo tiempo. Eso es lo que usaría si desea vincular la puerta trasera con otro archivo legítimo.
¡Elija si le gusta su ejecutable final empaquetado o no y finalmente construya el servidor!
Configurando el descargador
Esta es la parte fácil: simplemente regrese a DarkCometRAT y elija Editar Server Downloader , solo tendrá que configurar la dirección del servidor web donde está almacenada su puerta trasera:
Configurando el cliente
Abra la opción Configuración del cliente y no olvide configurar su contraseña si desea que su objetivo se conecte nuevamente con usted:
Cualquier otra opción depende de usted y probablemente no sea necesaria para su análisis. Vuelva a DarkCometRAT y configure un socket y un puerto donde desee escuchar las conexiones; No olvides reenviar este puerto a tu computadora si estás detrás de una NAT, o habilitar UPnP:
He usado el puerto 885, el mismo usado para el ataque reportado por los manifestantes sirios, realmente no importa cuál elijas, solo asegúrate de configurar el mismo puerto tanto en el servidor como en el cliente. Finalmente estamos listos para continuar con la parte divertida.
Tasa de detección
Estas son las tasas de detección reportadas por VirusTotal para la descarga y la puerta trasera:
SHA1: 3ac42898ae92e106b8002929d50eb51b6a3dbec7
Tamaño de archivo: 3,0 KB (3072 bytes)
Nombre del archivo: downloader.exe
Tipo de archivo: Win32 EXE Relación de detección: 28/43
SHA1: 42d85163e18f35fd435b5f96a0bce10b8336b440
Tamaño de archivo: 745,0 KB (762880 bytes)
Nombre del archivo: servidor.exe
Tipo de archivo: Win32 EXE Relación de detección: 34/43
El descargador se detecta principalmente como Generic.Downloader , principalmente eso es lo que es. La mayoría de los antivirus detectan el servidor como Finlosky o W32.SpyBot , a veces realmente me pregunto qué nombres le dan las distintas empresas. Sorprendentemente, TrendMicro, el primero en analizar el malware utilizado en Siria, no detectó ninguno de ellos en el momento de escribir este artículo. Probablemente aún más sorprendente debería ser el hecho de que una herramienta pública no obtiene una tasa de detección de 43/43.
Análisis del descargador
Enciende tu desensamblador preferido y deja que ejecute nuestro pequeño descargador, como verás, el código es realmente simple:
Simplemente carga la URL binaria parcheada desde los recursos, descarga el archivo ejecutable y lo ejecuta, bastante simple. Con solo poseer este archivo, podemos recuperar el malware original, como puede ver en este volcado hexadecimal:
El nombre de archivo y la URL no están codificados ni cifrados de ninguna manera.
Análisis del servidor
Recupere el archivo malicioso de la URL indicada por el descargador y tome una instantánea limpia de su máquina virtual, en mi caso un Windows 7 de 32 bits.
Antes de ejecutar el archivo, es posible que deseemos tomar una instantánea del registro y de nuestros documentos y del directorio tmp para comprender qué archivos y entradas de registro se crean/eliminan. Para ello podemos utilizar la práctica aplicación RegShot ( http://sourceforge.net/projects/regshot/ ):
Realice la primera toma antes de ejecutar el archivo y la segunda después de ejecutarlo, de esta comparación entenderemos que se han realizado un par de cambios en nuestro sistema, los primeros archivos nuevos se han creado:
C:UsuariosQuequeroDocumentosMSDCSCdarkcomet.exe
C:UsersQuequeroAppDataLocalTempdclogs-03-09-6.dc
Luego se agregó una nueva entrada de registro:
El archivo original se oculta después de ejecutarse. Este no es un comportamiento sigiloso; Normalmente, los archivos que ejecuta no desaparecen, por lo que, a menos que otro archivo de un directorio temporal inicie su puerta trasera, la eliminación automática no es la idea más brillante. También podemos monitorear el proceso usando SysAnalyzer para saber cuáles son los procesos creados, de este análisis vemos que el backdoor usa varios ejecutables del sistema:
Lo más probable es que el proceso de Internet Explorer se haya creado para evitar el firewall. Por lo tanto, podemos sospechar fuertemente que el código de la puerta trasera se inyecta en ese proceso. Ahora ejecutemos GMER, un popular detector de rootkits, en nuestro sistema. GMER es bastante avanzado e implementa una variedad de técnicas que pueden detectar muchos rootkits comunes, veamos qué sucede:
De hecho, GMER no detecta nada, esto significa que DarkComet no está utilizando ninguna técnica de rootkit o que es tan avanzado que incluso engaña a GMER. Al menos al usar el administrador de archivos de GMER vemos que el archivo original todavía está en el escritorio pero oculto a la vista:
C:UsersQuequeroDesktopattrib server.exe
A SH IC: UsuariosQuequeroDesktopserver.exe
Si tiene curiosidad, RootkitUnhooker e incluso Volatility no detectan nada sospechoso aquí… El codificador de DarkComet gana sin lugar a dudas en esto.
Hasta ahora tenemos sólo algunas pistas de que DarkComet se está ejecutando en nuestro sistema, realicemos algunas comprobaciones en el tráfico de nuestra red. Para ello ejecutamos Wireshark:
Como puede ver, el tráfico de DarkComet es bastante notable, intentemos seguir la transmisión:
Aparentemente es solo un montón de datos, lo más probable es que el tráfico esté encriptado, así que use su cinturón Samurai y encienda su depurador preferido, ¡tenemos un algoritmo y una clave para encontrar!
Profundizando en el depurador
Necesitamos conectarnos a la puerta trasera, pero pronto descubrirá que la opción FWB impide que la puerta trasera funcione correctamente si el depurador está activo. No vamos a desactivar la opción porque pretendemos estar analizando un malware real, por lo que eliminaremos la puerta trasera y la ejecutaremos desde el depurador. Justo arriba hemos visto que DarkComet probablemente se ejecuta desde dentro del proceso de Internet Explorer, así que simplemente elimínelo y la puerta trasera (para mi sorpresa) no reaparecerá. Luego apunte su depurador a la ruta de instalación y ejecútelo. Para esta tarea he utilizado OllyDbg v2.0-alpha4 ( www.ollydbg.de ) y el archivo de puerta trasera instalado en mi directorio de Documentos . Comienza tu proceso y sigue algunas instrucciones después del punto de entrada, hasta llegar aquí:
DarkComet carga la contraseña del binario y la usa para el motor de cifrado. Intentar encontrar la contraseña en el ejecutable no le llevará a ninguna parte, por la sencilla razón de que la contraseña original está cifrada. Definitivamente es una buena idea y profundizaremos en el esquema de cifrado en un momento, por ahora podemos avanzar un poco más hasta que recuperemos más información, como la dirección del servidor CC:
En este caso es 192.168.150.129 en el puerto 885, también podemos recuperar la ruta de instalación completa:
Y de la misma forma también la dirección ftp, puerto, contraseña, usuario y todo lo que hayamos configurado durante la fase de construcción. Todas estas opciones están codificadas en cadenas en el binario final y encriptadas, como un intento de evitar la divulgación de datos «sensibles» y proteger al usuario. Esta es una decisión inteligente, por supuesto, y queremos comprender mejor el algoritmo de cifrado y la clave original utilizada. De esta forma podremos descifrar el tráfico de red de una máquina infectada e incluso tomar el control de un objetivo ya infectado, para eliminar el malware del mismo.
Reinicie el malware desde el depurador y comience a rastrear la primera llamada que carga el recurso «PWD» del archivo:
Sigue siguiéndolo y eventualmente llegarás aquí:
Verifique la ventana de registro:
Encontrarás dos cadenas interesantes, toma nota de sus valores y continúa un poco más en la misma función hasta llegar aquí:
Este bucle es particularmente interesante por varias razones: en primer lugar, hay un gran búfer que se reorganiza continuamente y luego un xor que utiliza los valores extraídos del búfer. Definitivamente estamos ante algún tipo de algoritmo de cifrado, pero ¿cuál? Tuve que volver a lápiz, papel y IDA para descubrirlo, y aunque reconozco bastante rápido un algoritmo de cifrado al desensamblarlo, este me llevó algunos minutos. ¿Así que qué es lo? ¡El viejo RC4! Solo con algunas optimizaciones introducidas por el compilador que agregan entropía al grupo, lo que lo hace un poco más difícil de reconocer a primera vista. Para evitar dudas simplemente reconstrúyalo desde el Desensamblador (IDA en este caso):
Ahí lo tienes, seguro que es RC4 y este es el primer paso de la inicialización de la permutación. Entonces tenemos el algoritmo:
RC4 es un algoritmo amado por casi todos. Es un cifrado de flujo, por lo que no tendrá que lidiar con el relleno, es fácil de entender, breve y rápido. La desventaja es que es tremendamente fácil de utilizar de forma incorrecta, pero esta es otra historia. Aparentemente el algoritmo se inicializa con una clave fija «#KCMDDC5#-890» y esta clave se usa para descifrar una cadena: «2955B175B3D8DFAFF28DFF». Para comprobar si estaba en lo cierto, escribí una aplicación auxiliar que implementa RC4, este fue el resultado:
./rc4 –k «#KCMDDC5#-890» –d 2955B175B3D8DFAFF28DFF
salida: quecontraseña
¡Oh mira! ¡Esta es la contraseña que configuramos durante el paso de configuración! Entonces, para evitar almacenar la contraseña en texto sin cifrar, se ha cifrado con una contraseña predeterminada codificada en formato binario. La misma clave también se usa para descifrar todas las demás configuraciones; más adelante encontrará otras cadenas:
./rc4 –k «#KCMDDC5#-890» –d 1C638B4887FFE980B0AEEE23
salida: DC_MUTEX-Que
Pero si intentas usar la misma contraseña para descifrar el tráfico de la red, terminarás con un montón de basura. Para comprender por qué tendrá que conectarse a uno de los subprocesos que se utilizan para comunicarse con el servidor CC:
Al intentar seguir la función que cifra el tráfico, descubrirá que el algoritmo utilizado es el mismo (una vez más: RC4) pero la clave utilizada se crea concatenando la contraseña codificada con la que elegimos en el momento de la configuración. en nuestro caso:
#KCMDDC5#-890 quecontraseña
Si intenta no utilizar una contraseña, el tráfico seguirá cifrado:
Esta vez con el código fijo: «#KCMDDC5#-890». Si intenta descifrar parte del volcado anterior con la clave correcta, obtendrá los comandos de texto sin cifrar:
SERVIDOR
ObtenerSIN192.168.150.137|243968
registrador de teclas
Una función interesante es, por supuesto, el keylogger, como hemos visto arriba, se crea un archivo en el directorio temporal del usuario:
C:UsersQuequeroAppDataLocalTempdclogs-03-09-6.dc
Al abrirlo se revelarán los datos del keylogger:
No está claro por qué este archivo se dejó visible y en texto claro; de todos modos, los datos se agregarán aquí y se enviarán a través de ftp, si está habilitado, cuando el archivo de registro alcance un tamaño determinado en kilobytes (variable FTP_SIZE en el ejecutable):
EDX apunta al tamaño, que se muestra en la imagen de arriba, con el valor ASCII de 0x31 que significa «1» Kb. Pero, ¿cómo se realiza el registro de teclas? Dado que la puerta trasera no ha cargado ningún controlador, debemos asumir que hace algo en el espacio de usuario y, de hecho, este es el caso; de hecho, el hilo de registro de teclas simplemente llamará a SetWindowsHook para recibir las notificaciones del teclado:
Lo que marqué como hookProc se encarga del procesamiento de datos del teclado, hay un gran interruptor que identifica cada pulsación de tecla, incluidas las teclas especiales:
Cada pulsación de tecla se procesa en consecuencia y luego se registra en el directorio que se muestra arriba:
Inyección
Para evitar un firewall que podría estar en uso en el sistema de la víctima, DarkComet utiliza un truco simple pero efectivo: simplemente inyecta el código de comunicación en un proceso que puede pasar a través del firewall, en este caso es Internet Explorer, confirmando así a nuestros sospechosos. . La inyección se realiza de esta manera: primero se identifica Internet Explorer, se abre en segundo plano, se suspende, luego se asigna algo de memoria «extra» al proceso y el código de DarkComet se copia dentro de este nuevo buffer, después de lo cual se reanuda el proceso. La rutina que se encarga de la inyección es, en parte, la siguiente:
A confirmation that Internet Explorer is used to send the traffic can be obtained simply by inspecting the «hidden» process with ProcessExplorer:
Also in the same way we can identify the backdoor’s mutex:
During the analysis through the disassembler you won’t be able to find references to the entire API used by the binary, this is because a lot of them are resolved directly using GetProcAddress and then stored into pointers available to the backdoor:
To find where they are resolved, simply look all the X-refs to GetProcAddress and follow them one by one, to give you an idea that’s what you’re going to find:
It won’t take long to give a name to every pointer and it will be of great help, should you decide to proceed by yourself with the analysis of the binary.
Detection clean up
Detecting DarkComet, in some situation, can be non-trivial. We have examined just one possible case, the backdoor can be stored anywhere, with any name, packed with any packer. The best solution would be to use DarkComet Removal Tool from the home page of the RAT, anyway if you don’t totally trust the author on that there are still come clues you can catch:
- Monitor the traffic, KEEPALIVE messages are always sent in clear and the traffic patterns are pretty constant in time
- Check for FTP data, keylogger can be configured to deliver keystrokes this way, in clear
- Check for hidden instances of iexplore.exe, use ProcessExplorer to see if it’s making traffic
- Check for unknown values in HKCU/Software/Microsoft/Windows/CurrentVersion/Run/
- Check for unknown values in HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon into the «Userinit» key, this is another path used by the backdoor to run at startup
- Check for an empty link into the programsstartup section in the start menu
- Check for the existence of %tmp%/dclogs/ directory, that’s where you’ll find keylogger’s data
Detecting the keylogger might not be that easy, you’ll have to walk down the hook chain to find it. This is fun but out of the scope of this article, maybe we’ll analyze some keylogging detection techniques in a future article.
Once you have identified the threat remove the registry entries, kill the hidden iexplore.exe, remove the logs directory, remove the executable (you can retrieve the installation path directly from the registry) and reboot. Don’t foget that with the knowledge acquired so far you’ll also be able to extract the password from any DarkComet sample. This way you’ll be able to dump the configuration and understand exactly what the Trojan is doing on a given system and where it is sending the data.
The author knew it?
It’s easy to raise a question: did the author know, or was in some way involved with the Syrian accident? Did he support the government? I have no doubt that DarkCoderSc (this is the name) had nothing to do with it. DarkComet is a really popular tool, counting around 1000 downloads a day and used worldwide. There’s no reason to think he gave any help, and from what we know the binary discovered in Syria had nothing different, or special, from the stock one. So he wasn’t even involved in any «customization» created ad-hoc for that attack, what’s more probable is that he found out about the infection the same way we did: reading some newspaper. Anyway I eventually came in contact with him, that’s what he replied:
Q: Did you know the Syrian government was using your tool to make investigations on the insurgents?
D: At first I wasn’t aware of this.
Q: What was your opinion on the issue?
D: My opinion is that I never ever have supported these kinds of misuse of my software!
Q: How did you find out and what was your first reaction to the news?
I discovered it when someone mailed me a link to a German newspaper that was talking about the Syrian civil war and that the government was spying on their own people by using a software called DarkComet. When I read this news, my first reaction was to be really shocked. I was also afraid because there is a real war going on in Syria, so it was very serious. My second reaction was to offer publicly my excuses to the Syrian people that have been spied on by my tool and make them understand that I never wanted this to happen. I still feel very sorry about what happened. My software was never designed for these kinds of uses.
Q : So why do you think they’ve been using DarkComet among a variety of RATs available?
My opinion is firstly because DarkComet RAT is a well known type of software and 100% free. Secondly this tool provides hundreds of functions and thousands of possibilities on one or more computers and it is, of course, very stable and fast.
His position is totally understandable and a couple days after the interview he also released DarkComet Removal Tool, still available on the website, that can be used to scan and clean a computer.
Conclusion
DarkComet is a really powerful tool; it can be used to spy on people, steal data and turn a computer into a zombie, but also to remotely administrate a machine that’s physically far from us. It literally has countless functions to rely on. So it’s just the old debate: is the tool the problem, or how people use it? From my perspective it gave us a good opportunity to study and learn; now you’re able to easily detect it and you shouldn’t be afraid anymore. I didn’t show you the administration part or what are all the capabilities of this RAT, since it can be fun, I suggest you to play a bit with this tool with your virtual machines. Also you can spend some time studying the binary to understand how some of the functions are implemented, like the HTTP flood or the upload and run feature.