Senhas em texto puro: a melhor opção
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.
Dicas para uma senha segura
Senha. A porta de entrada para qualquer coisa na era digital. Uma senha fraca e você perde seu perfil no Orkut. Uma senha comum e seu servidor é hackeado. Os riscos são enormes quando não utilizamos uma senha adequada, mas também podemos perder o acesso se não nos lembrarmos dela.
Um hacker experiente não perderá tempo tentando adivinhar manualmente a senha do seu servidor, ou do seu e-mail. Ele vai utilizar um dicionário de senhas. Já existe hoje na Internet uma série de sites com arquivos gigantescos contendo dicionários de senhas prontinhos para serem utilizados, ou ainda métodos menos convencionais. Outros dados que o hacker pode utilizar são os que você publica em suas redes sociais, tais como data de aniversário, sobrenome, endereço da casa de praia, melhor amigo, nome do animal de estimação e por aí vai. Toda e qualquer informação sobre você que o hacker tiver acesso, ele poderá e irá utilizar contra você.
De posse de um dicionário de senhas e uma série de palavras associadas a você, extraídas das suas redes sociais, o hacker carrega estes dados em um programa simples e a partir daí, tenta acessar o que quer que seja seu e esteja protegido por senha. Pode levar tempo, mas ele vai encontrar. O tempo para quebrar a senha pode ser visto nesta tabela, retirada do blog One Man's Blog.
Repare que as senhas de 8 caracteres são facilmente descobertas, se o usuário só utilizou letras minúsculas.
Fica claro que para dificultar o trabalho do hacker, basta aumentar a senha, ou complicá-la, e principalmente: não utilizar palavras associadas à sua vida social. Complicar significa adicionar caracteres como ! @ # $ % " & * ( ) ou até mesmo espaço. Sim, espaço. Muitos destes caracteres são válidos em serviços online, e todos são aceitos no Unix. Até mesmo os caracteres gerados pelas setas de navegação, funcionam. Um combo do Ken do Street Fighter pode ser a sua senha. Hmm... não, melhor não. Todo hacker sabe executar um hadouken. Mas, as vantagens de uma senha complicada se conflitam com a única desvantagem: como lembrar da senha? Sim, é difícil. E anotar a senha num Post-It também não é seguro.
Existem duas boas técnicas que utilizo há anos, que vou compartilhar aqui para você criar uma senha que seja complicada e ao mesmo tempo fácil de lembrar.
Fórmula de Passöurd
A fórmula de Passöurd diz que:
senha = (qualquer coisa que para você faça sentido) - (que faça para outra pessoa)Óbvio, eu sei. :-) A idéia aqui é que a fórmula deva ser qualquer processo de construção de senha que para você seja fácil de lembrar de reproduzir. Às vezes, é mais fácil lembrarmos do caminho que se faz para chegar em determinado lugar, do que o endereço final.
Veja este exemplo: l77ms30ms01a! Para você esta senha tem sentido? Claro que não. E é uma senha complicada que provavelmente levaria 17.184.705 milênios para ser quebrada. Mas para o Marco Silva, ela tem lógica. Ele codificou na senha, as iniciais do seu nome, sua data de nascimento (10/03/1977) e duas letras opostas do teclado, já que todo o conteúdo da senha está ao contrário.
Esta técnica é muito útil para quem tem dificuldade em memorizar senhas aleatórias e precisa de uma fonte de dados para recriar a senha. Eu sugeri que data de nascimento não fosse utilizado na senha. Mas aqui, ela está ao contrário, e seguindo uma lógica, um sentido que somente o dono tem conhecimento, então é aceitável. Por fim, um caracter especial no final apenas para completar a senha. Algo como: "caramba!!! que senha grande!!!". Por isso a exclamação. :-)
Um processo que pode ser acrescentado a esta fórmula é o do f(x) = x - 1. Para cada caracter alfabético que você utilizar na sua senha, obtenha o caracter anterior. Com essa função, a senha de exemplo ficaria: k77lr30lr01z!
Agora sim, mesmo que o hacker saiba que seu nome é Marco Silva, ele nada poderá deduzir com as iniciais do nome. Experimente trocar a fórmula para f(x) = x - 3(x)². :-)
Nona sinfonia de Passöurd
Esta sinfonia diz que, toda e qualquer senha aleatória pode ser cantada.Como se tivesse uma musicalidade. Na música, você encontra tons altos e baixos, desde o Dó até o Sí. Uma senha pode conter uma entonação que, como música, permite você memorizar com facilidade.
Iniciando com a entonação de Mí Dó Ré Mí Ré, e utilizando as iniciais das notas, leia a senha abaixo cantando as notas no caso das letras:
M d R 4 2
você cantou mesmo? experimente: MÍ dó RÉ QUATRO doisLegal, não? Percebeu a entonação que se obtém graças às letras maiúsculas? O correto mesmo, é utilizar letras aleatórias do teclado, gerando uma sinfonia, utilizando o SHIFT para deslocar a nota musical. Com algumas repetições, fica fácil de gravar e você nunca mais irá esquecer.
Cada serviço, sua senha
É perigoso utilizar a mesma senha para tudo. Se alguém descobre, seja porque você deixou em um Post-It a sua fórmula passöurd, ou ficou cantando a senha no metrô, um último artifício é finalizar a senha com alguma indicação do serviço a qual ela está associada.
Assim como no e-mail utiliza-se o @ para dizer em qual endereço você está (@gmail, @hotmail), você pode utilizar esta mesma técnica para senhas. Indique como prefixo ou sufixo da senha alguma informação específica para o serviço. O Marco Silva por exemplo utiliza a senha k77lr30lr01z!@gm para acessar o GMail, e a senha k77lr30lr01z!@wp para acessar a sua conta no WordPress.
Conclusão
Não importa a técnica que você utilize, desde que a sua senha não seja óbvia para ninguém mais além de você mesmo. Mas as técnicas aqui podem auxiliar. Então faça testes, experimente. Veja se consegue se lembrar com facilidade depois. E principalmente: não divulgue a senha!! :-)
PS: ainda lembra da senha musical? Aposto que sim!
