Cómo funciona la detección de Malware?

Iniciado por lBoreal, 6 Abril 2020, 04:59 AM

0 Miembros y 1 Visitante están viendo este tema.

lBoreal

Buenas, estuve programando un poco, logré desarrollar algunas cosillas interesantes.
Logré en algunos casos que Windows Defender no me agarre, en otros no.

Noté que efectivamente el flujo del programa es algo que usan los analyzers, aparentemente encuentra patrones que se repiten en otras aplicaciones maliciosas detectadas anteriormente y eso es motivo suficiente para meter la mía en la jaula. (Si me equivoco por favor diganmelo)

La cuestión es que quiero remitirme un poco más a la teoría

Qué métodos emplean las aplicaciones que detectan malwares?
Existe un método infalible para evitar dichas barreras?

Busqué un poco en el foro pero no encontré lo que buscaba, si alguno tiene una guía con gusto le pego una leída.

Gracias por su tiempo!

pelela400

#1
segun lo que tengo entendido los detectores de malware emplean la comprobacion de una conexion rapida o falsos positivos(en casos ataques Dos) y la otra comprobacion es la forma rapida de actuar del codigo con un objetivo especifico que este considerado como malicioso.
al fin y al cabo es segun si lo que detecta el antivirus o antimalware como codigo malicioso esta dentro de esa lista o no que utiliza el antivirus.

@XSStringManolo

El principal mecanismo de los antivirus son las firmas.

Sin complicar mucho la historia viene siendo lo siguiente.
Imagínate el código en C:
system("ncat -l -k 127.0.0.1 9091 -e /bin/sh");

El av tendrá en su base de datos:
2D65 202F 6269 6E2F 7368

Entonces chequeará todo el binario e irá contrastando según el tipo de binario, arquitectura... Si encuentra el hex significa que en el binario hay un string -e /bin/sh
Quizás con eso no salte. Pero revisando también encuentra el comando ncat, una ip que no tiene en su base de datos, un programa no conocido...
Irá subiendo la puntuación de peligrosidad y llegado el momento cancelará la ejecución y pasará a cuarentena.

Pasa lo propio con componentes comunes. Por ejemplo un módulo de un programa de python cuya función es escalar privilegios puede tener un hash por ejemplo md5 en la base de datos del antivirus y al encontrarlo en tu programa saben que estás usando un componente malicioso.

Esto obviamente es lo más sencillo y rápido en cuanto a detección se refiere.

Otro método de detección común es el checksum. Puede por ejemplo aplicar un checksum a un archivo, componente... y si intentas modificar algún archivo de la instalación el checksum no coincidirá y se intentará seguir el árbol de procesos para saber que software es el causante de los cambios.
Lo mismo pasa con programas populares. Se puede tener en la base de datos del av muchas piezas esenciales del producto para detectar cambios.

Algo gracioso de estos métodos de detección es que el cambio de un solo byte en tu malware puede tirarles al traste la detección xDDD
Hay un video muy cachondo por ahí de esto. Pilla un rootkit en github, lo compilan lo mandan a virustotal y lo detecta 30av. Le cambia un 20 por un 21 y solo lo detectan 2 av xD

Otro método de detección común creo que lo comentaste tú en otro post y es el control flow. Básicamente miran las entradas y salidas y en base a ello hacen la detección. También las llamadas para saber desde donde se llama y a que. En estos casos por mucho que modiques los bloques de código ya te tienen el malware fichado.

El método más sencillo para evitar las detecciones es divir el código en trozos para saber exactamente que es lo que se detecta. Sabiendo eso, automáticamente puedes deducir los posibles métodos de detección que usa el AV para utilizar lo que se te ocurra para evadirlo.
No tiene mucha ciencia, metes el archivo a trozos en una carpeta y le pasas el AV.

Otro método es analizar el propio AV ya sea para evadirlo o para cargártelo. Esto ya es más avanzado pero hay mucho material disclosed por ahí.

Otro es engordar el malware con basura, meterle bucles de minutos, etc. Muchos AV lo dejarán estar.

Las fechas también son importantes. Hay malware del 2000 que se sigue descargando y tienen la fecha de buildeo original. Algunos AV lo usan para confirmar que se trata de X malware.

Los intérpretes a veces son muy útiles. Puedes romper todo el análisis estático solo con un intérprete y código cifrado en texto.

En el caso de análisis dinámico se usan emuladores, ya que si no, podrían infectar el sistema corriendo malware para su análisis. Esto quiere decir que simulan el entorno, pero obivamente hay incongruencias entre el host emulado y la máquina real.
Puedes detectar emuladores programáticamente cargando componentes y librerías no implementadas.

También puedes jugar con instrucciones poco documentadas para cargarte el dissasembles del av.

Un método muy chulo son los polyglotas. Puedes confundir a los av que nk sabrán exactamente que tipo de archivo es.

Por ponerte un ejemplo de esto, un usuario puede abrie de forma determinada con Chrome los archivos pdf. Ese archivo puede a su vez ser un archivo html, un ejecutable y demás. No necesariamente el antivirus sabe como el usuario va a interpretar el archivo. Esto da mucho juego con javascript, ya que se puede ejecutar en whs, navegadores, lectores de pdf, lectores de html, programas de oficina...

Para probar tus creaciones deberías tener una máquina 100% offline. Si lls andas subiendo los acabarán analizando y añadiendo a la lista. Lo mejor es que te descarges un montón de av y los uses offline para saltártelos.



lBoreal

#3
Te fuiste a la ***** con la respuesta, muy buena! Gracias jaja ahora me voy a poner a investigar un poco más al respecto a algunos términos que desconocía

Un gran saludo!

PD: Justo te había escrito por Twitter!

Saludos