Senhas mais seguras

Daniel Jordao
11 min readMar 22, 2020

Tudo o que você precisa saber — E aplicar

Princípios

Vivemos atualmente na era digital, aonde muitos de nós ainda não se preocupam com os 3 pilares básicos de segurança da informação: Confidencialidade, Integridade e Acessibilidade. Nesse artigo abordaremos o primeiro deles, a confidencialidade, sendo que a principal forma de proteção de confidencialidade são as nossas senhas. Definir um processo de criação e manutenção de senha é fundamental para que possamos proteger nossas informações pessoais e profissionais dentro de um cenário crescente de ataques cibernéticos envolvendo vazamento de dados de grandes corporações.

Ameaças

Dentro de um vasto horizonte de superfícies de ataque, uma das mais frágeis e atacadas é a sua senha.

Um método muito difundido de quebrar senhas é o método ataque de força-bruta, que consiste na utilização de dicionários de combinações de palavras, números e outros caracteres, para tentativas massivas e sucessivas de autenticação com base na tentativa e erro. Quando uma autenticação é válida, o processo pára e exibe a senha correta do usuário.

Esses ataques são dividos em 2 tipos:

Online Brute Force Attack, no qual o serviço é atacado diretamente, como se fosse um usuário tentando realizar uma autenticação;

Offline Brute Force Attack, através do qual o atacante já possui uma cópia do banco de dados do serviço-alvo (ou hash da senha) que o permite realizar o ataque sem qualquer alertas para o usuário ou o provedor de serviços.

Tais dicionários (ou wordlists) usados são gerados através de ferramentas específicas com as quais podem ser compiladas palavras prontas em um idioma específico ou criadas infinitas combinações de letras, números e caracteres especiais a fim de criar uma lista de possíveis senhas que serão utilizadas por ferramentas de brute force. Como resultado, esses dicionários costumam ser arquivos de texto puro muito pesados, geralmente na ordem de dezenas de GB para mais. Majoritariamente, senhas como deus/god, amor/love com números no final são as mais fáceis de serem adivinhadas e muitas vezes estão no início desse tipo de wordlist.

Critérios de senhas

Infelizmente, muitos usuários utilizam critérios de geração de senha de 15 anos atrás, quando as chaves criptográficas e poder de processamento não permitiam quebrar uma senha via força bruta em tempo humanamente hábil. Esse cenário mudou e atualmente pode ser rápido quebrar uma senha de 8 caracteres. Nos dias de hoje, precisamos ter em mente que chaves criptográficas evoluíram, assim como o poder computacional e devemos acompanhar essa tendência para que nossos dados permaneçam protegidos.

Atualmente, temos as seguintes dificuldades:

- Dificuldade de lembrar a senha;

- Dificuldade de digitá-la;

- Dificuldade em quebrá-la;

Entraremos agora em detalhes técnicos sobre a força de uma senha, se não desejar entrar tecnicamente no assunto, pule a seção seguinte.

Entropia

Entropia de senhas é a medida de imprevisibilidade (ou força) de uma senha. É calculada com base no conjunto de caracteres utilizados, sendo possível expandir esse conjunto utilizando letras minúsculas, maiúsculas, números e caracteres especiais, assim como o comprimento da senha. A entropia de uma senha geralmente é representada em termos de bits. Uma senha já descoberta tem entropia 0, enquanto uma senha possível de ser descoberta na primeira tentativa geralmente tem entropia 1. O cálculo de entropia de uma senha é feito com base na entropia por cada caracter utilizado, calculado pelo logarítimo base 2 do mapa de letras, números e simbolos do conjunto multiplicado pelo número de caracteres na senha.

Atualmente temos os seguintes padrões de comprimento de senhas e o seu nível de complexidade em bits:

Ref.: https://en.wikipedia.org/wiki/Password_strength

Nessa tabela, vamos focar na coluna Alpha-Numeric, dentro de Case Sensitive (uma vez que senhas via de regra são diferenciadas entre caracteres maiúsculos e minúsculos). Nessa coluna, repare que senhas abaixo de 11 caracteres são consideradas extremamente fracas e vulneráveis uma vez que o atual poder computacional das forças militares e agências de inteligência já permitem quebrar senhas abaixo de 128 bits de forma relativamente rápido. Portanto, temos que focar no mínimo em 3 níveis de complexidade de senhas:

128 bit encryption : 22 caracteres (Minimamente satisfatório, porém cairá em desuso nos próximos anos devido à sua fragilidade e a chegada da computação quântica)

256 bit : 43 caracteres (Bom para ser utilizado a médio prazo)

512 bit — 86 caracteres (Muito bom)

Eu concordo, não é trivial gerar e memorizar senhas tão longas, mas vou expor algumas técnicas e ferramentas que podem auxiliá-lo nesse processo.

Para começar, temos que conceber um novo conceito de senha. Há algum tempo, em inglês, se usava o termo password (pass word), traduzido literalmente para o português “palavra de acesso”. Hoje, a literatura internacional deixou de lado esse termo e usa-se passphrase, sendo literalmente frase de acesso. Isso é um conceito importante para que possamos criar senhas mais fortes e difíceis de serem quebradas.

Leetspeak

É a técnica de se representar letras através de números, geralmente utilizado para satisfazer critérios mínimos de segurança em um determinado cadastro. Como exemplo é bem comum trocarmos a letra A por 4, E por 3, O por 0 e por ai vai. É uma boa técnica mas use com precaução, muitas vezes o uso indevido de leetspeak prejudica a entropia de uma senha. Recomendo utilizar calculadoras de entropia de senhas ou de estimativas de ataques para mensurar a força de uma senha, deixo alguns links abaixo:

https://apps.cygnius.net/passtest/

http://rumkin.com/tools/password/passchk.php

https://www.grc.com/haystack.htm

Utilizarei o primeiro link para demonstrar a força de diferentes tipos de senhas. Você pode tentar por si mesmo. Verifique sempre as informações de “crack time (seconds)” (tempo para craquear em segundos), crack time (display) (Arredondamento dos segundos) para verificar o quão fraca é a senha.

Anti-regras: O que não fazer ao criar uma senha

Anti-Regra #1 : Nunca registre senhas que sejam compostas parcial ou integralmente por nenhuma informação pública sua.

Isso vale também para dados de pessoas próximas como datas, números de documentos, telefones, etc. Uma pessoa sequer precisará ter conhecimentos técnicos para descobrir a sua senha. Nunca relacione qualquer parte da sua senha com o login.

Anti-Regra #2 : Não utilize padrões de palavras iniciando com maiúsculas e números no final. Exemplo: Amor456

É um padrão muito utilizado entre usuários e amplamente aplicado em métodos de quebra de senhas. Veja que o tempo estimado para descobrir esse tipo de senha é instantâneo.

Anti-Regra #3 : Não utilize sequências crescentes ou decrescentes de números ou padrões de teclado.

Ref: https://wpengine.com/unmasked/

No que diz respeito às posições das teclas dos caracteres, quanto mais perto elas forem, maior será a previsibilidade da senha, e menor entropia. Ou seja, quanto mais rápido for digitar a senha, menor será a entropia.

Ao testarmos a eficácia desse tipo de combinação, vemos que é um padrão popular e previsto. Veja alguns testes:

Anti-Regra #4 : Evite colocar caracteres especiais (símbolos) somente no final. Exemplo escola123!@#

Espalhe os caracteres especiais no meio de sua sentença, que deve ser o mais aleatória possível, contendo letras minúsculas, maiúsculas e números e caracteres especiais.

Anti-Regra #5 : Minimize ou evite o use de Leetspeak (mencionado acima)

O uso desta técnica pode mais atrapalhar a memorização do que auxiliar na força da senha, principalmente quando for abaixo de 22 caracteres. Nesse caso, prefira sentenças longas que serão mais fáceis de memorizar e terão a mesma força.

Anti-Regra #6 : Não usar autenticação em múltiplos fatores. Habilite sempre que possível o uso de autenticação em 2 fatores (2FA) nos sites que tenha cadastro.

Embora haja falhas nos protocolos de telefonia celular (fora do escopo desse artigo) habilitar autenticação em 2 fatores previne acessos não autorizados de scripts kiddies ou pessoas mal-preparadas. Nenhum sistema é 100% seguro, portanto o objetivo é dificultar o máximo que puder o acesso às suas informações.

PS: Note que esse validador de senhas é para uma aplicação específica, e trata como um problema uma senha menor que 16 caracteres. Desconsidere esse alerta e use sempre o máximo permitido nos cadastros.

Anti-Regra #7 : Jamais salve sua senha no navegador

Extensões maliciosas podem capturar as senhas salvas no browser e comprometer suas contas. Plugins de terceiros se tornaram um exponente vetor de ataques contra os usuários finais.

Anti-Regra #8 : Nunca use a mesma senha em diferentes sites.

Comumemente ocorre o cruzamento de credenciais vazadas de um site serem testados em outros sites com o mesmo email ou login. Você pode checar se houve vazamento de dados de suas contas no site https://haveibeenpwned.com, aonde a consulta realizada é por seu email. Se houver registros de vazamentos do seu email, altere imediatamente sua senha.

Geradores de senhas (Offline / Online)

Existem na internet inúmeras ferramentas de geração de senhas, com as quais você pode configurar o mapa de caracteres a ser utilizado, gerando assim uma senha aleatória (e possivelmente forte) com a qual você pode utilizar com mais segurança.

Essas ferramentas podem ser utilizadas através do navegador ou ainda possuem versões offline que você pode instalar e usar em seu computador ou celular.

https://passwordsgenerator.net

https://www.lastpass.com/password-generator

https://www.dashlane.com/features/password-generator

As ferramentas listadas acima são opções razoáveis: Você pode selecionar a aleatoridade máxima do conjunto de caracteres gerando uma sentença com forte entropia. Recomendo habilitar o uso de letras maísculas, minúsculas, números, simbolos especiais e tudo o que for permitido com no mínimo 42 caracteres. Vale lembrar que os links acima não armazenam as senhas geradas, você precisará de uma ferramenta de gerenciamento de senhas para poder acessá-las novamente.

Cofres de senhas

Bons cofres / gerenciadores de senhas geralmente já vem com geradores de senhas parametrizáveis (reforço as recomendações de parâmetros acima), porém trazem o recurso de armazenar em um banco de dados todas as suas senhas. Esse banco de dados é encriptado e protegido por uma senha mestra (e algumas vezes também permitindo o uso de chaves criptográficas adicionais).

Clássicos gerenciadores de senha incluem as distintas versões do Keepass (Keepass, KeepassX, KeepassXC, etc) que possuem versões para download em diversas plataformas, inclusive versões mobile para facilitar o seu uso em diferentes dispositivos.

Além desses gerenciadores offline, também existem serviços de cofres de senhas na nuvem, como o LastPass, TeamPass e SenhaSegura.

Entretanto, o aplicativo Master Password merece destaque por seu método de geração de senha. Ele não armazena nenhum dados localmente ou na nuvem, ele simplesmente gera (sempre a mesma) senha baseada no hash do site juntamente com o hash da sua senha-mestra. O resultado é sempre único e você deve se lembrar de como colocou o endereço do site na hora de gerar. Use sempre um padrão sem https:// e sem o www. Os resultados desse utilitário geralmente são senhas suficientemente boas para se utilizar e aceitável em grande parte dos sites sem precisar truncar a senha.

Regras: O que fazer para gerar uma senha mais segura.

Regra #1 : Frase Base — Você pode (e deve) usar uma frase-base, extraída de livros, poesias, musicas, filmes, etc.

I am Your Father, Luke

Regra #2 : Citação — Cite o autor ou personagem da frase-base. Pode usar siglas também.

DV: “I am Your Father, Luke”

Regra #3 : Terminando as frases com uma maiúscula a complexidade (entropia) da senha aumenta:

Regra #4 : Padding — Adicione números no final da sua sentença até preencher o campo de registro. Cuidado para não descobrir uma falha no serviço que estiver se cadastrando :-D

DV: “IamYourFather, Luke”000000000000

Regra #5 — Se não falar inglês, use o seu idioma de origem

Existem muito mais dicionários de senhas em inglês na internet do que em outros idiomas.

Regra #6 — Facilidade / rapidez de digitação

Ao criar uma nova senha, tenha em mente que ela deve ser fácil de digitar em um teclado comum, de notebooks e dispositivos menores como celulares e tablets. Senhas de difícil datilografia poderão ser um impeditivo para que você adote metodologias de uso seguras para suas senhas, ou até mesmo para que outras pessoas memorizem sua senha vendo você a digitar.

Regra #7 — Notificações de acesso

Adicionalmente, ative todas as notificações de acesso à sua conta. Quando tiver informações de ataques e roubos / vazamento de dados ou qualquer notificação de acesso ou tentativa à sua conta, altere a sua senha.

Segundo dados da Microsoft, 99.9% das pessoas são hackeadas por não terem esse serviço ativo, como pode ser visto aqui.

Regra #8 — Use cofre de senhas

Organize as suas senhas nos cofres de senhas referidos, protegendo o banco de senhas com o mais alto nível de complexidade (você pode juntar várias senhas em uma) que consequir para uma senha-mestra, juntamente com uma chave privada para o cofre.

Regra #9 — Crie senhas com níveis diferentes de segurança.

Divida e gerencie suas senhas em camadas, por exemplo:

1. Senhas mais básicas para redes sociais, emails com baixo teor de confidencialidade, etc.

2. Senhas de média complexidade relativas à trabalho, sistemas, emails corporativos, etc;

3. Senhas complexas : Informações bancárias, financeiras, sigilosas, senhas mestras, etc;

Use a seguinte lista para definir as entropias de seus diferentes níveis de entropia:

<28 bits = muito fraco; pode afastar os membros da família

28–35 bits = Fraco; deve manter de fora a maioria das pessoas, geralmente boa para senhas de login de desktop

36–59 bits = Razoável; senhas seguras para senhas de rede e da empresa

60–127 bits = Forte; pode ser bom para proteger informações financeiras

128+ bits = Muito forte;

Lembre-se sempre de que quanto mais crítica / sensível for a informação a se manter o sigilo, maior deve ser a complexidade da senha de acesso. Você pode seguir as recomendações de camadas como exemplifiquei ou criar a sua própria metodologia, como compor uma frase de acesso com 3 senhas diferentes, alternando a ordem delas de acordo com o site/serviço, separando-as com símbolos e por ai vai.

Conclusão

Pudemos ver o quão frágil são as nossas senhas e qual é a facilidade e agilidade para que as mesmas sejam quebradas. A comunidade de black hats (crackers, que usam seus conhecimentos para fins maliciosos e criminosos) aumentam significativamente a cada ano, assim como suas habilidades técnicas e equipamentos com maior poder de processamento.

Trabalho há 20 anos com tecnologia da informação, acompanhando desde então a evolução de segurança cibernética defensiva e ofensiva, sentindo a necessidade de expor essas informações através desse artigo (que considero um manifesto) para que consiga ajudar as pessoas a terem credenciais e identidades cada vez mais seguras em um universo digital que a cada dia que passa se torna mais integrado e vulnerável.

--

--

Daniel Jordao

Software Architect, Security Researcher and Pentester