A finales de la semana pasada me pasaron un
pendrive infectado y me solicitaron encontrar la muestra de infección.
El pendrive montaba dos particiones, en la primera
se encontraban multitud de ficheros .html, .pdf y .doc, que tras su revisión,
no se podían calificar de maliciosos.
En la segunda partición, denominada: Temporal, había:
1.-
Directorio simulado (extensión .lnk) de nombre: Documentación.
Este
enlace contenía la sentencia de ejecución:
C:\windows\system32\wscript.exe //E:vbscript MSShell32 /e
"Documentacion" c4bbf69c54 0PQ6UF56EI28DK16Y51OZ06FE
2.-
Directorio simulado (extensión .lnk) de nombre: Private
Este
enlace contenía la sentencia de ejecución:
C:\windows\system32\wscript.exe //E:vbscript MSShell32 /e
"Private" c4bbf69c54 US1L8U6H
3.-
Archivo con caracteres: SHR
(Sistema, oculto y de sólo lectura), de nombre: MSShell32.
Obviamente, la muestra buscada era el archivo
oculto a nuestros ojos.
Se solicito
información a VT (VirusTotal), mostrando:
Una vez confirmado que se había encontrado la
muestra buscada, se procedió a revisar el código de la muestra.
Parte del
código encontrado.
Como se puede apreciar, el texto se encuentra
ofuscado de alguna manera, ya que hay texto legible, o más bien, comandos
compresibles y otras cosas.
Revisando más profusamente, se puede ver alguno de
los métodos de ofuscación seguidos.
Función: MAPqXqZH y uso del
comando: SPLIT
La variable EVOIVHHL
juega con la función: MAPqXqZH (en
sus distintas variantes, que son la misma, al no hacer distinción entre
mayúsculas y minúsculas en Visual Basic). Además, se puede ver el uso de la función
SPLIT.
NOTA: La
base de conocimientos de Microsoft,
define dicha función como: Divide una cadena en sub-cadenas basadas en los caracteres de
una matriz.
Personalmente
la definiría como: función que divide una cadena en distintas sub-cadenas
delimitadas por el carácter pasado como separador.
-----------------------------------------------------------------------------------------------------------------
Profundizando un poco más, se puede ver que la
función: MAPqXqZH, trabaja con la función:
REPLACE.
NOTA: La
base de conocimientos de Microsoft,
define dicha función como: Devuelve una cadena en la que se ha reemplazado una subcadena
especificada con otra subcadena un número especificado de veces.
Personalmente
la definiría como: función que sustituye un carácter indicado por otro carácter
también indicado dentro del texto proporcionado.
Función: MAPqXqZH
El código encontrado entonces quedaría de la
siguiente manera:
Código encontrado, maquillado
para su mejor comprensión.
En este punto, se descubre la función: LMCEXKJ, que al igual que la función: MAPqXqZH, trabaja con la función REPLACE.
En cualquier caso, se procede a transformar el
código anterior en algo mas legible, para lo cual se procede a sustituir las
funciones: CHR, por lo valores ASCII
correspondientes:
Código encontrado, de nuevo, maquillado
para su mejor comprensión.
Ya se van viendo cosas más comprensibles, aunque se
continua haciendo el código más legible, utilizando la nueva información
obtenida. Se obtiene:
Código encontrado, de nuevo, maquillado
para su mejor comprensión.
Al final, tras hacer la labor a mano, se obtiene un
código como el siguiente:
Código encontrado. Esta vez,
sólo nos quedaría ejecutar la función: LMCEXKJ.
Si ejecutamos las funciones: LMCEXKJ y SPLIT, el texto a descodificar se queda como sigue.
Código a descodificar
Si con el anterior código realizamos su
transformación a código ASCII, tal y como nos indica el siguiente código:
Código que solicita la
transformación a código ASCII de cada uno de los dígitos encontrados
Obtenemos:
Código ASCII
El código devuelto es legible en parte, por lo
tanto ... ¡este es el método!.
Pero, algo no se hizo, por lo que se pasó al método
rápido.
Este método consiste en dejar que el bicho se
"ejecute", con la intención de descodificarlo correctamente. Pero que
en vez de dejarle que se ejecute tal cual, se programará el código para que este
se almacene en un archivo y así saciar nuestra curiosidad. Para ello hay que
cambiar el comando donde se ejecuta el código decodificado por la llamada a una
función que almacena en un archivo el código a ejecutar.
Llamada a la función:
VOLCARDATOS()
Tarea que realiza la función: VOLCARDATOS()
Tras realizar los cambios y ejecutar el código,
obtenemos el archivo: CodigoMalwar,
cuyo inicio se puede ver en la siguiente imagen.
Malware totalmente
decodificado.
1.- Se trata de algo más que un simple downloader.
2.- Crea un mutex de
nombre: c4bbf69c54
3.- Obtiene información del sistema que
posteriormente cifra en RC4 mediante la contraseña de cifrado: B7248B83465C20C086AB3EDF5A6623E0C,
envía.
Variables relacionadas con los puntos anteriores.
4.- Genera
múltiples entradas en el registro de Windows para su persistencia
- 4.1.- HKCU\software\MSShell32\d -> almacena la fecha de la primera infección
- 4.2.- HKCU\software\MSShell32\c -> almacena "true" si el primer parámetro pasado existe dentro del sistema como directorio
- 4.3.- HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MSShell32 -> persistencia del malware
- 4.4.- HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden -> obliga al sistema a mantener ocultos los archivos con el atributo de oculto activado
- 4.5.- HKCU\Software\Microsoft\Windows\Currentversion\Explorer\Advanced\HiddenFileExt -> obliga al sistema a mantener las extensiones de los archivos ocultas
5.- Se producen comunicaciones contra:
- 5.1.- music4you.ddns.net/?hdr=info, por el puerto 37556
- 5.2.- tinyworld.duckdns.org/?hdr=info, por el puerto 37556
- 5.3.- scrabble.crabdance.com/?hdr=info, por el puerto 37556
Lo que hagas con la información
es cosa tuya, no mía ... pero ten conciencia
No hay comentarios:
Publicar un comentario