Putty (SSH) com Cartão de Cidadão

Logon. SSH. Cartão de Cidadão

Mais um apontamento sobre autenticação com o Cartão de Cidadão (CC), desta vez dedicado ao tema da Secure SHell (SSH), uma solução que encontramos, tipicamente, em sistemas baseados ou inspirados no UNIX, e em equipamentos de comunicações.

(Para quem tiver interesse na utilização do CC em ambientes Windows, estão disponíveis neste espaço dois artigos sobre o tema, nomeadamente, (i) o logon com CC no Windows em contexto autónomo e (ii) num contexto de Domínio Microsoft.)

Como a variedade de dispositivos que incluem o serviço SSH é imensa e o tempo é sempre limitado, tive que restringir esta experiência a um conjunto reduzido de sistemas. Em concreto, utilizei um servidor Linux com o serviço SSH ativo, e uma máquina cliente com Windows 7. Noutras notas poderei endereçar, eventualmente, outros contextos (e.g. routers com firmware DD-WRT e clientes em OS X Lion).

O modelo de autenticação adotado neste ambiente é estritamente local. Adicionalmente, e ao contrário dos artigos anteriores, o mecanismo de autenticação não utiliza os certificados da infraestrutura de chaves públicas do Estado, i.e., não utiliza o modelo de confiança dessa PKI, materializado nos certificados X.509 – o modelo adotado depende apenas das chaves públicas e privadas dos cartões; não depende dos certificados nem da cadeia de confiança.

É importante referir, neste momento, que este apontamento pressupõe que os leitores estão familiarizados com os procedimentos básicos de instalação, configuração e operação dos sistemas envolvidos.

Por último, uma ressalva: o texto elabora sobre os aspetos técnicos necessários para utilizar o Cartão de Cidadão neste cenário; não inclui considerações sobre a vertente legal da sua utilização, cuja legislação relevante está disponível no espaço oficial do cartão.

Os parágrafos seguintes apresentam os ingredientes e descrevem a experiência.

  1. O hardware
    • Um computador para desempenhar o papel de servidor SSH, físico ou virtual. Os requisitos técnicos não são exigentes, apenas os que forem necesários para instalar e correr uma versão mínima de CentOS, e.g. 512 MBytes de memória, um disco com 4 GBytes disponíveis, e um processador de 32 ou 64 bits;
    • Um PC para desempenhar o papel de cliente SSH sobre Windows. Nesta experiência usei um computador ASUS Eee PC 1005PE;
    • Um leitor de smart cards. Apenas como exemplo (e porque foi o que usei), um Omnikey Cardman 3121;
    • Um Cartão de Cidadão Português; e
    • Uma infraestrutura adequada para ligar os equipamentos numa rede. O acesso à Internet é opcional para os testes mas é necessário para transferir algumas aplicações.
  2. O software
    • O CentOS 6.2, uma variante gratuita do Red Hat Enterprise Linux, para sistema operativo do servidor. Nota: pode ser usada qualquer variante do Linux, desde que tenha um daemon SSH – e quase todas têm;
    • O Windows 7, o sistema operativo do computador cliente, numa versão qualquer. Nesta experiência usei a versão Starter, incluída no computador;
    • Os drivers para todos os componentes das máquinas, incluindo – e destacando-se – o driver para o leitor de smart cards, se não estiver incluído no próprio Windows;
    • As ferramentas e bibliotecas OpenSC, uma coleção de aplicações para smart cards;
    • O software do CC: a Aplicação do Cartão de Cidadão;
    • O PuTTY, um dos clientes SSH mais populares para Windows; e, finalmente,
    • O PageantSC, um agente SSH que suporta smart cards, uma aplicação derivada do Pageant do PuTTY.
  3. O confware
    • O ficheiro PageantSC-CC-PKCS11.reg, que contém a configuração necessária para o PageantSC usar a biblioteca PKCS#11 do software do CC.
  4. A instalação do computador cliente
    • Instalar o Windows 7 e atualizar o sistema, várias vezes, até não estarem disponíveis quaisquer atualizações adicionais;
    • Se o leitor de cartões não for reconhecido automaticamente pelo Windows, transferir e instalar o driver do leitor. Neste contexto não foi necessário mas, claro, depende do dispositivo que utilizarem;
    • Transferir o OpenSC e instalá-lo. Escolher a versão de 32 ou 64 bits, de acordo com o sistema operativo instalado;
    • Transferir e instalar a aplicação do CC, disponível no espaço do Cartão de Cidadão. Novamente, escolher a versão correcta para o sistema operativo instalado;
    • Transferir o PuTTY e instalá-lo. Recomendo a instalação do pacote completo porque inclui o PSFTP, um programa para transferências de ficheiros que também faz parte deste teste; e
    • Transferir o PAgeantSC, o próprio executável pageantsc.exe, e copiá-lo para a pasta do PuTTY.
  5. A configuração do PageantSC, o agente SSH
  6. A identificação da chave pública do cartão
    • A partir de uma linha de comandos, navegar até à pasta onde foram instaladas as ferramentas do OpenSC, e.g. 'cd "C:\Program Files\OpenSC Project\OpenSC\tools"';
    • Executar o comando "pkcs15-tool --list-keys". Identificar, nos resultados, o campo ID correspondente à chave "Private RSA Key [CITIZEN AUTHENTICATION KEY]"; e
    • Utilizando esse identificador, executar o comando 'pkcs15-tool --read-ssh-key identificador | find "ssh-rsa" > a-vossa-pasta-de-documentos\authorized_keys'. A vossa chave pública para autenticação fica guardada nesse ficheiro ("authorized_keys") num formato adequado ao SSH.
  7. A instalação do servidor Linux
    • Transferir a versão mínima do CentOS 6.2, disponível no mirror da Universidade do Porto, nas variantes de 32 bits e 64 bits. Escolher uma variante e instalar o servidor;
    • Em alternativa, se preferirem outra versão do Linux, podem usá-la desde que garantam que o daemon SSH está ativo e configurado para usar autenticação por chaves públicas (ou seja, por outras palavras, que o ficheiro "/etc/ssh/sshd_config" contém as linhas "PubkeyAuthentication yes" e "AuthorizedKeysFile %h/.ssh/authorized_keys", ou que, mesmo não tendo essas linhas, esses valores são assumidos por omissão); e
    • Atualizar o sistema com "yum update" (se a versão escolhida for o CentOS; se não for, atualizar o sistema com o comando correspondente). Em princípio, uma vez será suficiente.
  8. A adição de uma conta no Linux e associação do CC
    • No contexto root, adicionar uma conta de utilizador standard, e,g, "useradd utilizador", e atribuir-lhe uma password forte com "passwd utilizador";
    • Terminar a sessão como root e entrar no sistema com a conta utilizador;
    • Criar a pasta de configuração SSH para essa conta, e.g. "mkdir ~/.ssh";
    • Copiar o ficheiro "authorized_keys", o tal ficheiro que contém a chave pública do cartão e que criámos através do Windows, para a pasta de configuração. Por exemplo, "cp authorized_keys ~/.ssh/"; e
    • Trancar as permissões da pasta e do ficheiro com "chmod 700 ~/.ssh" e "chmod 600 ~/.ssh/authorized_keys".
  9. O teste com o PuTTY
    • Em princípio, se os passos forem executados pela ordem que apresentei, todas as configurações estarão definidas e estabilizadas em ambos os sistemas – podemos dar início ao teste;
    • Com o leitor de cartões ligado ao PC, introduzir o Cartão de Cidadão;
    • Executar o programa pageantsc.exe a partir da pasta do PuTTY (ou a partir de um atalho, se o definiram previamente). O programa lê o conteúdo do CC e prepara-se para agir como agente SSH para o PuTTY;
    • Executar o PuTTY e abrir uma sessão contra o servidor Linux;
    • No início da sessão o programa pergunta-nos quem irá abrir a sessão. Responder utilizador (o nome que escolheram para a conta standard que criaram no Linux);
    • Em seguida, o PageantSC solicita-nos o PIN da chave de autenticação. Introduzir o PIN e aguardar o início da sessão; Por último,
    • Saltar várias vezes e agitar os braços, com vigor, pelo contentamento : )
  10. O teste com o PSFTP
    • Na sequência do teste anterior, ainda com o PageantSC a funcionar como agente, executar, no contexto de uma linha de comandos, "C:\Program Files\PuTTY\psftp.exe nome-ou-IP-do-vosso-servidor-linux"; e
    • Designar a conta que irá aceder ao serviço, introduzir o PIN quando for solicitado, e experimentar a transferência de ficheiros.
  11. Os outros parâmetros
    • Podemos exigir a utilização exclusiva do CC e proibir a utilização de passwords e outros mecanismos de autenticação via SSH. Nesse sentido, basta editar o ficheiro de configuração do serviço (em "/etc/ssh/sshd_config") e acrescentar/alterar as linhas "GSSAPIAuthentication no", "HostbasedAuthentication no", "KerberosAuthentication no", "PasswordAuthentication no", "RhostsRSAAuthentication no", e "RSAAuthentication no". Nota: o acesso com passwords ainda fica disponível na consola.
  12. As nuances
    • O modelo descrito neste artigo não assenta em certificados digitais, apesar de utilizar criptografia de chaves publicas. Esta característica faz com que o modelo tenha a vantagem de não depender, num sentido estrito, da PKI do Estado – o modelo depende apenas das chaves que estão integradas nos smart cards. No entanto, há outras perspetivas em que esta característica pode ser problemática: Se, por exemplo, um cartão for revogado, não existe uma forma simples de inibir a sua utilização (porque não são avaliadas Certificate Revocation Lists);
    • Não é fácil escalar este modelo. Como as chaves públicas de todos os utilizadores têm que ser introduzidas em todos os sistemas, a gestão das credenciais pode ser complicada. O modelo é mais adequado para ambientes com um número reduzido de sistemas;
    • As passwords não fazem nem são o sumo; o sumo é composto pela informação contida nos computadores. Ou seja, dito de outra forma, apesar do controlo de acessos ser importante para restringir o acesso à informação (e, neste caso, o CC é um bom controlo), este mecanismo tem que ser complementado com a cifra total do disco. Uma solução como o TrueCrypt é um exemplo;
    • Se mantivermos o acesso através das passwords, os ataques serão dirigidos ás passwords e o controlo pelo cartão torna-se irrelevante. No entanto, se obrigarmos a utilização exclusiva dos cartões, temos que garantir, no mínimo, que existem cópias da informação em dispositivos externos aos computadores. Porquê? Porque podemos perder o acesso às máquinas se perdemos os cartões. Num cenário empresarial, em que existem vários administradores de sistemas, estas situações não são tão prováveis. A menos, claro, que só exista um(a) administrador(a) e o cartão perdido seja... o dele(dela).
  13. As recomendações
    • Para além das questões técnicas que envolvem a utilização do CC, existem outras questões que têm que ser endereçadas pelas organizações que decidirem adotá-lo: As questões processuais. Apenas como exemplos, têm que existir processos para o mapeamento das chaves, processos para endereçar a expiração, revogação e atualização dos cartões, processos para recuperação em situações de perda temporária dos cartões, etc;
    • A utilização deste controlo não é adequada para todos – todos – os cenários. Depende da análise do risco em cada situação, considerando, no mínimo, o tipo de informação acedida por cada conta e guardada em cada servidor, e a eventual indisponibilidade por perca dos cartões;
    • Nos cenários em que este controlo for adoptado devemos (i) desactivar as passwords, (ii) ponderar a cifra total dos discos; e (iii) fazer cópias regulares da informação, cifradas com chaves próprias, independentes dos computadores e dos cartões envolvidos; e devemos
    • Criar duas contas de administração em cada sistema e associar dois CCs.

Mais uma vez, está feito. Tenciono continuar com estes artigos sobre o CC, no sentido de atingir um dos objetivos que estabeleci para este ano. Provavelmente ainda farei uma variação do cenário SSH com um cliente em OS X Lion, e até, se tiver oportunidade de tocar num Cisco, num serviço SSH num equipamento de comunicações. E depois, claro, a autenticação na web com o CC. Anyway, vamos ver.

Comentários, correções e sugestões? Be my guests ; )