¿Existe un ataque de fuerza bruta similar a lo que demuestran en las películas [duplicado]

17

Desde que era adolescente (eso es hace 20 años) y hasta hoy en día se ven películas con profesionales que roban una computadora y la usan para descifrar una contraseña o un sistema de seguridad del hogar usando fuerza bruta (supongo). Sin embargo, siempre demuestran demostrando que intentan descifrar un pin o una contraseña que consta de muchos dígitos / caracteres y la super-computadora agrieta los campos uno por uno

Los dígitos verdes de la izquierda se han roto, los de la derecha aún están por venir. La supercomputadora intenta calcular el primer dígito, luego el segundo y así sucesivamente, verás que los números siguen fluctuando hasta que se bloquean en el dígito correcto.

¿Existe tal ataque?

    
pregunta Ulkoma 10.09.2014 - 11:46
fuente

6 respuestas

28

Lo que ves en las películas es un dispositivo de trama para aumentar la tensión, cada vez que se determina que un personaje le da una patada a la audiencia. La realidad es un poco diferente.

Los ataques de fuerza bruta existen, sin embargo, es todo o nada, o bien el código de acceso es correcto o incorrecto. No hay manera de saber si has adivinado un personaje correcto. Los códigos de acceso suelen ser hashed , donde cambiar un solo dígito devolverá un resultado criptográfico completamente diferente. Podrías acertar con un solo carácter y no tendrías ningún indicio de que estuvieras cerca.

Por lo tanto, el descifrado de contraseñas reales puede ser un poco aburrido desde el punto de vista de una película, donde es necesario mostrar la progresión para mantener el interés del público. Lo que podrían hacer es mostrar una barra de progreso para el cálculo de todas las permutaciones posibles de un hash, pero no tendría un tiempo de finalización predecible: podría tener suerte y golpearlo de inmediato, o llegar al final de su bruta. rango de fuerza No necesariamente bueno para una película, pero un buen director podría lograrlo.

    
respondido por el GdD 10.09.2014 - 11:59
fuente
16

Inyección de Blind SQL es uno de estos ejemplos. Suponga que tiene la posibilidad de una inyección de SQL pero está limitado en lo que puede inyectar. Algo en las líneas de:

SELECT id FROM users WHERE username = <foo>;

Puede inyectar en foo pero no puede obtener otra salida que la página que devuelve 404 (si no hay tal usuario) o alguna otra cosa (si hay un resultado) . No puede obtener ningún resultado de esta consulta que no sea el estado de la página ("funciona / no funciona").

En esta situación, podría intentar adivinar algunos datos sobre el usuario (como su contraseña con hash o su número de tarjeta de crédito) de esta manera:

SELECT id FROM users WHERE username = "kos" AND secret = "mellon";
SELECT id FROM users WHERE username = "kos" AND secret = "rosebud";

Una vez que obtienes una página que se carga, sabes que has adivinado la contraseña correctamente.

Ahora, para la parte divertida: para adivinar en un tiempo razonable, puede cambiar a la búsqueda lexicográfica binaria:

SELECT id FROM users WHERE username = "kos" AND secret >= "a" AND secret <= "z" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "a" AND secret <= "n" -- 0
SELECT id FROM users WHERE username = "kos" AND secret >= "o" AND secret <= "u" -- 0
SELECT id FROM users WHERE username = "kos" AND secret >= "v" AND secret <= "x" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "w" AND secret <= "x" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "x" AND secret <= "x" -- 1

Tienes la primera letra! Continuar:

SELECT id FROM users WHERE username = "kos" AND secret >= "xa" AND secret <= "xz" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xa" AND secret <= "xn" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xa" AND secret <= "xg" -- 0
SELECT id FROM users WHERE username = "kos" AND secret >= "xh" AND secret <= "xk" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xj" AND secret <= "xk" -- 1
SELECT id FROM users WHERE username = "kos" AND secret >= "xk" AND secret <= "xk" -- 1

... y así sucesivamente, hasta que conozca todas las letras.

    
respondido por el Kos 10.09.2014 - 13:12
fuente
8

Los hashes de Windows LM tenían este mecanismo donde la contraseña se dividía en 7 cadenas de caracteres y el hash por separado. En ese caso la contraseña se revela en 2 mitades. Pero los hashes LM terminaron con Windows XP.

Extendiendo el mismo mecanismo, solo para teorizar, si cada carácter de la contraseña se hiciera un hash por separado y el hash final fuera una concatenación de los hashes individuales, entonces podría haber un escenario similar al que se ve en las películas donde la contraseña es Revelado personaje por personaje. Pero esto está demasiado lejos de la practicidad.

    
respondido por el user1720897 10.09.2014 - 12:17
fuente
6

Sí, es posible si utiliza, por ejemplo, ataques de tiempo . Si la contraseña no está cifrada y comparada con una cadena vulnerable, puede medir Si pones los caracteres correctos uno por uno. En la mayoría de los idiomas, la comparación de cadenas se detiene cuando se encuentra una diferencia, o las cadenas tienen diferentes longitudes. Esto suele ser algo bueno, porque da como resultado una velocidad mucho mejor. Si desea hacerlo sin la posibilidad de un ataque de tiempo, normalmente compara hasta el final de las cadenas, y solo establece un valor booleano si encuentra una diferencia, que devuelve al final. Además, debe tener cuidado con las optimizaciones de su programa, para que no se cambie a la versión de acceso directo.

También hay un ataque de oráculo de relleno , donde puedes adivinar cada byte de la clave comparando diferentes respuestas de servidor, como "Clave no válida" y "Mensaje no válido".

    
respondido por el Juri Robl 10.09.2014 - 13:10
fuente
2

Puede usar este método en inyecciones SQL usando la consulta UNION. El método consiste en hacer brute forcing char por char el servidor y hacer que se duerma si el carácter es correcto. Entonces, cuando el servidor tarda mucho en responder, sabes que el personaje es correcto. El método del que estás hablando me hizo pensar en eso.

    
respondido por el T00rk 10.09.2014 - 13:07
fuente
1

En el pasado, y con sistemas de contraseñas primitivos, ha habido casos en los que algo así podría haber funcionado.

Imagina un sistema en el que ingresas una contraseña, y algunos códigos verifican esa contraseña carácter por carácter hasta que encuentra que todos los caracteres coinciden, y regresa con éxito. O regresa rechazando la contraseña tan pronto como el primer carácter falla. Luego, puedes intentar un ataque de tiempo: si adivinas el primer carácter correcto, entonces se verificarán dos caracteres, lo que lleva un poquito más de tiempo que solo comprobar el primer carácter. Un sistema inteligente siempre comprobará todos los caracteres, por lo que rechazar cualquier contraseña no válida siempre lleva exactamente el mismo tiempo.

Había una variante, donde un atacante almacenaba una contraseña justo antes del final de la memoria válida. Así que el primer carácter estaba en la memoria válida, pero se produciría un bloqueo si el verificador de contraseñas intentaba leer el segundo carácter. Así que el atacante simplemente intenta 256 posibilidades para el primer personaje hasta que se bloqueen. Luego mueven la contraseña una posición alejada del final de la memoria y esperan un bloqueo cuando se comprueba el segundo carácter correcto, y así sucesivamente.

Sinceramente espero que ya nadie use ese tipo de verificación de contraseña.

Si recuerdo correctamente, los DVD utilizan un esquema en el que las cosas están protegidas por una clave de 40 bits, pero esto se puede cambiar para descifrar primero una clave de 25 bits y luego una clave de 16 bits (o 24 y 17). Las claves de 25 bits son obviamente mucho más fáciles de descifrar con fuerza bruta que las claves de 40 bits.

    
respondido por el gnasher729 10.09.2014 - 14:20
fuente

Lea otras preguntas en las etiquetas