Herramienta de detección de entornos virtualizados.
Con el fin de ser capaces de detectar si se está ejecutando un software dentro de: un depurador, una máquina virtual (VM) o una sandbox, hay algunos proyectos bien conocidos de código abierto que son capaces de lograr esto. Son a menudo utilizados por los desarrolladores de malware, uno de los más conocidos se llama Pafish (Paranoid Fish).
Pafish es una herramienta para detectar entornos de análisis de malware, replicando las acciones que el malware hará normalmente para detectar si está siendo analizado. Viene con una serie de controles genéricos y específicos para revelar la presencia de ciertos productos de seguridad. Esto permite a los desarrolladores y usuarios de tales herramientas de análisis identificar y si es posible, mitigar sus debilidades en términos de detectabilidad. Desafortunadamente, la mitigación no siempre es posible ya que algunos mecanismos de detección buscarán efectos secundarios inevitables de la tecnología de monitoreo aplicada. Por ejemplo, si la herramienta de análisis se basa en llamadas de función de Hooking, es relativamente trivial detectar la modificación de memoria resultante y probablemente no es posible mitigarlo.
Es importante señalar que la detección de la máquina virtual ya no es tan relevante para los autores de malware como lo había sido en el pasado, y su relevancia puede desaparecer completamente en los próximos años a medida que la virtualización se convierta en una parte omnipresente de los entornos de producción empresarial. Sin embargo, todavía existe una gran cantidad de malware heredado que se niega a funcionar correctamente cuando se ejecuta dentro de una máquina virtual. Para ciberamenazas complejas modernas, es más relevante ocultar los artefactos específicos de la propia solución de seguridad, porque esto es lo que realmente diferencia el entorno de análisis, de una máquina de víctimas reales. Dependiendo de la tecnología subyacente, puede llegar a ser difícil, o incluso imposible alcanzar este objetivo: cuanto más interviene el componente de monitorización en el entorno de análisis, más complejo se vuelve esconder completamente sus pistas. Esa es una de las razones por las que los sistemas de análisis sin agentes son tan potentes.
Si un código malicioso se ejecuta dentro de un depurador, VM o sandbox debe desviarse de su ruta original y hacer algo legítimo o terminar de inmediato. Si no se está ejecutando en ninguno de estos entornos, debería ejecutar el código malicioso e infectar el sistema.
Pafish está escrito en C y puede ser construido con MinGW (gcc + make). Es posible ver el código fuente del proyecto, que tiene diferentes archivos, cada uno utilizado para diferentes propósitos de detección:
- Detectar un depurador: “debuggers.c”.
- Detectar una caja de seguridad: “gensandbox.c”.
- Detectar funciones Hooking: “hooks.c”.
- Detectar VirtualBox: “vbox.c”.
- Detectar VMWare: “vmware.c”.
- Detectar Qemu: “qemu.c”.
- Detectar Bochs: “bochs.c”.
- Detectar Cuckoo: “cuckoo.c”.
- Detectar Sandboxie: “sandboxie.c”.
- Detectar vino: “wine.c”.
Pafish sólo contiene detecciones de depurador muy simples utilizando dos funciones de la API de Windows: IsDebuggerPresent() y OutputDebugString() . Dado que la mayoría de las sandbox de malware no utilizan la depuración en la máquina, estas comprobaciones son inútiles para detectarlas. Además de las rutinas Pafish, hay muchos métodos más sofisticados para detectar depuradores, ya sea genérica o específicamente.
Pafish utiliza diferentes comprobaciones para detectar la presencia de una máquina virtual y un hipervisor de hardware subyacente, que se basan en las propiedades de la CPU:
- El primer método utiliza el contador de marcas de tiempo (TSC) de alto rendimiento. Para ello, la instrucción rdtsc se ejecuta más adelante y se calcula la diferencia entre las dos marcas de tiempo resultantes. Si esta secuencia se ejecuta en una máquina virtual y el hipervisor intercepta las ejecuciones rdtsc , la diferencia de tiempo resultante es mucho mayor que en un sistema regular. Sin embargo, si uno tiene control total sobre el propio hipervisor, el ataque puede ser fácilmente frustrado. La CPU sólo tiene que ser configurado para permitir a los invitados la ejecución de la instrucción rdtsc sin ser capturada en el hipervisor.
- El segundo ataque basado en la CPU es una versión ligeramente más sofisticada que la primera. En lugar de utilizar rdtsc, pafish usa para medir el tiempo de ejecución de la instrucción cpuid . El truco aprovecha el hecho de que en la mayoría de las CPU x86 esta instrucción siempre atrapa al hipervisor. En las CPUs Intel este comportamiento no se puede cambiar en absoluto y en AMD su desactivación da lugar a otros problemas y formas de detectar la VM. Sin embargo, las CPUs modernas permiten un cálculo preciso del tiempo necesario para instrucciones como vmenter, vmexit o cpuid. Este conocimiento se puede utilizar para ocultar de forma transparente los ciclos de reloj que se consumen fuera de la máquina invitada y por lo tanto hacer el hipervisor imposible de ser detectado.
- La tercera comprobación trata de inferir la existencia de un hipervisor leyendo el bit presente de hipervisor dedicado a las CPUs: CPUID.1: ECX.HV [bit 31] . Sin embargo, al tener un hipervisor personalizado es fácil desactivar simplemente ese bit en particular, porque es únicamente informativo.
- La comprobación final lee la cadena del proveedor de la CPU utilizando la instrucción cpuid y luego la compara con el conjunto: «KVMKVMKVMKVM», «Microsoft Hv», «VmwareVMware» y «XenVMMXenVMM». Obviamente, estas cadenas pertenecen a los bien conocidos hipervisores: KVM, Hyper-V, VMWare y XEN . De nuevo, si se aplica un hipervisor personalizado, es realmente fácil devolver valores válidos que se asemejan a los mismos resultados que cuando se ejecuta en un sistema real.
Se pueden hacer detecciones genéricas de sandbox que prueban la presencia de ciertos artefactos y efectos secundarios que a menudo existen en entornos de análisis. Pafish está equipado con 10 controles genéricos diferentes para ese propósito.
La primera prueba comprueba si la posición del ratón cambia en dos segundos y si no se detecta ningún movimiento, el sistema se marca como una sandbox. Esto obviamente no es una prueba confiable, porque también los usuarios reales a menudo no mueven el ratón durante dos segundos o más. VMRay proporciona simulación de usuario sofisticada que, entre otros, simula movimientos de ratón y entradas de teclado. Sin embargo, puede ocurrir que durante la ejecución de Ppafish el ratón no se mueva durante más de dos segundos; Al igual que en un sistema real. Por lo tanto, Pafish detecta a veces VMRay de esta manera, al igual que lo hace con las estaciones de trabajo de usuario real. Sin embargo, mientras sigue siendo inútil contra el malware real, sería posible simular constantemente el movimiento del ratón.
Aparte de eso, pafish examina la configuración de varios recursos de hardware y detecta configuraciones que son poco comunes para los sistemas de usuarios finales reales. Por ejemplo, el tamaño de la memoria física se comprueba por ser menor o igual a 1 GB, y el tamaño del disco duro se compara con 60 GB. Además, se obtiene el número de núcleos de CPU existentes y se comprueba que es igual a uno solo. Los entornos de análisis de VMRay pueden personalizarse completamente para utilizar configuraciones típicas del sistema de usuario final. Por lo tanto, es realmente fácil superar este tipo de detecciones.
Un error trivial, pero a menudo muy visto, es dejar huellas obvias en las máquinas de análisis. Pafish comprueba si el nombre de usuario actual es SANDBOX, VIRUS o MALWARE, si la ruta de acceso ejecutable contiene SAMPLE, VIRUS o SANDBOX, y si no se puede extraer la unidad de almacenamiento que contiene un archivo denominado sample.exe o malware.exe en su directorio raíz. Las correcciones a esta detección son obvias y directas.
Los recursos de Sandbox son escasos en relación con la gran cantidad de archivos que necesitan ser analizados y por lo tanto el tiempo dedicado a cada análisis a menudo tiene que estar limitado a sólo unos minutos. Los programas maliciosos explotan a menudo esta limitación estancando la ejecución de la carga útil malintencionada durante cierto tiempo. Las sandbox podrían contrarrestar esto remendando llamadas a la API Sleep () , es decir, acelerando artificialmente el tiempo. Sin embargo, esto puede ser fácilmente detectado por el malware al consultar otras fuentes de tiempo y comparar los resultados. Como ejemplo Pafish utiliza el API GetTickCount () para ese fin. Sólo si se tiene un control total sobre todos los temporizadores internos dentro de la CPU (y probablemente algunos otros dispositivos también), está habilitado para saltar adelante el tiempo de forma transparente y no detectable. Para ser una parte interna del hipervisor y tener un control total sobre todos los dispositivos, lo coloca en esta poderosa posición.
QEMU es un simulador común de código abierto que se utiliza en muchos sistemas de análisis. El uso tradicional es emular un sistema informático completo, que da control total sobre todo, pero es dolorosamente lento. Otro uso es combinarlo con un hipervisor asistido por hardware, como KVM , y utilizar sólo las partes que simulan los dispositivos de hardware. No importa qué escenario de uso se elija, todos los dispositivos simulados contienen cadenas de proveedores e identificadores que facilitan la detección de la presencia de QEMU. Para ello, Pafish comprueba los valores de las dos claves del registro:
- «HARDWAREDEVICEMAPScsiScsi Puerto 0Scsi Bus 0Target Id 0Logical Unit Id 0Identifier»
- «HARDWAREDescriptionSystemSystemBiosVersion»
Una vez más, si uno es parte integral del hipervisor y por lo tanto está habilitado para modificar todas las partes de él libremente, es una tarea fácil eliminar todos los artefactos relacionados con QEMU de los nombres de los dispositivos y sus configuraciones de registro resultantes.
Pafish comprueba la cadena de la marca de la CPU, que es devuelta por cpuid . Si contiene el valor QEMU Virtual CPU , está claro que se utiliza un simulador. También esta cadena devuelta se puede modificar fácilmente si el hipervisor está bajo control total de la ejecución de la instrucción cpuid.
Similar a las detecciones QEMU descritas anteriormente, Pafish contiene más métodos para identificar software específico como Sandboxie, Wine, VirtualBox, VMware, Bochs o Cuckoo Sandbox . Todos los controles relacionados apuntan a artefactos específicos y en su mayoría no extraíbles que son causados por el uso de los productos de software en particular. Obviamente, VMRay no puede ser detectado por ninguno de estos métodos. Sin embargo, es posible rastrear todos los intentos de detección por sí mismos, ya que estés intentos aumenta la sospecha de la pieza de software analizada.
Pafish es una gran herramienta para endurecer un entorno de análisis de malware, aunque esto no es posible en todos los casos debido a los efectos secundarios no remediables de ciertas tecnologías. Mientras que en el pasado la detección de máquinas virtuales solía ser un poderoso mecanismo para que el malware ocultara su comportamiento real, la eficacia de este enfoque está disminuyendo constantemente debido al uso omnipresente de la virtualización en sistemas productivos, tanto de servidor como de cliente. En contraste con que el malware es más frecuentemente apuntando a la detección de artefactos de sandbox, como modificaciones del sistema operativo o configuración inusual de software y hardware . Para disminuir la superficie de ataque es necesario tener poco entretejido entre el sistema sandbox y el entorno de análisis.
Más información y descarga de Pafish:
https://github.com/a0rtega/pafish
Fuente: El Gurú de la informática : Herramienta de detección de entornos virtualizados.