ENTRADAS

11 dic 2016

CUMPLEAÑOS Y HACKING

HACKING: ¿casualidad o estadística?

¿Hay en tu grupo de amigos dos personas que cumplen años el mismo día? ¿Y en tu familia? Probablemente sí, ¿verdad? Seguro que alguna vez has pensado que, con la de días que tiene el año, es una tremenda casualidad que en tu clase haya dos personas que hayan nacido el mismo día del año pero…, ¿es esto tan raro?

hacking

La estadística puede ayudar en prácticas de hacking

Obviamente, cuantas más personas haya en un grupo más probabilidad hay de que dos personas compartan cumpleaños. Pensemos en los casos extremos: si solo hay una persona es imposible que exista esa coincidencia, mientras que si hay 367 habrá necesariamente dos personas que celebran su cumpleaños el mismo día. Si queremos saber cuántas personas tiene que haber en un grupo para que haya un 50% de probabilidad de que se produzca esta coincidencia, uno pensaría que andaría sobre las 180 personas. Pero resulta que este es uno de esos casos en los que la estadística nos dice lo contrario a lo que tendemos a pensar.

Usando conceptos no muy complejos de teoría de probabilidades y combinatoria, llegamos a que la probabilidad de tener, al menos, dos personas que comparten cumpleaños en un grupo de n personas viene dada por la siguiente expresión es:

Probabilidad = 1-\frac{366!}{366^n (366-n)!}

Cuando vemos la representación gráfica de esta función nos encontramos con varias sorpresas.

practicas de hacking

Probabilidad de coincidencia

Esta función incrementa muy rápido al principio y muy despacio después. De hecho, incrementa tan rápido que para tener una probabilidad del 50% solamente necesitamos… ¡23 personas!

Si en tu clase hay 30 personas, hay más de un 70% de probabilidades de que al menos dos personas cumplan años el mismo día, y si hay 60 personas la probabilidad es de más del 99%. Sorprendente, ¿no? A este hecho tan curioso se le conoce como “Paradoja del cumpleaños”. Esta paradoja (que se relaciona con el conocido principio del palomar) no solamente explica por qué tienes dos amigos que comparten cumpleaños sino que puede usarse en diversas aplicaciones. Por ejemplo, se ha usado para hackear a un usuario y robar datos personales.

Los nombres en internet

Para explicar cómo funciona este tipo de ataque, vamos a ver cómo funciona internet. Cualquier equipo que pueda conectarse a internet tiene un “nombre” único, que le diferencia de cualquier otro. Ese nombre se llama “dirección IP”.  Ese nombre se compone de 4 números entre 0 y 255. Por ejemplo, el nombre en Internet de un equipo puede ser 123.32.1.122. Absolutamente todos los dispositivos que usan Internet necesitan una dirección IP. Si quieres conectarte a la página web de tu banco necesitarías saber su dirección IP, lo cual es un problema ya que tendrías que sabértela de memoria. Por eso algunas páginas tienen otro nombre mucho más fácil de recordar, algo así como www.paginademibanco.es, la cual se llama “dirección DNS” o “nombre de dominio”. Pero, si mi ordenador necesita saber la dirección IP de la página web del banco, ¿Cómo puede obtenerla a partir de la dirección DNS?

Existen distribuidos por el mundo unos ordenadores especiales llamados “servidores DNS”. Estos ordenadores tienen guardadas muchísimas direcciones DNS con su dirección IP correspondiente. Cuando desde tu ordenador quieres conectarte a la página web www.paginademibanco.es, lo que hará será preguntar a algún servidor DNS cuál es su dirección IP. Este servidor contestará a tu ordenador con la dirección y ya podrás conectarte a la página web.

Como se ha dicho, no existe uno solo de estos ordenadores y, obviamente, no todos los servidores DNS conocen todas las direcciones IP de todas las páginas web del mundo. Si el servidor al que has preguntado por la página www.paginademibanco.es no la conoce, éste preguntará a algún otro servidor que quizás sí la conozca. Cuando el segundo servidor conteste la dirección IP que buscas, el primer servidor se la enviará a tu ordenador para que puedas conectarte a la página, pero además se la aprenderá y así la próxima vez que se la pidan no tendrá que preguntar a ningún otro servidor.

Por motivos de seguridad, cuando un servidor DNS pregunta a otro sobre una dirección IP que no conoce no solo le enviará la dirección DNS por la que está preguntando sino que, además, añadirá un número aleatorio entre 0 y 65535. La respuesta que recibirá contendrá exactamente el mismo número y dado que es imposible que cualquier otra persona conozca ese número podrá estar seguro de que esa respuesta la ha generado el servidor al que ha preguntado y se evitarán posibles suplantaciones. De esta forma, si el primer servidor DNS envía la pregunta con el número 23.532 y la respuesta que llega contiene el número 12.691, el servidor simplemente obviará la respuesta y seguirá esperando una respuesta con el número 23.532.

El hecho de que alguien pueda suplantar la identidad del servidor DNS es muy peligroso. Supongamos que alguien ha conseguido averiguar cuál es el número que se ha añadido en la pregunta al segundo servidor. Este atacante podría enviar una respuesta igual que la que generaría el servidor DNS, pero con una dirección IP falsa. Por ejemplo, podría poner la dirección IP de su propio ordenador, en el cual guarda una copia exactamente igual de la página a la cuál te quieres conectar. Entonces la dirección con la que se contestaría a tu ordenador sería la del ordenador del atacante y no la del banco a la que te quieres conectar. Tu ordenador se conectaría a esa página falsa igual que haría con la real, meterías tu usuario y contraseña sin darte cuenta de lo que ha pasado y así el atacante podría quedarse con tus datos bancarios. Por si eso no fuese suficiente, el servidor DNS se aprendería la dirección falsa y los próximos clientes que quieran usar la misma página caerían en la misma trampa. A esta técnica de ataque hacker se le conoce como ‘envenenamiento DNS’.

Usando la estadística para el mal. Hacking de servidores

En este ejemplo hemos supuesto que el atacante conoce cuál es el número que se ha usado, lo cual es imposible. Pero un hacker podría no necesitar saberlo para envenenar el servidor DNS. Solo tendría que preguntar al servidor víctima por una dirección IP que no conozca como si fuese un usuario más. Éste servidor enviará una pregunta a otro servidor, y aquí comienza la parte complicada del ataque. El hacker comenzará a bombardear al servidor con respuestas a la petición que ha generado simulando ser el segundo servidor DNS poniendo números aleatorios en el campo de identificación. Si estos números no coinciden con el que el servidor está esperando simplemente los descartará y seguirá esperando a la respuesta buena. El problema surge si el hacker acierta el número que está esperando antes de que la respuesta real llegue. Entonces el servidor se “creerá” que la respuesta que ha llegado es la real y guardará la dirección IP respuesta, quedando de esta forma envenenado.

Aunque esto pueda parecer muy preocupante, la probabilidad de que esto ocurra es realmente baja. Supongamos que al hacker le da tiempo a enviar 300 respuestas falsas antes de que la real llegue. La probabilidad de que acierte con el número buscando será \frac{300}{65535}=0,45%. Ni siquiera llega al 1%. Podemos estar seguros…

Pero existe una variación de este ataque que plantea un problema más serio. Imaginemos ahora que el atacante en lugar de preguntar una sola vez al servidor DNS le pregunta n veces. Esto provocará que éste pregunte al segundo servidor n veces por la misma dirección (una por cada solicitud que le ha llegado), cada una con un número aleatorio diferente. Nuevamente, el atacante comienza a generar respuestas aleatorias a ver si alguna acierta. Si efectivamente acierta alguno de los n números aleatorios con los que se ha preguntado, el servidor será engañado.

¿Cuál es la probabilidad de que el atacante se salga con la suya en este caso si tanto el número de veces que se pregunta cómo el número de respuestas falsas es 300? 300 es un número muy pequeño comparado con los 35635 posibles números, así que no parece muy alto. ¿O nos engañará la lógica igual que pasaba con los cumpleaños?

Resulta que este caso es exactamente igual al problema de los cumpleaños, cambiando el número de días del año por los 35635 posibles números aleatorios que se pueden añadir al mensaje y cambiando el número de personas por el número de respuestas falsas que se realizan. De esta forma, la probabilidad de que el ataque funcione con n respuestas aleatorias sería:

Probabilidad =1-\frac{35635!}{35635^n (35635-n)!}

Que para n=300 quedaría… ¡más del 70%!

Podéis imaginarnos el problema que esto supone para la seguridad en Internet. Cuando se descubrió esta vulnerabilidad se realizó una nueva versión del protocolo DNS que aumenta considerablemente el rango de posibles valores que se pueden mandar, de forma que sea más improbable acertarlo. Pero este es un curioso caso en el que la estadística nos da un resultado del que difícilmente nos podríamos dar cuenta y que puede llegar a dar serios dolores de cabeza.

AUTOR: RODRIGO SERNA PÉREZ

Más entradas del mismo autor en en blog de FdeT

Si quieres participar en el blog como colaborador en alguna de las secciones, envíanos un mail a info@fdet.es 

Grupo FdeT

 

Imagen original de cabecera: 

http://bit.ly/2gOK4hb y http://bit.ly/2hiRxpA

Compartir:
Facebooktwittergoogle_pluslinkedin

Leave a Reply

A %d blogueros les gusta esto: