Ticket #990 (closed defeito: fixed)

Opened 14 years ago

Last modified 13 years ago

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:1 Changed 14 years ago by niltonneto

Eu usei  esse aqui no Expresssolivre Org. Será que é melhor?

comment:2 Changed 14 years ago by wmerlotto

  • Milestone set to Expresso 2.1

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

Alterando a variável que indica o diretório do ExpressoLivre?

login.php

Committed revision r3446.

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].

Opa, só corrigindo: A revisão é [3448] e nã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

Replying to rodsouza:

Outra questão, o que significa ZABX?

O que significa ZABX?

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.

Note: See TracTickets for help on using tickets.