Resumen

  • GitHub informó de un ataque de reflexión y amplificación mediante memcached que alcanzó 1,35 Tbps y 126,9 millones de paquetes por segundo, con indisponibilidad e intermitencia entre las 17:21 y las 17:30 UTC.
  • La respuesta separó la autoridad de rutas de AS36459, el traspaso BGP hacia Akamai y el filtrado que permitió devolver tráfico legítimo al servicio.

El 28 de febrero de 2018, GitHub sufrió un ataque distribuido de denegación de servicio basado en reflexión y amplificación mediante memcached. Según el informe de la propia compañía, el tráfico alcanzó un máximo de 1,35 terabits por segundo y 126,9 millones de paquetes por segundo. A las 17:21 UTC, la supervisión detectó una relación anómala entre tráfico entrante y saliente. A las 17:26, los operadores iniciaron el desvío: retiraron los anuncios de los prefijos de AS36459 de sus proveedores habituales de tránsito y pasaron a anunciarlos a través de enlaces con Akamai.

GitHub atribuyó la recuperación, a las 17:30, a la reconvergencia de BGP y al filtrado realizado en el perímetro de Akamai. [1]

La secuencia es importante porque separa controles que a menudo se confunden. La retirada de rutas no depuró los paquetes maliciosos. BGP modificó el lugar al que Internet entregaba el tráfico dirigido a GitHub; Akamai recibió ese tráfico, aplicó la mitigación y permitió que el tráfico aceptado continuara hacia el servicio. La capacidad, el control de rutas, el filtrado y la entrega de tráfico limpio fueron funciones distintas, aunque tuvieron que operar como una sola cadena de continuidad.

El mecanismo de ataque también tenía una cadena propia. Instancias de memcached expuestas a redes no confiables aceptaban solicitudes UDP. Una solicitud relativamente pequeña, enviada con la dirección de GitHub falsificada como origen, podía provocar una respuesta mucho mayor hacia GitHub. Cloudflare calculó para el protocolo un potencial de amplificación de aproximadamente 51.200 a uno; esa cifra describe el potencial analizado por Cloudflare, no una media medida por GitHub durante el incidente. [3]

No se trató de tráfico directo enviado desde una botnet a GitHub y no debe describirse como un ataque de Mirai. La reflexión ocultaba el origen efectivo de la solicitud tras servidores que respondían a la dirección falsificada de la víctima. Los operadores de esos servidores controlaban la exposición de memcached; los mantenedores del software controlaban valores predeterminados y documentación; las redes de acceso controlaban la validación de las direcciones de origen; GitHub controlaba la detección y sus anuncios de ruta; Akamai controlaba la capacidad y el filtrado dentro de su infraestructura de mitigación.

BCP 38 y BCP 84 son relevantes porque la reflexión depende de paquetes con direcciones de origen falsificadas. Esas prácticas pueden impedir que determinados clientes emitan tráfico con fuentes que no les pertenecen, pero no cierran servidores memcached expuestos, no sustituyen la capacidad de mitigación y no garantizan un despliegue universal. [9][10] CAIDA y MANRS permiten evaluar la persistencia del problema y convertir el antispoofing en una práctica operativa comprobable, sin que sus datos identifiquen por sí solos qué red intervino en este ataque concreto. [14][15]

La responsabilidad, por tanto, no puede concentrarse en una sola organización ni diluirse en la abstracción de que «Internet falló». Debe seguir la capacidad real de cada participante: qué podía observar, qué podía decidir, qué podía cambiar y qué evidencia podía conservar. GitHub publicó marcas temporales, tasas de tráfico, un número de sistema autónomo, la actuación sobre las rutas y señales de recuperación.

Ese registro no resuelve todas las incógnitas, pero permite evaluar el traspaso operativo sin inventar una identidad del atacante, una lista de reflectores, una política privada de rutas, términos contractuales, pérdidas de clientes ni una conclusión jurídica.

La lección duradera no es que toda inundación volumétrica pueda evitarse. Es que la continuidad puede demostrarse. Una operación responsable debería poder acreditar cuándo detectó el daño, quién tenía autoridad para mover las rutas, qué red recibió el tráfico, cómo se filtró, qué capacidad limpia quedó disponible, qué métricas confirmaron la recuperación y qué controles redujeron la posibilidad de repetición.

Nueve minutos que hicieron visible la autoridad operativa

El valor analítico del incidente empieza con su cronología. GitHub no se limitó a comunicar que había resistido un ataque de gran tamaño. Su informe describió una sucesión de observaciones y actuaciones. A las 17:21 UTC, la monitorización detectó una relación anormal entre el volumen que entraba y el que salía. La plataforma quedó indisponible durante aproximadamente cinco minutos y experimentó indisponibilidad intermitente durante varios minutos adicionales. A las 17:26 se inició la mitigación mediante el cambio de los anuncios de ruta.

A las 17:30, GitHub informó de la restauración del servicio tras la reconvergencia de BGP y el filtrado en el borde de Akamai. El parte registra además, a las 17:34, una retirada de anuncios en puntos de intercambio como actuación de seguimiento. [1]

Las horas no son un mero detalle narrativo. Permiten dividir la respuesta en intervalos que pueden medirse: tiempo hasta la detección, tiempo hasta la decisión, tiempo hasta la ejecución del cambio de rutas y tiempo hasta una recuperación observable. Cada intervalo pertenece a una superficie de control diferente. La detección depende de telemetría y umbrales. La decisión depende de autoridad operativa. La ejecución depende de configuraciones, sesiones y procedimientos. La recuperación depende de la propagación de las rutas, de la capacidad del proveedor de mitigación y del comportamiento de las aplicaciones.

El informe también atribuyó a GitHub la cifra máxima de 1,35 Tbps y 126,9 Mpps. [1] Ambas métricas deben conservarse porque representan tensiones distintas. La tasa en bits expresa cuánto ancho de banda puede ocupar el ataque. La tasa de paquetes expresa cuántas unidades deben recibir, clasificar, reenviar o descartar los equipos. Una red puede tener capacidad agregada suficiente en bits y sufrir presión en procesamiento de paquetes, colas o controles de estado. También puede saturarse un enlace con paquetes grandes antes de agotar la capacidad de procesamiento de un equipo.

Nada en el registro público permite concluir qué componente concreto alcanzó primero su límite ni que cada interfaz de GitHub recibiera simultáneamente los 1,35 Tbps. La ubicación de la medición importa. Una cifra puede corresponder a un punto de observación, a un agregado o a tráfico visto antes del filtrado. La publicación de las dos tasas mejora el registro, pero no autoriza a convertir el máximo agregado en una descripción universal de toda la infraestructura.

GitHub había ampliado capacidad de tránsito y mantenía interconexión en distintos puntos de intercambio. Aun así, consideró que el volumen superaba lo que una instalación debía absorber directamente y activó la ruta de mitigación. [1] Eso no significa que la capacidad directa careciera de valor. La capacidad local ofrece margen para el crecimiento normal, ataques menores y el intervalo necesario para desviar tráfico. Lo que demuestra el incidente es que comprar ancho de banda no elimina la necesidad de disponer de una frontera de decisión: un punto en el que seguir absorbiendo deja de ser razonable y debe trasladarse la recepción del tráfico.

El registro de GitHub indicó también que la confidencialidad y la integridad no estuvieron en riesgo. [1] El impacto documentado fue de disponibilidad. Esta distinción impide inflar el incidente hacia una supuesta pérdida de datos o compromiso del código sin evidencia. La interrupción seguía siendo grave: GitHub era una dependencia operativa para equipos de desarrollo y servicios vinculados. Pero la gravedad no exige atribuir daños que el informe no estableció.

Una oleada posterior de unos 400 Gbps no reprodujo la interrupción inicial. [1] Ese dato respalda que el estado de mitigación cambió el resultado durante el episodio. No demuestra inmunidad permanente. La composición del tráfico, las rutas, las capacidades y las defensas pueden variar. La afirmación responsable es más limitada: bajo las condiciones observadas, el segundo pico no causó el mismo efecto.

Cómo memcached convirtió una solicitud falsificada en tráfico dirigido a la víctima

Memcached es un sistema de caché distribuida en memoria diseñado para acelerar aplicaciones, no para funcionar como un servicio abierto de amplificación. El problema de 2018 apareció cuando despliegues con la interfaz UDP accesible desde Internet aceptaban solicitudes procedentes de redes no confiables. Como UDP no establece una sesión equivalente a una conexión antes de responder, el servidor podía enviar la respuesta a la dirección que aparecía en el campo de origen, aunque esa dirección hubiera sido falsificada. [3][6][7][8]

En el ataque de reflexión, la máquina que generaba la solicitud no enviaba directamente todo el volumen final a GitHub. Presentaba la dirección de GitHub como si fuera la dirección de origen. El servidor memcached recibía la solicitud y respondía a GitHub, que no había solicitado esos datos. El servidor expuesto actuaba así como reflector. Cuando la respuesta era mucho mayor que la solicitud, también actuaba como amplificador.

Cloudflare describió un potencial de amplificación cercano a 51.200 a uno para el comportamiento analizado. [3] La cifra no debe tratarse como una constante de memcached ni como el promedio observado por GitHub. El cociente efectivo depende de la solicitud, del contenido disponible en la caché, de la conducta del servidor y del método de medición. Su importancia es arquitectónica: la capacidad de salida del originador no tenía que igualar el volumen que alcanzaba a la víctima, porque los servidores reflectores aportaban la mayor parte del ancho de banda de respuesta.

La reflexión y el tráfico directo de una botnet son mecanismos diferentes. En un ataque directo, los nodos atacantes envían tráfico desde sus propias direcciones o desde direcciones asociadas a sus conexiones. En la reflexión, el objetivo recibe respuestas de servicios intermedios engañados por una fuente falsificada. Las defensas se solapan solo parcialmente. El filtrado de direcciones falsificadas puede frenar la solicitud inicial de reflexión, pero no necesariamente el tráfico directo de dispositivos comprometidos que utilizan direcciones válidas.

Tampoco hay base para describir este incidente como Mirai. El expediente congelado lo vincula a reflexión y amplificación mediante memcached, no a un torrente directo generado por esa familia de botnet. Confundir ambas categorías ocultaría precisamente el control que hace relevante el caso: la posibilidad de enviar paquetes con una dirección de origen que no pertenecía al emisor.

Dos condiciones operativas se combinaron. La primera era un servicio UDP accesible que producía respuestas considerablemente mayores. La segunda era una red capaz de transportar una solicitud con origen falsificado. Eliminar cualquiera de las dos condiciones reduce de forma drástica esa modalidad de reflexión. Restringir memcached evita que el servidor participe como reflector. Validar la dirección de origen evita que la solicitud llegue al reflector con la identidad de la víctima.

Los controles, sin embargo, no se sustituyen entre sí. Desactivar UDP o limitar el servicio a interfaces privadas protege el despliegue concreto, pero no impide que un cliente de la misma red falsifique paquetes destinados a otro protocolo vulnerable. El antispoofing reduce ese tráfico falsificado, pero no corrige un servidor memcached que continúa expuesto. La mitigación en el destino puede proteger a GitHub, pero no elimina la población de reflectores. Cada control actúa en un punto diferente de la cadena.

El proyecto memcached documentó que UDP quedó desactivado de manera predeterminada a partir de la versión 1.5.6 y advirtió contra la exposición del servicio a redes no confiables. [7][8] Un valor predeterminado más seguro reduce la probabilidad de que nuevas instalaciones adopten accidentalmente una postura peligrosa. No corrige a distancia versiones antiguas, reglas permisivas de cortafuegos ni configuraciones heredadas. Tampoco prueba que todos los operadores actualizaran sus sistemas. Es una reducción concreta del riesgo, no una declaración de que el ecosistema quedó saneado.

La guía de CISA sitúa memcached dentro de la familia de servicios UDP que pueden utilizarse para reflexión distribuida. [6] La categoría es útil para inventariar exposiciones, pero no reemplaza el análisis de cada protocolo. Una revisión responsable debe identificar qué servicio respondió, si la solicitud llevaba un origen falso, qué red permitió su salida, cómo llegó la respuesta a la víctima y en qué límite podía haberse detenido.

La validación de direcciones de origen: necesaria, limitada y distribuida

La reflexión depende de una falsedad en la cabecera del paquete. La solicitud afirma proceder de la víctima; el reflector acepta esa afirmación y envía allí la respuesta. La validación de direcciones IP de origen intenta bloquear la falsedad cerca del lugar donde el paquete entra en la red pública.

RFC 2827, conocido como BCP 38, describe el filtrado de ingreso para entornos en los que un proveedor conoce los prefijos que corresponden a un cliente. Si el cliente envía un paquete que declara como origen una dirección ajena a esos prefijos, el borde puede rechazarlo antes de que salga hacia Internet. [9] El control no necesita identificar al atacante final para comprobar una propiedad básica: si la dirección declarada es coherente con la conectividad asignada a ese cliente.

RFC 3704, asociado a BCP 84, adapta la discusión a redes multihomed y escenarios en los que los caminos legítimos de entrada y salida no siempre son simétricos. [10] Esa complejidad importa. Un filtro construido sobre supuestos demasiado rígidos puede descartar tráfico legítimo. Un filtro demasiado permisivo puede dejar abierta la falsificación. La implantación exige registros correctos de prefijos, actualización cuando cambian las asignaciones, manejo documentado de excepciones, observación de descartes y pruebas que no interrumpan topologías válidas.

Por eso «activar BCP 38» no es un conjuro. Es una disciplina operativa continua. Los filtros pierden precisión si los datos sobre clientes están desactualizados. Las excepciones pueden crecer sin revisión. Las adquisiciones, reasignaciones o cambios de tránsito pueden alterar lo que debe considerarse válido. El valor del control depende de que la política configurada corresponda al estado real de la red.

También tiene límites bien definidos. La validación de origen no desactiva la interfaz UDP de memcached. No impide un DDoS directo cuyos emisores utilicen direcciones auténticas. No aporta ancho de banda a la víctima, no clasifica por sí sola las respuestas maliciosas que ya están en tránsito y no garantiza que el desvío BGP hacia un proveedor funcione. Su función es más acotada: impedir que una red contribuya a ataques que requieren una dirección de origen falsificada.

CAIDA mantiene el proyecto Spoofer para medir si una conexión puede emitir paquetes con fuentes falsificadas. [14] Este tipo de medición transforma una política declarada en una condición que puede probarse. Una red puede afirmar que filtra; una prueba controlada puede comprobar si determinadas clases de falsificación siguen saliendo. Aun así, una medición agregada o actual no debe retrotraerse automáticamente al 28 de febrero de 2018 ni atribuir participación en el ataque a un sistema autónomo concreto.

MANRS presenta el antispoofing como una actuación esperable de los operadores y aporta orientación práctica. [15] Los compromisos colectivos ayudan a crear una norma profesional, pero la pertenencia a una iniciativa o la publicación de una política tampoco prueba el estado efectivo de cada interfaz. La evaluación debe combinar declaración, configuración, pruebas y fecha.

La investigación sobre incentivos de validación de origen subraya un problema persistente: el operador que despliega el filtro soporta costes locales, mientras que muchas de las personas protegidas están en otras redes. [18] El beneficio inmediato para el cliente que podría emitir tráfico falsificado puede resultar invisible. La víctima quizá nunca tenga una relación contractual con la red donde debería haberse aplicado el control. Esa separación entre coste local y beneficio distribuido debilita la señal económica.

La solución no consiste en acusar sin datos. Consiste en hacer comprobable el control. Un proveedor debería conservar qué prefijos estaban autorizados en cada borde, qué versión de la política estaba activa, qué excepciones existían, quién las aprobó, cuándo se probaron y qué revelaron los descartes. En un incidente concreto, esa evidencia permitiría determinar si el borde podía impedir la falsificación. Sin ella, solo puede hablarse de la clase de control, no de la conducta de una red identificada.

El informe público de GitHub no proporciona la lista completa de redes desde las que salieron solicitudes falsificadas ni el inventario de todos los servidores reflectores. [1] CAIDA y MANRS no completan ese vacío. Sus datos sirven para evaluar la persistencia general del riesgo y la calidad de las prácticas, no para fabricar una atribución individual.

El problema económico del antispoofing

La dificultad del antispoofing no es exclusivamente técnica. Su beneficio principal se materializa fuera del lugar donde se incurre en el coste. El proveedor debe mantener inventarios de prefijos, modificar filtros cuando cambia un cliente, investigar falsos positivos y prestar soporte a topologías complejas. La víctima de una futura reflexión puede encontrarse en otro país, no comprar ningún servicio al proveedor y no saber siquiera qué borde dejó salir la solicitud falsificada.

Ese desequilibrio crea una externalidad. Una red que no filtra puede seguir ofreciendo conectividad aparente a sus clientes sin sufrir de inmediato el volumen amplificado. Son los reflectores y, sobre todo, la víctima quienes reciben el efecto. El mercado no siempre recompensa al operador que evita ese daño remoto. Tampoco castiga con precisión a quien mantiene una política deficiente, porque la atribución de la solicitud inicial puede ser difícil.

Las normas profesionales, los programas de medición y los requisitos contractuales pueden corregir parte de la brecha. Un proveedor mayorista puede exigir validación a redes cliente. Una organización puede incorporar pruebas de spoofing en auditorías. Un servicio de alojamiento puede vincular sus contactos de abuso con inventarios técnicos actuales. Un comprador de tránsito puede preguntar por controles de origen antes de contratar, no después de un incidente.

La transparencia debe ser proporcionada. Publicar una cifra global de despliegue ayuda a seguir tendencias, pero no demuestra la situación de cada puerto. Publicar una política corporativa mejora la expectativa, pero no prueba su ejecución. Un registro útil necesita fecha, alcance y resultado. La rendición de cuentas aparece cuando la afirmación «filtramos fuentes falsas» puede relacionarse con una configuración y una prueba.

También importa la economía de los contactos de abuso. Un operador puede detectar una instancia expuesta o una dirección que participa como reflector y, aun así, no disponer de un canal actualizado para llegar a la persona capaz de corregirla. Los registros desactualizados, las respuestas automáticas sin seguimiento y la fragmentación entre proveedor, revendedor y cliente alargan la vida de la exposición. Mejorar el contacto no sustituye al filtrado, pero reduce el tiempo entre observación y corrección.

El incidente de GitHub ilustra el coste de esa fragmentación. La víctima podía mitigar en su extremo; no podía reconfigurar servidores ajenos ni imponer filtros en redes de origen. El mantenimiento de memcached podía cambiar valores predeterminados; no podía actualizar todas las instalaciones. Akamai podía depurar el tráfico recibido; no podía eliminar la condición de spoofing donde se generaban las solicitudes. La prevención efectiva requería decisiones en organizaciones que no compartían una única autoridad.

Capacidad, encaminamiento y filtrado no son el mismo control

La explicación más peligrosa del incidente sería resumirlo así: GitHub retiró rutas y el ataque quedó filtrado. Esa frase atribuiría a BGP una función que no desempeña. BGP distribuye información de alcanzabilidad entre sistemas autónomos. Permite que las redes expresen por qué camino deben entregarse paquetes destinados a ciertos prefijos. No examina cada paquete para decidir si pertenece a un ataque de memcached.

Cuando GitHub retiró los anuncios habituales y anunció sus prefijos exclusivamente mediante enlaces con Akamai, modificó el destino operativo del tráfico entrante. [1] Las redes externas recalcularon sus rutas según los anuncios y sus propias políticas. A medida que la nueva información se propagaba, una parte creciente del tráfico dirigido a GitHub llegaba al perímetro de mitigación.

El filtrado ocurrió allí, no dentro de la retirada de ruta. Akamai debía disponer de capacidad para aceptar la inundación, identificar o limitar el tráfico no deseado y permitir la continuidad del tráfico legítimo. GitHub describió la recuperación como resultado combinado de la reconvergencia de BGP y el filtrado en el borde de Akamai. [1] La conjunción es esencial: la ruta llevó el tráfico al lugar correcto; el sistema de mitigación actuó sobre los paquetes.

La capacidad constituye un tercer plano. GitHub podía disponer de tránsito y peering suficientes para condiciones ordinarias y para episodios menores, pero decidir que un pico de aquella magnitud no debía absorberse directamente en una instalación. [1] El proveedor de mitigación necesitaba capacidad de entrada, capacidad de procesamiento y una forma de devolver tráfico aceptado. Si cualquiera de esas dimensiones era insuficiente, un cambio de ruta correcto podía terminar en otro cuello de botella.

Conviene imaginar la respuesta como cuatro preguntas consecutivas:

  1. ¿Se ha detectado una condición que justifica el desvío?
  2. ¿Quién está autorizado a cambiar la alcanzabilidad de los prefijos?
  3. ¿Puede la red receptora absorber y depurar el tráfico?
  4. ¿Puede el servicio demostrar que las solicitudes legítimas vuelven a completarse?

Una respuesta afirmativa a una pregunta no resuelve las demás. La detección sin autoridad deja al operador observando el deterioro. La autoridad sin una política probada puede provocar pérdida de alcanzabilidad. La ruta correcta sin capacidad de mitigación traslada la congestión. El filtrado sin una entrega limpia mantiene a los usuarios fuera del servicio.

La tasa de bits y la tasa de paquetes vuelven a importar en este punto. Un proveedor puede anunciar gran capacidad en terabits y encontrar un límite en la cantidad de paquetes que sus sistemas pueden clasificar. Otro puede procesar muchos paquetes y saturar enlaces por volumen. La preparación debe medir ambos recursos y situar cada cifra en el punto donde se observa.

El concepto de capacidad agregada también puede inducir a error. Una red global puede disponer de un volumen total muy superior al ataque y, sin embargo, recibir una concentración dañina en un enlace, región o instalación. Del mismo modo, un servicio de depuración puede tener capacidad global suficiente, pero depender de que el prefijo llegue a los puntos adecuados y de que la ruta de retorno limpio no se convierta en el límite.

La resiliencia, por tanto, no equivale a poseer la cifra de capacidad más grande. Consiste en saber dónde están los límites, detectar cuándo se aproximan, trasladar el tráfico antes de una pérdida prolongada y preservar una vía útil para los usuarios legítimos.

El traspaso BGP trasladó alcanzabilidad y dependencia

GitHub identificó AS36459 en su informe. [1] Un número de sistema autónomo representa un dominio de encaminamiento capaz de originar prefijos y establecer relaciones con otras redes. Cuando el operador cambia los vecinos a través de los cuales anuncia esos prefijos, modifica la forma en que el resto de Internet decide alcanzarlos.

Ese cambio no es instantáneo ni centralizado. GitHub podía retirar o anunciar rutas ante sus vecinos, pero no ordenar a todos los routers de Internet que actualizasen simultáneamente. Cada red receptora procesaba el cambio, aplicaba su política y propagaba su mejor ruta. Durante la reconvergencia, distintos usuarios podían observar caminos diferentes: algunos seguirían intentando la ruta anterior mientras otros ya llegaban al proveedor de mitigación.

La recuperación en minutos muestra que el traspaso funcionó con suficiente rapidez durante este episodio. [1] No revela las longitudes exactas de los prefijos anunciados, las políticas internas, las comunidades BGP, la arquitectura de retorno ni las condiciones comerciales. Esos elementos siguen siendo desconocidos y no deben reconstruirse por conjetura.

Sí pueden identificarse los tipos de fallo que cualquier diseño de esta clase debe contemplar. Un prefijo omitido puede dejar parte del servicio inaccesible. Una sesión no probada puede impedir el anuncio. Una lista de prefijos desactualizada puede provocar el rechazo del proveedor. Una propagación parcial puede crear resultados regionales distintos. Una ruta de retorno insuficiente puede entregar tráfico limpio con capacidad demasiado baja. Una dependencia de aplicación fuera de los prefijos desviados puede continuar caída aunque la dirección principal vuelva a ser alcanzable.

Estos son riesgos de diseño generales, no afirmaciones sobre la arquitectura privada de GitHub y Akamai. Su utilidad consiste en definir qué debería probarse antes de la emergencia. El operador debe conocer qué prefijos se moverán, qué enlaces aceptarán el anuncio, qué evidencias externas confirmarán el cambio y cómo regresará el tráfico permitido. El proveedor debe validar que puede recibir la alcanzabilidad y sostener el volumen esperado. Ambas partes deben ensayar también fallos parciales, no solo el caso ideal.

El traspaso introduce dependencia de manera explícita. Antes del desvío, la continuidad se apoyaba principalmente en la capacidad directa, los proveedores de tránsito y los puntos de intercambio de GitHub. Tras el cambio, la red, los filtros, la conectividad y los sistemas de control de Akamai pasaron a formar parte del camino efectivo del servicio.

Esa dependencia no es necesariamente una debilidad. Puede ser una decisión responsable si está prevista, probada y observada. Se vuelve frágil si la organización no sabe cuánto tarda la activación, no puede confirmar qué rutas son visibles, desconoce la capacidad del retorno limpio o carece de una forma segura de volver al estado normal.

La actuación de las 17:34 refuerza esta lectura. La retirada posterior de anuncios en intercambios debe entenderse como parte del control de por dónde seguía entrando el tráfico, no como una segunda técnica de filtrado. [1] La finalidad operacional era concentrar la recepción en la vía de mitigación y evitar que rutas directas residuales mantuvieran una trayectoria alternativa para la inundación.

La recuperación debe medirse por tráfico legítimo entregado

Un sistema de mitigación puede descartar enormes cantidades de tráfico y, aun así, fracasar para el usuario. La función relevante tiene dos resultados: rechazar el tráfico no deseado y entregar el tráfico legítimo. El primero suele producir cifras espectaculares. El segundo determina si el servicio está realmente disponible.

Los filtros pueden basarse en características de protocolo, validez de paquetes, tasas, reputación o contexto de aplicación. Cada enfoque puede generar falsos positivos. Una regla muy amplia puede proteger al origen y bloquear usuarios reales. Una regla demasiado estrecha puede dejar pasar parte del ataque. El expediente público no revela qué técnicas concretas utilizó Akamai ni permite calcular una tasa de falsos positivos.

GitHub sí afirmó que el filtrado en el borde de Akamai, junto con la reconvergencia de BGP, restauró el servicio. [1] Esa afirmación permite atribuir un resultado general al traspaso, pero no concluir que cada solicitud legítima se completó sin error en todas las regiones. La indisponibilidad intermitente posterior al primer periodo muestra por qué la recuperación debe definirse mediante varias señales y no por un único indicador verde.

Una comprobación sólida debería reunir visibilidad de rutas, carga de las interfaces de origen, tasas de éxito de aplicaciones, latencia, errores y pruebas desde distintas redes. Las rutas pueden mostrar que el tráfico llega al proveedor de mitigación, pero no que la aplicación responde. La telemetría del proveedor puede mostrar paquetes descartados, pero no que la ruta limpia tenga capacidad suficiente. Una prueba desde un único lugar puede funcionar mientras otras regiones continúan siguiendo rutas antiguas.

También debe observarse el origen. Si el tráfico aceptado vuelve por un enlace limitado, ese enlace puede sustituir al ataque como cuello de botella. Si queda una ruta directa sin protección, el adversario puede intentar eludir la depuración. Si el camino de ida y vuelta interactúa mal con controles que mantienen estado, pueden caer sesiones legítimas. El registro no demuestra que estos problemas ocurrieran en GitHub; son condiciones que una declaración de recuperación debería descartar mediante evidencia.

El segundo pico de unos 400 Gbps aporta una señal útil porque no reprodujo la interrupción inicial. [1] Indica que el estado operativo posterior toleró una nueva carga considerable en aquellas condiciones. No demuestra que la defensa pudiera absorber cualquier volumen o vector. La recuperación es una observación fechada, no una garantía ilimitada.

Por ello, la declaración «servicio restaurado» debería estar asociada a criterios explícitos: anuncios visibles por la vía prevista, interfaces de origen dentro de márgenes seguros, transacciones de aplicación completadas, errores cercanos a la línea base y estabilidad durante un intervalo suficiente para detectar una segunda oleada.

La responsabilidad debe seguir al control práctico

El ataque atravesó varias organizaciones, pero ninguna controlaba toda la cadena. La asignación útil de responsabilidad empieza por separar capacidades concretas.

Actor Control práctico Evidencia que debería conservar Límite del control
GitHub Monitorización del borde, capacidad directa, peering, tránsito, decisión de desvío y anuncios de AS36459 Alarmas, marcas temporales, autorización, cambios de ruta, visibilidad externa y métricas de recuperación No podía reconfigurar reflectores ajenos ni imponer antispoofing en otras redes
Akamai Recepción de rutas, capacidad de mitigación, filtrado y entrega de tráfico limpio Aceptación de anuncios, volumen recibido, resultado del filtrado, capacidad limpia y señales de entrega No controlaba la exposición original de memcached ni el origen falsificado
Mantenedores de memcached Valores predeterminados, advertencias y configuración admitida Cambios de versión, documentación y avisos de seguridad No podían actualizar o aislar todas las instalaciones desplegadas
Operadores de instancias y alojamiento Interfaces de escucha, UDP, cortafuegos, actualización e inventario de exposición Configuración, escaneos, avisos y fecha de corrección No controlaban la política de origen de las redes desde las que llegaban solicitudes
Redes de acceso y tránsito de origen Validación de direcciones de origen y gestión de prefijos de clientes Filtros, asignaciones, excepciones, pruebas y registros de descartes No cerraban reflectores ni proporcionaban mitigación a GitHub
Organismos de medición y coordinación Pruebas, normas operativas y contactos de abuso Metodología, fecha, alcance y seguimiento No podían atribuir por sí solos este ataque a una red o persona concreta

GitHub controlaba la parte de la historia más visible para sus usuarios: detectar que el tráfico superaba el estado esperado, decidir que la capacidad directa no debía seguir recibiéndolo y mover la alcanzabilidad. Su informe demuestra partes importantes de esa cadena. No publica los umbrales privados, el contenido exacto de la autorización mediante ChatOps ni todos los detalles de la política de rutas.

Akamai controlaba la frontera a la que se trasladó el tráfico. La recuperación comunicada respalda que la vía funcionó durante el incidente. No revela los filtros internos, el diseño de retorno ni las condiciones del contrato. El análisis puede reconocer el resultado sin convertirlo en una descripción ficticia de la implementación.

Los mantenedores de memcached controlaban una palanca distinta: hacer menos probable la exposición peligrosa por defecto y documentar el riesgo. La desactivación predeterminada de UDP desde la versión 1.5.6 fue una intervención concreta. [7] No convierte al proyecto en responsable de cada servidor antiguo, pero muestra que los valores predeterminados del software forman parte de la seguridad de red.

Los administradores de servidores controlaban dónde escuchaba el servicio y qué redes podían alcanzarlo. Una caché destinada a aplicaciones locales normalmente no necesitaba responder a hosts arbitrarios de Internet. Restringir interfaces, filtrar el puerto correspondiente o desactivar UDP podía retirar una instancia de la población de reflectores. [7][8]

Los proveedores de alojamiento podían ayudar a identificar exposiciones, notificar a clientes y ofrecer contactos de abuso eficaces. Eso no implica que debieran bloquear indiscriminadamente todo UDP. Significa que necesitaban saber qué servicios de alto riesgo estaban expuestos, cómo contactar con el responsable y bajo qué condiciones podían actuar durante un abuso activo.

Las redes de acceso controlaban la coherencia de las fuentes declaradas por sus clientes. Su responsabilidad no era la misma que la del operador del reflector. Una red podía bloquear correctamente la falsificación y alojar, al mismo tiempo, un memcached mal configurado; el servidor seguiría siendo vulnerable, pero las solicitudes falsificadas no saldrían de ese borde. Otra red podía permitir spoofing sin alojar ningún reflector. El ataque conectó debilidades situadas en lugares diferentes.

La persona o grupo atacante controlaba la selección del objetivo y la generación de solicitudes. El registro público no identifica a esa parte. No debe inferirse una identidad a partir del mecanismo, de casos posteriores sobre botnets ni de la localización de servidores que respondieron.

Esta distribución evita dos errores. El primero consiste en responsabilizar a la víctima de la configuración de sistemas ajenos. El segundo consiste en afirmar que, como nadie controlaba Internet entero, nadie puede rendir cuentas. Cada participante podía actuar sobre una frontera determinada. La evaluación debe preguntar si esa frontera estaba inventariada, probada y documentada.

Automatizar el desvío sin ocultar quién ejerce la autoridad

GitHub señaló después del incidente que estudiaría reducir la dependencia de la intervención humana al activar proveedores de mitigación. [1] El objetivo es comprensible. Cinco minutos de deliberación y ejecución pueden representar una cantidad significativa de solicitudes fallidas. Una respuesta previamente autorizada puede reducir ese intervalo.

La velocidad, sin embargo, no convierte una decisión en segura. Un falso positivo puede desviar tráfico legítimo sin necesidad. Una política incompleta puede mover solo parte de los prefijos. Un estado incorrecto del proveedor puede enviar tráfico hacia una capacidad no disponible. Un fallo del sistema de control puede producir pérdida de alcanzabilidad en lugar de mitigación.

La automatización responsable necesita autoridad acotada. Solo debería poder actuar sobre prefijos aprobados y hacia enlaces previamente verificados. La señal de activación debería reunir más de una observación cuando sea posible: volumen, tasa de paquetes, protocolo, impacto de aplicación y estado de la vía de mitigación. El sistema debe registrar por qué actuó y qué cambio solicitó.

También necesita observabilidad externa. Que un router local acepte una configuración no demuestra que el resto de Internet vea la ruta prevista. Monitores independientes deben confirmar la propagación. Las sondas de aplicación deben comprobar que los usuarios llegan al servicio. La telemetría debe diferenciar ataque recibido, tráfico descartado y tráfico limpio entregado.

El retorno al estado normal merece la misma disciplina. Retirar la mitigación demasiado pronto puede dejar al servicio expuesto a otra oleada. Mantenerla de forma indefinida puede añadir coste, latencia o dependencia. La política debería exigir un intervalo de estabilidad, una retirada por etapas y una forma rápida de volver a activar el desvío si reaparece el daño.

La automatización no elimina la responsabilidad humana; la desplaza hacia el diseño de la política. Alguien debe aprobar los umbrales, definir los prefijos autorizados, aceptar los riesgos de falsos positivos y revisar los resultados. El sistema debe permitir una detención operativa y conservar un registro suficientemente preciso para reconstruir la decisión.

El enfoque más sólido separa detección, recomendación y actuación. La detección reúne señales. Una política evalúa si el incidente encaja en una condición conocida. La actuación puede ser automática dentro de límites estrechos y requerir confirmación para situaciones ambiguas. Esta separación permite ganar velocidad sin conceder a una sola alarma autoridad ilimitada sobre la alcanzabilidad pública.

La divulgación del incidente también es un control de red

El informe de GitHub es valioso porque publica hechos operativos: horas UTC, tasa de bits, tasa de paquetes, AS36459, cambio de rutas, proveedor de mitigación y recuperación. [1] Esos datos permiten a otros operadores comparar su preparación con una secuencia real.

La transparencia no exige publicar toda la topología ni reglas que puedan ayudar a un adversario. Los detalles de filtros, credenciales, contratos, arquitectura interna y comunicaciones de emergencia pueden necesitar protección. La rendición de cuentas requiere una capa distinta: suficiente información para demostrar qué se observó, qué autoridad actuó, qué cambió y cómo se comprobó la recuperación.

Una frase como «mitigamos un ataque sofisticado» no ofrece ese registro. No indica cuándo comenzó el impacto, cuánto tardó la detección, qué control se activó ni qué señal justificó declarar la recuperación. Una descripción acotada puede comunicar el vector, el volumen medido, el intervalo afectado, el cambio principal y las medidas posteriores sin revelar detalles explotables.

También debe separar observación de inferencia. GitHub midió tráfico y describió su actuación. Cloudflare analizó el potencial de amplificación de memcached. CISA clasificó el protocolo dentro de los vectores de reflexión. CAIDA mide la posibilidad de emitir fuentes falsificadas. Ninguna de esas fuentes, por separado o combinada, proporciona una lista completa de reflectores y redes de origen del ataque contra GitHub.

Esta separación protege la precisión técnica y jurídica. Un servidor que responde a una solicitud falsificada puede estar mal configurado, desactualizado o administrado sin conocimiento del riesgo; el paquete no demuestra intención. Una dirección observada puede pertenecer a un cliente detrás de un proveedor o haber cambiado de responsable. Una red en una trayectoria puede estar transportando tráfico sin ser el punto donde se generó la falsificación.

La divulgación precisa favorece la corrección. Los operadores pueden revisar exposición al puerto de memcached, probar antispoofing, ensayar traspasos de rutas y mejorar contactos de abuso. La exageración tiene el efecto contrario: provoca disputas sobre atribuciones débiles y aparta la atención de los controles verificables.

El registro mínimo para futuros incidentes volumétricos

Un incidente futuro de esta clase debería producir un expediente operativo mientras se responde, no reconstruirse únicamente después. El registro mínimo puede organizarse en diez bloques.

1. Cronología reconciliada

La línea temporal debe reunir detección, impacto de usuario, decisión, cambio de rutas, primera recuperación, estabilización y vuelta a la normalidad. Las horas deben utilizar una referencia común. Si distintas herramientas difieren, el informe debe conservar la discrepancia en vez de elegir retrospectivamente la cifra más favorable.

2. Métricas con ubicación y significado

Las tasas en bits y paquetes deben indicar dónde se observaron, si son agregadas, si corresponden a tráfico previo o posterior al filtrado y durante cuánto tiempo se mantuvo el pico. Una cifra sin punto de medición resulta difícil de interpretar.

3. Clasificación del vector

El expediente debe diferenciar reflexión, amplificación y tráfico directo. Debe registrar protocolo y señales suficientes para justificar la clasificación sin publicar instrucciones de abuso. Si la conclusión cambia durante el incidente, debe conservarse el momento en que cambió.

4. Autoridad de actuación

Debe constar quién o qué política podía ordenar el desvío, qué prefijos estaban dentro del alcance, qué condiciones se exigían y qué mecanismo de anulación existía. No es necesario publicar nombres individuales; sí demostrar que la autoridad estaba definida.

5. Estado de encaminamiento

Los registros deben mostrar anuncios, retiradas, vecinos utilizados y observación desde puntos externos. El objetivo no es revelar toda la política, sino acreditar que la alcanzabilidad se trasladó como estaba previsto y que no quedaron segmentos involuntariamente fuera.

6. Capacidad y resultado de mitigación

El proveedor y el cliente deben reconciliar volumen recibido, paquetes descartados y tráfico permitido. Las cifras deben distinguir capacidad nominal de capacidad utilizada y señalar cualquier región o servicio que siguiera degradado.

7. Entrega limpia y recuperación de aplicaciones

La restauración debe apoyarse en transacciones reales, latencia, errores y pruebas desde redes diversas. Una ruta visible no basta. Un origen con interfaces descongestionadas tampoco basta si los usuarios siguen sin completar operaciones.

8. Evidencia sobre exposición y origen falsificado

Cuando sea posible, los operadores deben conservar indicadores de reflectores, avisos enviados y estado de corrección. Las redes que reciben consultas deben poder mostrar la política de validación vigente y sus pruebas. Esta evidencia debe manejarse con cuidado para no transformar una observación técnica en una acusación de intención.

9. Cambios posteriores

El informe debe indicar qué control cambió: valor predeterminado, inventario, filtro, capacidad, umbral, automatización, prueba o contacto de abuso. «Mejoraremos la supervisión» no es una corrección verificable si no se acompaña de una señal, un responsable y una prueba.

10. Incógnitas y límites

El expediente debe enumerar qué no se conoce: identidad del atacante, lista completa de reflectores, redes de origen, arquitectura privada, términos contractuales o pérdidas económicas. Declarar un límite evita que las inferencias se solidifiquen como hechos.

Este registro no garantiza que la siguiente inundación sea inocua. Permite demostrar que los actores con control aprendieron del incidente y que la continuidad no depende de una explicación vaga.

Lo que las fuentes públicas no permiten afirmar

Las fuentes no identifican al atacante ni su motivación. El mecanismo de reflexión no proporciona esa identidad. Tampoco permite vincular automáticamente el incidente a Mirai, a una organización concreta o a procesos judiciales posteriores.

No existe en el expediente una lista completa de servidores reflectores, sus propietarios o los sistemas autónomos que los alojaban. Tampoco se sabe desde qué redes salieron todas las solicitudes falsificadas. Las mediciones generales de spoofing no pueden convertirse en una atribución retrospectiva sin datos coincidentes del incidente.

Las fuentes no revelan la política privada de rutas de GitHub ni el contrato con Akamai. No publican umbrales comerciales, garantías de capacidad, reglas de filtrado, diseño de retorno o salvaguardas exactas de automatización. El análisis puede describir las funciones necesarias, pero no dibujar una arquitectura propietaria como si estuviera documentada.

El máximo de 1,35 Tbps no demuestra que todos los enlaces procesaran ese volumen. Los 126,9 Mpps no identifican qué recurso alcanzó un límite. Ambas cifras son datos importantes atribuidos a GitHub, no una radiografía completa de cada componente. [1]

El registro tampoco cuantifica pérdidas económicas por cliente, daños contractuales ni responsabilidad jurídica. La indisponibilidad de una plataforma crítica puede producir consecuencias significativas, pero asignar cantidades o negligencia sin evidencia sería especulativo.

La modificación posterior del valor predeterminado de memcached no prueba que todos los servidores quedaran corregidos ni que la configuración anterior constituyera por sí sola una infracción. [7] Sirve para evaluar una mejora de control: hacer menos probable una exposición peligrosa en instalaciones posteriores.

BCP 38 y BCP 84 tampoco prueban que una red identificada careciera de filtrado en esa fecha. [9][10] Definen prácticas acotadas y ayudan a formular la evidencia que debería pedirse. No sustituyen el registro específico del borde desde el que salió un paquete.

Por último, la ausencia de una interrupción equivalente durante el pico posterior de 400 Gbps no demuestra protección definitiva. [1] Solo establece que, en el estado observado entonces, ese tráfico no reprodujo el resultado inicial.

Estos límites no debilitan la tesis. La hacen verificable. Mantienen el análisis centrado en la detección, la autoridad de ruta, el traspaso, la exposición del protocolo, la validación de origen, la entrega limpia y la conservación de evidencia.

El estándar adecuado es continuidad demostrable, no defensa perfecta

Ninguna red puede prometer que absorberá sin impacto cualquier ataque concebible. Los adversarios pueden combinar vectores, cambiar tamaños de paquete, atacar dependencias o pasar del volumen al agotamiento de aplicación. Exigir una defensa perfecta crearía un estándar imposible y favorecería declaraciones imprecisas.

Un estándar útil es la continuidad demostrable bajo condiciones definidas. El operador debe conocer sus límites directos, el tiempo de activación de la mitigación, los supuestos de convergencia, la capacidad de retorno limpio y las aplicaciones que determinan si el servicio está realmente disponible. Debe probar el traspaso antes de una emergencia y registrar las excepciones.

La misma exigencia corresponde al ecosistema de origen. Las redes de acceso deben poder probar si sus clientes emiten fuentes falsificadas. Los proveedores de alojamiento deben inventariar exposiciones de alto riesgo. Los proyectos de software deben escoger valores predeterminados seguros y documentar con claridad las consecuencias de la exposición. Los contactos de abuso deben conducir a una persona o proceso capaz de corregir.

Este estándar reconoce compensaciones reales. Un filtro de origen mal mantenido puede bloquear tráfico legítimo. Una regla DDoS demasiado amplia puede excluir usuarios. Un desvío puede añadir latencia o dependencia. Desactivar un protocolo puede afectar aplicaciones heredadas. La operación responsable no niega esos costes: los identifica, limita y prueba.

Aquí se distingue responsabilidad de culpa. La culpa busca un único nombre después del daño. La responsabilidad pregunta quién controlaba una decisión, qué evidencia tenía, qué límite enfrentaba, cómo observó el resultado y qué cambió después. Varias organizaciones pueden responder por controles diferentes sin tener la misma relación causal o jurídica con el ataque.

Conclusión

El ataque de memcached contra GitHub en 2018 no fue solo un récord de volumen. Fue una prueba en vivo de cómo se mueve la autoridad de red bajo presión. GitHub detectó una anomalía, cambió la alcanzabilidad de los prefijos de AS36459, trasladó la recepción hacia Akamai y atribuyó la recuperación a la reconvergencia de BGP y al filtrado. [1]

La otra mitad de la historia estaba distribuida por Internet. Servidores memcached expuestos generaron respuestas amplificadas. Direcciones de origen falsificadas dirigieron esas respuestas a la víctima. Redes transportaron el tráfico. GitHub y Akamai tuvieron que mantener alcanzabilidad útil mientras separaban la inundación de las solicitudes legítimas.

Ningún control explica por sí solo el resultado. Más tránsito no cierra reflectores. BGP no clasifica paquetes. El antispoofing no configura servidores ni entrega tráfico limpio. Un valor predeterminado seguro no actualiza todas las instalaciones heredadas. Un proveedor de mitigación no puede actuar si el cliente carece de un traspaso probado.

La medida correcta es, por tanto, una cadena de evidencia. El objetivo debe demostrar detección, autoridad de ruta, recepción por la vía de mitigación y recuperación de aplicaciones. El proveedor debe demostrar capacidad, filtrado y entrega limpia. Los operadores de servidores deben demostrar control de exposición. Las redes de acceso deben demostrar validación de origen. Los mantenedores deben demostrar valores predeterminados y orientación seguros.

GitHub hizo visible una parte considerable de esa cadena sin pretender resolver todas las incógnitas. Esa es la lección que permanece: la resiliencia de Internet resulta creíble cuando quienes ejercen control práctico pueden demostrar cómo se midió el tráfico, cómo se trasladó la autoridad, cómo se protegió a los usuarios legítimos y cómo se redujeron las condiciones que hicieron posible el ataque.

Fuentes

  1. https://github.blog/news-insights/company-news/ddos-incident-report/
  2. https://github.blog/news-insights/the-library/denial-of-service-attacks/
  3. https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/
  4. https://blog.cloudflare.com/the-root-cause-of-large-ddos-ip-spoofing/
  5. https://blog.cloudflare.com/the-rise-of-multivector-amplifications/
  6. https://www.cisa.gov/ncas/alerts/ta14-017a
  7. https://docs.memcached.org/advisories/ddos/
  8. https://github.com/memcached/memcached/wiki/ConfiguringServer
  9. https://datatracker.ietf.org/doc/rfc2827/
  10. https://datatracker.ietf.org/doc/rfc3704/
  11. https://datatracker.ietf.org/doc/rfc4948/
  12. https://www.akamai.com/site/en/documents/brochure/memcached-reflection-attacks-launch-a-new-era-for-ddos-brochure.pdf
  13. https://www.akamai.com/site/en/documents/state-of-the-internet/soti-summer-2018-attack-spotlight.pdf
  14. https://www.caida.org/projects/spoofer/
  15. https://docs.manrs.org/docs/network-guide/anti-spoofing/
  16. https://www.cloudflare.com/learning/ddos/memcached-ddos-attack/
  17. https://www.cloudflare.com/learning/ddos/famous-ddos-attacks/
  18. https://www.ietf.org/archive/id/draft-qin-savnet-incentive-00.html