Sobre exploits, vulnerabilidades y malware, ¿cómo detectar las amenazas?

CajasProductosEl día de hoy es un día especial en ESET, porque estamos lanzando las nuevas versiones de nuestros productos hogareños ESET NOD32 Antivirus y ESET Smart Security. El lanzamiento de una nueva versión de nuestros productos siempre ofrece novedades desde el lado de las funcionalidades pero siempre, detrás de ello, los equipos de Laboratorio y Desarrollo han estado trabajando mucho tiempo para mejorar la calidad de detección del producto. En esta versión, hay dos nuevas funcionalidades muy importantes en las cuales hemos estado trabajando para seguir brindando la mejor eficiencia en detección a nuestros usuarios, Exploit Blocker (detecta ejecución de exploits en aplicaciones como lectores de PDF, navegadores web o clientes de correo)  y Vulnerability Shield (protege al sistema ante ataques específicos en la capa de red). Ambas, ponen el foco en la explotación de vulnerabilidades, pero no es de las funcionalidades de lo que deseo hablar, sino de algunos conceptos que derivan de ello y que muchas veces se confunden o son mal explicados. ¿Qué diferencia hay entre detectar un exploit y detectar un código malicioso?

ESET-Exploit-Blocker

A medida que los códigos maliciosos han ido evolucionando, así han cambiado también las soluciones. El concepto tradicional de antivirus ha evolucionado hacia soluciones de seguridad, que han incluido desde nuevos métodos de detección (heurística) hasta nuevas funcionalidades (firewalls, HIPS – Host Intrusion Prevention Systems -, entre otros). En general, hay dos métodos por los cuales los códigos maliciosos infectan un sistema: explotación de vulnerabilidades e Ingeniería Social. Estas nuevas funcionalidades, y este post, están centrados en la primera. Podemos acordar con facilidad que es mejor detectar un intento de infección en las instancias más tempranas del proceso, digamos, antes que la amenaza “haga pie” en el sistema. De eso se trata la detección de exploits.

Veamos primero las definiciones. Una vulnerabilidad, un exploit y un código malicioso, no son lo mismo. Si se analiza progresivamente, a nivel temporal, debemos empezar por qué es una vulnerabilidad.Una vulnerabilidad es una característica de un sistema que hace que este pueda ser utilizado para algo que no fue preparado. Es decir, cuando un problema en el código de una aplicación puede permitir que alguien se aproveche del mismo y realice acciones no deseadas (denegación de servicio, ejecución de código, robo de información, etc.), se habla de la existencia de una vulnerabilidad de software. ¿Se puede detectar una vulnerabilidad? Es posible detectar si se está utilizando un software que posee una vulnerabilidad. Esto representa un riesgo potencial pero no necesariamente indica la presencia real de una amenaza. Uno puede ser vulnerable pero no por eso estar siendo atacado (imaginen una casa con una ventana abierta o sin haber cerrado la cerradura, existe el riesgo pero no se sabe si alguien efectivamente entró sin permiso). De hecho, las versiones anteriores de nuestros productos ya alertan al usuario cuando su sistema operativo Windows posee actualizaciones disponibles.

Ahora, los programas que aprovechan esas vulnerabilidades son conocidos como exploits. Es decir, los exploits son (generalmente) pequeñas porciones de código que permiten ejecutar una vulnerabilidad. Entonces, ¿qué se detecta cuando se identifica un exploit? Se identifica la explotación de la vulnerabilidad más allá del payload, es decir, más allá del código que se vaya a ejecutar posterior a la explotación de dicha vulnerabilidad.

Ahora, hay códigos maliciosos que utilizan estos exploits para infectar un sistema. Es decir, cuando existen vulnerabilidades que permiten la ejecución de código remoto, se suelen utilizar estos exploits para, valga la redundancia, explotar la vulnerabilidad y así infectar los sistemas con algún código malicioso específico. Esto ocurre hace años con códigos maliciosos explotando vulnerabilidades en el sistema operativo, en lectores de PDF, aplicaciones de ofimática (los viejos macro virus), navegadores (la técnica drive-by-download) u otras aplicaciones (como el caso de Operación Medre).

Volviendo al ejemplo anterior…

  • Detectar una vulnerabilidad sería identificar una ventana abierta en una casa.
  • Detectar un exploit sería detectar a alguien ingresando por esa ventana.
  • Detectar un malware sería detectar a una persona específica que ya pasó la ventana y está intentando robar el lugar.

Es decir que un malware infecta un equipo ejecutando un exploit que explota una vulnerabilidad. Ese es el orden. Por lo tanto, en la detección de exploits se busca contar con detecciones más tempranas y, a la vez, más genéricas (un exploit puede ser utilizado por muchos códigos maliciosos) para proteger a nuestros usuarios.

Para cerrar, veamos algunos ejemplos de explotación de vulnerabilidades populares, bastante distintos, uno a nivel de aplicación y otro a nivel de red. Por ejemplo, la vulnerabilidad ganadora de los 2013 Pwnie Awards en BlackHat fue la CVE-2013-0641, cuyo exploit se ejecuta en Adobe Reader y permite ejecutar código remoto. Por otro lado, vulnerabilidades como la utilizada por el gusano Conficker, la MS08-067, siguen siendo explotadas en todo el mundo a pesar de tener más de 3 años de antigüedad.

Recuerden que pueden probar de forma gratuita las nuevas versiones, y que sortearemos 10 licencias por un año entre aquellos que las prueben.

Sebastián Bortnik
Gerente de Educación y Servicios

Autor , ESET

Síguenos