Autorização local sem uma senha no Ubuntu

imagem

Hoje falaremos sobre como encontramos autorização local sem uma senha no Ubuntu, que, ao que parece, nunca será fechada. Como tudo aconteceu, leia abaixo do corte.

Em uma linda noite de verão, o autor do artigo fechou a capa de um laptop em funcionamento do Ubuntu 16.04 Desktop to Unity e voltou para casa. A noite estava tão linda que decidi tirar alguns dias de folga, joguei SMS para meu chefe e ele me soltou.

Como se viu, nem todos os meus colegas tiveram a mesma noite maravilhosa. O laptop de C4n quebrou, então ele me pediu para emprestar o meu, mas com o disco rígido. Claro, eu permiti.

Com isso, nossa fascinante investigação começou.

O que aconteceu


Na manhã seguinte, o c4n desmontou meu laptop e inseriu meu disco rígido lá. Ele abriu a tampa e viu, em vez de começar a carregar o sistema operacional, a janela de login no meu sistema. Era clicável e o c4n começou a digitar senhas aleatórias, no entanto, tudo sem sucesso. Frustrado, ele apertou o botão liga / desliga e, em seguida, um milagre aconteceu.

Em vez de reiniciar o computador, entrei com êxito no meu sistema e os últimos programas e documentos que abri também foram mostrados. Vale ressaltar que os documentos não foram apenas mostrados, eles trabalharam por si mesmos! Você pode rolar pelos documentos e acessar as guias do navegador. O c4n imediatamente fez uma captura de tela para mim.

imagem
De fato, a captura de tela era diferente. Ao sair do trabalho, não deixo o KeePass aberto e o site da empresa.

Em face da autorização local sem uma senha!

Quando saí de férias, fiquei imaginando qual é a culpa desse fenômeno, se ele sempre se reproduz e sempre se reproduz da mesma forma, se se reproduz em todos os sistemas.

Razões


Como se viu, a falha desse fenômeno foi que, quando a tampa foi fechada, meu laptop não entrou em hibernação, mas dormiu (ou seja, deixou energia na RAM) e, após abrir a tampa, o SO carregado e os arquivos mais recentes permaneceram na RAM, com com quem trabalhei. O sistema operacional não sabe que o disco rígido foi removido do computador e continua a funcionar até que você precise acessar o disco rígido.

Por que é possível passar a autorização permanece um mistério para nós. Pecamos no trabalho dos módulos PAM (Pluggable Authentication Modules), que provavelmente não estão na RAM, e o Ubuntu 16.04 processa incorretamente sua ausência, mas depois percebemos que o problema é outra coisa.

É sempre reproduzido e sempre o mesmo?


Nossos experimentos começaram com o Ubuntu 16.04. As ações foram as seguintes:

  1. Enviamos o computador para o modo de suspensão.
  2. Retiramos o disco rígido.
  3. Acordamos o computador no modo de suspensão.

Além disso, como se viu, pode haver várias opções para o comportamento do sistema:

  1. O computador mostra a janela de login, digite uma senha aleatória => vemos as janelas do usuário na frente do deslizamento (todas as janelas estão funcionando).
  2. O computador mostra a janela de login, digite uma senha aleatória => o sistema diz que a senha está incorreta => pressione o botão liga / desliga uma vez => vemos as janelas do usuário antes do deslizamento (todas as janelas estão funcionando).
  3. O computador mostra uma tela preta (o cursor passa por cima), pressione as teclas aleatórias e Enter => vemos as janelas do usuário na frente do deslizamento (todas as janelas estão funcionando).
  4. O computador mostra uma tela preta (o cursor passa sobre ela), pressione as teclas aleatórias e Enter => nada acontece => pressione o botão liga / desliga uma vez => vemos as janelas do usuário antes do deslizamento (todas as janelas estão funcionando).

Provavelmente, os itens 3-4 são semelhantes aos itens 1-2, apenas por algum motivo, o gráfico não desenha uma janela de login.

O experimento foi realizado várias vezes e em todos os momentos era possível acessar as janelas do usuário, ou seja, a reprodutibilidade é 100%. Isso é muito legal para um bug tão estranho. É verdade que vale a pena notar que apenas janelas ativas estão disponíveis, não foi possível mudar para janelas minimizadas. Além disso, algumas janelas desapareceram depois de um tempo e, às vezes, o efeito de registro foi observado, mas um dos quatro métodos de entrada permitiu retornar.

PoC


Filmamos um pequeno vídeo que demonstra todo o processo de ataque.


Ele funciona em todos os sistemas?


A condição para o teste foi a presença de todas as atualizações mais recentes no sistema. Por que precisamos de um bug que está fechado há muito tempo?

Para começar, decidiu-se verificar se o bug é reproduzido em PCs comuns (não laptops) com o Ubuntu 16.04 com Unity. Havia uma teoria de que a exibição da janela poderia ser conectada de alguma forma a uma placa de vídeo. Portanto, a verificação foi realizada em um PC com placas gráficas integradas e discretas; em todos os casos, o resultado foi o mesmo - ele atende perfeitamente ao erro.

O próximo foi o Ubuntu 16.04 com o GNOME. E aqui ficamos desapontados: não resolvi o problema. Às vezes, ao sair de uma falha, o sistema mostra as últimas janelas por meio segundo (é possível gravar um vídeo), os pesquisadores relataram isso em 2011 , e ainda não foi fechado.

Além disso, levamos Arch com Wayland e Xorg - decepção, não funciona. Debian 9 com GNOME e novamente decepção. Também não funcionou no novo Ubuntu 18.04 - não surpreendentemente, porque a essa altura já começamos a suspeitar que o problema estava no Unity. Portanto, decidimos fazer o Ubuntu 14.04 para os testes mais recentes e também ver o que acontece com o Ubuntu 18.04 se você alterar o gerenciador de janelas do GNOME para Unity. No Ubuntu 14.04, tudo funcionou bem (embora as janelas tenham uma vida útil muito menor do que em 16/04). No Ubuntu 18.04 com Unity, depois de sair da falha, o sistema falha imediatamente e não é possível fazer mais experimentos.

Conclusão: decidimos que as versões do Ubuntu com o Unity instalado nativamente são vulneráveis, ou seja, versão

  • 10,10
  • 11.04
  • 11,10
  • 12.04
  • 12,10
  • 13/04
  • 13.10
  • 14.04 (testado por nós)
  • 14.10
  • 15/04
  • 15.10
  • 04.16 (testado por nós)
  • 16.10 (testado por nós)
  • 04.17 (testado por nós)

Lista bastante impressionante, não é? Testamos longe de tudo. Se alguém tiver a oportunidade de verificar outras versões que não testamos, teremos o prazer de adicioná-lo à postagem.

Por que pensamos que isso é ruim


A vulnerabilidade permite apenas o acesso local aos dados, e não a todos, mas apenas àqueles que são abertos nos aplicativos e implantados. No entanto, isso ainda é bastante crítico, porque:

  1. Os dados usados ​​podem não ser salvos no disco (por exemplo, um documento editável).
  2. Os dados podem estar em um diretório inicial criptografado (por exemplo, um arquivo com senhas).
  3. Os dados podem estar em uma unidade flash criptografada.
  4. Os dados podem exigir autorização adicional (como em nosso PoC com KeePass).

Além disso, no Unity, qualquer pessoa pode enviar um computador para um boleto, simplesmente na tela de login (sem autorização). I.e. é uma situação bastante real que uma pessoa bloqueie a tela e saia para almoçar; nesse momento, o atacante envia o computador para um deslize, retira o disco rígido e examina o que a pessoa fez antes de almoçar. Depois, resta reiniciar o computador já com o disco e a pessoa não imaginará que seus dados possam estar comprometidos.

Os céticos dirão que um resultado semelhante pode ser facilmente alcançado com um ataque de bota fria, e os resultados serão ainda melhores, mas com que frequência algum de vocês carrega uma garrafa térmica com alguns litros de nitrogênio líquido?

Decidimos que o problema é crítico e deve ser escrito no Ubuntu.

Como escrevemos no Ubuntu


Para obter um bug, tivemos que se registrar no launchpad.net , criar uma descrição do bug e adicionar um vídeo do PoC. Temos 406 pontos de classificação e um distintivo de fogueira (o que isso significa). Eles começaram a esperar. Iniciamos o bug em 18/06/2018.

Após uma longa correspondência, o camarada Marc Deslauriers encerrou nosso debate com uma mensagem que se resumia a: "Não vamos consertar nada. É o mesmo que ter acesso físico. "

imagem

Tentativas de convencer não tiveram êxito. Fomos enviados para ignorar por uma semana. Após o qual nos foi dada permissão para publicar este estudo:

imagem

UPD: 9 de julho de 2018, às 16 horas, decidimos tornar o bug público (obrigado amarao ). Na discussão na barra de lançamento, o bug foi confirmado para o Mate 18.04, e não apenas para o Unity. A comunidade também insiste que o bug existe e não deve ser ignorado.

Source: https://habr.com/ru/post/pt416425/


All Articles