Encontrar malware en una computadora es desagradable. Es todavía peor cuando el payload está cifrado. En este blog, haremos ingeniería inversa de una DLL de Redosdru cifrada para entender mejor la amenaza que descubrimos dentro de la red de nuestro socio.
Escondido dentro del directorio C:\Windows\System32 había un binario llamado "wshom.exe". Al inspeccionar manualmente el encabezado del archivo con un editor hexadecimal, notamos que había sido empaquetado con UPX.
SHA256:e62d433e662bff743e8d0fc554c2308db6c72fa500e64091d76e127445f337e1
Usando el software gratuito UPX, descomprimimos/desofuscamos wshom.exe con el argumento "-d".
SHA3256:3edfe93173f368fe5a29e0905fb17996584d4380b48e05b84fe56cc9aac090d1
Con el PE sin procesar, inspeccionamos rápidamente el desensamblado para determinar qué ocurría por debajo. Casi de inmediato, descubrimos varias rutas hacia una función que recibía un buffer en Base64 y luego descargaba un archivo.
En lugar de pasar tiempo recorriendo el código con un depurador, simplemente ejecutamos el ejecutable e inspeccionamos las cadenas de wshom.exe en memoria con Process Explorer de Sysinternals.
A partir de aquí, fue evidente que se trataba de un dropper que obtenía "NetSyst88.dll" desde hxxp://xiqiao2.f3322.org por el puerto 2014 y lo colocaba dentro de Program Files\AppPatch. También lo verificamos con ProcMon y Wireshark:
Cifrado de payloads para evitar la detección
Con un editor hexadecimal, notamos que a NetSyst88.dll le faltaban los encabezados MZ y PE. Esto generalmente indica algún tipo de rutina de cifrado/ofuscación que ayuda al autor del malware a evadir los productos de seguridad que inspeccionan archivos en disco. Tras algo de investigación en línea, concluimos que esta DLL estaba relacionada con la familia de malware Redosdru.
SHA256:3394755E45B6CBA8FD63160512A847533DE89CD88BD8EEC3251623E85F67E987
No estaba claro cómo se usaba esta DLL cifrada y ningún otro recurso en línea documentaba esta rutina. Entonces, decidimos volver a examinar lo que ocurría después de que se descargaba NetSyst88.dll. Descubrimos que wshom.exe verifica la existencia de archivos dentro de Program Files\AppPatch y, una vez que eso se cumple, llama a la función sub_401DA0. Dentro de esta función, vimos cómo cargaba la cadena "Kother599" en la pila y llamaba a una rutina de descifrado.
Como la DLL descifrada nunca se escribió en el disco, tuvimos que colocar un punto de interrupción inmediatamente después del descifrado para extraer la DLL en bruto desde la memoria.
Capacidades de la DLL descifrada
Ahora que teníamos una DLL descifrada, estábamos ansiosos por ver el propósito del payload. Después de descomprimir el wrapper UPX, sus importaciones y exportaciones nos dieron todo lo que necesitábamos:
Tal como esperábamos, el payload incluía varias funciones comunes en la mayoría de los implantes, entre ellas:
- Registro de pulsaciones de teclado
- Gestión de usuarios y grupos
- Finalización de programas
- Recolección de datos del portapapeles
Con esta información, pudimos asesorar con experiencia a nuestro socio afectado sobre las capacidades de su atacante, los riesgos para su cliente y los lugares adicionales que debían inspeccionarse en busca de actividad maliciosa.
¿Listo para encontrar hackers en tu red? Regístrate para obtener nuestra Prueba gratuita de 21 días
En Huntress Labs creemos que la mejor defensa es un buen ataque. Hemos dedicado nuestras carreras a sortear productos de seguridad preventiva para mantenernos un paso adelante de los actores maliciosos. Esta mentalidad permite que nuestros productos y analistas enfrenten las amenazas de frente. Como resultado, obligamos a los hackers a ganarse cada centímetro de acceso dentro de las redes que protegemos y monitoreamos.