Ticket #990 (closed defeito: fixed)
Vulnerabilidades no Anti robo Captcha do Login
Reported by: | amuller | Owned by: | zapa |
---|---|---|---|
Priority: | alta | Milestone: | Expresso 2.2 |
Component: | API | Version: | branch 2.2 |
Severity: | média | Keywords: | captcha login ocr SERPRO 2.2 UNIFICA |
Cc: | niltonneto | WorkGroup: | Gestão de Segurança |
Description
O Captcha do login não funciona de forma que deveria, pois utiliza o cookie como contador. O que não é adequado pois robos não utilizam o cookie ou limpam ele.
Além do captcha gerado passar com sucesso em leitores de ocr (reconhecimento de caracteres) com facilidade.
Teste realizados com gocr Chance de acerto de 80%.
Qualquer ambiente servidor e cliente
Change History
comment:3 Changed 14 years ago by antonio-carlos.silva
- Keywords SERPRO 2.2 UNIFICA added
- Version changed from trunk to branch 2.2
- Severity set to média
Bom.
Primeiro vamos resolver o problema do contador ficar no cookie.
Assim, estamos realocando o contador na sessão, eliminando o cookie.
comment:4 Changed 14 years ago by niltonneto
- WorkGroup set to Gestão de Segurança
Olá Antonio, como está a implementação nova do Captcha (sem uso de cookies)?
comment:5 Changed 14 years ago by antonio-carlos.silva
Olá,
Estou testando a implementação do contador dentro de uma sessão.
O problema são os "headers", que provocam a perda da sessão, do jeito como esta estruturado o login.
comment:6 Changed 14 years ago by antonio-carlos.silva
Alterado para ter o contador em sessão. Revisão [3437] .
comment:7 Changed 14 years ago by rodsouza
Utilizar sessão e utilizar cookie são sinônimos, assim tal alteração não mudará o fato de que remover o cookie possibilitará que o dito robo continue o procedimento.
comment:8 Changed 13 years ago by antonio-carlos.silva
Bem lembrado. Mas tentamos o seguinte:
Se não existir a sessão o usuario não é validado. Não é feita tentativa de autenticar e só redireciona com msg de usuario/senha invalidos.
comment:9 Changed 13 years ago by rodsouza
Então o captcha não terá efetifidade, pois o cookie pode ser removido em todas as tentativas de login e assim nunca validado, e isso ocorrerá até o robo acertar a senha, caso consiga.
comment:10 Changed 13 years ago by niltonneto
O Rodrigo tem razão, Antonio. A forma implementada não elimina o problema descrito.
comment:11 Changed 13 years ago by amuller
Na parte de geração da imagem eu posso ajudar vocês, eu tenho uns códigos legais pra isso. Se ninguem tiver trabalhando nisso.....
comment:12 follow-ups: ↓ 13 ↓ 36 Changed 13 years ago by zapa
O princípio é utilização de algum arquivo comum que seja diferente em cada instalação
e que sirva como base de criptografia para geração do cookie.
É usado o arquivo header.inc.php para geração de chave de criptografia
a ser inserido no cookie e sua existencia ou modificação são retestados na volta, desde que o captcha esteja configurado a aparecer.
Alguém poderia testar?
comment:13 in reply to: ↑ 12 Changed 13 years ago by rodsouza
Replying to zapa:
O princípio é utilização de algum arquivo comum que seja diferente em cada instalação
e que sirva como base de criptografia para geração do cookie.
O que será criptografado?
É usado o arquivo header.inc.php para geração de chave de criptografia
a ser inserido no cookie e sua existencia ou modificação são retestados na volta, desde que o captcha esteja configurado a aparecer.
Não entendi. Poderia exemplificar com um caso prático?
comment:14 Changed 13 years ago by amuller
r3444 faz a melhoria na imagem. Testei com GOCR foi 100% de falha no reconhecimento.
comment:15 Changed 13 years ago by antonio-carlos.silva
Bom dia.
Bom, se o cookie tiver sido removido, o login não valida o usuaŕio. Não é feita a autentificação do usuário. Simplesmente retorna usuário inválido.
O que é criptografado é o id da sessão.
Mas é muito "chumbo" pra acertar um "captcha", digo, passarinho...
Reformulei tudo.
Tive que acertar o login porque os "redirecionamentos" prejudicavam o uso(permanencia) da sessão. Não vai mais usar o cookie.
comment:16 Changed 13 years ago by rodsouza
Após habilitar o uso do captcha não é mais viável utilizar o Expresso, apenas a frase "Error in access. Please, alert the Administrator.*" é exibida.
Qual configuração extra é preciso?
comment:17 Changed 13 years ago by rodsouza
Isso $_SERVERDOCUMENT_ROOT? não é parâmetro em todas as utilizações do Expresso, assim estou alterando para DIR, pois o erro é não encontrar o "header".
comment:18 Changed 13 years ago by rodsouza
comment:19 Changed 13 years ago by rodsouza
A alteração da revisão r3446 deve-se a "md5_file(/var/wwwheader.inc.php)".
Outra situação é "session_start(): The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,'"
Além de que não há uma verificação das funções PHP referente a imagem antes da utilização.
comment:20 Changed 13 years ago by rodsouza
Esqueci que " DIR " não é compatível com o Expresso, estou removendo.
comment:21 Changed 13 years ago by rodsouza
Utilizando 'Magic constants' para definir o path.
login.php security/captcha.php
Committed revision r3447.
comment:22 follow-up: ↓ 23 Changed 13 years ago by antonio-carlos.silva
Modificado para não usar cookie no login.
Alterado na revisão [3348].
comment:23 in reply to: ↑ 22 Changed 13 years ago by niltonneto
Replying to antonio-carlos.silva:
Modificado para não usar cookie no login.
Alterado na revisão [3348].
comment:24 Changed 13 years ago by rodsouza
Após alguns ajustes necessários na biblioteca GD do PHP, para a utilização da função "imagettftext", assim habilitando o captcha efetivamente, o simples fato de apagar o cookie faz um robo executar inúmeras requisições sem problemas.
E nem é preciso presocupar-se com a imagem, ou seja, o captcha acaba não tendo utilidade.
Não adianta de nada criptografar cookie e criar captcha se o meio que a informação está sendo armazenada é volátil.
Quando o robo, ou mesmo uma pessoa acertar a senha então tudo passará a funcionar, com ou sem criptografia.
comment:25 follow-up: ↓ 28 Changed 13 years ago by rodsouza
Outra questão, o que significa ZABX?
comment:26 Changed 13 years ago by eduardoalex
- Priority changed from grave to alta
Antonio,
Como ficou essa questão?
comment:27 Changed 13 years ago by antonio-carlos.silva
- Status changed from new to closed
- Resolution set to fixed
Alterada a imagem do captcha, e o contador foi passado para uma variável dentro da sessão.
Resolvido.
comment:28 in reply to: ↑ 25 Changed 13 years ago by rodsouza
comment:29 Changed 13 years ago by antonio-carlos.silva
Não significa nada em particular. Apenas o nome de uma variável, qdo foi usado nomeava uma sessão.
comment:30 Changed 13 years ago by niltonneto
Antonio, por favor, registre o número da revisáo para a última implementação. Rodrigo, por favor, efetue os testes anteriores.
Obrigado.
comment:31 Changed 13 years ago by rodsouza
Teste anteriores?
comment:32 follow-up: ↓ 33 Changed 13 years ago by niltonneto
Robozinhos, cookies, contador, captcha, enfim, analise o que foi feito e veja há algum risco ainda, já que você participa do workgroup de segurança.
comment:33 in reply to: ↑ 32 Changed 13 years ago by rodsouza
Replying to niltonneto:
Robozinhos, cookies, contador, captcha, enfim, analise o que foi feito e veja há algum risco ainda, já que você participa do workgroup de segurança.
Replying to rodsouza:
Após alguns ajustes necessários na biblioteca GD do PHP, para a utilização da função "imagettftext", assim habilitando o captcha efetivamente, o simples fato de apagar o cookie faz um robo executar inúmeras requisições sem problemas.
E nem é preciso presocupar-se com a imagem, ou seja, o captcha acaba não tendo utilidade.
Não adianta de nada criptografar cookie e criar captcha se o meio que a informação está sendo armazenada é volátil.
Quando o robo, ou mesmo uma pessoa acertar a senha então tudo passará a funcionar, com ou sem criptografia.
comment:34 Changed 13 years ago by rodsouza
Como já tinha descrito e agora replicado acima...
comment:35 Changed 13 years ago by niltonneto
Rodrigo, pelo que eu conversei aqui com Zapa, isso não é mais possível após a última implementação feita pelo Antonio. Se vc tiver certeza do que está dizendo, preciso de uma comprovação técnica.
comment:36 in reply to: ↑ 12 Changed 13 years ago by rodsouza
Utilizando as palavras do próprio ZAPA
Replying to zapa:
Alguém poderia testar?
Não precisa de nenhum robo, muito menos conhecimentos profundos, apenas faça aparecer a imagem e remova os cookies.
E tem mais mesmo com o captcha, sem remover o cookie, não há validação.
comment:37 Changed 13 years ago by rodsouza
Qual a parte de "COOKIE é sinônimo de SESSÃO" que ainda é dúbio?
comment:38 Changed 13 years ago by niltonneto
Para que esse ticket não vire uma novela, sugiro conversarem (antonio e rodrigo) por telefone, messenger ou email até que seja resolvido.
comment:39 Changed 13 years ago by antonio-carlos.silva
Últimi modiicação efetuada na revisão 3448.
comment:40 Changed 13 years ago by niltonneto
Mesmo depois da última revisão [3448], se limpar o cookie a cada login inválido, ele nunca irá pedir o Captcha. Acho que o problema em questão só será resolvido se o bloqueio do usuário a cada N tentativas de login for habilitado no Administrador.
comment:41 Changed 13 years ago by antonio-carlos.silva
O bloqueio do usuário a cada N tentativas de login pode ser habilitado.
Mas baixei a revisão 3448 do branch 2.2 da Comunidade.
Instalei aqui no Serpro para testar.
Funcionou OK.
Eu usei esse aqui no Expresssolivre Org. Será que é melhor?