Foros del Web » Programando para Internet » Python »

Seguridad con cookies

Estas en el tema de Seguridad con cookies en el foro de Python en Foros del Web. Hola buenas, tengo una duda acerca de la seguridad de las cookies. Estoy haciendo un proyecto usando Google App Engine con Python, y quiero implementar ...
  #1 (permalink)  
Antiguo 17/06/2010, 03:04
 
Fecha de Ingreso: diciembre-2009
Mensajes: 18
Antigüedad: 14 años, 4 meses
Puntos: 0
Seguridad con cookies

Hola buenas, tengo una duda acerca de la seguridad de las cookies.

Estoy haciendo un proyecto usando Google App Engine con Python, y quiero implementar un servicio de login.

Lo que tengo hecho de momento para controlar los usuarios que estan autenticados es que cuando un usuario ingresa correctamente los datos, se crea una cookie y se almacena en sha el nombre de usuario y la clave concatenados como sid (en el campo expire se almacena la hora actual + 2 minutos, de forma que caduque a los 2 minutos la cookie)

Cuando se entre en un sitio en el que se requiera estar identificado, se comprueba que en la base de datos hay un usuario y clave que al concatenarlos y hacer el sha coincida con el sid que hay en la cookie (os.environ('HTTP_COOKIE'). Si ocurre esto, se da por bueno el contenido de la cookie y se entra en la opción elegida.

Mis preguntas son:

¿Veis algún problema grave de seguridad con la implementación hecha?
¿Cuando pasan los dos minutos y la cookie expira se borra del pc donde esta el usuario?

Muchas gracias, un saludo.
  #2 (permalink)  
Antiguo 17/06/2010, 09:40
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad con cookies

Si, veo un problema de seguridad.
La 'cookie' es una cabecera HTTP más, modificable por cualquier usuario que tenga el conocimiento necesario (que no es cualquiera, pero sí cualquiera interesado en un ataque).

Fijate que capturando *una* petición HTTP cualquiera del usuario a tu sitio (algún monitor de tráfico en la red, incluso por wifi si el usuario está en una red no cifrada) tengo todos los datos necesarios para ingresar. (basta manipular la cookie para darle un valor de expiración válido)

La seguridad web es muy compleja, las soluciones son complicadas y a veces ni vale la pena Buenas prácticas son:

- no usar cookies más que para almacenar el ID de sesión (una sesión es un conjunto de datos almacenados en el servidor y correspondientes a un cierto ID, que se envía al usuario a través de una cookie)
PHP hace las sesiones muy sencillas, no he visto aún (porque no lo he necesitado) cómo crearlas y manejarlas con Python. Supongo que los frameworks tipo django lo hacen automáticamente

- renovar el ID de sesión con cada petición, para evitar que el robo del ID de sesión sirva para dejar vía libre de entrada al ladrón.

- si es posible, usar un sistema de doble autentificación (por IP, por ejemplo: si un usuario cambia la IP en medio de una sesión, desconfía)

- usar HTTPS al menos para el formulario de ingreso, para que la contraseña no viaje como texto plano


Buscá en internet por
- session poisoning (envenenamiento de sesión)
- session fixation ("fijación" de sesión)
- session hijacking ("secuestro" de sesión)

Contestando a la segunda pregunta: la cookie no necesariamente se borra, pero se supone que no se vuelve a utilizar si está expirada. De todas formas sería mejor que controlaras ese valor de forma explícita, para evitar manipulaciones


saludos.
  #3 (permalink)  
Antiguo 18/06/2010, 01:38
 
Fecha de Ingreso: diciembre-2009
Mensajes: 18
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Seguridad con cookies

Tienes razón en lo de que es un problema que se capture el contenido de la cookie, pero se me ha olvidao comentar que he configurado el fichero app.yaml para que se use HTTPS, por lo que yo creo que no habría posibilidad de que se cogiera la cookie y modificara el contenido del campo expires, por ejemplo.

Muchas gracias por contestar, un saludo.
  #4 (permalink)  
Antiguo 18/06/2010, 08:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad con cookies

Eso soluciona muchos de los problemas, pero no el problema del almacenamiento local de la cookie. Un usuario de la misma computadora podría obtener los datos necesarios para iniciar la sesión. (la cookie se transmite cifrada, pero no necesariamente se guarda cifrada en la computadora del usuario).

Sigo pensando que lo ideal es usar una cookie que guarde *solamente* un ID de sesión.


Saludos
  #5 (permalink)  
Antiguo 21/06/2010, 09:15
 
Fecha de Ingreso: diciembre-2009
Mensajes: 18
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Seguridad con cookies

He encontrado una solución (creo) para evitar que alguien pueda usar una cookie que se obtenga:

En primer lugar, obtengo la hora actual con time.time() y le sumo 180 segundos (lo llamaremos t).

Ahora obtengo el valor hash sha1 de concatenar el usuario y la clave de la persona que se autentica (lo llamaremos hu)

Hago el hash sha1 resultante de crear la cadena t:hu (se llamará hf)

Lo que mando como sid es la cadena t:hf.

Cuando llega la cookie se hacen las siguientes comprobaciones:

Se comprueba que el tiempo actual es menor que el tiempo guardado en la cookie antes del ':'

Se comprueba que hf es correcto:

Para cada par de valores (usuario,clave) de la tabla de usuarios, concatenamos ambos campos y obtenemos el valor sha1, hu'

Comprobamos que el valor sha1 de t:hu' sea igual a hf. En ese caso, la cookie se da por válida.

Consideraciones:

Un atacante no puede modificar el campo de tiempo porque hf no coincidiría y para calcular hf necesita un hu generado a partir de dos datos de usuario y clave que no conoce (al buscar un par en la tabla de la bd no se encontraría ninguno).

Como consucuencia de que no se puede modificar el campo del tiempo, las cookies sólo valdrían durante 180 segundos (además también se modifica el campo expires a 3 minutos más tarde de la hora actual)

El único problema que yo veo es que mientras no acaben esos 3 minutos, alguien que obtenga la cookie puede acceder pero se usa HTTPS.

Un saludo y muchas gracias por tu atención
  #6 (permalink)  
Antiguo 21/06/2010, 11:39
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad con cookies

Suena como una buena solución
No creo que debas preocuparte de que se robe la sesión en 3 minutos, es un período lo suficientemente corto. Ahora has dejado el elemento seguridad del lado del usuario, quiero decir, un atacante tendría que apuntar directamente al usuario para obtener los datos:
Usando HTTPS correctamente, en principio no debería haber forma de obtener el tráfico como para saber la cookie (solamente posible en caso de un ataque 'man in the middle', pero no existe forma de asegurarse contra eso si el usuario no sabe al menos comprobar el certificado HTTPS)

La cookie estará en el navegador, pero de nuevo, expira rápido. Solamente podría obtenerla alguien que ingrese a la máquina del usuario menos de 3 minutos después de que éste deja la pc, y eso solamente si no cierra sesión.


Saludos.
  #7 (permalink)  
Antiguo 22/06/2010, 01:46
 
Fecha de Ingreso: diciembre-2009
Mensajes: 18
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Seguridad con cookies

De momento lo dejaré así, y si es necesario lo intentaré mejorar. De todas formas muchas gracias por tu atención.

Un saludo.

Etiquetas: cookies, seguridad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:47.