08 marzo 2010

Ataques de contraseñas, password guessing - 1 de 2

En una auditoría de sistemas o hacking ético siempre hay una fase en la que se ejecutan ataques contra las contraseñas para obtener credenciales válidas. Posiblemente esta sea la técnica de hacking más antigua.

Se denomina fuerza bruta cuando se desconoce uno de los dos datos necesarios para autenticarnos, ya sea el usuario o la contraseña y se prueban palabras hasta que se encuentra la válida.

Para llevar a cabo el análisis se pueden obtener los datos de dos orígenes distintos:
  • Diccionario: consiste en un archivo con una lista de las contraseñas más comunes, según un estudio de SkullSecurity.org sobre las contraseñas de rockyou.com, con las 500 palabras más comunes se obtiene un acierto aproximado del 19.82%, con tan solo 100, un 10,34%. El diccionario también puede estar generado a raíz de términos relacionados con lo auditado o utilizando palabras encontradas en sus páginas web u otras fuentes.
  • Rango: este método es más lento y no tiene sentido salvo se pretenda encontrar la contraseña de un usuario determinado sin importar demasiado el tiempo y el elevado número de intentos. Consiste en recorrer todas las posibilidades de unas determinadas características. Por ejemplo, todos los números del "000000" al "999999" o todas las combinaciones formadas entre "aaaaaa" a "zzzzzz". Mezclas más complejas como números, minúsculas, mayúsculas y caracteres especiales son posibles aunque poco prácticas en la realidad.
De igual forma se puede hacer sobre la contraseña o sobre el nombre de usuario, aunque los diccionarios cambiarían. La utilidad ncrack incluye algunas listas con nombres de usuario comunes.

Estos ataques se pueden dividir en dos tipos distintos: password guessing y password cracking.

PASSWORD GUESSING

Es el nombre que se utiliza al intento de obtener credenciales válidas tratando de adivinar contraseñas de un sistema remoto mediante fuerza bruta. Estos ataques son siempre eficaces aunque se enfrentan a los siguientes problemas:
  • Lentitud: al tratarse de un ataque contra equipos remotos que requiere comprobación mediante ensayo y error la ejecución es lenta, además en ocasiones es necesario añadir tiempos de espera para evitar otros problemas que se describen a continuación.
  • Registros: como se lanzan cientos de pruebas los registros del sistema se llenarán rápidamente con múltiples líneas revelando nuestras intenciones. Aunque no es un problema en si, ya que estamos autorizados a lanzar estas pruebas, se pueden generar otros relacionados, como por ejemplo que se llene un volumen de datos y el equipo deje de registrar eventos importantes o inutilice el servicio.
  • Medidas preventivas: para evitar este tipo intrusión, los sistemas y aplicaciones en ocasiones implementan algunas medidas preventivas, como por ejemplo el uso de captchas, la prolongación del tiempo hasta que informa de si es incorrecto o no,  la inhabilitación o filtrado en el cortafuegos de la dirección IP de origen o el bloqueo del usuario para que no pueda acceder.
  • Bloqueo de cuentas: merece especial atención esta medida, ya que una configuración y planificación incorrecta del ataque podría bloquear el acceso a todas las cuentas de la red, dejando completamente inaccesible los sistemas incluso para los administradores.
Para evitar este bloqueo de usuarios, antes de lanzar el análisis se tomarán los siguientes datos y precauciones para configurar la herramienta:
  • Número de intentos antes de bloqueo: con una cuenta de prueba se contarán el número de veces que permite introducir incorrectamente una contraseña antes de bloquear e inutilizar el usuario. El ataque se hará de ese número-1, para evitar la protección y no llegar nunca a bloquear a nadie.
  • Duración del bloqueo: en algunos productos si se produce un bloqueo este es desactivado automáticamente una vez ha transcurrido un tiempo. El bloqueo puede ser al usuario o a nuestra dirección IP. Se ha de averiguar si existe este tiempo y que duración tiene para considerarlo y añadir esperas entre los bancos de pruebas.
  • Duración antes de que no se considere un nuevo intento: en ocasiones si los intentos de acceso son cada mucho tiempo el contador de intentos no suma la nueva prueba fallida. Esto es útil para jugar nuevamente con los tiempos y añadir tiempos de retardo o probar otros usuarios y otras contraseñas mientras transcurre esa ventana de tiempo.
  • Prueba inversa: o user guessing, es un método de evitar bloqueos que funciona en la mayoría de los casos. Consiste en dada una contraseña de uso común, probar nombres de usuario que la hayan utilizado. El mismo proceso pero en orden inverso. Esto lo hicimos y contamos para el caso de Digg con un 2% de acierto aproximadamente con nuestra amada contraseña: 123456
  • Reinicio del contador de bloqueo en caso de usuario correcto: se ha de contemplar la posibilidad de que el contador de intentos fallidos se reinicie si se introduce un usuario y contraseña. válido Si fuese así, se probará la fuerza bruta contra un usuario mientras se intercalan accesos válidos con uno de prueba o que ya se haya obtenido.
Para que el ataque este lo más optimizado posible a la plataforma es conveniente conocer la política de usuarios y contraseñas que sigue el servicio analizado. Los factores a controlar son:
  • Longitud mínima y máxima de la contraseña: de esta forma el diccionario tendrá que cumplir los requisitos.
  • Caracteres obligatorios: así se podrá determinar si es obligatorio algún tipo de combinación y si tiene sentido el uso de un diccionario o no.
  • ¿Permite que la contraseña sea igual al usuario?: ya que este tipo de ataque es habitual se debe conocer si se contempla esta posibilidad o no.
Algunas herramientas para este tipo de ataque son ncrack, thc-hydra o medusa. Esta última ha hecho una comparativa sobre las funcionalidades de Hydra y Medusa.

Herramientas y referencias
  1. CeWL, Custom word List Generator - http://www.digininja.org/projects/cewl.php
  2. Wyp - http://www.remote-exploit.org/?page_id=418
  3. Diccionarios - http://www.skullsecurity.org/wiki/index.php/Passwords
  4. ncrack - http://nmap.org/ncrack/man.html
  5. THC-Hydra - http://freeworld.thc.org/thc-hydra/
  6. Medusa - http://www.foofus.net/jmk/medusa/medusa.html

5 comments :

svoboda dijo...

Muy instructivo el post. Lo siguiente es hace unar "chuleta" del THC-Hydra y/o Medusa.

La verdad, es que si que son ataques muy lentos, aunque la media inicialmente cuando los ejecutas te dice que es muy buena, la realidad, es que salvo que acotes mucho los password a probar puedes tardar una eternidad. Sin lugar a dudas los ataques de "diccionario" son mucho más recomendables que los de "Brute Force"

Miguel dijo...

ataque diccionario = fuerza bruta?

hasta ahora sólo consideraba "fuerza bruta" probar TODAS las posibilidades (todas las combinaciones posibles de caracteres y longitudes). Un diccionario es un ataque minúsculo en comparación, no crees?

en cualquier caso, muy buena entrada!

Alejandro Ramos dijo...

@Miguel, pues puede que tengas razón y usar un diccionario no entre dentro del termino "fuerza bruta" como tal. De todas formas todas las posibildiades cuantas son? de 1 a 10 o de 1 a 20?

De:
http://es.wikipedia.org/wiki/Ataque_de_fuerza_bruta

La fuerza bruta suele combinarse con un ataque de diccionario.

:/

Anónimo dijo...

JAJAJA muy bueno
- escoja su contraseña
- pene
- su contraseña es muy corta
jajajajaja,

que sera de las passwords que usamos cuando empiece la computacion cuantica

- escoja su contraseña
- cus3r246809135790@9z92154t5y6i80d2j5d
- su contraseña es muy corta

Grifo dijo...

Mención especial al diccionario de porno de skullsecurity.org

Ejemplos de palabras del diccionario... (son todas así xD)
B=D~ ~(>_o)
B==D~ ~(>_o)
B===D~ ~(>_o)

Solución: Ponga un pene más largo xD