Un, dos, tres... formas de elevar hoy privilegios en Windows (y cómo las usa el malware)

martes, 2 de febrero de 2016

Antes de Windows Vista, la inmensa mayoría de usuarios de Windows lo usaban como administrador para cualquier tarea. El malware no se preocupaba de elevar privilegios, excepto en sistemas de empresa bajo directorio activo, por ejemplo. Con Vista se introdujo el concepto de UAC, una especie de usuario por defecto con doble personalidad (usuario y administrador) que se comporta siempre como usuario excepto cuando se le da permiso pasando por UAC. En principio los ransomware no necesitaban privilegios para cifrar, pero ahora, cuando quieren borrar copias de seguridad o ser aun más persistentes en el sistema, deben elevar... y lo hacen. ¿Cómo? Existen varias filosofías diferentes para elevar privilegios en Windows. Veamos algunas.

Es necesario aclarar que hay dos "tipos de posibles elevaciones" que, aunque comparten objetivo, no deben confundirse. El usuario por defecto en Windows ya es administrador, y en este caso el malware o el atacante lo que necesita o pretende, específicamente, es eludir UAC, esto es, evitar que aparezca la petición de confirmación o credenciales. "Elevar privilegios" de forma más pura, se trata de conseguir que un usuario sin privilegios disponga de los permisos para hacer lo que un administrador ya tiene concedido, sin UAC de por medio. El malware, según su sofisticación, intentará una u otra aproximación.

Uno: Eludir UAC (la forma "clásica")

Vista fue un sistema operativo fallido para Microsoft. Quizás demasiados cambios de una vez y un entorno poco maduro para unos usuarios mal acostumbrados. Una de las quejas más frecuentes era el uso de UAC, y la continua confirmación de acciones que iban a realizarse como administrador. En Windows 7 se "corrigió" con la introducción de "autoelevación" para ciertos programas del propios Windows que lo incluían en su manifiesto. No se pediría confirmación para ellos (puesto que se consideraban de confianza) y así el usuario percibiría menos peticiones y "clics". Por defecto, la autoelevacón vendría activada .Todo un error, puesto que no tardó en abrirse una puerta (que sigue abierta) para eludir UAC.

Pero, si lo pensamos bien... ¿qué importa que un usuario/administrador pueda eludir UAC? ¿No es ya administrador? Además la mayoría usará UAC en modo "aprobación" (sí o no, sin introducir credenciales)... ¿Para qué elevar? Pues por ejemplo para que el malware borre sus "shadow copies" sin que el usuario lo perciba.

Esta prueba de concepto sigue siendo válida.

Poco después se liberó una prueba de concepto que permite aprovechar la autoelevación de ciertos programas (inyectándose en ellos), para que el usuario por defecto (con doble personalidad) lance un programa como administrador sin pasar por el UAC. Con más o menos cambios, esta fórmula sigue siendo válida para Windows 8 y posteriores, aunque UAC ha sido mejorado. Aun así, no parece que mucho ransomware utilice esta técnica.

Dos: Eludir UAC (en memoria)

En 2011 se publicó un método diferente para deshabilitar UAC en memoria. Cuando se llama a la API CreateProcess desde explorer.exe, esta llamada desencadena otra a CreateProcessInternal y a su vez a RtlQueryElevationFlags que decide si se muestra o no el dialogo de UAC. En una prueba de concepto disponible públicamente, se abre un explorer.exe que parchea esta función en la memoria de ntdll.dll, y se hace que siempre devuelva 0 independientemente del estado del UAC. Así, nunca se pregunta.


Eliminando el diálogo de UAC en un Windows 7 totalmente parcheado.

No funciona si el programa no se lanza desde explorer, pero esta aproximación es ya suficiente para el malware. En concreto la versión 3 de Cryptowall utiliza esta misma "solución" no solo para deshabilitar UAC, sino degradar la seguridad del sistema en general, sin que el usuario acepte ningún diálogo.

Malware real pidiendo elevar privilegios.
Parece muy legítimo (una peticion real del cmd deWindows) hasta que se miran los detalles.

Tres: Elevar privilegios de verdad, a través de vulnerabilidades

Independientemente de UAC, de vez en cuando en Windows se puede pasar de ser usuario a administrador, aunque el usuario pertenezca solo a este grupo. Esto es una "elevación pura". Habitualmente esto se consigue aprovechando vulnerabilidades, no fallos de diseño o problemas en la implementación. Las vulnerabilidades por definición suelen ser parcheadas, y ocurren varias veces al año. A veces son solucionadas antes de que se hagan públicas, y otras se lanzan sin previo aviso, como el caso de la reciente Hot Potato. Esta además cuenta con el problema de que aprovecha varios fallos, algunos de diseño que a Microsoft le va a costar mucho solucionar.

El resto de vulnerabilidades suelen suceder en el kernel, y van y vienen a medida que Microsoft parchea pero se descubren nuevas. Estas vulnerabilidades no suelen ser aprovechadas por malware más genérico, pero sí que lo suelen usar los auditores, atacantes en redes internas o pentesters en general para sus movimientos laterales.

Bola extra: Elevación por otras causas

Hay otros métodos. Uno habitual es que un programa establezca permisos erróneos en el sistema, y un usuario pueda aprovecharlo para cambiar el ejecutable y que (quizás un servicio) se lance como SYSTEM. Esto también es habitual cada cierto tiempo, pero es más achacable al instalador o programador que al propio sistema operativo y además solo funciona si se tiene instalado ese software... aunque algunos portátiles pueden llevarlo preinstalado. Sin ir más lejos, tenemos un reciente ejemplo de hace días aquí.

¿Qué hacer?

Evitar el uso de UAC, creando un usuario sin privilegios de verdad. Si se utiliza UAC, elevar su seguridad a "modo Windows Vista". Y para el resto de elevaciones... parchear y mejorar la seguridad del equipo en general (muchas se ven mitigadas si se toman las precauciones previas necesarias).


Elevar la seguridad de UAC. Si no hay más remedio que usarlo, una posible mejora.





Sergio de los Santos
ssantos@11paths.com

No hay comentarios:

Publicar un comentario en la entrada