¿Cómo defenderse contra un virus que oculta la carga útil al encriptarlo?

2

Recientemente, comencé a aprender más sobre la forma en que funcionan los antivirus y otros productos anti malware, y me di cuenta de que la mayoría de ellos utilizan 3 técnicas diferentes para detectar y detener el malware:

  1. Detección basada en firmas
  2. análisis heurístico
  3. Sandboxing (para los archivos que pasan por el filtrado de 1. y 2.)

Al principio me pareció una gran idea, especialmente las funciones inteligentes de sandboxing que pueden ser capaces de detectar retrasos en la ejecución, contramedidas de máquinas virtuales, cifrado y más.

Entonces, una forma de evitar esas técnicas de detección vino a mi mente, así que lo probé y funciona contra todos los antivirus que probé y probablemente en cualquiera que confíe en esas técnicas:

¿Qué sucede si el código malicioso está encriptado en un archivo de apariencia inocente con una frase de paso que solo será conocida por la víctima (que por supuesto no lo sabe) y que será necesaria para descifrar el código malicioso y ejecutarlo? ¿En tiempo de ejecución?

Digamos que algunos códigos maliciosos se cifran mediante la función de cifrado AES256 con una frase de contraseña específica. Luego, la cadena resultante encriptada se coloca en un archivo JScript que contiene las instrucciones para descifrarla una vez que el usuario escribe la frase de acceso y la ejecuta a través de una función eval () en tiempo de ejecución. No hay forma de que el antivirus sepa ni adivine la frase de contraseña, ¿verdad? Y no hay forma de saber que hay un código malicioso oculto dentro de ese archivo JScript. Y como se descifrará en la memoria solo en tiempo de ejecución, sin haber sido escrito en el disco, la detección basada en firmas y el análisis heurístico fallarán. Lo mismo para el sandboxing, ya que no se activará ninguna acción maliciosa sin que el usuario escriba la frase de contraseña.

Ahora, para hacer que el usuario escriba la contraseña, se puede usar un tipo simple de Captcha, que le pide que escriba las palabras que ve en una imagen (o un dibujo ASCII, por ejemplo, ^^) para asegurarse de que está no es un robot Luego, cuando el usuario lo escriba, el código malicioso se descifrará y se ejecutará.

¿Cómo se defendería uno contra este tipo de ataque? Tal vez un antivirus avanzado que utilice técnicas de aprendizaje profundo pueda detectarlo, pero me parece que los programas antivirus actuales son completamente vulnerables a él.

Actualizado: ejemplo de código que ilustra la técnica anterior

Aquí hay una implementación simple en JScript:

var encryptionFunction = ; // Any encryption function, e.g. AES256 from CryptoJS

var hiddenCode = ; // Write any code here, e.g. WScript.Echo('My code has been executed !');

var passphrase = "Any pass phrase"; // It'll be used as a CAPTCHA challenge-response, e.g. picture with the passphrase or ASCII drawing

var encryptedCode = encryptionFunction(hiddenCode, passphrase); // Our hidden code will be encrypted with the passphrase

var template = "var decryptionFunction = ;" + // The decryption function is defined here

               "var passphrase = InputBox('Your CAPTCHA challenge goes here');" + // CAPTCHA in an Input Box, user's input = passphrase

               "eval(decryptionFunction('" + encryptedCode + "', passphrase))"; // Decryption of the encrypted code thanks to the user's input and run at execution time through eval()

var file = ; // Create a new JScript file (or WSF) and put the template as its content

08/04/2017 - Prueba de concepto + análisis antivirus

He añadido una prueba de concepto:
enlace

Es básicamente un simple archivo WSF que mostrará una ventana solicitando una contraseña, oculta en un dibujo ASCII. Una vez que el usuario escribe la contraseña correcta, el código cifrado incrustado dentro del archivo se descifra y ejecuta en tiempo de ejecución, mostrando un mero "¡Mi código ha sido ejecutado!" dentro de una ventana.

Como pensé, la rutina de descifrado no fue considerada como maliciosa por ningún antivirus en VirusTotal (0/56), aquí está el análisis antivirus:
enlace

    
pregunta 31.03.2017 - 01:32
fuente

2 respuestas

2

El buen cifrado se ve como datos aleatorios para alguien sin la clave. Por lo tanto, un programa antivirus no podría decir si los datos cifrados son maliciosos o no. Ningún antivirus en el mundo puede atravesar AES.

¿Has encontrado la bala de plata mágica para engañar a todos los programas antivirus? No.

En primer lugar, debe haber algún tipo de mecanismo de arranque que tome la clave, descifre el código y lo ejecute. Un correo electrónico con un archivo adjunto JS ya es sospechoso. Si el archivo adjunto descifra un blob binario y lo ejecuta ... bueno, eso debería enviar algunas luces rojas parpadeando.

Entonces, si bien la carga útil real (los datos cifrados) no pudo ser analizada por el antivirus, el bootstrapper podría ser capturado por heurística.

En segundo lugar, un virus que requiere que el usuario realice alguna tarea (por ejemplo, ingresar una clave) es poco práctico. Claro, la ingeniería social puede ser poderosa, pero esto no es tan bueno como algo que se ejecuta silenciosamente en segundo plano con cero interacción con el usuario.

    
respondido por el Anders 03.04.2017 - 11:31
fuente
4

A mi entender, esta pregunta reduce una pregunta más general a un ejemplo único muy específico. La pregunta más general es: ¿cómo puede un sistema de análisis (antivirus, etc.) detectar que algún software es malicioso si solo se comporta de manera malintencionada en un entorno específico, con datos de entrada específicos, etc.? Este puede ser un archivo protegido por contraseña donde se conoce la contraseña. Para el usuario (como el texto contenido en el correo de phishing), este puede ser un código encriptado con una contraseña que debe ingresar el usuario, esto puede depender de un sistema operativo específico, software instalado o similar.

La respuesta en todos estos casos es: ningún software de análisis puede detectar con seguridad si el software analizado puede ser malicioso. A lo sumo, podría emplear algunas heurísticas que detectan patrones típicamente asociados con dicho comportamiento, como verificar el sistema operativo específico y la versión del navegador o el software instalado, utilizando datos ingresados por el usuario para operaciones que podrían parecer descifrado, etc. Pero estas heurísticas no son completamente confiables , es decir, pueden detectar problemas en los que no existe un comportamiento malicioso y se perderán muchos problemas reales.

Por lo tanto, dicho análisis solo puede ser una parte de la protección. Otras partes podrían ser detectar el comportamiento inusual del sistema, las descargas de sitios con mala reputación o solo permitir que se ejecute el software de la lista blanca.

    
respondido por el Steffen Ullrich 31.03.2017 - 11:05
fuente

Lea otras preguntas en las etiquetas