Lista de ataques de sesión web y contramedidas

3

Estoy escribiendo un nuevo sitio web en PHP y usaré cookies para rastrear los datos de las sesiones de los usuarios. Antes de finalizar el diseño, quiero asegurarme de que el sitio no sea vulnerable a los ataques. He escrito una lista de métodos de ataque y se me ocurrieron contramedidas para cada uno. ¿Alguien puede pensar en más métodos de ataque y, si es así, proponer medidas adecuadas?

Una lista de todos los métodos de ataque que podría pensar:

  1. cookie de sesión de Guess / bruteforce
  2. Robar cookie de sesión (por ejemplo, si el atacante guarda la cookie de sesión en USB)
  3. secuencias de comandos entre sitios
  4. Phishing (fijación de sesión)
  5. inyección SQL
  6. inyección de encabezado HTTP

Se debe tener en cuenta que usaré mi propia base de datos para almacenar información de la sesión, no las funciones de sesión estándar de PHP. Cuando detecto un ataque, ejecutaré una función llamada warn_and_halt() que registrará el ataque e informará al administrador del sistema, luego detendrá la sesión bajo ataque.

Mis contramedidas para cada uno de los tipos de ataques anteriores son:

  1. En lugar de usar un entero grande para el ID de sesión almacenado en la cookie, generaré mi propio número aleatorio y luego lo haré con algo como SHA-1 para que sea más difícil de adivinar. Por supuesto, el ID de sesión puede no ser único si se crea de esta manera, así que tendré que revisar todos los otros ID de sesión en la base de datos y regenerar si el ID de sesión recién generado ya existe. Estoy seguro de esta medida.

  2. Estoy asumiendo que el USB se llevará a otra computadora y que la cookie de la sesión se cargará en otro navegador. Registraré el agente de usuario (nombre del navegador) para cada sesión. Si el agente de usuario cambia durante la sesión, entonces warn_and_halt() . He leído acerca de personas que utilizan la dirección IP para validar el ID de la sesión, pero no creo que vaya a usar esto en absoluto, ya que las direcciones IP pueden cambiar durante una sesión por razones completamente inocentes, por ejemplo, si el enrutador del usuario se reinicia y negocia Una nueva IP con su ISP. ¿Alguien puede sugerir más contramedidas aquí?

  3. Estableceré la cookie de sesión como HTTPonly y también comprobaré el dominio de las cookies entrantes. No hay mucho de lo que se puede hacer para evitar que eso suceda en un navegador, en mi opinión, el navegador puede optar por no cumplir con la bandera de HTTP, ¡nada de lo que puedo hacer allí! ¿Alguien sabe una mejor manera de prevenir el XSS?

  4. Me imagino que el phishing se producirá cuando el usuario inicie sesión incorrectamente en mi sitio y luego envíe un enlace como <a href='javascript:void(0);' onclick="document.cookie='sessionid=xxxx';document.location='http://mywebsite/'"> al usuario "inconsciente". Esto establecerá una cookie de sesión sin que "ajeno" lo sepa. Luego, "ajeno" ingresará su información personal y el usuario "malo" tendrá esta información. Creo que la mayoría de los navegadores no permitirán que el dominio de la nueva cookie se establezca como mywebsite, por lo que "ajeno" es bastante seguro. Sin embargo, verificaré el dominio entrante de cada cookie para asegurarme de que sea para mi sitio web. Definitivamente usaré cookies, en lugar de GET o POST para almacenar el ID de sesión. Además, contrarrestaré la fijación de sesión cambiando el ID de sesión para cada página visitada.

  5. La inyección de SQL es un problema con un alcance mucho mayor que el robo de ID de sesión, pero en general lo contrarrestaré, siempre evitando los datos entrantes (incluidas las cookies) y filtrando los caracteres incorrectos con expresiones regulares. Creo que tengo este muy bien cubierto.

  6. Acabo de enterarme de la inyección del encabezado HTTP. Sin embargo, parece bastante fácil contrarrestar, simplemente evite los campos de encabezado entrantes, especialmente para los retornos de transporte y valide los encabezados entrantes.

Así que esos son todos los ataques y contramedidas que podría pensar (después de un poco de lectura en línea). Si ve alguno que haya perdido, por favor responda. Si ve que alguna de mis contramedidas es insuficiente, por favor dígalo.

    
pregunta mulllhausen 03.07.2011 - 03:24
fuente

2 respuestas

3

Usted preguntó: "¿Alguien sabe de una mejor manera de prevenir xss?"

La mejor manera de prevenir XSS es educarse sobre XSS y evitar la introducción de vulnerabilidades de XSS en su código. Comience leyendo el siguiente documento:

(Consulte también funciones de PHP para prevenir XSS .)

A continuación, te recomiendo que leas sobre seguridad web. Comience leyendo las siguientes introducciones a la seguridad web para desarrolladores:

Eso te ayudará a evitar el XSS. Hay muchos más recursos en la web y en este sitio; echar un vistazo.

Nota: el indicador HTTPonly no impide que XSS. Además, contrariamente a la creencia popular, proporciona poca seguridad adicional: si su sitio web contiene una vulnerabilidad XSS, entonces a menudo será posible que un atacante haga cosas malas al usuario. El indicador de HTTPonly hace que el atacante trabaje más, pero al final, debes asumir que un atacante sofisticado probablemente llegará igual de lejos. Ahora no estoy discutiendo contra HTTP solo. La marca HTTPonly es una buena idea, si no rompe la funcionalidad del sitio. Pero no debe confiar en él como una defensa contra XSS. Es una defensa porosa particular.

    
respondido por el D.W. 11.12.2011 - 05:18
fuente
2

Sobre algunos de tus puntos:

  1. Al volver a marcar un número aleatorio, volverá a obtener un número aleatorio. Hacer esto solo sería sensato si su número aleatorio original proviene de un espacio pequeño (es decir, que se puede adivinar), y si algún otro valor secreto ingresa al hashing (por lo que el atacante no puede hacer el mismo hashing). Y entonces esto se llamaría un MAC.

  2. No veo ninguna razón por la que un atacante tenga que usar USB para robar una cookie de sesión (o cómo esto sería ventajoso). Además, las cadenas de agente de usuario pueden ser falsificadas, también. Además, ¿cómo podría un atacante obtener acceso a la cookie?

    • Si ella tiene acceso directo a la computadora cliente para ver qué hace el navegador, puede hacer cualquier cosa (y usted no tiene forma de evitarlo).
    • Si ella puede ver el tráfico de la red y leer la cookie desde allí ... entonces estás haciendo algo mal. Use SSL (o mejor TLS) para el transporte, es decir, HTTPS.
respondido por el Paŭlo Ebermann 09.12.2011 - 22:36
fuente

Lea otras preguntas en las etiquetas