lunes, 7 de diciembre de 2009

Hablando sobre contraseñas... una vez más!

Es un tema al que pocas personas en el área de seguridad informática quieren dedicarle tiempo. Suena a algo que uno ya (supuestamente) conoce tan bien que no hay necesidad de conversarlo nuevamente... de qué estamos hablando? Contraseñas, por supuesto! Sin embargo, el tema aparece recurrentemente en distintas publicaciones y conversaciones con colegas. Y con justa razón. Veamos por qué.

Las contraseñas son y serán por un buen tiempo más (en mi opinión) una medida de seguridad importante. Sin embargo y a pesar de lo antigua y discutida que es esta herramienta, todavía se encuentran muchos estudios e implementaciones de políticas que no utilizan las ventajas que las contraseñas pueden brindar. Es por esta situación que continua el debate (estéril en muchos casos) sobre la eficacia de utilizar contraseñas.

El Microsoft Malware Protection Center (MMPC) publicó recientemente los resultados de un estudio que realizaron por un año sobre ataques contra usuarios regulares en el Internet. Uno de los principales comentarios hechos fue sobre ataques a contraseñas [disponible aquí]. Utilizando un servidor FTP falso, MMPC registró ataques de fuerza bruta y diccionarios hechos al servidor, buscando encontrar cuentas de usuarios y sus correspondientes contraseñas. Los resultados indican que el tamaño promedio de las contraseñas utilizadas por los atacantes es de tan sólo 8 caracteres. La pregunta es por qué tan pequeña? La causa de esta situación somos nosotros mismos, los encargados de la seguridad de los sistemas ya que diseñamos y/o implementamos malas políticas de contraseñas.

Para definir correctamente una política de contraseña, se deben considerar todas las propiedades que esta herramienta posee:
  1. Complejidad: cuántos y qué tipos de caracteres se requieren en la contraseña? Esta es posiblemente la propiedad mas popular debido a nuestro interés de que los usuarios no utilicen palabras encontradas en los diccionarios como contraseñas.

    Otro parámetro que maneja indirectamente el tema de la complejidad es el número de intentos para introducir la contraseña. Aunque no dice nada sobre la contraseña misma, si limita la oportunidad de adivinarla. Esto sumado a la complejidad de la contraseña, ayudan a protegerla.

  2. Duración: por cuánto tiempo puedo usar una contraseña? Adicionalmente, cada cuanto tiempo puedo reciclar/reutilizar una contraseña? Esta propiedad es posiblemente la mas abusada hoy en día por los administradores de seguridad. No me sorprendería encontrar un sistema en que obliguen a cambiar las contraseñas cada semana!

  3. Longitud: cual es el tamaño mínimo que debe tener una contraseña? Esta pregunta es usualmente la única que los sistemas permiten definir y nosotros, equivocadamente, intentamos responder. Sin embargo, para dar una respuesta que aproveche mejor esta propiedad, se debe también considerar cual es el tamaño máximo que permite el sistema. Esta ultima condición es frecuentemente ignorada por los administradores de sistemas lo que da por resultado que las políticas resultantes dependan mas de lo necesario en alguna de las otras propiedades (duración y/o complejidad).
Utilicemos la gráfica tipo radar de abajo para comparar tres políticas distintas. Cada eje representa una propiedad de la contraseña por lo que cada política será representado por un triángulo. Como una regla básica, mientras más pequeña sea el área del triángulo, la política permite contraseñas más débiles.

La política representada por el triángulo verde representa la peor política. Permite contraseñas muy cortas y de muy larga duración. Aunque si posee algunas reglas sobre la complejidad requerida, esto no es suficiente ya que las otras dos propiedades no son definidas apropiadamente. La política representada por el triángulo rojo prácticamente ignora los requisitos de longitud y complejidad y se enfoca exclusivamente en la duración de la contraseña. Nuevamente esta es una mala estrategia de diseño/implementación para la política de contraseñas. Finalmente, la política representada por el triángulo azul utiliza ampliamente las tres propiedades, creando una estrategia balanceada. Como esta gráfica es una simple representación abstracta de una política (yo ni siquiera he definido métricos para cada eje), ninguna política es graficada como un triángulo equilatero.

Para determinar entonces una buena política de contraseñas se deben considerar los tres factores o propiedades y no uno o (tal vez) dos solamente. De lo contrario el uso de contraseñas no cumplirá su cometido o el sistema donde se implementa la política será subutilizado.

Recientemente utilice un sistema Microsoft Windows configurado para contraseñas con sólo dos tipos de caracteres (complejidad), mínimo de ocho caracteres (longitud), que debías cambiar cada 30 días y no podías reutilizar por 120 días (duración). Al no impedir que se usaran palabras del diccionario, un usuario podía escoger la siguiente combinación de contraseñas: chile001, chile002, chile003, chile004. Esta combinación es claramente un problema de seguridad ya que puede ser fácilmente adivinada por medio de un ataque de diccionario o fuerza bruta.
Esta politica es un ejemplo del triángulo rojo en la gráfica de arriba. Además, representa una política que subutiliza las capacidades del sistema. Por ejemplo, el Directorio Activo en Windows Server 2008 permite contraseñas de hasta 127 caracteres (lo que se puede aprovechar utilizando oraciones, las cuales son más fáciles de recordar para el usuario) y permite la implementación de distintas políticas dentro de un mismo dominio.

Para los interesados, el reporte de MMPC esta disponible aquí. Hay tambien un enlace a una página donde puedes verificar la fortaleza de una contraseña.