martes, 20 de marzo de 2018

Otro "malware" a la cesta de peces


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.

 Aunque se sigue analizando el código por pura diversión, se pasa a comentar los datos más importantes para poder generar las reglas de mitigación necesarias.

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




miércoles, 7 de marzo de 2018

Process Hollowing, otra manera de infección y no es nueva.


El día 5 de marzo leía la entrada del siguiente blog: 

http://antonioparata.blogspot.com.es/2017/11/shed-inspect-net-malware-like-sir.html

Cuando hubo una frase que me llamó la atención:

"The main problem with this approach is that by now most of the malware use Process Hollowing ([1]) to inject its content in a newly created process."

TRADUCCIÓN: "El principal problema con este enfoque es que ahora la mayoría de malware usa Process Hollowing para inyectar su contenido en un proceso creado de cero".

Me pregunté, ¿en qué consiste "Process Hollowing"?.

Para resolver la duda seguí la referencia marcada en el propia entrada:

https://attack.mitre.org/wiki/Technique/T1093

En la página web de información se puede leer:

"Process hollowing occurs when a process is created in a suspended state then its memory is unmapped and replaced with malicious code. Similar to Process Injection, execution of the malicious code is masked under a legitimate process and may evade defenses and detection analysis."

TRADUCCIÒN: "Process hollowing ocurre cuando un proceso es creado en un estado suspendido, entonces su memoria es des-mapeada y reemplazada con código malicioso. Igual que Process Injection, la ejecución de código malicioso está enmarcada bajo un proceso legítimo y puede evadir defensas y análisis de detección"

¡Muy interesante!

Pero, como se contrarresta está técnica o cuál es la contramedida.

Bueno pues está contramedida no existe, debido a que estamos hablando de una característica propia del sistema operativo.

"This type of attack technique cannot be easily mitigated with preventive controls since it is based on the abuse of operating system design features. "

TRADUCCIÓN: "Este tipo de técnicas de ataque no pueden ser fácilmente mitigadas con controles preventivos ya que está basado en el abuso de características de diseño del sistema operativo"

Por lo tanto lo único que se puede hacer es analizar el comportamiento del proceso lanzado para detectar patrones sospechosos, es decir, nos conminan a analizar todo ejecutable que llegue a nuestra organización antes de ejecutarlo en su destino final.

Si en nuestro análisis estático encontráramos las APIs: ZwUnmapViewOfSection o NtUnmapViewOfSection, podríamos estar ante una muestra que usa: Process Hollowing.

"Monitoring API calls may generate a significant amount of data and may not be directly useful for defense unless collected under specific circumstances for known bad sequences of calls, since benign use of API functions may be common and difficult to distinguish from malicious behavior. "

TRADUCCIÓN: "Monitorizar las llamadas a la API puede generar un significativa cantidad de datos que pueden no ser útiles como defensa a menos que se recolecten bajo circunstancias específicas con la intención de conocer "malas" secuencias de llamadas, ya que el uso legítimo de las funciones de la API debe ser lo común y ello dificulta la distinción de un comportamiento malicioso"

"Analyze process behavior to determine if a process is performing actions it usually does not, such as opening network connections, reading files, or other suspicious actions that could relate to post-compromise behavior."

TRADUCCIÓN: "Analice el comportamiento del proceso para determinar si está realizando acciones no habituales, tales como la apertura de conexiones de red, lectura de ficheros u otras acciones de índole sospechoso podría indicar un comportamiento que indicará una infección".



 Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia