Usando o X Window System Com Segurança

O X Window System é um sistema de janelas bastante flexível e com funcionalidade completa, que dá ao usuário o pdoer de executar clientes gráficos de qualquer workstation, de qualquer lugar da Internet, e/ou acertar no próprio pé ao mesmo tempo (deixando seu terminal aberto para espionagem do teclado ou permitindo que alguém tome sua sessão de login).

A informação a seguir vem de várias fontes, incluindo:

Para entender o problema e a solução, primeiro vamos ler o que o autor do SATAN tem a falar sobre as vulnerabilidades do X. Este tutorial menciona os programas xhost e xauth, mas não explica seu papel no X11 e seu uso.

Em resumo, o X11 (release 4 e posteriores) suporta dois métodos de controle de acesso principais:

Controle de Acesso baseado no host

Este método dá acesso a seu servidor X em uma base per-host. Isto significa que se você der acesso a um dado computador, qualquer pessoa com uma conta naquele computador, executando qualquer cliente X, pode acessar seu servidor (isto é, sua tela e teclado). Com o controle de acesso desligado (o que acontece quando você usa o comando xhost +) este acesso extende-se a qualquer pessoa em qualquer dos milhões de hosts na Internet!

às vezes, ou os fabricantes ou os usuários de workstations irão usar o comando xhost + no arquivo de sistema XSession, ou o arquivo de usuário .xsession, ou qualquer outro script, para desabilitar o controle de acesso. Normalmente isto torna a vida mais "fácil" para o usuário. Uma forma igualmente simples, mas mais segura, de executar clientes X, será discutida em um momento.

Para mais informações no controle de acesso baseado no host, veja a seção 4.1 do X Window System Administrator's Guide

Controle de acesso em nível de usuário, com a autorização MIT-MAGIC-COOKIE-1

Este método envolve uma única token de validação que é conhecida somente pelo servidor X e a pessoa que pela última vez faz logon em um sistema usando este servidor. Este token único é obtido pelos clientes X quando você inicia os mesmos e é dado ao servidor. Se o token combina com o que o servidor possui, o acesso é permitido. Se não, o acesso é desabilitado por este meio. Uma vez que o arquivo que mantém este token não é legível por qualquer outra conta que não o usuário que acabou de fazer o logon, somente aquele usuário pode conectar-se ao servidor.

Para mais informações sobre a autorização MIT-MAGIC-COOKIE-1, veja a seção 4.2 do X Window System Administrator's Guide

Como o xdm implementa a autorização

O controle de acesso a nível de usuário com o protocolo de autorização MIT-MAGIC-COOKIE-1 é normalmente implementado quando é usado o X Display Manager (xdm), que "controla" terminais X e fornece uma janela de "login" no display do terminal X. Se seu sistema não usa o xdm por padrão, você deve descobrir quais os mecanismos fornecidos pelo fabricante do seus sistema de janelas, ou configurar e rodar o xdm no seu sistema.

A configuração do xdm é descrita em detalhes no X Window System Administrator's Guide, capítulo 3. Os passos básicos são:

  1. Certifique-se de que o arquivo xdm-config contém as seguintes linhas:
    DisplayManager._0.authorize: true
    DisplayManager*authorize: false
  2. Reinicialize o sistema

Quando o xdm verifica o login e senha de um usuário, ele irá gerar um token de autorização (o "MAGIC COOKIE") para esta sessão do usuário. Isto faz com que o servidro X também contenha este token de autenticação e ele coloca uma cópia deste no diretório home do usuário em um arquivo chamado .Xauthority. O arquivo .Xauthority pdoe ser manipulado com o comando xauth. Por exemplo,

host% xauth list
foobar.cac.washington.edu:0 MIT-MAGIC-COOKIE-1 dbfdbf59f8a2d93c917b5ad70359
blurty.u.washington.edu:0 MIT-MAGIC-COOKIE-1 15827e86fc0cdf0464c1e559cc1c
bloop.u.washington.edu:0 MIT-MAGIC-COOKIE-1 1effca1bb891f6f764cd8293d0c9

O usuário pode agora extrair e transferir seu token de autenticação para uma conta em outro sistema usando os programas xauth e rsh (veja "man xauth", "man rhosts" e man "rsh" para maiores detalhes). Para iniciar um programa em remotehost, uma seqüência de comandos como esta será usada:

xhost% xauth extract - $DISPLAY | rsh remotehost xauth merge -
host% rlogin remotehost
remotehost% xclient -display your.x.server.dns-name:0 &

Uma ferramenta mais fácil de usar é o programa xrsh, que está disponível em ftp://ftp.x.org/contrib/utilities. Com este programa, o exemplo acima torna-se simplesmente:

host% xrsh remotehost xclient

Nota: Veja o CERT Vendor-Inititated Bulletin VB-95:08 para informações sobre vulnerabilidades com a autorização X

O Modo Secure Keyboard do cliente xterm

O cliente xterm possui outro mecanismo para garantir que as teclas pressionadas não possam ser espiadas por programas que estejam conectados a seu servidor X, chamado de modo Secure Keyboard. Esta funcionalidade do xterm está explicada no X Window System Administrator's Guide, na seção 4.5.

Para ligar/desligar o modo Secure Keyboard, siga estes passos:

  1. Certifique-se que o cursor do mouse esteja na janela do xterm
  2. Pressione a tecla <Ctrl> enquanto clica com o botão esquerdo do mous
  3. Movimente o mouse para baixo para selecionar Secure Keyboard do Main Menu
  4. Se o modo Secure Keyboard for habilitado, a tela irá trocar as cores de fundo e frente. Se isto não acontecer, o modo Secure Keyboard não foi habilitado.

Nota: Você deve habilitar o modo Secure Keyboard antes de escrever sua senha, e então desabilitar o mesmo. Você não pode simplesmente deixar o xterm no modo Secure Keyboard o tempo todo. A razão para isto é que o modo Secure Keyboard pode e interfere com o funcionamento do gerenciador de janelas, e pode impedir que você movimente as janelas ou altere a ordem das mesmas em sua janela.

Detalhes, detalhes...

Existem mais aspectos envolvidos com a configuração dos terminais X, controle XDM, etc., que não são cobertos aqui. Se você for do corpo docente/discente ou funcional da Univestity of Washington, e tem alguma questão ou quer algum esclarecimento sobre algo mencionado aqui, envie um email para help@cac.washington.edu.