Evasión de sistemas de análisis dinámico de malware

Casi una año hemos tenido que esperar a la publicación del número 4 de Valhalla, un ezine que seguro que ya conocen (y probablemente aman) todos los escritores de virus. 

En el encontrarás infectores multiplataforma, métodos propagación, metamorfismo, nuevas técnicas (como la sorprendente auto-replicación usando la codificación del ADN) y trucos para evadir sistemas en línea de análisis dinámico como el que explica m0sa en su artículo: "SYP.01: Bypassing Online Dynamic Analysis Systems"...

Como ya vimos en el blog hace tiempo existen varios servicios online gratuitos que básicamente ejecutan el malware y monitorizan su comportamiento. Estos servicios normalmente son de dos tipos: basados en máquinas virtuales o basados en hooks, y por supuesto hay sistemas que combinan estos dos tipos.

Evasión de sistemas basados en máquinas virtuales

En las VM el sistema arranca en una máquina virtual limpia, ejecuta el malware, la para y, después de un tiempo definido, compara el resultado con el inicial para determinar los cambios realizados.

Normalmente para intentar evadir este análisis se utilizan dos técnicas:

- Detectar la presencia de VM: existen muchas técnicas para la detección de máquinas virtuales, aunque también otras tantas para ocultarlas.


- Retraso en la ejecución del malware: como la máquina virtual normalmente tiene un límite de tiempo para ejecutar el malware, es una buena idea retrasar su ejecución. No obstante el malware se retrasará también cuando se ejecute en un entorno real.    


La mayoría de los servicios online para "no aburrir" al usuario y presentarles resultados relativamente inmediatos ejecutan el malware durante menos de 10 minutos. Con sólo 3 líneas es posible evadir Anubis.

        CALL GetTickCount
        CMP  EAX, 927C0H ; 600000 MILLISECONDS = 10 MINUTES
        JB   Fake_Behavior


Evasión de sistemas basados en hooks

En los sistemas análisis dinámico que utilizan hooks también se ejecuta el malware (en una máquina virtual o en un servidor físico) durante un periodo de tiempo prefijado. Después el sistema hookea la mayoría y las más populares APIs del sistema para obtener la información del comportamiento del malware. Uno de los analizadores online más populares que usan esta técnica es CWSandbox.

Es muy fácil detectar el hook de un API. Antes de llamar al API hay que leer los primeros bytes de una dirección o address, si existe una instrucción de control de flujo el API está hookeada y el malware debería mostrar un comportamiento falso.

 MOV    EBX, DWORD PTR [EBP+AGetProcAddress]
        MOV AL, BYTE PTR [EBX]
        CMP AL, 0E9H             ; JMP
        JE    FAKE_BEHAVIOR
        CMP AL, 0FFH             ; JMP/CALL
        JE     FAKE_BEHAVIOR
        CMP AL, 0E8H             ; CALL
        JE    FAKE_BEHAVIOR   
        CMP    AL, 68H              ; PUSH+RET
        JE    IS_FOLLOWED_BY_RET
        JMP NO_HOOK
    IS_FOLLOWED_BY_RET:
        MOV AL, BYTE PTR [EBX+5]
        CMP AL, 0C3H             ; RET
        JE    FAKE_BEHAVIOR
           
    NO_HOOK:


Pruebas y conclusiones

Para la prueba de concepto m0sa subió bots de Zeus a distinos analizadores dinámicos online y luego repitió los análisis con el mismo bot parcheado:


Comodo before, after
ThreatExpert before, after
CWSandbox before, after
Anubis before, after
Malwr before, after

Todos los sistemas fueron evadidos exceptuando Joe Sandbox, cuyo estudio será presentado próximamente... 

Comentarios