Análisis de malware

Técnicas antianálisis de malware: TLS y santificación de procesos

7 de junio de por Ninja de seguridad

Como continuación de artículos anteriores, este artículo también mostrará un enfoque más sofisticado utilizado por el malware para frustrar las técnicas antianálisis.

Comencemos el análisis de sampleTLS.exe

Tan pronto como cargo la muestra en OllyDBG para depurar, está en estado de pausa, pero cuando miro el proceso del hacker, ya hay una instancia que ya comenzó a ejecutarse. El siguiente ejemplo se encuentra en estado de pausa.

Sin embargo, en el proceso hacker a continuación, podemos ver que la instancia ya se está ejecutando.

¿Qué está causando que la muestra se inicie incluso antes de que se active WinMain()?

Bueno, se trata de la devolución de llamada TLS que se ejecuta antes del punto de entrada WinMain(). Al cargar este ejemplo en IDAPro, podemos ver que hay un par de puntos de entrada:

Configuremos OllyDBG para que se detenga en las devoluciones de llamada TLS en lugar de WinMain.

Ahora carguemos la muestra nuevamente en OllyDBG después de la configuración anterior. Podemos ver que ahora solo se está ejecutando un proceso en OllyDBG en el proceso hacker. A continuación se muestra el código de la función de devolución de llamada TLS.

Ahora que hemos superado el punto de entrada y la devolución de llamada TLS oculta en el ejemplo, comencemos el análisis normal. Veamos las llamadas a funciones integradas en el ejemplo. A continuación se muestra el fragmento de las llamadas a funciones integradas que utiliza el espécimen.

Bueno, ¿puedes pensar que podemos ver CreateProcess, NTUnmapViewOfSection, ReadProcessMemory, WriteProcessMemory, etc.? Si está pensando en la Santificación del Proceso, mantengámoslo como nuestra suposición por ahora.

Veamos cómo podemos rastrear nuestra suposición en la siguiente sección. Busquemos la función con la que inicia Process Hallowing, es decir, CreateProcess

Mantengamos un punto de interrupción allí cuando CreateProcess esté a punto de comenzar y analicemos los parámetros en la pila.

La de arriba es la dirección de la siguiente instrucción a la que regresará esta función. Veamos otros parámetros de función importantes como:

Bien, ejecutemos este ejemplo y ‘analicemos hasta el código de usuario’ para llegar a la ubicación desde donde se llamó esta función.

Aquí llame a los puntos EAX para llamar a CreateProcess, y podemos ver el parámetro que se pasa a la función. Tenga en cuenta que el indicador CREATE_SUSPENDED también está allí.

Observe también el SUB ESP,28 que es un acto de limpieza de la pila.

Ahora avancemos por el código de usuario hasta llegar al proceso de escritura, ya que nos interesa lo que está escrito en el proceso sagrado. En el camino, es posible que vea otras llamadas a funciones, como VirtualAlloc, VirtualAllocEx, NtUnmapViewOfSection.

A continuación podemos ver ReadProcessMemory cuando la muestra está leyendo los atributos del proceso a seguir como el identificador, la dirección base, etc.

A continuación se muestra la sección de código para WriteProcessMemory

Aquí podemos ver los atributos del búfer que se escribirán en el proceso vaciado. Y lo siguiente es el contenido de lo que hay dentro del búfer. Observe el encabezado MZ en el búfer.

Volquemos esta sección de memoria de archivos a un archivo en el disco con el nombre sampleTLS_dump.exe y comencemos a analizar ese archivo ahora.

Primero, carguemos el archivo para ver si todavía está empaquetado o no. Resulta que el archivo volcado está empaquetado con el empaquetador UPX.

Ahora nos resulta fácil desembalarlo, ya que está embalado con un empaquetador conocido. vamos a descomprimirlo

Ahora comencemos a analizar el binario descomprimido que efectivamente tiene características maliciosas. A continuación podemos ver varias llamadas API relacionadas con el acceso a Internet, lectura de archivos, etc.

A continuación se muestran algunas de las cadenas que se pueden extraer del archivo descomprimido. Podemos ver las URL y sus registros de búsqueda de archivos dentro de cadenas.

Dado que hay demasiadas cadenas confusas, intentemos ver si están codificadas o no. Intentemos decodificarlo por fuerza bruta con claves XOR de 1 byte, y podemos ver que una nueva URL se puede ver como un portal atómico.

Y este es el dominio con el que la muestra original (sampleTLS.exe) intenta comunicarse y descargar el archivo get.php cuando le proporcionamos DNS falso y ejecutamos un puerto httpd.

¡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

El resultado de este archivo get.php es que ocupará la pantalla de la víctima.