Resumen

  • Microsoft publicó en julio de 2002 una corrección para el servicio de resolución de SQL Server 2000; aun así, CAIDA estimó que Slammer infectó en enero de 2003 más del 90 % de los equipos vulnerables accesibles en diez minutos.
  • El fracaso no pertenecía a una sola organización: el fabricante controlaba el parche, los distribuidores conocían las copias integradas de MSDE, los dueños de aplicaciones controlaban los procesos en ejecución y las redes necesitaban una respuesta automática limitada antes de que llegara una autorización humana.

El dato que el boletín no podía contener

MS02-039 apareció el 24 de julio de 2002. El boletín de Microsoft explicaba que SQL Server 2000 Resolution Service escuchaba en UDP 1434 para indicar a los clientes el puerto de una instancia con nombre. Dos funciones aceptaban datos sin limitar correctamente su tamaño. Una petición elaborada podía desbordar la pila y ejecutar código con los privilegios de la cuenta del servicio.

SQL Server 2000 y Microsoft Desktop Engine 2000 estaban afectados. Microsoft ofreció un parche, una versión de archivo para comprobar la instalación y la recomendación de cerrar UDP 1434 cuando no fuera necesario. El parche acumulativo de MS02-061, publicado el 16 de octubre, incorporó también la corrección.

Sin embargo, una fecha de publicación solo describe el repositorio del fabricante. No dice qué binario cargó un servidor durante la madrugada del 25 de enero. Microsoft podía corregir su producto, pero no podía localizar cada copia incluida por terceros, aprobar cada parada de mantenimiento ni modificar un servicio administrado por su cliente. La versión vulnerable seguía decidiendo en cada máquina donde continuaba activa.

Esa es la frontera que propone Running-Code Primacy: la norma o el aviso invita a adoptar; el proceso real confirma si la invitación tuvo algún efecto.

La latencia dejó de proteger al defensor

Slammer, o Sapphire, empezó a propagarse poco antes de las 05:30 UTC. Su cuerpo ocupaba 376 bytes y cabía en un único datagrama. Con las cabeceras, CAIDA describe un paquete UDP/IP de 404 bytes. La explotación del servicio vulnerable hacía que el nuevo equipo infectado enviara copias a direcciones seudoaleatorias por UDP 1434.

No había sesión que negociar ni respuesta que esperar. Un gusano que abre conexiones TCP queda condicionado por los tiempos de ida y vuelta y los vencimientos. Slammer transmitía el siguiente intento inmediatamente. Su límite era el ancho de banda de salida del servidor comprometido.

CAIDA observó directamente hasta unas 26.000 sondas por segundo desde un equipo y calculó una media inicial aproximada de 4.000 por instancia. En torno al tercer minuto, la actividad mundial superó 55 millones de sondas por segundo. En diez minutos, más del 90 % de la población vulnerable que el gusano podía alcanzar ya estaba infectada.

La medición tiene incertidumbre declarada. En la primera media hora se registraron 74.856 direcciones infectadas distintas, un límite inferior. Errores del generador seudoaleatorio excluían ciclos completos de algunas perspectivas y un conjunto temprano de datos se interrumpió a los dos minutos y cuarenta segundos. No existe base para convertir el límite inferior en un censo exacto. Sí existe base para concluir que la propagación decisiva ocurrió antes que una respuesta humana ordinaria.

El cuello de botella estaba al lado del servidor

Slammer no reflejaba ni amplificaba respuestas. No necesitaba falsificar la dirección de una víctima. Cada servidor comprometido originaba sus propias sondas. La variante observada no incluía otra carga destructiva, pero su consumo de red ya era una forma de daño.

En muchas organizaciones, una sola máquina podía llenar el primer enlace compartido. Los sistemas vecinos perdían conectividad aunque no ejecutaran SQL Server. El patrón combinaba volumen, muchísimos paquetes pequeños y destinos que cambiaban sin cesar; con ello agotaba ancho de banda, colas, memoria o CPU de equipos de red. La competencia entre instancias infectadas terminó limitando incluso el crecimiento del propio gusano.

Por eso la frontera de entrada no bastaba. El riesgo se materializaba como un emisor interno fuera de control. La organización necesitaba observar el tráfico saliente y poder aplicar segmentación, colas justas, límites de tasa o aislamiento selectivo. Enviar todo el problema a un proveedor anti-DDoS externo no protege el enlace local que el servidor ya está ocupando.

El componente que no figuraba en el nombre del producto

MSDE 2000 podía llegar integrado en otra aplicación. El responsable que respondiera “no tenemos SQL Server” podía estar diciendo la verdad según el catálogo comercial y equivocándose según la memoria del sistema. CERT/CC advirtió expresamente que los productos que incluían MSDE 2000 compartían la vulnerabilidad.

La información estaba dividida. Microsoft conocía el componente; el distribuidor, el paquete que lo incorporaba; el propietario de la aplicación, la dependencia empresarial; y el equipo de red, el puerto expuesto. Un inventario fiable debía unir las cuatro perspectivas.

La unidad de control no es el nombre de la compra, sino la identidad ejecutable: proceso, versión cargada, dueño, aplicación que lo instaló, clientes autorizados y rutas desde las que puede alcanzarse. Una orden de cambio cerrada no demuestra ninguno de esos hechos por sí sola.

La reedición de MS02-061 añade una lección incómoda. Microsoft integró una corrección adicional no relacionada con la seguridad y un nuevo instalador porque la combinación original podía interferir con algunas operaciones de SQL Server. No justifica mantener una exposición peligrosa. Explica por qué instalar de verdad exige probar compatibilidad, programar el cambio y verificar el resultado bajo autoridad local.

El filtro de una hora no podía recuperar los primeros diez minutos

Numerosas redes comenzaron a bloquear tráfico con destino UDP 1434 durante la primera hora. Era un caso favorable: patrón reconocible, puerto estrecho y, en muchos entornos, poco uso legítimo por Internet. CAIDA concluyó que incluso esa respuesta llegó después de la infección de casi todos los equipos susceptibles.

El filtrado redujo el tráfico posterior y contribuyó a recuperar conectividad. No desinfectó máquinas ni impidió una propagación interna que no cruzara el borde. Las recomendaciones de Cisco distinguían ACL de router y controles dentro de VLAN, y reconocían que algunas empresas necesitaban el servicio para transacciones legítimas. La respuesta tenía que conocer la topología y el negocio.

Automatizar no significa entregar una autorización ilimitada. Una política local puede actuar cuando coinciden una firma precisa, una expansión anómala de destinos y una tasa de salida incompatible con la función del equipo. Puede limitar temporalmente, aislar o desviar a una red restringida. El propietario conserva umbrales, alcance, excepciones, duración, evidencia y reversión.

La especificación mínima común es un resultado: saber dónde vive el runtime afectado, eliminar su acceso injustificado y evitar que un nodo acapare un recurso compartido. Cada operador decide cómo obtenerlo.

Cuatro pruebas, no una casilla

El fabricante demuestra una versión corregida identificable y un procedimiento viable. El distribuidor demuestra dónde integró el motor y cómo avisó al cliente. El dueño de la aplicación demuestra qué versión está cargada y quién necesita conectarse. La red demuestra mediante flujos y simulacros que un endpoint no puede ocupar el enlace entero.

Un control no cancela la deuda de otro. El cortafuegos puede ocultar código vulnerable. El parche puede coexistir con una exposición innecesaria. La lista de activos puede estar desactualizada. Una cuarentena demasiado extensa puede resultar inutilizable cuando llega el incidente.

La coordinación no exige que Microsoft gobierne cada red ni que el operador modifique SQL Server. Exige que cada parte revele el estado que la siguiente necesita para decidir, y que la autoridad de ejecución permanezca donde se asume el daño y el coste de reversión.

Límites de la evidencia

Las fuentes sostienen que la corrección precedió al brote, que el gusano cabía en un datagrama, que se observaron al menos 74.856 direcciones y que la fase crítica duró minutos. No sostienen que toda instalación estuviera expuesta, que el límite inferior fuera el total mundial ni que toda interrupción atribuida en prensa compartiera el mismo mecanismo.

Tampoco sostienen suplantación de origen, reflexión, robo de datos o una carga destructiva adicional. La conclusión útil es más precisa: un parche publicado no quita autoridad al binario viejo. Si la propagación ocurre antes que el permiso humano, las potestades automáticas deben decidirse y limitarse antes, y la adopción debe probarse con versiones, sockets, flujos y ejercicios. Publicar abre la puerta; ejecutar el cambio la atraviesa.

Fuentes