LUN, 15 / AGO / 2011

Clase sorpresa en la Escuela de Hacking: Atacando a Facebook

La amenaza de ataque a Facebook merece una nueva clase en la Escuela de Hacking de RedUSERS a cargo de Fabián Portantier.

¡Hola queridísimos lectores! En esta oportunidad vamos a hablar de un tema bastante candente, que es la seguridad de Facebook. Imagino que es un tema que interesa mucho porque prácticamente todo el mundo tiene una cuenta en ese sitio, ¿verdad? Además de eso, la cuestión es que es un sitio interesante porque, al tener esa cantidad de usuarios, cuenta con una gran infraestructura que le da soporte.

Por último, el sitio ha sido muy criticado por sus políticas de privacidad y almacenamiento de datos, pero aquí no estamos para hablar de eso, si no de algunas cuestiones más técnicas.

Estadísticas

Abajo voy a listar algunos datos estadísticos de Facebook, obtenidos en el año 2010, y que saqué del siguiente artículo: http://www.solinux.es/2010/infraestructura-de-facebook. Es un artículo muy bueno, pero es de 2010, así que es probable que las cifras de cantidades de equipos y tráfico sean un poco más grandes ahora, pero la idea es la misma.

Servidores (total): 60.000
Servidores Bases de Datos (cluster): 2.200
Fotos subidas por mes: 3.000.000
Peticiones a las Bases de Datos: 250.000 por segundo (aproximadamente)
Servidores web: 15.000 (Apache Web Server)
Servidores memcached: 1.000
Base de Datos No Relacional: Apache Cassandra (http://cassandra.apache.org)
Framework PHP: Apache Hadoop (http://hadoop.apache.org)
Datos Almacenados: 50 Petabytes (aproximadamente)

Expuestos estos datos, podemos observar que estamos hablando de una infraestructura verdaderamente grande, y que seguramente existen algunos otros detalles que no conocemos.

Ahora sí, vamos a analizar cuáles podrían llegar a ser los vectores de ataque que se podrían explotar en Facebook.

Denegación de Servicio

La denegación de servicio (DoS) tiene como propósito interrumpir la disponibilidad de servicio, sin que sea necesario robar o destruir datos. Simplemente el objetivo es que los usuarios legítimos no puedan acceder al servicio.

Esto suele lograrse agotando todos los recursos del servidor, ya sea el ancho de banda, el almacenamiento o la capacidad de procesamiento.

Últimamente, se han vuelto muy populares los ataques de denegación de servicio coordinados y distribuídos (DDoS) que se realizan desde varios cientos o miles de dispositivos al mismo tiempo. Pero, aún así, no podríamos agotar los recursos anteriormente presentados.

Como podemos ver en los datos anteriores, es prácticamente imposible que logremos agotar los recursos de una infraestructura taaan grande, así que solamente nos queda la posibilidad de detener el servicio encontrando un fallo en alguna parte de todo el software que se ejecuta, ya sea a nivel aplicación (PHP, C++, etc), a nivel servidor Web (Apache Httpd), Base de Datos (Cassandra) o Sistema Operativo (Supongo que algún Linux u otro Unix).

Además, si nos ponemos a observar los resultados de varias herramientas de reconocimiento (nmap, nikto, telnet, etc), vamos a poder notar que el personal técnico de Facebook ha tenido bastante cuidado en proteger su infraestructura y en no mostrar fácilmente qué software utilizan y en qué versión.

SQL Injection

Al parecer, Facebook no utiliza bases de datos relacionales, así que habría que investigar la posibilidad de algo así como un SQL Injection, pero para la bases de datos Apache Cassandra.

Robo de Información

El objetivo detrás de la mayoría de los ataques realizados a este tipo de sitios, es el de obtener información confidencial, como usuarios y contraseñas, números de tarjeta de crédito, etc, etc.

Así que debemos tener en cuenta que este tipo de ataques suele darse más a través de la aplicación misma (por ejemplo, utilizando la API de Facebook) que a través de un ataque al servidor de correo, DNS o Web.

DNS

Sus servidores DNS son 5, que podrían contar con más servidores detrás de balanceadores de carga o clusters.

Su software está actualizado y, por lo que se puede observar, seguramente son servidores dedicados exclusivamente a servir los dominios de Facebook.

Algunos utilizan BIND (http://www.isc.org/software/bind) y otros, al parecer, NSD (http://nlnetlabs.nl/projects/nsd/).

También podemos ver que la configuración, a simple vista, parece correcta. A diferencia de muchos servidores DNS, cumple con todos los requerimientos de los estándares y otras recomendaciones.

Podemos comprobar esto en:
http://www.intodns.com/facebook.com

(www.intodns.com es un excelente sitio para comprobar la configuración de los servidores DNS de un dominio)

Correo

Con respecto al servidor de correo, no se muestra fácilmente su versión, y han tenido el cuidado de utilizar las listas negras de spamhaus (www.spamhaus.org) para filtrar las conexiones entrantes.

Ejemplo:
========================================================================
fabian@debian:~$ telnet smtpin.mx.facebook.com 25
Trying 69.171.244.17…
Connected to smtpin.mx.facebook.com.
Escape character is ‘^]’.
554 5.7.1 POL-P1 http://www.spamhaus.org/query/bl?ip=186.58.49.215
Connection closed by foreign host.
========================================================================

Además, pudiendo haber hecho consultas más específicas al servidor, observamos que se obliga a respetar estrictamente los estándares de correo electrónico para poder enviar un correo a través de ese servidor.

Código HTML / JavaScript

Analizando el código fuente de la página principal (una vez adentro de la aplicación) podemos observar que más del 90% del código que aparece es JavaScript, casi no existe el HTML. Lo cual es algo bastante particular, pero que se encuentra fundamentado principalmente por la gran cantidad de AJAX con la que cuenta Facebook.

Aplicación Principal

Más allá de las técnicas de reconocimiento tradicionales, debemos considerar que Facebook es más una aplicación que un sitio web. Esto quiere decir que, en caso de existir vulnerabilidades, es más probable que las encontremos más en la aplicación misma que en la infraestructura que la soporta.

Para acceder a la interfaz de programación (API) de Facebook, debemos ingresar al siguiente sitio:
http://developers.facebook.com

En este sitio, dedicado a los desarrolladores de aplicaciones para Facebook, podemos encontrar varias herramientas, entre las cuales se encuentran los SDK (Software Development Kit) para PHP y para JavaScript, que podrían ser de mucha utilidad para cualquier persona que desee comprender verdaderamente cómo funciona Facebook.

Otros vectores de ataque

Debemos observar que, en estos casos en los que la infraestructura es muy grande y bien construída, debemos considerar vectores de ataque alternativos. Por ejemplo, un ataque a los servidores DNS de los proveedores de servicio de internet (ISP) ya sea locales o internacionales, podría dejar “offline” el servicio, sin necesidad de tener éxito en un ataque al propio Facebook. Después de todo, a las personas lo único que les interesa es si pueden acceder o no, sin importarles la causa del problema.

Por otro lado, es el modelo que más se viene utilizando, por ejemplo, al realizar ataques de Phishing, intentando engañar a los usuarios para que le provean al atacante con sus datos de acceso a las cuentas.

Atacar o No-Atacar, esa es la cuestión

Para cerrar este artículo, me gustaría hacer una opinión personal acerca del tema.

Con respecto a atacar Facebook, no nos engañemos, si alguna persona busca hacerlo, independientemente de si tiene éxito o no, los motivos no van a ser otros que ganar dinero, popularidad o una mezcla de ambos.

Si queremos aprender, lo único que tenemos que hacer es leer la documentación oficial y empezar a programar nuestra propias aplicaciones de integración con Facebook.

Recuerden que, Hackear es sinónimo de “aprender y crear”, cosa que es exactamente lo opuesto de “atacar y destruir”.

Por último, si no nos gusta Facebook, lo mejor que podemos hacer en medida de protesta es no utilizarlo. Después de todo, vale millones de dólares porque tiene millones de usuarios que lo utilizan. Qué pasaría si todo el mundo cerrara su cuenta? Recuerden, querer utilizar el servicio o no, está en cada uno de nosotros. Tomemos nuestra decisión y demos la libertad a las otras personas de tomar la suya.

Aprovecho estas líneas para invitarlos a mi newsletter mensual, en el cual podrán encontrar más información acerca de noticias, herramientas y novedades acerca de la seguridad informática: www.portantier.com/educacion/newsletter

¡Hasta la próxima!

Fabian Portantier
www.portantier.com
twitter.com/#!/portantier

¡Comparte esta noticia!