¿Algún valor en un servidor web que cierra las conexiones en solicitudes incorrectas (o páginas incorrectas)?

6

Al menos un servidor web, nginx , tiene la capacidad de "cerrar la conexión sin enviar ningún encabezado" , configurándolo para que devuelva un 444 (no estándar) a varias solicitudes HTTP mal formadas.

¿Hay algún valor de seguridad real en esto, o solo es teatro de seguridad ? ¿Cómo es probable que los atacantes respondan al no recibir respuesta de una dirección IP? Si hay algún valor, ¿cuál es la relación costo-beneficio? ¿Vale la pena el esfuerzo de configurar nginx para hacer esto?

Actualización: después de pensarlo, hay realmente dos situaciones en las que podría querer cerrar la conexión. No solo las solicitudes HTTP incorrectas, sino también las solicitudes bien formadas para páginas inexistentes.

Por ejemplo, una solicitud get /bank-files/index.htm . No hay tal página en mi sitio web. Sin embargo, actualmente estoy pasando todas las solicitudes a un proceso de Django, y obviamente devuelve un 404 en cualquier página no encontrada. Dado que mi sitio tendrá un pequeño número de subpáginas conocidas de antemano ("/", "/ users", "/ orders", etc), podría configurar nginx para pasar. solo esas páginas, y devuelve 444 (conexión cercana) en cualquier otra cosa. Suponiendo que valga la pena. :)

Entonces, ¿hay algún valor en cerrar la conexión a todas las solicitudes que son HTTP válidas, pero para páginas no existentes?

    
pregunta John C 25.09.2011 - 18:55
fuente

5 respuestas

5

El valor está en evitar que el software de aplicación de nivel superior (php, wordpress, lo que sea) trabaje con y, posiblemente, gestionar mal las solicitudes mal formadas. Dado que la capa nginx está evaluando la corrección del protocolo y no está intentando hacer nada con la solicitud, está proporcionando un prefiltro.

Terminar la conexión abruptamente no te gana mucho. Le dice al atacante qué sistema de defensa está usando, y se obtendrían los mismos medios con una respuesta 404 genérica con menos utilidad para el atacante. Pero es el tipo de teatro dramático de seguridad que surge de vez en cuando, y no hace ningún daño real a nadie.

    
respondido por el gowenfawr 25.09.2011 - 20:17
fuente
5

Creo que Gowenfawr y George Bailey tienen razón.

Terminar una conexión de protocolo HTTP en lugar de devolver una respuesta de error es un mecanismo de muy bajo nivel. Como escapado perpetuo de la bestia de las consecuencias no deseadas, recomiendo no implementar un mecanismo sin un propósito claro. Los seres humanos son propensos a errores y es posible que, por accidente, impida que se envíe un mensaje de error válido. Rastrear un error sin una respuesta normal es la manera incorrecta de pasar algunas tardes, seguido de las primeras mañanas, seguido de las últimas mañanas, y así sucesivamente. Escriba sus objetivos de seguridad y luego determine los mecanismos para cumplirlos.

    
respondido por el this.josh 27.09.2011 - 09:58
fuente
2
  

Entonces, ¿hay algún valor en cerrar la conexión a todas las solicitudes que son HTTP válidas, pero para páginas no existentes?

Eso sería una configuración inusual, con poco beneficio. Le sugeriría que revise sus encabezados HTTP para ver si filtran información como la versión del servidor y se adhieren a 404 en páginas no existentes, lo cual es menos confuso. No puedo pensar en ningún valor de seguridad para cerrar la conexión, excepto como un aumento muy pequeño en el rendimiento. (En realidad, sería una acción contraria a keep-alive, pero no creo que eso importe mucho para el tráfico que probablemente genere 404)

Este ligero aumento de rendimiento podría comenzar a marcar una diferencia en un ataque DoS, no sé qué tan caras pueden ser sus páginas 404. Pero incluso entonces, un ataque DoS sería más efectivo en páginas más grandes de su sitio, por lo que probablemente este no sea un objetivo.

Pero, de nuevo, podría faltar algo.

    
respondido por el George Bailey 25.09.2011 - 20:47
fuente
1

Reduce la posibilidad de fuga de información.

Si hago una solicitud mal formada, existe la posibilidad de obtener algo interesante para contarme sobre el sistema.

Si la respuesta siempre devuelve el mismo valor independientemente de la solicitud, entonces realmente no puede descubrir nada sobre el sistema a través de solicitudes mal formadas.

El valor de esto es todo en relación con el sistema que está tratando de proteger y en qué medida está tratando de protegerlo. Nunca lo configuré, así que no puedo hablar del esfuerzo involucrado.

    
respondido por el Steve 25.09.2011 - 19:08
fuente
0

"Teatro de seguridad" no tiene nada que ver con tu pregunta. Ha caído en la trampa de usar eso como un ataque publicitario contra cualquier procedimiento de seguridad en el que no esté de acuerdo.

La seguridad correcta es evitar la fuga de información. Si no se encuentra la URL, entonces el comportamiento correcto es dar un 404 no encontrado. Si el protocolo HTTP tiene un formato incorrecto, un buen comportamiento es simplemente cerrar la conexión (no sé lo que dice el estándar, pero sé que ese es el comportamiento de la mayoría de los servidores).

    
respondido por el Robert David Graham 26.09.2011 - 00:02
fuente

Lea otras preguntas en las etiquetas