Wednesday, August 31, 2005

Politica de senhas - Algo a ser revisto (Trechos retirados da DDOS-L. Obrigado aos amigos da lista!)

Sempre que lemos os "best-praticies" espalhados pela internet ou recebemos alguma consultoria, um tema mais do que batido é a politica de senhas. Normalmente o que ouvimos por ai é:

- Tamanho: 7 a 8 caracteres
- Vida util da senha: 30-45 dias
- Maximo de tentativas antes do bloqueio: 3 a 5
- Tempo para se zerar o contador de "Maximo de tentativas antes do bloqueio": ?
- Tempo de desbloqueio Automatico: Eterno (Desbloqueado somente pelo o administrador)
- Tempo minimo entre trocas de senhas: ?
- Historico de senhas (Impede a repetição de senhas antigas): ?

Mas será que estes valores se aplicam a todos os cenários ? Como escolher a melhor combinação ? Colocarei aqui 2 cenários para entendermos melhor o por que deste post:

Primeiro Cenário: Se a sua preocupação for Brute-Force Online (FTP Bruteforce, Pop3 BruteForce, HTTP BruteForce, etc...)

é só fazer uma analise combinatória simples:

a senha tem 8 caracteres alfanumericos, podem repetir, caixa alta/baixa e caracteres especiais:

98 * 98 * 98 * 98 * 98 * 98 * 98 * 98 = 8507630225817856 de possibilidades.

Se o sistema bloquear depois de 3 tentativas e liberar depois de meia hora, poderiamos tentar por dia de forma "online" :
48 * 3 = 144 senhas/dia

Se nós temos 8507630225817856 possibilidades e só conseguimos tentar 144 senhas/dia, seriam necessários aproximadamente: 59080765457068 dias para se percorrer todas as possibilidades. Claro que numa situação assim fica mais facil atacar a base de senhas, mas é só uma forma de se ilustrar, vc pode pegar dados do l0pht de benchmark e fazer as contas também para chegar em um valor ideal dos parametros de senha.

Segundo Cenário:
O segundo cenário é o ataque a base de senhas (ex: Base NTLM/Windows 2003).

Um computador moderno hoje com a tabela completa ABNT2 tem 98 caracteres, mas para seguirmos um standard a ASCII tem 94 caracteres (incluindo os casos) , vamos usar aqui a tabela ASCII como exemplo ok ? Em um PIII 900 (Qualquer um aqui tem um desktop mais potente), era possivel se percorrer 1.2 milhoes senhas/segundo. Num site russo achei referencia de nego com P4 fazendo 2.100.000 senhas/segundos, vamos trabalhar com o cenário do P4, pois o LC5 tem como pré requisito P3 1GHz.

Se montarmos o espaço de todas as possibilidades de chars alfanumericos e com repetição teriamos

94^8 = 6095689385410816 de possibilidades, usando o l0pht em um P4 conseguiriamos percorrer 181440000000 senhas/dia.

Portanto conseguiriamos percorrer o espaço total em aprox. 33596 dias ou também conhecido como 92 anos. Veja nem estamos falando em hashs pre computados as famosas "Rainbow Tables" assim como o modo heuristico de funcionamento, estamos falando somente de BRUTE FORCE (Operações mais pesadas e caras do ponto de vista de processamento).

Falando um pouco mais sobre as "Rainbow Tables"
quebrar senhas com todos os caracteres possíveis (sem
contar os ALT-etc) de até 10 posições (Alguma politica de senhas exige mais do que isso ?)
em menos de uma hora. O pessoal vende essas tabelas em DVDs, o LC5 e o
Cain já suportam trabalhar com elas. Acesso à base de senhas hoje
significa que elas serão quebradas em tempo hábil, ponto. Consulte o
http://www.antsight.com/zsl/rainbowcrack/ para mais informações.

Resumo: O ideal hoje é evitar o uso de passwords e passar a utilizar passphrases. É mais facil de se lembrar de frases como "% D3us 4jud4 Qu3m C3d0 M4dRug4 $"do que senhas complexas do tipo $RFDSe12#. No ambiente microsoft pode-se abusar de passphrases de 127 caracteres unicode, podendo se criar frases do tipo "É Barnabé se coça ai pra quebrar essa S3nh4!?#".

Talvez mais tarde ou amanhã (leia-se, quando eu tiver tempo) postarei aqui uma planilha que criei para brincar com esses numeros.