La original forma en que GitHub responde a un ataque DDoS

La original forma en que GitHub responde a un ataque DDoS
github_down

¡Buenas a todos! Hoy os traigo un artículo que explica brevemente en qué ha consistido el ataque de Denegación de Servicio (Distributed Denial of Service [DDoS]) que ha sufrido GitHub en los últimos días. Además, veréis que en GitHub le han echado ingenio y su forma de defenderse seguramente os parecerá muy original.

Por si acaso alguien no sabe qué es GitHub: se trata de una plataforma para el control de versiones, de uso gratuito, con la que es muy sencillo programar en equipo, compartir nuestro trabajo y contribuir al de otros. Este servicio permite darle vida a la filosofía del software libre: nosotros subimos nuestro código y otras personas pueden mejorarlo y adaptarlo a sus necesidades. Por poner un ejemplo más cercano: ahora mismo estoy creando una app Android para un concurso, trabajando con un compañero que vive a 5okm. Podríamos comentar nuestros progresos por algún servicio de mensajería instantánea, compartir nuestro código por correo... Claro que podríamos trabajar conjuntamente de otra forma, pero ¿por qué hacerlo si tenemos todo integrado en GitHub? Con solo un botón podemos actualizar el proyecto incluyendo los cambios que haya podido hacer nuestro compañero, y con otro somos capaces de actualizar el código en el servidor, con los cambios que hayamos incorporado. Así todo está conectado y solo tenemos que preocuparnos de programar, mucho más eficiente.

github_ok

Para empezar, es importante destacar que GitHub siempre se ha caracterizado por su estabilidad. Si echáis un vistazo a su página de status veréis que la mayoría del tiempo el servicio está activo sin ningún problema. A nadie se le ocurre que GitHub pueda estar caído, por poner un ejemplo sería como si fuéramos a buscar algo en Google y no pudiéramos porque ha sufrido un ataque. Los que utilizamos este servicio nos hemos quedado muy extrañados al ver que no podíamos "seguir programando" porque no obteníamos respuesta del servidor. La sensación era esa, como si no fuera posible continuar con nuestros proyectos, y esto es algo que también da para reflexionar. Dependemos de GitHub tanto como de la electricidad, prácticamente.

githubstatus

Quedará para la historia: GitHub caído por un ataque DDoS que según la hipótesis más compartida, vendría de China. Todavía no está muy claro, pero parece ser que se ha aprovechado Baidu (como el Google chino, la quinta web más visitada del mundo), y más concretamente su servicio de Tracking (como el Analytics de Google), para interceptar las peticiones que se realizaban y de esta forma utilizar a los usuarios para realizar el ataque a GitHub sin que ellos fueran conscientes. Si queréis información más técnica, podéis consultarla en este artículo de Insight-labs.

El código malicioso consistía en reemplazar el sistema de tracking de Baidu por un temporizador que cada 2 segundos enviaba peticiones a https://github.com/greatfire/ y https://github.com/cn-nytimes/. De esta forma, con millones de usuarios participando involuntariamente en el ataque, pero haciéndolo al fin y al cabo, GitHub estuvo temporalmente fuera de servicio.

La respuesta de GitHub al ataque fue muy ingeniosa y original. Reemplazaron el contenido de las dos páginas que estaban sufriendo el ataque por la instrucción JavaScript:

alert("WARNING: malicious javascript detected on this domain")

Hay que destacar que según estaba programado el código del ataque, se intentaba ejecutar el código de esas dos páginas como JavaScript, aunque en realidad es HTML. Un pequeño detalle que aprovechó GitHub para darle la vuelta a la tortilla, mostrando en el navegador de todas las personas que sin saberlo estaban contribuyendo al ataque, el mensaje de alerta:

github_cny

Quizás hubiera sido más efectivo añadir también un mensaje en chino. Pero lo que está claro es que la solución de GitHub es brillante, porque se consigue el objetivo de minimizar el efecto del ataque. Cabe destacar que la alerta se mostraba con la función window.alert() que además de mostrar la advertencia, sirve para bloquear el script hasta que el usuario no pulse el botón de Aceptar (retrasando de esta forma esos 2 segundos entre cada petición que caracterizaban al ataque original). Como sabéis, los navegadores de hoy permiten marcar la opción de detener el script (en este caso el malicioso), por lo que está claro que la solución que se le ocurrió a la gente de GitHub sirvió para minimizar el efecto del ataque. Imaginad que estáis navegando y os aparecen ventanas de diálogo cada 2 segundos, es algo muy molesto y seguramente marcaríais la casilla que detiene la ejecución del script que genera el ataque.

dialog

¿Os ha parecido tan brillante como a mí? ¿También habéis sufrido la caída de GitHub? Podéis dar vuestra opinión en los comentarios.