Hace 14 años | Por --150388-- a gonzo.teoriza.com
Publicado hace 14 años por --150388-- a gonzo.teoriza.com

"Hace un par de semanas desde Menéame (erlang y compañía) me ayudaron a comprender que las versiones de Animal Captcha hasta la 1.3 son débiles frente a un ataque de fuerza bruta." Con los cambios realizados en esta nueva versión Animal Captcha es invulnerable a todos los ataques, hasta que se demuestre lo contrario por supuesto. DEMO ONLINE del Captcha: http://www.teoriza.com/captcha/example.php

Comentarios

edgard72

Solo una propuesta, #0 animales (conocidos) con nombres no muy largos. "Hipopotamo cocodrilo murcielago rinoceronte" pues... quita algo de comodidad.

Por lo demás, chapeau.

PD: Imágenes para un foro médico: "Identifica esta lesión: «Ernia inguinal»" lol

D

#25 Para un foro de coches... identificar la marca de cada coche

Sobre lo que comentas, es relativo, escribo más rapido hipopotamo que un codigo alfanumérico de los largos.

Como curiosidad, conozco a una persona con un grado de dislexia bastante alto, al que le supone una increible dificultad introducir captchas de 5 caracteres.

davidgj

#25 ¡Avisa un poco hombre! Acabo de comer y me ha dado por buscar "ernia inguinal" en google imágenes: ¡Se me ha revuelto el estomago!

PD: Ahora ya puedo entrar en el foro médico a trollear un rato. lol

Dreammer

Es una buena idea, pero como no le pongan más imágenes, será vulnerable. Hay apenas unos unos 8 ó 10, aunque comprendo que esto sea así por su fase BETA.

D

#9 Hay 30 animales actualmente, que serán aumentados al menos a 60 en la próxima versión 2.0 (incluyendo objetos).

He presentado cálculos de intentos en el hilo.

Por ejemplo, para un registro de usuario como menéame configuraría 3 o 4 animales. Para atacarlo por fuerza bruta habría que hacer 1.620.000 peticiones HTTP por cada acierto, de media. Lo cual sería inútil, no merece la pena.

Para un sistema de comentarios yo recomiendo configurar 1 o 2. Dependiendo de la importancia del blog.

Permite configurar estos parámetros a medida de las necesidades muy fácilmente. (están en el archivo "animal-captcha.php")

La fase no es que sea BETA, es simplemente un desarrollo contínuo (desde Abril del 2008).

D

Me gustaría aclarar dos cosas:

1. La intención del meneo es hacer llegar esta nueva versión a los que tan amable me ayudaron otras veces a encontrar fallos para poder mejorar este programa que es software libre.

2. Soy el autor del meneo, por lo tanto podría ser autobombo pero mi intención no es que salga meneada. Os pediría por favor que no se descarte si no es mucho pedir.

Si hubiese mensajes privados o algo así lo usaría, pero no conozco otra forma de hacerlo llegar a todos esos testers que les interesa.

davidgj

#20 "Pero procuro que el nivel sea de 4º de primaria. Es decir, el caballo y la cebra ok, pero un ornitorrinco... pues mucha gente no sabría identificarlo."

O visto de otro modo: según las imágenes que pongas puedes filtrar también el tipo de personas.

Por ejemplo, si quieres que solo puedan acceder informáticos pones imágenes de componentes del PC o piezas de código.

Futuro eslogan: "Animal captcha: el captcha que también filtra personas!". lol

D

#21 Así es, ya surgió la idea de las piezas de hardware... es buena idea. Añadir imagenes es muy cómodo.

Elevando la dificultad de las imagenes se puede filtrar un poco el nivel de los usuarios.

DZPM

#0
Si en cada consulta estás generando imágenes a partir de transparencias y orientaciones aleatorias, tu sistema no es escalable para páginas grandes.

¿Qué sistema de cache se usa, o está previsto usar? ¿Cómo evitas el DoS?

D

#31 Buena cuestión.

He cuidado la optimización al máximo. En esto tengo bastante experiencia.

La CPU tarda en generar la imagen 130 milisegundos de media. Más luego la transferencia de datos que son unos 110 milisegundos, muy poco ya que de media son 4kb. (medido con firebug con mi Telefonica 2 megas, configuración por defecto, 2 animales).

La mayoría de páginas PHP con MySQL tardan más en generarse.

Aun así, no soy experto en DoSS, solo sé lo básico.

DZPM

#32
La clave está en que la página la puedes cachear casi entera, la cache solo se refresca al añadir comentarios o editar el post en si. En cambio, el animal captcha no lo cacheas, lo tienes que generar tal cual.

¿Que pasa si alguien se pone a pedir muchísimas imágenes de captcha? Si la CPU tarda 100ms, y te piden más de 10 imágenes por segundo, la has cagado

En el caso "ideal" el captcha lo generaría otra máquina, y si esa máquina está colapsada la web seguiría siendo accesible, solo que no se podrían añadir comentarios.

D

#33 Como te comento, no sucederá nada. Que yo sepa rinde mejor que cualquier pagina PHP con MySQL (incluyendo las caché diversas que estos utilizan).

Un ejemplo, con el firebug.

Esta misma pagina php, generada por meneame ha tardado 224ms de proceso (waiting for response), y más 291ms en transferir los datos, 13kb de html.

De media Animal Captcha 1.4 tarda 130ms en procesar y 110ms en transferir 4kb de la imagen.

Es decir, Animal Captcha tarda más que una imagen estática, como es lógico, pero menos que una pagina normal con PHP + MySQL.

(Tomo como referencia esta pagina de menéame porque aunque soporte mucho trafico, probablemente carga más rápido que el 80% de webs de Internet, porque esta muy optimizada y cacheada).

Es decir, si alguien pretende hacer un DoSS, mejor que apunte a cualquier pagina php que a Animal Captcha.

Vamos, que no es un punto débil frente a DoSS, estoy seguro.

Aun así hay alternativas para controlar este tipo de ataques, como lo que tu dices de aislar el captcha en un servidor a parte. Aunque yo preferiría poner algún control de IP, que evite abusos. Pero esto solo lo necesitaría Google o Hotmail, o ni eso.

Extra: acabo de hacer un test añadiendo un contador de milisegundos en el codigo PHP (desde el inicio hasta el final del codigo, y me ha devuelto de 6 a 7 milisegundos. Lo cual es un tiempo muy bueno. Pruebalo si quieres.

Golan_Trevize

jorjorjor voy a por un paquete de palomitas de los grandes. Ahora vuelvo.

D

Lo unico que creo es que es un poco pretencioso lo de invulnerable (que no quiera decir que sea inseguro), porque como ya comentan mas arriba estas en la cuarta versión y no la última.
Aparte de eso esta tarde me dedicaré a probarlo y ver si se me ocurre alguna posible mejora.

D

#29 La pretensión de este proyecto es alcanzar la seguridad 100%, es decir ser invulnerable.

Me he planteado ese objetivo como un reto. No me preocupa equivocarme una y cien veces, es lo normal. Hasta ahora creo que el proyecto va hacia buen puerto.

Imaginate que alcanzamos el nivel de seguridad 100%. Sería un hito, ya que este sería el unico captcha invulnerable, en comparación con los captchas alfanuméricos que siempre serán susceptibles de que un OCR avanzado los detecte. Por logica que un script informático comprenda la forma y textura de los animales es infinitamente más dificil.

D

Buena idea, incluso para filtrar HOYGANS... pero... ¿Porqué no aceptan "leona"? ¿No es discriminación? ¿Dónde está Bibiana Aido cuando se la necesita?

Me parece una idea bestial, mucho mejor que descifrar números.

Una sugerencia: usar animales de razas diferentes, miles de fotos... incluso se pueden añadir fotos de animales disfrazados, o en posturas antinaturales (un perro depiés o una tortuga de revés), o también fotos donde no se vea completo el animal. Por ejemplo, en una vaca mostrar solo las ubres y poco más.

D

#15 Los colores globales se modifican en cada imagen. Al fusionar una imagen de fondo (otro animal aleatorio), además orientado aleatoriamente, con transparencia aleatoria, incluso estirado horizontalmente...

#16 Las leonas no tienen pelaje, no has visto el Rey leon?

#17 El animal lo he recortado yo mismo, queda centrado y solo se vé un animal, para evitar confusiones molestas. Esto te responde?

D

#18: Cierto, cierto... de todas formas, he actualizado el mensaje con más sugerencias.

D

#19 Gracias por el alago al mini-proyecto. Me alegra que te guste.

Sobre lo que dices en #16 se permite añadir más de una imagen por cada animal añadiendo un simple numero al final, por ejemplo "nombre-animal_2.jpg". Sin embargo esto no aumenta la seguridad de cara al ataque de fuerza bruta, pero si al ataque de identificacion de patrones, por supuesto.

De hecho para la 2.0 intentaré añadir más animalitos y tambien objetos (ya tengo hechos unos cuantos).

Pero procuro que el nivel sea de 4º de primaria. Es decir, el caballo y la cebra ok, pero un ornitorrinco o la diferencia entre "elefante africano" y "elefante asiatico"... pues mucha gente no sabría identificarlo. Además los nombres son simples, sin espacios.

Cidwel

Gonzo, supongo que quizas os lo habeis preguntado. ¿Habeis pensando en no colocar animales que están lejos del conocido vaca, pollo, perro, gato y cosas asi?

Y supongo que no importa pero... Si se consigue dividir las imagenes por la mitad.. ¿Estas mantienenen un mismo tamaño?

editado:
Huh por lo que veo las imagenes se generan fundiendose con otra imagen para que esto no se detecte.

NickEdwards

A pesar de que los colores se modifiquen se ve como sigue existiendo un patrón global de colores por imagen.

Por ejemplo la imagen de la serpiente tiene mayoritaramiente verde mientras que la del gato es relativamente blanca. Así pues podría hacerse una escala de intensidad de colores y asociarlas con los animales.

La solución que propongo es la de alterar los colores de las fotos a pesar de que luego no parezcan naturales.
Por cierto, debe también trabajarse en un diccionario que acepte respuestas de muuuuchos idiomas y debería haber una página de ayuda para aquella gente cuyo idioma no aparezca en ese gigantesco diccionario.

Esa página de ayuda contendria una lista de todos los animales que aparecen, su nombre en inglés y un pequeño gifart distinto al que aparece en el captcha.

Así si alguien no sabe el nombre en inglés puede mira la página de ayuda, ver un dibujo de una Jirafa (por ejemplo) y saber que se escribe Giraffe.

PD: Y sobretodo es importantisimo que las imagenes de un mismo animal vayan cambiando para que no se puedan establecer patrones comunes. La forma del delfin o la forma del aguila.

D

#22 Gracias por tu aporte. Muchas imágenes tienen fondo verde y marrón y azul.

Tu solución será necesaria si se demuestra que se pueden identificar patrones con algún método. Pero afirmo que no hay margen para que este ataque sea eficaz.

Si alguien demuestra que estoy equivocado usaré la técnica que sugieres para distorsionar los colores, al menos el fondo.

Como dije antes, se pueden añadir infinitas imágenes para un mismo animal. Esto dificultaría exponencialmente la identificación de patrones. Lo añadiré en la versión 2.0

Pero aun así yo creo que la versión actual es invulnerable, no hay margen para identificar patrones, analizando previamente el repertorio publico original. Es importante alcanzar este punto de seguridad porque sería la garantía de que Animal Captcha es 100% seguro, incluso más que captchas alfanuméricos.

x

Parece interesante

jonolulu

Se me ocurre por ejemplo hacer un barrido, para "conocer" el máximo número de imágenes posibles. Después es fácil relacionarlas directamente con su palabra. Para reconocerlas, simplemente calcular un hash de la matriz correspondiene a cada imagen.

Es cierto que puede ser poco vulnerable a un ataque por fuerza bruta, pero...

D

#11 El repertorio de imágenes es publico, cualquiera se lo puede descargar completo. Es software libre.

Ese ataque lo he descartado por completo, ya que es la linea principal en la que he trabajado. La solución consiste en fusionar una imagen de fondo aleatoria y orientada aleatoriamente, con una transparencia aleatoria. Eso cambia todos los bits, cada imagen generada es única y no se pueden hacer patrones que las relacione. En mi opinión es más difícil de hackear que cualquier código alfanumérico.

jonolulu

Si la marca de agua es absolutamente aleatoria las cosas se complican un poco, porque eliminar marcas de agua es muy sencillo. De cualquier modo se me ocurre otro posible método calculando medias y medianas de cada imagen

En fin, si estas ideas te ayudan...

D

#13 Supongo que te refieres a algo así como un test de histograma. Es decir, datos estadísticos que permitan identificar el patron de cada imagen...

Esto lo resolví a partir de la version 1.1 Aqui puedes ver el test antiguo de histogramas:

http://www.teoriza.com/captcha/test-histogramas.php (version 1.1)

Como ves no hay por donde pillar a la jirafa

Aunque se demostrase que hay un metodo estadístico para realizar este ataque, siempre se podrá configurar más transparencia a la imagen de fondo, aumentando exponencialmente la dificultad para identificar los animales. (es el parametro "_$bg_trans_ = rand(30,35);")

jonolulu

Bueno, el histograma no tiene en cuenta la distrubución tonal... Dos imágenes con el mismo histograma pueden tener colores diferentes

davidgj

Es a prueba de "hoygan"?

D

La vaca dice: "Muuu"

D

"invulnerable de nuevo"...

Vaya por delante que mis conocimientos de programación son cero, pero me picó la curiosidad la nota de ayer y el meneo de hoy y agradecería que alguien me lo aclarara.

De nuevo indica que antes ya lo era y dejó de serlo, invulnerable que no es afectado por los elementos externos. ¿No es un concepto contradictorio?. ¿Uno no debería de ser invulnerable una sola vez? Algo me dicen que si le logran herir es que no era tan resistente como se creía.

D

#2 La lógica me dice que tienes razón y volverán a encontrarle fallos. Sin embargo yo no veo ninguna vulnerabilidad, de ahí que me sea tan útil vuestra ayuda para poner a prueba el concepto.

En mi opinión es invulnerable, por eso pido opiniones

Corey_0

En mi opinion tiene un fallo enorme. Al ser fotos puede ser un poco molesto para ciertos diseños de webs. Por lo demas es cojonudo

D

#7 Yo creo que es más bonito un animal que un codigo alfanumérico, que tambien es una imagen realmente. Quizá abulta más, eso si.