El antivirus más seguro es Windows Defender... En serio, según cómo se mire

martes, 30 de octubre de 2018

Cuando algo se define como "seguro" o peor aún "más seguro que...", se suele hacer desde la parcialidad, y habitualmente, de forma incompleta. Un claro ejemplo es cuando se habla de los navegadores más seguros. En su guerra particular, algunos incluyen entre los parámetros de evaluación solo la posibilidad de explotación, otros el número de vulnerabilidades, e incluso otros tantos (cuando les conviene), la capacidad de detectar y bloquear dominios maliciosos. Windows Defender se ha convertido en el primer antivirus que se ejecuta en un entorno aislado del sistema, esto es, dentro de una sandbox. Esto es un hito de gran mérito y, técnicamente hablando, lo convierte en el antivirus más seguro desde el punto de vista de protección ante hipotéticas explotaciones de su propio código. Pero lo más curioso es por qué lo ha hecho.



¿Qué significa "ser seguro"?
Como decía, existen informes que hablan de numerosos aspectos a tener en cuenta a la hora de evaluar la seguridad de cualquier programa (y en especial de un navegador), e históricamente cada fabricante ha aprovechado los números para anunciar que se trata del "navegador más seguro". Ya sea porque contiene pocas vulnerabilidades, porque detecta muchos dominios maliciosos... Pero lo cierto es que la seguridad puede poner el acento en un punto u otro no según los informes, sino que dependiendo del tipo de usuario. Quizás a muchos perfiles no les importe lo más mínimo que el navegador bloquee dominios peligrosos. A otros puede que les importe más o menos el número de vulnerabilidades encontradas, porque esto puede ser un arma de doble filo. ¿Significa si tiene pocas, que quedan muchas por encontrar? ¿Tarda mucho o poco en solucionarlas?

Opinamos que lo más importante (que seguro viene bien a todos los perfiles que usen un programa) es que las vulnerabilidades (sean las que sean) sean difíciles de explotar. Y para eso sirve una sandbox. Si continuamos con el ejemplo de los navegadores, la sandbox más completa es la de Chrome. Y no lo decimos nosotros sino todos los exploiters del mundo que se dedican a intentar eludirla y que si lo consiguen, ganan un buen puñado de dólares. Y eso que Chrome contiene más vulnerabilidades que otros navegadores... pero eso sí, sirven para poco. 

Volvamos a los antivirus. Microsoft ha dado un paso más con el sandboxing y ha conseguido meter en un cajón casi estanco una solución antivirus, siendo el primero. Esto lo convierte en un antivirus muy seguro. Si también es el mejor, dependerá de otros factores.

¿Por qué lo ha hecho?
Probablemente no es la razón oficial, pero es interesante plantear cuánto ha podido influir Tavis Ormandy en esta decisión. Si este movimiento tecnológico e innovador del antivirus es un golpe sobre la mesa tras las muchas "humillaciones públicas" de Tavis, ahora Ormandy es el que debe quitarse el sombrero. Y así lo ha hecho.

Tavis Ormandy twitter imagen


Desde hace años, Tavis hace temblar aquella tecnología sobre la que pone los ojos. En 2011 ridiculizó a Sophos por sus prácticas en seguridad, no solo por proteger mejor o peor al sistema, sino por exponerlo aun más a causa de los fallos de implementación. A un atacante le resultaría más sencillo hacerse con una máquina en la que el antivirus estuviera instalado. Volvió a atacar un año más tarde con la segunda versión de su investigación, en la que el antivirus no quedaba muy bien.

Joxean Koret, por otro lado, calificaba de "pozo sin fondo" la seguridad de los antivirus, e incluso publicó su libro para encontrar fallos en ellos tras pasear la investigación por diferentes conferencias.

Ya en 2017, Tavis puso sus ojos en Windows Defender. En mayo, reportó varios problemas de denegación de servicio, para hacer que Defender dejase de funcionar aunque algunos, potencialmente, podrían conducir a la ejecución de código.

En mayo también, avisaba igualmente de que el emulador (tradicional pieza de antivirus que, antes de ejecutar un PE, intenta averiguar qué quiere hacer) se ejecutaba con permisos de SYSTEM (sin sandbox todavía, claro). Lo peor es que era muy sencillo que un software emulado, tuviera el control del emulador. Esto es, si se analizaba un archivo especialmente manipulado, podría ganar privilegios de SYSTEM de manera muy simple al exportar funciones que podían tocar los "emulados" para controlar el emulador. Un poco más tarde, siguió la pelea sobre si era necesaria la exposición "pública" de las APIs. Le respondieron que sí, pero luego se retractaron ante la prueba de concepto, en la que Tavis "fuzzeaba" KERNEL32.DLL!VFS_Write API con el resultado de "crashes" de varios tipos. Finalmente se solucionó en CVE-2017-8558. Y así continuó con más fallos menores... durante mayo de 2017.

Tavis Ormandy twitter dos imagen

Pero el fallo más importante fue el encontrado junto a Natalie Silvanovich. Consiguieron ejecutar código en Defender a través de una simple página web. Dijo que era uno de los peores problemas de ejecución de código recordados que se habían encontrado en Windows. Se resolvió en 
CVE-2017-0290.

Durante el 2018 todavía ha seguido encontrado otros fallos en el motor, por ejemplo esto en los que se descubría que el código para hacer un RAR empeoraba el original hasta el punto de hacerlo vulnerable. Se resolvió en CVE-2018-0986.

Proyect Zero Bugs twitter imagen


Windows Defender... para Linux
Poco antes de encontrar todos estos fallos, Tavis portó Windows Defender para Linux. ¿Para qué? Justo antes de empezar a encontrar todos estos problemas, usó Linux como plataforma de fuzzing. En el readme del proyecto califica a MpEngine como "una superficie de ataque vasta y compleja, accesible a atacantes remotos".

Y es que a los integrantes del Project Zero de Google, les encanta el fuzzing. Si alguien cree que miran el código abierto de Chrome para encontrar fallos, están equivocados. Si encuentran tantos fallos (en número) en Chrome es precisamente porque los buscan incansablemente, mediante fuzzing. Hacer fuzzing en Linux es más cómodo, mejores herramientas, todo más autocontenido, más escalable, sin necesidad de virtuales... El problema es portar programas que funcionen y permitan interactuar con las APIs. Tavis solventó todos estos problemas con programas que usan memoria de usuario y del kernel de Windows, y consiguió portar Defender a Linux solo para poder, precisamente, encontrar todos estos fallos más fácilmente. Por cierto, nada que ver con Wine. Wine intenta portar aplicaciones completas de Windows a Linux. Con este proyecto se pretende que Linux cargue de forma nativa DLLs de Windows y exporten sus funciones para poder usarlas.


Algunos retos de Microsoft
Pero no solo Ormandy superó un reto portando Defender a Linux. Ahora lo han hecho en Microsoft consiguiendo "sandboxear" Defender. No es fácil, de hecho, es el primer antivirus que lo consigue. A efectos prácticos, por si no lo conocéis, sandboxear en Windows se basa en tener permisos de integridad del tipo AppContainer, que aísla el proceso por completo. Aquí se llama MsMpEngCP.exe, y el proceso privilegiado que sigue existiendo es MsMpEng.exe. Pero el que "da la cara" hacia el exterior y puede ser vulnerado con mayor probabilidad es el contenido en la sandbox.

contenido en la sandbox imagen

Algunos retos que han tenido que solucionar han sido abarcar todas las entradas (inputs, y por tanto, potenciales riesgos) que puede tener un sistema antivirus y cubrirlos en la sandbox. Desde datos de memoria, a ficheros en disco hasta el análisis en tiempo real del comportamiento. Todo esto debía quedar totalmente sandboxeado, porque es la zona de mayor riesgo. Y además minimizar la interacción entre esta sandbox y el sistema con mayores privilegios para no penalizar el rendimiento, o provocar interbloqueos o condiciones de carrera. Otro reto es compartir los recursos, como por ejemplo las firmas, para lo que han diseñado un sistema de solo lectura en memoria compartida. Sin olvidar cómo realizar las reparaciones y desinfecciones... esto se hace con altos privilegios, porque si se hicieran con los mínimos (dentro de la sandbox) y esta se comprometiera (que es lo que se espera, pero en teoría no importaría) el atacante podría aprovechar estar ahí para reemplazar los binarios no por ficheros limpios, sino sus propios recursos. Todo un complejo sistema que, esperamos, evite que Defender se convierta en un problema de seguridad.

Aún no está activo por defecto, pero si lo queréis activar, simplemente ejecutad con privilegios este comando y reiniciad.

setx /M MP_FORCE_USE_SANDBOX 1

Recuerda que también puedes sandboxear Edge aprovechando la virtualización...


En definitiva, hasta Tavis ha celebrado el logro de Microsoft que, realmente, cambia las reglas del juego. Ahora, no importa cuántos fallos encuentre Tavis o cualquier otro. Serán muy difíciles de aprovechar y, a efectos prácticos, inútiles. ¿Seguirá intentándolo?

Sergio de los Santos
Innovación y laboratorio
ssantos@11paths.com

No hay comentarios:

Publicar un comentario