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.