Suas senhas são FORTES? Ou fracas?

Hoje em dia diversos sites tem algum indicador que aparece quando você cria ou troca uma senha, e que diz se ela é "forte" ou "fraca". Você sabe o que isso significa?

Senhas fracas

Falando de forma bem genérica, uma senha é "fraca" se for fácil para uma outra pessoa descobrir qual você usou. Existem várias maneiras de alguém roubar a sua senha, mas o que determina a "força" dela é a resistência a um ataque de força bruta com dicionário.

Força bruta nada mais é do que tentar todas as senhas possíveis. Como isso pode demorar, primeiro são tentadas palavras de um dicionário. Mas não é um dicionário comum – é uma lista com muitos milhões de "senhas", começando pelas mais comuns ( que ainda são "123456" e "password" nos EUA ), e muito, muito mais.

É claro que não é um estagiário de hacker que vai ficar digitando um milhão de senhas para invadir sua conta no twitter ou no facebook – vão usar um programa feito especialmente para isso. A maioria dos sites tem algum limite para a quantidade de tentativas erradas que você pode fazer, justamente para evitar esse tipo de ataque. Mas alguns não tem, ou existe algum erro que um atacante consegue explorar.

Senhas fortes

Uma medida de "força" da senha é baseada na quantidade de senhas que um atacante teria que tentar para ter certeza de descobrir a sua, sabendo apenas o conjunto de caracteres que você usou.

Por exemplo, se a sua senha for "z", um atacante que começasse tentando todas as senhas com uma letra descobriria a sua na 26a tentativa. Se fosse "zzz", talvez precisasse de 26 x 26 x 26 = 17.576 tentativas. Se misturamos letras maiúsculas e minúsculas, como em "zZz", o atacante teria que procurar a sua senha em um conjunto total de 52 x 52 x 52 = 140.608 senhas. Adicione símbolos e o conjunto total de senhas de 3 caracteres (de "aaa" a "~~~" é de 95 x 95 x 95 = 857.375. Estão entendendo por que tantos sites exigem que sua senha tenha uma "mistura" de tipos de caracteres?

Em valores aproximados podemos dizer que uma senha de ‘n’ caracteres, que use uma mistura de letras, dígitos e símbolos, tem um pouco menos de 10^2n combinações possíveis. Por exemplo, uma senha de 8 caracteres teria aproximadamente 10^16 combinações – ou dez quatrilhões de senhas possíveis. Parece muito…

Ataques

Existem outras maneiras de roubar uma ou mais senhas, mas a "força" da senha é importante em duas situações:

  • Um atacante tem uma lista de possíveis usuários de um site, e está tentando se logar com cada um deles repetidas vezes (tantas quantas o site permitir).
  • Um atacante obteve uma lista das senhas criptografadas de um site.

Múltiplas tentativas

A grande maioria dos sites tem algum limite para a quantidade de vezes que você pode errar a sua senha. Alguns vão bloquear a sua conta se você errar 3 vezes. Outros vão te obrigar a esperar alguns minutos para tentar de novo. Outros exigem um tempo mínimo entre quaisquer duas tentativas.

O motivo desses limites é justamente freiar um possível atacante, e limitar a quantidade de senhas que ele pode tentar "adivinhar" para cada usuário. Sem um limite desses, alguém poderia deixar um programa fazendo centenas, ou milhares, de tentativas POR SEGUNDO, vários milhões por dia. Algo tão simples quanto exigir uma espera de um minuto entre tentativas já reduz esse total para 1.440 POR DIA.

Senha x hash

Os sites que levam a segurança minimamente a sério não guardam as senhas de forma clara ("abertas" ou "em texto claro"). Quando você escolhe uma senha, ela é transformada por um processo criptográfico em uma sequência de caracteres totalmente diferente. O resultado é chamado de "hash" da senha, e existem processos mais e menos seguros de obter esse "hash". Uma propriedade necessária para um "hash" é que ele não seja reversível, isso é, não seja possível a partir do hash obter a senha original.

Se o hash não é reversível, mas o atacante tem em mãos uma lista de alguns milhares ou milhões de hashes, ele pode começar a testar cada senha possível. Pegue a primeira palavra do dicionário de senhas comuns ("123456"), veja o hash dela e compare com o hash da lista.
Se for igual, descobriu uma senha, se não passe para a próxima palavra ("password") e tente de novo…

Se o site simplesmente pega a senha que o usuário digita, calcula o hash dela e guarda, duas coisas acontecem:

  • usuários com a mesma senha tem o mesmo hash
  • se o atacante já calculou o hash para "123456" uma vez, não precisa recalcular, é só varrer a lista que vai achar todos os usuários que usaram essa senha.

Outro problema é que muitas das formas comuns de calcular um hash são muito rápidas, permitindo que um atacante faça muitos milhões (até bilhões) de tentativas por segundo.

E para vários tipos de hash alguém já calculou todos os valores para várias sequências de caracteres – são as chamadas "Rainbow Tables". E elas estão disponíveis na Internet. A existência dessas tabelas demonstra que em muitos casos senhas de até 8 caracteres quaisquer (é, até "*q&mz%5H") podem ser quebradas trivialmente.

Existem formas de se proteger desses dois problemas, e tornar a vida dos atacantes mais difícil. Infelizmente nem todos os sites (ou sistemas operacionais) usam medidas adequadas, e guardam as senhas de forma vulnerável.

Força bruta

Vamos supor que o nosso site "exemplo.com" fez quase tudo direito. Os hashes são calculados usando um método "lento", e imune a tabelas pré-geradas. Infelizmente alguém bobeou, e a lista vazou para a Internet. E agora?

Vamos assumir que os hashes foram gerados usando um dos métodos disponíveis em sistema unix/linux, o sha512crypt. Existem programas disponíveis que testam vários tipos de hash de forma muito rápida. Recentemente um usuário postou um benchmark onde conseguiu quase 100.000 hashes por segundo para o sha512crypt, usando a capacidade de processamento de várias placas aceleradoras de vídeo.

O que isso significa? Que se vazou uma lista de um milhão de hashes, em um dia um atacante pode testar (24 x 60 x 60 x 100.000 / 1.000.000) 8.640 senhas para cada usuário. Se a senha que você usa for uma das 8.640 mais comuns, vai ser descoberta no primeiro dia. Cada vez que o atacante descobre uma senha, mais tentativas ele pode fazer por dia contra cada hash restante. Se no primeiro dia ele descobrir 10% das senhas, no segundo dia ele pode tentar umas 9.600 outras senhas contra cada um dos 900.000 usuários restantes. Mais algumas senhas serão descobertas…

Ao final de 30 dias, é provável que todas as senhas entre as 1.000.000 mais comuns tenham sido descobertas. E se o atacante tiver algo pessoal contra você, em particular, e concentrou todo o poder de fogo na sua senha? Ele pode ter tentado 259.200.000.000 combinações de caracteres contra a sua senha. Isso se ele estiver sozinho, e não quiser gastar um pouco de dinheiro executando um recuperador de senhas na nuvem.

Em muitos casos a realidade é pior – o site pode ter usado um método mais fácil de atacar, e um atacante consegue testar algumas dezenas de BILHÕES de senhas POR SEGUNDO. Em um caso desses, o atacante pode em média testar 10.000 senhas por segundo para cada usuário da lista de um milhão, 864.000.000 por dia. Se a lista de senhas for menor, ou tiver muitas senhas "fracas", ao final de um mês só restarão as senhas que resistiram a mais de um trilhão de ataques. Se existirem "Rainbow Tables" para o hash usado, todas as senhas até 8 caracteres serão quebradas em poucos minutos, e talvez boa parte das até 10 carateres.

Como criar uma senha forte?

Existem algumas sugestões na Internet, sites que geram senhas para você, ou que testam se uma senha é boa. Existe até uma palestra TED sobre senhas.

Se você seguir todos os links acima vai voltar um pouco frustrado, já que eles não concordam plenamente sobre como criar senhas fortes. Uma das poucas coisas que todos dizem é que não se pode confiar em humanos para isso. As pessoas procuram padrões que sejam fáceis de lembrar, e tendem a superestimar a dificuldade de alguém descobrir sua senha.

Eu acredito que um dos motivos desse otimismo é uma idéia errada de como os atacantes trabalham. Se fossem 100 chipanzés digitando senhas, ou 100 médiums tentado adivinhar, ou um programa começando de "aaaaaaaa", "aaaaaaab", até "zzzzzzzz", você podia escolher como senha o nome do seu cachorro seguido de @, ou o seu nome ao contrário, e estaria seguro. Mas em um mundo onde os atacantes dispõem de programas que podem fazer bilhões de tentativas por segundo e usam listas otimizadas de palavras, a sua imaginação não é o bastante.

Outro problema é que cada site tem sua política própria, e mesmo que "Content-Operation-Beat-The-9" fosse segura, alguns sites não vão permitir uma senha tão longa, ou que contenha palavras do dicionário.

Se você tem dezenas de contas, e tem uma senha diferente para cada uma (nada de repetir senhas, não é seguro), como lembrar de tantas senhas? E se cada senha for algo como "C11de553242$" ou "Joy-Wrap-Break-Repeat-3", como lembrar? A maioria das pessoas não tem uma memória tão boa, e sempre te disseram que escrever as senhas em um pedaço de papel é errado. Bom, escrever a senha tem problemas, mas depende do que você faz com o papel. E podemos argumentar que um papel com suas senhas é melhor do que usar "12345678" ou "Password1".

Mas existe uma opção melhor.

Gerenciadores de senhas

A forma mais prática de gerar e guardar dúzias de senhas fortes é instalar um gerenciador de senhas ("password manager"). Existem diversos produtos disponíveis, alguns grátis, outros pagos, com uma ampla gama de funcionalidades. Existem diversas avaliações na Internet comparando as opções mais populares, como na pcmag , no lifehacker, e outros.

Escolha um que atenda as suas necessidades (sistemas operacionais, preço, outras funções), instale no seu computador, telefone e tablet.
Decida como vai fazer backup das suas senhas (MUITO IMPORTANTE) e comece a rever e trocar todas as suas senhas.
Já falei isso no post anterior, mas mesmo que tenha backup na nuvem, mantenha uma cópia contigo em cd/dvd ou pendrive.

Segurança não é só uma senha forte (ou várias)

Usar senhas fortes e um bom gerenciador de senhas é um passo importante, mas é apenas UMA das boas práticas de segurança que devemos seguir. Se seu computador está cheio de vírus, se você instala programas de origem duvidosa, se clica em qualquer link que recebe por email, vão roubar a sua senha. Não vão precisar adivinhar "C11de553242$", vão ver você digitando.

Segurança é uma corrente que arrebenta no elo mais fraco. Se você não tiver uma boa prática de segurança no dia a dia, não adianta ter senhas fortes. É como ter uma fechadura de segurança na porta de casa e não imaginar que o ladrão pode entrar pela janela.

Então ANTES de começar a usar um gerenciador de senhas, faça uma limpeza no seu micro, atualize o antivírus, filtros de spam, apague aquele joguinho pirata que o seu sobrinho instalou semana passada. Garanta que sua máquina está livre de infestações, e tome providências para mantê-la assim. Desconfie de qualquer email que tenha links dentro dele, e verifique se o destino do link é mesmo o que parece. Na dúvida, não clique.

Dois é melhor

Uma senha, por mais forte que seja, pode ser descoberta de alguma forma. Por isso diversos sites oferecem a possibilidade de você acrescentar mais uma medida de segurança, um "fator adicional" ou "segundo fator". O mais comum é você cadastrar o número do celular, e quando for acessar o site, depois de você informar a senha eles te enviam um SMS com um código para você informar antes de liberarem o acesso.

A ideia é que mesmo que alguém descubra a sua senha, não vai ter acesso ao seu celular. É claro que para isso funcionar, você tem que estar com o celular na hora que quiser acessar o site, e se for mudar de número, tem que atualizar todos esses sites…

Seja o primeiro a comentar

Faça um comentário

Seu e-mail não será divulgado.


*