PDA

View Full Version : Acerca del Buffer Overflow...



restor
27-08-05, 01:22 AM
El siguiente artículo me pareció interesante, sobre todo por que toca un pequeño error, muy común en programadores principiantes con lenguajes como C, que es el conocido como buffer overflow.

Y sobre todo por cómo un error tan simple puede ser utilizado para afectar a tantas personas. Espero les agrade como a mí.

Slammed!

Julio 11, 2003.

Una vista interior al gusano que saturó a Internet en 15 minutos.

"Gah!" Owen Maresh casi se atraganta cuando la alerta de Prioridad 1 apareció en su panel de pantallas justo después de la medianoche el sábado 25, en enero. Sentado dentro del Centro de Control de Operaciones de Red de Akamai, el cuarto de comando para 15,000 servidores de alta velocidad colocados alrededor del globo, el tenía una visión completa del Internet, monitoreando su salud en tiempo real. Su trabajo era detectar posibles problemas y mantener los servidores de Akamai -y los sitios de sus clientes como Ticketmaster y MSNBC- abiertos para negocios. Eso era complejo.

El ataque de Slammer fué brutal y rápido, propagándose cientos de veces más rápido que el virus Code Red o el gusano Nimda. Y comenzó como un sencillo paquete mortal. El pequeño gusano encontró a su primer víctima a las 12:30 AM, tiempo estándar del Este de los Estados Unidos. La máquina, un servidor ejecutando Microsoft SQL, instantáneamente comenzó a arrojar millones de clones de Slammer, buscando computadoras en forma aleatoria. Para las 12:33 AM, el número de servidores esclavos en el ejército de réplicas de Slammer estaba doblándose cada 8.5 segundos.

La red de Akamai está muy automatizada, con sistemas redundantes en cada nivel. Está específicamente diseñada para soportar la tormenta más severa en Internet. Otras redes no son tan robustas. Así es que cuando los servidores de nombre de dominio (DNS) de Akamai automáticamente pusieron fuera de servicio a Hong Kong, Maresh y sus compañeros de trabajo comenzaron a llamar y a mandar correos electrónicos a compañeros nocturnos en todo el mundo para advertirles del Tsunami de tráfico. Fué muy tarde.

Para las 12:45 AM, sectores muy grandes de Internet comenzaron a desaparecer en parpadeos. Net Access Corporation, uno de los proveedores de servicios de internet (ISP) más grandes del noreste, envió un SOS: "Cerca de la mitad de nuestros puertos están en alarma delta en este momento." Arriba en la pantalla gigante, Maresh podía ver la cadena de ruteadores de la base física de Internet en nivel 3, tratando de encontrar caminos hacia el resto del mundo, y fallando. Tres cientos mil modems en Portugal se apagaron, y Corea del Sur desapareció del mapa: no había servicio de internet o de telefonía celular para 27 millones de personas. Cinco de los 13 servidores root-name de internet, sistemas duros, todos sucumbieron al chubasco de paquetes. Sistemas de correo corporativo se atestaron. Sitios de web no respondieron mas. Un especialista en Linux, en Manhattan, envió a sus colegas en mayúsculas, para hacer énfasis en que estaba gritando: "¡UN GUSANO DE MS SQL ESTÁ DESTRUYENDO INTERNET. BLOQUEEN EL PUERTO 1434!". Pero para entonces Slammer había noqueado más que sólo Internet. Los que atendían la emergencia de 911, en Seattle, tuvieron qué hacerlo en papel. Continental Airlines, incapaz de procesar boletos, canceló vuelos de su centro Newark.

Costo total: mas de un billón de dólares. Meses después, todavía no sabemos quién lo hizo o cuándo ocurrirá otra vez. Pero podemos analizar el gusano Slammer y leer la profecía en sus entrañas: en el futuro, cada 'blackhat' tendrá quince minutos de fama.

Cómo funciona Slammer.

Slammer le debe su velocidad a UDP, un protocolo de Internet que es más ligero y rápido que TCP, el protocolo utilizado por sitios Web, correo electrónico y para descargas de archivos. TCP requiere que el que envía y recibe se reconozcan el uno al otro en un proceso conocido como 'handshaking' antes de intercambiar información; UDP puede llevar un mensaje en un simple paquete de un sólo sentido. El software SQL Server 2000 de Microsoft contiene un servicio de directorio implementado con UDP que les permite a las aplicaciones el automáticamente encontrar la base de datos correcta. Aún más, el código SQL viene incluído dentro de otros programas que la compañía vende. Muchas víctimas de Slammer ni siquiera sabían que estaban ejecutando código SQL.

El gusano toma ventaja de un error común de software llamado desbordamiento de buffer. El buffer se desborda cuando una cadena de datos es escrita en la memoria sin que su longitud sea verificada por el programa. Si la cadena es demasiado grande, la parte final de la misma sobreescribirá el propio código del programa.

La genialidad de Slammer es cómo utiliza un ataque en sólo un tipo de software como palanca para un ataque general en la Web misma. Máquinas infectadas por el gusano rápidamente llenaron de basura a la Red con tráfico a direcciones aleatorias, afectando otros servidores vulnerables. Como el número de computadoras generando paquetes con Slammer crecía, la situación alcanzó un volúmen crítico, creando potencialmente un ataque conocido como negación de servicio en todas las 4 billones de direcciones IP en la Red.

El código de Slamer es un conjunto de instrucciones tan simple como "lavar, enjuagar, repetir". El programa por sí mismo es de sólo 376 bytes, no más grande que éste párrafo. Pero su diseño revela un conocimiento sofisticado de computadoras y la Red. Aquí está una guía paso a paso.

PASO UNO
Meterse.
Slammer se disfraza como un sencillo paquete UDP, uno que normalmente sería un requerimiento inofensivo para encontrar un servicio de una base de datos específica. El primer byte en la cadena -04- le indica al servidor SQL que los datos a ontinuación es el nombre de la base de datos en línea que se está buscando. Las especificaciones técnicas de Microsoft dictan que este nombre sea a lo mas de 16 bytes de longitud y que termine en 00. Pero en el paquete de Slammer, no hay seguimiento en cuanto a la longitud y no hay 00 en los datos. Como resultado, el software de SQL copia todo a memoria.

PASO DOS
Reprogramar la computadora.
La cadena inicial de caracteres 01 sobrepasa los 128 bytes de memoria reservada para el requerimiento del servidor de SQL y abarca la siguiente puerta de la pila de la computadora. "Pila" es un concepto de programación para una lista ordenada de información que la computadora utiliza para recordarse qué hacer después, como un trabajo de oficina ordenado en un escritorio. La primer cosa que la computadora hace después de abrir el muy largo "requerimiento" UDP de Slammer es sobreescribir su propia pila con nuevas instrucciones que Slammer ha disfrazado como una consulta rutinaria. La computadora se reprograma a si misma sin darse cuenta.

PASO TRES
Escoger víctimas aleatoriamente.
Slammer genera una dirección IP aleatoriamente, infectando otra computadora que podría estar en cualquier lugar en Internet. Para hacerlo aleatoriamente, Slammer desarrolla este truco de programación: ve el número de milisegundos que han transcurrido en el sistema desde que fué iniciado e interpreta el número como una dirección IP.

PASO CUATRO
Replicarse.
El sobre tiene la dirección, ahora sólo necesita ser llenado. Slammer apunta a su propio código como la información a enviar. La computadora infectada escribe a nueva copia del gusano y pega el timbre postal a UDP.

PASO CINCO
Repetir.
Después de enviar el primer paquete impuro, Slammer entra en un ciclo para inmediatamente enviar otro a una computadora diferente. No pierde un sólo milisegundo. En vez de hacer otra llamada al reloj del sistema para obtener el tiempo, sólo corre los bits de la dirección IP que ya está en memoria para crear una nueva dirección IP. Un error de Slammer está aquí: el corrimiento de bits deja unos pocos dígitos sin cambiar en la dirección. Importa poco, de hecho, pues la computadora está ahora enviando paquetes tan rápido como su cable de red pueda llevarlos. Una computadora de casa podría enviar un par de cientos de copias en su conexión de banda ancha cada segundo. Centros de datos corporativos se convierten en tierras de cultivo, lanzando decenas de miles por segundo. Slammer comandó sólo 75,000 máquinas con SQL. Pero debido a que se replicó muy rápido, el gusano fué capaz de tomar millones más, poniéndolas fuera de línea con un flujo de tráfico sin sentido.

La siguiente vez.

Especialistas en seguridad han albergado escenarios de pesadilla con un gusano "Warhol" que podría inhabilitar la Red en 15 minutos. Slammer probó que no estaban soñando. Sin meses de reconocimiento, sin listas compiladas de computadoras vulnerables, sin granjas masivas de servidores requeridos para lanzar un ataque. Sólo un paquete, y UDP, es definitivamente la forma de hacerlo.

La escalofriante verdad es que hay mucho software que utiliza UDP esperando a ser secuestrado por un programador regular. Kazaa. Xbox. ¿Qué tal el código que controla el mismo sistema de nombre de dominio (DNS)? Los 350,000 servidores DNS que conectan nuestras computadoras forman una red UDP interconectada sin la que nada haríamos. Un ataque parecido al de Slammer en DNS inhabilitaría el Internet en menos tiempo que el que se toma para leer este artículo. Con suerte para nosotros, a diferencia del software SQL Server de Microsoft, el código abierto para DNS no tiene tales errores.

¿O los tiene?