25 septiembre 2010

Explotación de Windows, pasado, presente y futuro - 1/3

Windows, uno de los sistemas operativos más extendidos en ordenadores personales del momento. Empezamos una serie de artículos donde iremos viendo la evolución tanto de los métodos para explotar fallos encontrados en el sistema, como de las protecciones para prevenir estos fallos y evitar sus consecuencias. Esta saga de artículos está basada en otra recopilación, pero modificada y adaptada a otro estilo. ¿Preparados para recordar tiempos pasados? ¡Seguro que a más de uno le saldrá la vena romántica!

Aviso que puede que me deje cosas, algunas importantes. Por ello, lo digo de antemano y pido disculpas desde ya. Ahora, ¡a disfrutarlo!

Nos centraremos en el sistema operativo de Microsoft, pero para ello tendremos que tratar temas que no están exclusivamente relacionados con él. Para comenzar vamos a ver una breve historia de los buffer overflow, y lo que han significado desde sus inicios.

Hace algún tiempo, en 1988, el gusano Morris empezó a extenderse por Internet, y tuvo mucha cobertura en los medios de comunicación de la época. Fue el primer gusano conocido en explotar vulnerabilidades de desbordamiento de buffer para propagarse, concretamente explotaba fallos conocidos en Unix sendmail, Finger y rsh/rexec, además de contraseñas débiles.

Poco después, en 1996, Elias Levy (Aleph One) escribió Smashing The Stack For Fun And Profit para Phrack issue #49, documento mítico y de referencia para muchos.

Por otro lado, tres años más tarde Matt Conover escribía el primer artículo detallado acerca de heap overflow. Al año siguiente, Solar Designer publicaría el primer exploit genérico para Windows basado en un heap overflow (Netscape exploit).

En esta época, los sistemas operativos contaban con pocas protecciones de memoria y una pobre validación en la entrada de datos. El uso de una función vulnerable era suficiente para abusar de la memoria (normalmente en la pila) y tomar el control del flujo del programa, con lo que un atacante podría ejecutar su propio código.

Era algo que traía de cabeza a los desarrolladores de sistemas operativos. En 1996, Casper Dik escribió un parche que modificaba en tiempo de ejecución la imagen del kernel para que la pila no tuviese permisos de ejecución en Solaris 2.4 a 2.5.1. Poco después Solar Designer escribió algo parecido para Linux.

Cerca del año 2000, Solar Designer volvía con algo nuevo, ataques return-to-libc. Se trataba de usar funciones cargadas en memoria para saltar la protección que hacía la pila no ejecutable, así podía usar funciones como system() (para ejecutar un comando), pero por otro lado tenía el inconveniente de que no podría usar shellcodes avanzados.

Nos quedamos en el año 2000 con:

¡En el próximo artículo entraremos de lleno en el año 2000!

Parte 1


Sobre las referencias, pondré todas en la última entrega de la serie, así como la recopilación original.

2 comments :

Newlog dijo...

Otra entrada genial!!

A ver cómo continua la serie... Realmente parece que antes del 2000 las cosas eran un poco más fáciles eh. Aunque claro, dentro de 10 años, lo mismo dirán de ahora...

Aquí dejo otra cronología sobre el exploiting bastante buena:
http://www.abysssec.com/blog/tag/nx/

Saludos!

Zmsen2001 dijo...

Concentración en Santiago. Mañana sábado a las 12:00h se concentrarán en la plaza de la Quintana en Santiago, los alumnos y sus familias