Uno de los aspectos a la hora de realizar controles sobre una aplicación web es la información que puede obtenerse a través de lo que se conoce como banner grabbing. Este concepto se refiere a la interacción manual en texto plano para obtener información sobre sobre el servidor donde reside la aplicación web.
El banner grabbing es una de las formas de conocer qué infraestructura o sistema se encuentra detrás de una aplicación web o servicio. En otras palabras, está fuertemente relacionado con el fingerprinting para detectar el sistema operativo.
Si bien el método de banner grabbing puede aplicarse sobre cualquier tipo de servicio, cómo por ejemplo, FTP, VNC, HTTP, entre otros, en este caso nos enfocaremos sobre el último debido a que es posible resaltar comportamientos particulares del mismo. Además de la detección del servidor que se aloja detrás del sitio web, en algunos casos es posible conocer la versión del mismo. Cabe destacar que no siempre es posible obtener información completa ya que existen formas de ocultar la información que brinda un servidor frente a diferentes peticiones.
¿Cómo obtener información del servidor?
Una de las formas de conectarse con un servidor web es a través de Telnet. Si se inicia una sesión a través del mencionado comando indicando el servidor o la dirección IP del mismo y a continuación el puerto (en el caso del protocolo HTTP suele ser el puerto 80) se podrá interactuar con el propio servidor. Luego de que se inició la conexión, mediante el comando HEAD y especificando el protocolo HTTP 1.0 es posible obtener el banner del servidor (encabezado). En la siguiente captura se puede visualizar como se inició la conexión con un servidor Apache en un Linux Suse:
De la misma forma, en la siguiente captura es posible observar la respuesta, en este caso, de un Apache sobre un Linux Ubuntu:
De esta manera es posible reconocer que tipo de servidor está alojando a la aplicación web. Sin embargo, existe la posibilidad de modificar el banner de un servidor para que este no brinde información real o completa sobre su infraestructura. A modo de ejemplo, se puede visualizar una captura de un banner generado a partir de la función echo de Linux en conjunto con la famosa herramienta para redes Netcat configurada en modo escucha:
Si se realiza la conexión al falso servidor a través de Telnet se obtiene la falsa respuesta:
Existen otros patrones distintivos que permiten la identificación de un servidor. Estos patrones pueden obtenerse a partir de peticiones inválidas o sobre un protocolo no existente. Frente a este tipo de requerimientos, cada servidor responderá de forma diferente indicando distintos tipos de errores. De igual forma, si se analiza la secuencia de respuesta también existen diferencias. Específicamente, un servidor Microsoft Windows responde con una secuencia diferente que un servidor Apache. A modo de ejemplo, en la siguiente imagen puede observarse en comparación la respuesta de un servidor Apache y de un servidor Microsoft:
Tal como puede observarse, una de las diferencias sustanciales radica en que el servidor Apache responde primero con el campo Date y luego con el campo Server. En el caso del servidor Microsoft IIS 7.5, este responde con los mencionados campos pero en orden inverso. Esta es una de las tantas diferencias que permiten distinguir entre diferentes tipos de arquitecturas. Incluso existen diferencias entre distintas versiones de un mismo servidor.
Este tipo de análisis son válidos a la hora de evaluar el nivel de seguridad de una aplicación web con el agregado de contemplar la arquitectura que se encuentra por detrás. Tal cómo se especificó anteriormente, es posible ocultar información modificando los banners de los servidores. En la siguiente captura puede observarse una consulta sobre un servidor Apache donde la versión fue removida del banner:
Es importante que las aplicaciones web sean auditadas y se contemplen aspectos relacionados a la información que puede obtenerse, por ejemplo, a través de banner grabbing. La seguridad debe gestionarse, siempre teniendo en mente que es el eslabón más débil es el que determina el nivel de seguridad de una infraestructura. En los casos donde brindar información sobre la plataforma residente sea un riesgo, la misma debe limitarse. Asimismo, es sumamente recomendable contar con versiones actualizadas de dichos servidores ya que estas solucionan problemas de seguridad hallados en versiones anteriores.
Fernando Catoira
Analista de Seguridad