Existem diversos artigos que abordam a necessidade do uso de senhas seguras e que expõem a preocupação da baixa qualidade na formação de senhas e da falta de conscientização do usuário final. Sem ter o objetivo de se tornar mais um artigo maçante sobre o uso de senhas em geral, tive a preocupação de fazer analogias e citar exemplos observados ao longo de alguns projetos que realizei
No mundo da Segurança o fator humano sempre será o elo mais fraco da corrente para a manutenção do princípio básico da Confidencialidade. Com o crescimento digital de nossa sociedade, cada vez mais o número de pessoas que fazem uso de sistemas computacionais e transações eletrônicas cresce a todo vapor, existe a necessidade de lembrar o excesso número de contas, PINs e senhas. Eu possúo, no mínimo, 7 contas em diferentes Internet Service Providers, diversas contas de rede, códigos de acesso para entrada em edifícios (bulding access codes) e senhas para acesso a transações bancárias de pelo menos 2 bancos. A conta ainda cresce de acordo com o número de web sites de Provedores de Informação que possúo acesso (jornais on-line, revistas, sites de tecnologia, listas de discussão entre outros). Tudo o que fazemos necessita de um código especial para que consigamos acessar as informações que hoje são personalizadas ao gosto do usuário. Senhas, Pins, códigos de acesso...
Sobrecarga de informações!
Em um mundo perfeito não precisaríamos de todas essas senhas para resguardar as informações pois poderíamos confiar em nossos semelhantes a não invadirem nossas casas, telefones, contas bancárias ou enviar e-mails ofensivos a terceiros fazendo-se passar por nós. Infelizmente não vivemos em um mundo perfeito e as senhas são necessárias para proteger nossa pessoa, nossos negócios e as comunicações e transações eletrônicas que fazemos uso diariamente.
Com tanto código para decorar muitas pessoas fazem uso das técnicas de "exercício de memória" utilizando os famosos bloquinhos amarelados do Post-it e combinando senhas com datas de nascimento, nomes familiares e fazendo uso de letras ou frases que não são recomendadas. Posso lembrar do dia em que, auditando a qualidade das senhas utilizadas por uma grande empresa, recebi a reclamação de um usuário informando sobre a dificuldade de se lembrar de tantas senhas, assim como a necessidade de trocá-las em tempos periódicos. Sua solução foi utilizar o nome de sua esposa por três meses, modificar para a data de aniversário durante os próximos três e retornar ao nome da esposa, caracterizando um ciclo fácil e previsível para dedução da senha utilizada pelo mesmo.
Durante o processo de criação de senhas faz-se necessário observar dois focos principais: segurança e eficiência. Senhas devem ser difíceis de quebrar ao mesmo tempo em se necessitam ser fáceis de criar e de se lembrar. Então, falando em eficiência de senhas, vamos a algumas dicas para fazer com que este processo seja mais efetivo. Uma dica simples é utilizar duas letras juntas. Este processo confunde a maior parte dos ataques simples de força bruta que são executados a partir de uma simples varredura em um dicionário de palavras (wordlist). Grande parte das senhas que tenho observado há mais de 10 executando projetos com foco em auditoria baseiam-se em nomes de times de futebol.
É muito comum ver nomes como Flamengo, Corintians, mengao2005, gavioesdafiel, rubronego entre outras analogias aos times de futebol comporem senhas de usuários. Essas senhas, em sua maioria, são descobertas durante um ataque de força bruta através de um bom dicionário com letras em nosso idioma. O simples fato de utilizar letras juntas já faria com que metade dos ataques fossem evitados. Por exemplo, observei que mais de 60% das ocorrências de um teste de senhas que realizei trouxe a palavra "Flamengo" como resultado bem sucedido de minha varredura utilizando-se uma boa "wordlist". Com a alteração do nome "Flamengo" adicionando-se duas letras juntas poderíamos exercitar muitas combinações que não seriam descobertas no teste de dicionário (Fflamengo Flammengo, Flamenggo, Flamengoo, Flaamengo, Flameengo, Fllamengo ou Flamenngo).
Outro método muito utilizado, principalmente em sistemas que são sensíveis a caracteres maiúsculos e minúsculos como o Unix, é formatar nomes misturando ocorrências de letras maiúsculas e minúsculas. Por exemplo, a senha flamengo poderia ser modificada para FlAmeNgO, o que iria prejudicar consideravelmente o tempo destinado a um ataque de força bruta, principalmente aos ataques realizados sem o uso de dicionários.
O fato é que senhas não proporcionam nível de proteção suficiente e aceitável, mesmo quando essas recomendações são seguidas a risca. O uso correto de senhas necessita estar em conformidade com Políticas de Segurança rígidas visto que a Segurança da Informação necessita ser implementada a partir de abordagem "Top-Down".
A autenticação a partir do uso de senhas é compreendida como autenticação de um fator. Essa definição é proveniente do entendimento da resposta ao questionamento "O que você sabe?". Todos nós sabemos, na autenticação de um fator, o conjunto de caracteres que formam a senha de acesso a um determinado sistema ou perímetro. Este é o nosso segredo. Porém, a autenticação de um fator é fraca e facilmente previsível, seja a partir de um ataque de Força Bruta ou mesmo a partir de um procedimento de Engenharia Social para obtenção de senhas a partir de bloquinhos de anotações. Este tipo de autenticação permite que o usuário compartilhe sua senha. É muito comum encontrar em empresas o cenário em que diversos usuários compartilham o mesmo userid e password para o processo de logon em perímetros e sistemas corporativos.
Em uma auditoria recente, pude observar que diversos diretores de uma grande empresa forneciam seu userid e senha para que suas secretárias executassem atividades no sistema de gestão. Esta prática é comum e extremamente perigosa pois dificulta o processo de rastreamento caso algum incidente ocorra. Como provar que um usuário logado com sua respectivo usuário, senha e a partir de seu respectivo endereço IP, náo deletou os arquivos de fluxo de caixa e de faturamento ? Neste cenário temos o princípio da rastreabilidade prejudicado.
Para evitar este tipo de problema, muitas empresas já utilizam a autenticação de dois fatores em seus sistemas computacionais. Este tipo de autenticação é compreendida pelo segredo da autenticação de um fator, ou seja, o que nós sabemos (senha) e algo que necessitamos ter para comprovar nossa identidade (certificado digital gravado em token, smartcard, ikey entre outros dispositivos). A autenticação de dois fatores dificulta extremamente o processo de quebra de senhas porque mesmo que invasores sejam conhecedores da senha de um determinado usuário, faz-se necessário apresentar um segundo nível de credencial para comprovação da identidade. Este segundo nível, baseado em tokens, apresenta o certificado digital como principal componente da autenticidade.
Naturalmente, a autenticação de dois fatores é uma solução que demanda maior custo na sua aquisição e deployment. Porém, trata-se da melhor solução em relação ao custo x benefício e proporciona um alto grau de Retorno de Investimento para manutenção do princípio da confidencialidade.