Senhas em arquivo texto sem criptografia pode soar um pouco ... inseguro. Mas pensando bem, inseguro mesmo é perder horas de desenvolvimento bolando uma maneira mirabolante para guardar senhas num arquivo, sem que haja forma alguma de um hacker obtê-las.

Codificar algoritmos complexos de criptografia juntamente com um modelo de distribuição de software com licensas exclusivas por cliente soa um pouco paranóico demais. Imaginar que um hacker com o arquivo de senhas em mãos sem a chave da licensa que criptografou vai proteger você, é ser ingênuo demais; afinal  antes de mais nada: como diabos o hacker pegou o arquivo de senhas?!?! Proteger o conteúdo de um arquivo de senhas é botar a chave do cofre embaixo do tapete da sala. Não proteger o acesso ao arquivo, é deixar a porta da sala aberta. É preciso proteger o acesso a eles. E para isso, basta ter um excelente sistema operacional com incrível controle de acesso de arquivos e é claro, o acesso físico ao computador. O UNIX atende muito bem a primeira premissa. Já a segunda depende do seu chefe e do Aroldo, o segurança da portaria.

Esta noite tive um pequeno problema: esqueci minha senha do MSN e nem com reza braba consegui recuperar pelo e-mail anternativo: era antigo (do Yahoo!) e aí era outro e-mail que eu também tinha que lembrar a senha (jura!). A primeira solução foi olhar nos programas de IM que tenho aqui instalado (Pidgin e aMSN) para ver se a senha estava salva em alguma conta. No Pidgin não estava, mas no aMSN sim. Antes de falar sobre o Pidgin, vou falar sobre o aMSN.

Os desenvolvedores do aMSN implementaram um algoritmo para criptografar as senhas salvas em um arquivo chamado config.xml que fica na pasta da conta. Algo como /home/bruno/.amsn/bruno_borges_gmail_com/config.xml. O trecho com a senha é algo assim:

   <entry>
     <attribute>encpassword</attribute>
      <value>e11278adaa249d262f3a1b40fd633443</value>
   </entry>
   <entry>
      <attribute>login</attribute>
      <value>ladoservidor@hotmail.com</value>
   </entry>

Para um newbie, pode ser o fim da linha. Mas para um hacker não. Todo programa que guarda informação criptografada, precisa descriptografar para ter o conteúdo original. E o objetivo de salvar a senha é justamente para que o usuário não tenha que digitar a cada execução do programa. Graças ao aMSN ser um programa Open Source, o hacker pode obter o algoritmo de descriptografia. O do aMSN, é esse:

685    #Get the encrypted password
686     if {[::config::getKey encpassword]!=""} {
687         set key [string range "[::config::getKey login]dummykey" 0 7]
688         set password [::config::getKey encpassword]
689         catch {set encpass [binary format h* [::config::getKey encpassword]]}
690         catch {set password [::des::decrypt $key $encpass]}
691         #puts "Password length is: [string first "\n" $password]\n"
692         set password [string range $password 0 [expr { [string first "\n" $password] -1 }]]
693         #puts "Password is: $password\nHi\n"
694         ::config::unsetKey encpassword
695     }

Primeira lição tirada: para programas Open Source, criptografar arquivo de senhas é useless.
Segunda lição tirada: se o programa distribuído é em linguagem bytecode e esta possa ser facilmente descompilada, aplica-se a primeira lição.

Agora sim, posso falar sobre o Pidgin. Nele, as senhas são salvas em texto puro, sem criptografia alguma, confiando apenas no controle de acesso do arquivo, cujo qual somente o dono do arquivo pode ler/escrever.

bruno@longitude ls -asl accounts.xml && head accounts.xml                ~/.purple
12K -rw------- 1 bruno bruno 11K Aug 17 01:46 accounts.xml

<account version="1.0">
 <account>
  <protocol>prpl-jabber</protocol>
  <name>bruno.borges@gmail.com/</name>
  <password>MiNHaSeNH@</password>
  <alias>Bruno B</alias>

Nesta página da comunidade do Pidgin, o assunto é bem descrito. Mas o que importa mesmo é que o modelo de proteção do aMSN assim como de muitos outros programas, chamado de Segurança por Obscuração possui uma série de argumentos contra mas o maior problema é que apresenta um falso sentimento de segurança. O usuário por achar que seu arquivo está protegido, poderia assim não se preocupar muito com o controle de acesso ao arquivo, podendo chegar ao ponto de enviar o arquivo para alguém.

Conclusão


Tomar tempo desenvolvendo algoritmos de obscuração para "proteger" as senhas em arquivos texto é perder tempo. Um hacker com acesso ao seu sistema pode conseguir as informações ou programas necessários para descriptografar o conteúdo. Invista em segurança de infraestrutura. Proteja sua rede e seu sistema operacional. Ou simplesmente, não guarde as senhas.

PS: com um pouco de scripting e uma leitura no tutorial da linguagem TCL, recuperei a senha do MSN que estava armazenada no arquivo do aMSN. Segue o programa.