Análisis de malware
Técnicas antianálisis de malware y formas de evitarlas
mayo 2, por Ninja de seguridad
Esta serie de artículos se centrará en varias técnicas antianálisis utilizadas por el malware y luego analizaremos varias formas en las que los analistas pueden eludir las técnicas antianálisis para considerar todos los artefactos del malware. En este artículo, nos centraremos en las técnicas anti-análisis y en una forma muy básica de evitar la técnica.
Los analistas emplean varias técnicas para analizar un malware, como generar una máquina virtual aislada y luego capturar artefactos, ejecutar malware en entornos de pruebas automatizados, etc., pero la mayoría del malware se ha vuelto sofisticado ahora y verifica los entornos en los que opera, y sólo cuando ven el entorno libre exhiben todas sus características. A continuación se detallan algunas de las técnicas antianálisis que emplea el malware para protegerse de ser analizado.
- El malware detecta si se ejecuta dentro de un entorno virtualizado o no. Por ejemplo:
- La instrucción IN es una instrucción privilegiada y no se puede utilizar en modo de usuario a menos que estén habilitados los privilegios necesarios. Sin embargo, VMware utiliza instrucciones IN para leer desde un puerto especial que es el puerto de comunicación entre el host y la VM. Aquí hay un código para verificar esto.
- Movimiento eax, ‘VMXh’
- Movimiento ebx,0
- Movimiento ecx, 10
- Movimiento edx, ‘VX’
- En eax, dx // esto leerá el valor del puerto en eax. Si VMware está presente, el flujo continuará. De lo contrario, se producirá una excepción.
- Cmp ebx,’VMXh’
- El malware puede comprobar la ubicación de las tablas de descriptores locales y globales y el registro de la tabla de descriptores de interrupción, ya que en un entorno virtualizado se deben mover a direcciones de memoria diferentes para evitar conflictos con el host.
- B usando la instrucción CPUID para averiguar la marca del hipervisor. Por ejemplo, llamando a CPUID con EAX =4000000 como entrada 1.
- El malware busca direcciones MAC conocidas que suelen utilizar productos como VMware.
- La instrucción IN es una instrucción privilegiada y no se puede utilizar en modo de usuario a menos que estén habilitados los privilegios necesarios. Sin embargo, VMware utiliza instrucciones IN para leer desde un puerto especial que es el puerto de comunicación entre el host y la VM. Aquí hay un código para verificar esto.
- El malware detecta si se ejecuta dentro de un entorno sandbox o no. Por ejemplo,
- Comprobación de malware en la zona de pruebas mediante la búsqueda de movimientos del mouse
- El malware puede buscar ventanas activas
- El malware puede comprobar el tamaño del disco duro
- El malware comprueba si el color de primer plano cambia o no
- El malware comprueba si el contenido del portapapeles está vacío o no.
- El malware detecta si hay herramientas presentes en el sistema o no. Por ejemplo,
- El malware a menudo analiza la aplicación instalada en el sistema o los servicios en ejecución y busca herramientas de análisis comunes como Wireshark, etc. Al detectar algún malware, simplemente finalizará, mientras que otros se ejecutarán de manera completamente diferente para desviar completamente la investigación.
- El malware detecta si se está depurando o no. Por ejemplo,
- La forma más común de verificación de los autores de malware es encontrar IsDebuggerPresent. Si esto resulta cierto, entonces el malware suele terminar.
- Otra forma en que funciona el malware es comprobar el recuento de ticks, es decir, ejecutan pruebas para ver cuánto tiempo tarda el malware en alcanzar una funcionalidad y establecen un contador para eso porque, durante la depuración, lo más probable es que supere ese contador.
Ahora que hemos visto las formas más comunes en que el malware emplea comprobaciones para las técnicas de diferentes analistas, veamos un ejemplo en el que un malware comprueba si el depurador está presente o no en el sistema y luego cómo podemos evitar esa comprobación de malware y continuar analizándolo.
Debajo del malware, el ejemplar se ejecuta normalmente cuando se inicia en el sistema y se conecta a su servidor CC, pero tan pronto como se carga en OllyDBG, simplemente finaliza.
Entonces, carguemos el malware en Ollydbg y antes de ejecutarlo consideremos los nombres utilizados por este espécimen presionando Ctrl+N.
Vemos que este malware utiliza IsDebuggerPresent, lo que significa que de alguna manera busca la presencia de un depurador. Veamos la referencia de esta llamada API.
Solo hay una referencia a la llamada API, sigamos ahora el código en dissembler. Haga clic derecho y siga en disembler. A continuación se muestra el código en el disimulador.
Ahora IsDebuggerPresent devuelve 1 si el depurador está presente en el sistema; de lo contrario, 0. Pruebe EAX, EAX está probando esta condición. Pongamos un punto de interrupción en 01001296 y ejecutemos la muestra. Vemos que EAX devuelve 1, ahora, si continuamos ejecutándolo, el código salta a 0100146D y luego termina.
Entonces, si podemos hacer algo con el código presente en 010014D, entonces este espécimen no terminará y continuará ejecutándose. ¿Deberíamos cambiar el código en 010014D? Probablemente no es una buena idea. ¿Qué pasa si cambiamos la instrucción JMP por completo y la cambiamos a JZ? Bueno, eso resuelve nuestro propósito en este caso, pero funcionará si el espécimen está dentro de un depurador, de lo contrario terminará (porque fuera de IsDebuggerPresent siempre dará 0 y, por lo tanto, JZ siempre se ejecutará).
Lo que podemos hacer en este caso es parchear el código. Parchear el código es cuando reemplazamos alguna instrucción sin afectar la funcionalidad del binario. Existe una instrucción NOP cuyo propósito es no realizar ninguna operación. Sustituyamos JNZ por NOP para evitar el salto por completo.
Coloque NOP en la dirección 01001298. Asegúrese de que la casilla Mantener tamaño y llenar el resto con NOP esté marcada. Esto se debe a que NOP tiene solo 1 byte, mientras que la instrucción que reemplaza tiene 6 bytes, por lo que para llenar perfectamente la dirección de memoria estas opciones son útiles. A continuación se muestra el código parcheado.
Después de parchear esto, ejecutemos el código y, como era de esperar, ahora el malware se engaña diciendo que no está siendo depurado en este caso y continúa su ejecución.
¡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
Entonces, en este artículo, hemos visto las diversas comprobaciones que utiliza el malware para vencer a partir de técnicas de análisis y un ejemplo básico de cómo podemos evitar dichas técnicas de malware también. EN la siguiente parte veremos otras comprobaciones de malware y su forma de eludirlas.