Algunos de nuestros especialistas técnicos en seguridad asistieron a la conferencia de seguridad Hack.lu del 16 al 18 de octubre, para adquirir conocimientos y aprender algunos trucos y herramientas nuevos.
Geert Smelt informó sobre la charla 'Abusing Bash for Windows' de Antoine Cervoise en sobre cómo utilizar bash en Windows (Cygwin, WSL) para la escalada de privilegios y la post-explotación.
Subsistema Windows para Linux (WSL)
Con el nuevo CEO de Microsoft Satya Nadella llega una nueva dirección para Windows. Nadella ha expresado su apoyo a Linux y el primer resultado visible de esto es el lanzamiento del Subsistema de Windows para Linux (WSL) -- comúnmente llamado Bash para Windows. Se trata de una capa de compatibilidad para ejecutar ejecutables binarios de Linux de forma nativa en Windows 10 y Windows Server 2019 y se lanzó por primera vez en agosto de 2016 (1).
WSL proporciona una interfaz de núcleo compatible con Linux desarrollada por Microsoft (que no contiene código del núcleo de Linux), que puede ejecutar un espacio de usuario GNU sobre ella, como el de Ubuntu, openSUSE, SUSE Linux Enterprise Server, Debian y Kali Linux. Un espacio de usuario de este tipo puede contener un shell y un lenguaje de comandos Bash, con herramientas de command line nativas de GNU/Linux (sed, awk, etc.), intérpretes de lenguajes de programación (Ruby, Python, etc.) e incluso aplicaciones gráficas (utilizando un servidor X11 en el lado del host). Puede considerarse como el homólogo de Wine (2).
Vulnerabilidades de WSL
Inicialmente sólo estaba disponible una imagen de Ubuntu, pero con la versión 1709 de Windows 10 se han añadido Fedora y SUSE. Ahora que WSL ha madurado un poco, examinamos las vulnerabilidades que pone sobre la mesa. Antoine Cervoise nos guía a través de varias debilidades que se han descubierto en WSL. La principal dificultad para asegurar WSL es que permite a un usuario ejecutar comandos tanto de Linux como de Windows en el mismo sistema de archivos. Esto significa que si un archivo no es legible desde Linux puede seguir siéndolo desde Windows y viceversa. Uno de estos ejemplos es el archivo /etc/shadow en Linux, que almacena todos los hashes de las contraseñas de los usuarios que tienen una cuenta en el sistema. Este archivo normalmente sólo es legible por el usuario root, que es el equivalente al usuario Administrador en Windows. En un sistema que tenga instalado WSL el archivo no puede ser leído por un usuario que no sea root, pero cuando se navega hasta el archivo sombra en el sistema de archivos de Windows su contenido sí puede ser visto. La principal debilidad de esto es que los hashes corresponden a contraseñas que son válidas tanto en el sistema de archivos de Linux como en el de Windows. Obviamente, esto crea otro vector de ataque para obtener las contraseñas de los sistemas que han sido comprometidos.
Además de leer archivos, los ejecutables de Windows también pueden ser llamados desde Linux. Esto, por ejemplo, permite al usuario ejecutar un procesador de símbolo del sistema dentro del entorno Linux. También debe tenerse en cuenta que la mayoría de las soluciones de software antivirus no pueden inspeccionar WSL, lo que abre un vector de ataque para establecer la persistencia en un sistema ya comprometido a través de malware que se ejecuta desde dentro de WSL. Para que dicho malware tenga éxito, debe tener una arquitectura de 64 bits. Además, el administrador de tareas de Windows mostrará que bash.exe está en ejecución, pero no el proceso real que se ejecuta dentro de WSL. Para evitar que el proceso se cierre, puede incluso ejecutarse dentro de una sesión tmux (pero no en pantalla).
Autenticación SMB y comando sudo falso
Un método diferente de obtener credenciales es mediante el uso de la autenticación SMB. Considere, por ejemplo, incluir un comando en la configuración del shell de Linux que se ejecute cada vez que el usuario entre en el shell. Haciendo que el shell intente conectarse a una carpeta compartida en la red, el intento de autenticación SMB a este recurso compartido puede ser espiado con una herramienta llamada Responder. El hash que se encuentra entonces puede ser descifrado con el fin de recuperar la contraseña en texto plano, o puede ser reproducido para autenticar a otro servidor en la red en nombre del sistema de la víctima.
Otra idea interesante planteada por Cervoise es el uso de un comando sudo falso. Cervoise crea un script que imita el comportamiento de sudo y coloca ese script en la variable PATH del usuario, antes de encontrar el binario real de sudo. Esto le permite sobrescribir el comportamiento por defecto y la contraseña del usuario. Tenga en cuenta que este ataque no se limita a WSL, sino que también puede realizarse en un sistema Linux normal.
Por último, WSL puede utilizarse para burlar AppLocker, el elemento de Windows que impide la ejecución de cualquier ejecutable que no esté en la lista blanca. Sin embargo, Cervoise no entra en muchos detalles.
Dado que WSL es relativamente nuevo, lo más probable es que acabemos de empezar a ver las primeras vulnerabilidades. Sin duda se descubrirán y publicarán más vulnerabilidades en un futuro próximo, a medida que más y más desarrolladores y administradores de sistemas empiecen a utilizarlo para su trabajo diario.
En Bureau Veritas Cybersecurity nos mantenemos atentos a las noticias sobre este tipo de vulnerabilidades para incorporarlas a nuestro conjunto de herramientas, con el fin de garantizarle el mejor servicio que podemos ofrecerle. Haga clic aquí si desea ampliar sus conocimientos sobre codificación segura.
1. https://docs.microsoft.com/en-us/windows/wsl/faq
2. https://mikegerwitz.com/2016/04/GNU-kWindows