viernes, mayo 21, 2010

Control de acceso web "Dinámica de Tecleo"

Hace mucho, mucho tiempo que no escribo en el blog porque he estado muy ocupado pero al fin tengo un rato, así que, manos a la obra.
El artículo va sobre la seguridad y el control de acceso a aplicaciones web y quiero exponer un trabajo de investigación que realicé para un postgrado de la UNED, el control de acceso a aplicaciones web utilizando la dinámica de tecleo.
Podéis descargar los códigos y el script de creación de base de datos aquí.

Antecedentes
A la hora de control el acceso a recursos compartidos, se utilizan tres técnicas distintas, basadas en tres premisas:
  • Algo que el usuario sabe: esta es la premisa para el 99% de sitios, el usuario conoce un login y un password. Lógicamente, si un atacante consigue obtener esa información podrá suplantar la identidad. Este es, por norma general, el método más inseguro puesto que existen numerosas técnicas para robar las claves y, además, los usuarios no suelen usar claves alfanuméricas complejas porque son difíciles de recordar.
  • Algo que el usuario tiene: esta es la segunda premisa en la que el usuario es poseedor de algo que solo tiene él. Los sistemas que se basan en esto son los que utilizan tarjetas de coordenadas o certificados digitales, por ejemplo. Este sistema es más complicado porque se suele combinar con el primero y el atacante tiene que, o bien obtener una copia de lo que el usuario tiene o robárselo, además de obtener el usuario y la contraseña.
  • Algo que el usuario es: esta es la última premisa y es en la que se basa la seguridad biométrica. Las personas disponemos de rasgos o de actitudes que nos hacen únicos en el mundo. Usando esos rasgos físicos o esas actitudes o comportamientos que están impresos en nuestro cerebro se pueden generar patrones de seguridad que son mucho más complejos de romper que los dos anteriores. Usando este tipo de técnicas, el atacante, tendrá que copiar rasgos físicos (iris, retina, huella dactilar, forma de mano,...) o comportamientos (firma caligráfica, dinámica de tecleo,...) algo que en algunos casos es imposible y en otros en muy complicado.
Lo ideal es la utilización de forma combinada de las tres técnicas para obtener un sistema de acceso lo más seguro posible. En este artículo voy a exponer una forma práctica de implementar un sistema de control observando la forma de teclear de los usuarios (dinámica de tecleo) para determinar si el usuario ha sido suplantado o no.

Dinámica de Tecleo
La dinámica de tecleo es una técnica que se basa en el principio de que la acción de escribir en el teclado una palabra o frase (contraseña) muy frecuentemente hace que el acto de escribirla se convierta en algo inconsciente y automático. Esto provoca que ese gesto sea característico nuestro porque influyen tanto procesos mentales que se convierte en una especie de huella dactilar. Los parámetros que se tienen en cuenta a la hora de mesurar la dinámica de tecleo son dos, el tiempo de pulsación de cada tecla y el tiempo entre pulsaciones. En base a estos dos parámetros se pueden crear patrones de comportamiento que nos pueden decir si un usuario es o no es quién dice ser, independientemente de que la contraseña sea correcta o no.

Diseño del sistema de control de acceso
Lo que vamos a hacer es un sistema mixto de control. Por un lado, el usuario va a tener que introducir su usuario y contraseña, se validarán las credenciales y además se controlará la dinámica de tecleo de la contraseña. Dicho tecleo se comparará con un patrón del usuario para ver qué probabilidad hay de que sea realmente nuestro usuario y no un suplantador. Hay que tener en cuenta que cuando hablamos de biometría siempre consideramos probabilidades y no certezas. A la hora de configurar el sistema tendremos que elegir cuál es el umbral a partir del cuál consideraremos que el usuario es un suplantador. Cuanto mayor sea ese umbral, mayor será la seguridad pero más falsos negativos dará y cuanto menor sea el umbral, menor la seguridad pero menos falsos negativos. Cada uno modificará este umbral para que se adecue a sus necesidades y pruebas.

En nuestro sistema vamos a tener 3 módulos diferenciados:
  • Módulo de captura de datos: es el encargado de capturar los datos de pulsación y tiempo entre pulsaciones en el lado del cliente. Este módulo estará implementado en Javascript.
  • Módulo de entrenamiento: parte del sistema encargada de generar el patrón con el que se comparan las muestras a identificar.
  • Módulo de autenticación: parte encargada de decidir si un usuario es quién dice ser o no.
Generación del patrón
Lo primero es la generación del patrón para cada usuario. Tomemos por ejemplo, la palabra MANOLO, para la dinámica de tecleo tenemos que tomar las siguientes muestras:


Tomaremos una muestre para el tiempo de pulsación de cada letra y el tiempo entre pulsaciones. Para generar nuestro patrón tomaremos N muestras de la palabra clave MANOLO escritas por nuestro usuario, cada una de las muestras tendrá 2*n-1 posiciones siendo n el número de caracteres de la palabra. En este caso cada muestra o vector que guardamos tendrá 11 posiciones:

Una vez que disponemos de las muestras, tendremos que obtener un vector con las medias de cada posición y otro con las varianzas de cada posición.







El patrón del usuario será, por lo tanto, un vector de 11 posiciones con la media de cada uno de los tiempos de pulsación y tiempo entre pulsaciones y otro con un vector de 11 posiciones con las varianzas de cada uno de los tiempos. Este patrón lo almacenaremos en una base de datos para, posteriormente, poder realizar la comparación en el control de acceso.

Función de Scoring
La función de Scoring es la encargada de determinar el grado de similitud entre la clave introducida por el usuario que se quiere autenticar y el patrón almacenado en la base de datos.

Una vez obtenido el vector de valores SCORE, realizamos una media entre ellos para obtener un solo valor a comparar:

Este valor se comparará con el valor de UMBRAL definido en el sistema y determinará si el usuario es o no es quién dice ser.

Diseño Real del Sistema
Vamos a ver cómo, podemos diseñar en la vida real un sistema de control de acceso de este tipo. El flujo del sistema es el siguiente:


Para la implementación del sistema vamos a utilizar ASP.net (c#) como lenguaje de servidor, SQL Server como gestor de base de datos y Javascript para el control del tecleo.

Modelo de Base de Datos
En nuestro sistema vamos a tener dos tablas, una para la información de las claves del usuario y otra para almacenar los patrones:

Interfaz Web
Para nuestro ejemplo, se ha unificado en una sola interfaz el entrenamiento del sistema junto con el acceso al mismo:


El usuario tendrá que introducir su usuario y contraseña y, además, la frase de control que se ha utilizado para generar el patrón. En la parte de entrenamiento, el usuario puede ir introduciendo nuevas muestras, cuantas más muestras se tengan mayor será el acierto del sistema.

Cuando se pulsa sobre el botón "Acceder", el sistema devuelve en una pantalla tres valores:

  • Score Total: valor devuelto por la función de Scoring teniendo en cuenta tanto el tiempo de pulsación como el tiempo entre pulsaciones.
  • Score Pulsación: valor teniendo en cuenta solamente el tiempo de pulsación.
  • Score Entre: valor teniendo en cuenta solamente el tiempo entre pulsaciones.
Lógica del Cliente
En el lado del cliente, se ejecuta la lógica necesaria para capturar los datos de las muestras y enviarlos al servidor. Estas funciones se encuentran en Javascript (ver los códigos del proyecto) y preparadas para los exploradores más utilizados. El flujo de llamadas es el siguiente:


Para el caso de la comprobación del acceso al sistema, las llamadas Javascript son las siguientes:


Lógica del Servidor
Toda la lógica de la generación del patrón, la comprobación del usuario y la generación de la función de Scoring se realiza en el servidor. La comunicación entre el cliente y el servidor se realiza mediante llamadas a un servicio web llamado DinamicaTecleo.asmx ell cuál dispone de dos métodos públicos: RecibirMuestras y ComprobarAcceso.

El método RecibirMuestras es el encargado de recibir las muestras, formatearlas y guardarlas en base de datos:

El método ComprobarAcceso es el encargado de comprobar que el usuario es quien dice ser o no. Este método devuelve los tres valores que se muestran por pantalla:


Los datos del patrón se almacenan en la base de datos de la siguiente manera:



Se guardan las muestras de entrenamiento para cada usuario separadas por comas, en una columna los milisegundos de pulsación de cada tecla y en la otra los milisegundos entre pulsaciones.

Conclusión
Las conclusiones que se obtuvieron con los individuos que realizaron las pruebas fueron que, efectivamente, la dinámica de tecleo es una buena técnica complementaria al control mediante usuario y contraseña. Para que el sistema sea efectivo, la fase de entrenamiento debe ser extensa para disponer de muchas muestras. También es bueno eliminar aquellas muestras muy alejadas de la media.
El sistema funciona de forma óptima cuando la frase de control se compone de letras y números sin sentido puesto que es cuando el cerebro tiene que pensar qué teclas pulsar y tiene que mover las manos de su posición natural. En el caso de frases con sentido es más fácil la suplantación porque la posición de las manos y la cadencia es más natural.

Un fallo que no pude resolver en el sistema se produce cuando el usuario escribe tan rápido que antes de soltar una de las teclas ya ha pulsado la siguiente, generando un tiempo de pulsación negativo. Mediante javascript no fui capaz de controlar ese caso y obtenía un error. Si alguien lo corrige le agradecería que lo comentara.

En fin, creo que la dinámica de tecleo es un sistema fácil y barato de control biométrico, no necesitamos aparatos externos ni inversiones en dinero. Puede introducirse de forma transparente en un sistema ya establecido y puede aumentar el nivel de seguridad exponencialmente.

Espero que os haya gustado este artículo.


19 comentarios:

Kiquenet dijo...

Muy interesante !! Gracias !!!

Manuel Cardenas Thorlund dijo...

Gracias a ti por leerlo, hacía mucho tiempo que no escribía.

Edgardo dijo...

Esta bastanate bueno este articulo, salvo una duda, como se obtiene el valor de UMBRAL, quiza puedas detallar o proporcionar el trabajo completo. Gracias.

Manuel Cardenas Thorlund dijo...

Buenas Edgardo,
el valor de UMBRAL lo especifica el administrador, lo normal es moverse por el 0.7. Si es más bajo, el sistema dejará pasar más y dará menos falsos negativos y más falsos positivos. Si se sube el valor, el sistema será más seguro pero dará más falsos negativos.

Tienes todos los códigos al principio para descargarte el proyecto completo.

Edgardo dijo...

Se te agradce Manuel, el UMBRAL esta entre 0 y 1? y el retorno de la funcion Scoring esta tambien entre 0 y 1?, por que usar 3 Scoring no podria ser solo el total?
Saludos y gracias por el articulo.

Edgardo dijo...

Con que otro nombre se le conoce a Scoring? Gracias.

Manuel Cardenas Thorlund dijo...

Buenas Edgardo,
tienes razón, el que vale es el total, en el proyecto sacaba los tres para contrastar los diferentes valores por temas de estudio. Pero, efectivamente, el que vale es el total.

Anónimo dijo...

Excelente post, el primer ejemplo practico de autenticacion por dinamica de tecleo. te lo agradezco mucho

Nadia Hrisuk dijo...

Hola, excelente post!! Queria acceder al codigo fuente pero me da error al descargar! habria posibilidades que me lo mandes a mi correo?

Gracias!!!

Anónimo dijo...

Que tal Manuel, tu trabajo es muy interesante y útil para la investigación que estoy haciendo en la escuela, en tu trabajo incluiste cuadros comparativos con respecto a EFR% Y EFA% con respecto a una determinada muestra. Te dejo mi correo escorpio_15_19@hotmail.com y de ante mano muchas gracias por el gran aporte.

Anónimo dijo...

hola manuel me intereso mucho t trabajo porque ty con ganas de hacer una tesis con respect a sistemas biometricos aplicado al tecleo y veo que sabes muchisimo y m ecantaria obtener una ayuda tuya.. te dejo mi correo/ maxy_940@hotmail.com

Anónimo dijo...

Excelente tema amigo nose si podrias resubir el codigo ya que el link de descarga tira error, te lo pido ya que etoy queriendo realizar una inestigación acerca de este tema saludos..

Anónimo dijo...

Hola Manuel, me parece muy interesante tu trabajo, me gustaría descargar el código fuente para testear, mi cuenta de correo es cristianmedina1575@hotmail.com

Mil Gracias

Anónimo dijo...

Muy interesante tu trabajo Manuel, te importaria pasarme el código fuente de tu trabajo
andresmorales93@hotmail.com
Te lo agradecería mucho
saludos¡

HUGO H. OYOLA YARLAQUÉ dijo...

Hola Amigo yo estoy intentando hacer algo parecido y quisiera saber si de favor me podrias proporcionar tu codigo lo necesito por favor, gracias.
mi correo es hugo.ham@outlook.com

Erik Alex Buitron Zúñiga dijo...

Hola Manuel esta interesante la investigación estoy haciendo mi tesis relacionado a ala autenticacion por dinámicas de digitacion, por favor podrías re-subirlo el código seria de gran ayuda o caso contrario te dejo mi correo de antemano muchas gracias memesapurimac@gmal.com

Anónimo dijo...

hermano mi tema de tesis tiene que ver directamente con mecanismos de atenticacion biometricas en especifico con la dinamica de tecleo tengo en mente hacer algun componente , sistema o implementacion de servicio que incorpore esta tecnica de reconocimiento de personas por teclado , por lo que piensoque me seria de gran utilidad que me hicieras llegar esta pequeña aplicacion que expones e tu articulo paratenerla como referncia de estudio para lo que quiero hacer

mi direccion de corro es meppara@infomed.sld.cu si puedes hasme llegar cuanto antes este demo.

Miguel dijo...

Hola, buenos días
Muy interesante tu articulo.
¿Sería posible acceder a tu aplicación?
Muchas gracias.

Andre Cordova dijo...

Excelente,es unas de las mejores explicaciones
Bueno quisiera tener acceso a la aplicación
mi correo es:
andrepacord@gmail.com