viernes, agosto 21, 2015

Facebook y la privacidad por defecto (2): El Teléfono

En esta segunda parte - tras dedicarle una entrada a las opciones de privacidad por defecto en Facebook relativas al correo electrónico -, voy a explicar como cualquier usuario con un poco de tiempo y dedicación podría extraer de Facebook los números de teléfono de otras cuentas. ¿Con que fin?, Eso dependerá de la imaginación de cada uno, pero al final el poder localizar el número de teléfono de cualquier cuenta es una información valiosa que puede ser útil en múltiples circunstancias. Hacer esto puede parecer sencillo, ya que en Facebook se pueden hacer búsquedas por números de teléfono, directamente desde la cuenta, pero como veremos, gracias a la existencia de Facebook Messenger, la exposición de los números de teléfono es mayor de la que los usuarios piensan.

Figura 1: Facebook y las opciones de privacidad por defecto (2): El número de teléfono

Para localizar la cuenta asociada a un número de teléfono - si el usuario ha dejado que lo encuentren los amigos, los amigos de los amigos o toda la red - basta con poner el número de teléfono en el buscador y Facebook devolverá información de la cuenta. Lo curioso es que cuando investigaba todo esto, Facebook estaba a punto de lanzar su conocida app Facebook Messenger. Una app para dispositivos móviles de obligada instalación para todos aquellos que quieran poder chatear a través de la red social desde sus dispositivos móviles. Este servicio también permite realizar llamadas de voz sobre VoIP y, personalmente, creo que fue en este momento donde se tomaron algunas decisiones críticas con respecto a la privacidad por defecto de los números de teléfono.

Figura 2: ¿Quién puede buscarme por número de teléfono en Facebook?

Con la instalación de app Facebook Messeger en tu dispositivo estas pareando tu cuenta de usuario de Facebook con tu número de teléfono, de igual forma que si hubieras configurado tu número de teléfono en tu cuenta para usarlo como segundo factor de autenticación o simplemente como información. La diferencia radica en que, si tienes instalada Facebook Messeger puedes ser buscado a través de tu número de teléfono, sin importar la relación establecida en la red social. Es decir, la búsqueda puede ser realizada por cualquier usuario, sin importar si es tu amigo en la red, amigo de tus amigos o no. Dicho esto, supongo que habrá varios casos límites en que el comportamiento puede ser distinto, por ejemplo en los caso en los que hayas instalado la app y luego que la hayas borrado, etcétera...

Entiendo, y es una interpretación personal, que una vez que Facebook Messenger ha reclutado tu número de teléfono este queda almacenado y asociado a tu cuenta de usuario de Facebook. A partir de aquí, cualquiera podría buscarte a través de tu número de teléfono.

Análisis de Facebook para sacar perfiles de usuarios buscando por teléfono

La primera idea que surgió era muy clara, y consistía en realizar por fuerza bruta un barrido de números de teléfono para saber a quién pertenecen y poder crear de esta forma una agenda de cuentas de Facebook con su correspondiente número de teléfono. Como veremos más adelante, obtener el número de teléfono de una persona abre todavía más el abanico de posibles ataques en otros servicios, además de facilitar las cosas a la hora de recoger información sobre el usuario. Con un número de teléfono podemos obtener mucha información. Incluso conocer si utiliza un dispositivo con iOS o Android, para saber si está actualizado o no,  o podríamos conocer si el titular del número de teléfono, ha pedido un crédito bancario con algún que otro truco, por dejar algunas ideas.

La idea está clara, el objetivo es conocer a partir de un rango de números de teléfono los perfiles de los usuarios a los que pertenecen. Realizando un par de búsquedas en Facebook se puede obtener fácilmente la URL de la consulta que se hace cuando se solicita la búsqueda de un número de teléfono, y que será la que habrá que automatizar para poder sacar toda la información:
https://www.facebook.com/search/results/?q=600000000
Ahora tenemos que encontrar un sistema que lance esta consulta reiteradamente con parámetros de búsqueda autoincrementados para lograr recorrer todo el abanico - y por supuesto - ver si es posible saltar algunas de las medidas de protección que pueda tener Facebook para evitar las búsquedas masivas.

Tras probar diferentes iniciativas pensando en hacer un script con netcat, hacer un programa en Java que incluyera una webview para automatizar las búsquedas, utilizar las APIs oficiales de Facebook, o incluso hacer un programa server-side en PHP con curl para hacer búsquedas en los resultados, como me recomendó mi amigo Carlos García. En todas las pruebas me topé con la necesidad del mantenimiento de la sesión con las cookies, así que al final armé algo bastante peculiar, pero que funciona razonablemente bien.

La solución consistió en utilizar a Firefox como mediador del ataque para gestionar las sesiones, lanzar la consulta por cada número de teléfono y descargar la página de resultados. Barajé varias opciones, como Selenium o incluso desarrollar una extensión para Firefox a medida y al final la solución que más me gustó fue utilizar la extensión Down Them All.

Figura 3: Extensión Down Them All para Firefox

Esta herramienta es un administrador y acelerador de descargas que se integra en Firefox. Entre las opciones que permite esta extensión se contempla la opción de la descarga por lotes. Es decir, imagínate que quieres descargar un fichero que está divido en diferentes partes, estas partes van desde Fichero_01.rar hasta Fichero_99.rar. La aplicación nos permite descargar todas estas partes sin tener que añadirlas una a una al gestor. Veamos cómo se hace. Abrimos Down Them All. Pulsamos sobre el botón circular azul que tiene un símbolo más en su interior. En descarga debemos de introducir la consulta de búsqueda, que como ya conocemos es:
https://www.facebook.com/search/results/?q=
Para poder descargar ficheros por lotes tenemos que utilizar el siguiente descriptor:
[600000000:699999999]
Concatenamos ambas cadenas y obtenemos:
https://www.facebook.com/search/results/?q=[600000000:699999999]
Esto lo que hará es ir generando las diferentes URLs que le hemos indicado, es decir:
https://www.facebook.com/search/results/?q=600000000
https://www.facebook.com/search/results/?q=600000001
https://www.facebook.com/search/results/?q=600000002
...
https://www.facebook.com/search/results/?q=699999999
Y descargando en formato HTML una a una todas las respuestas obtenidas en el directorio de salida que le indiquemos con el nombre que hemos elegido. Pulsando en el icono de la etiqueta podéis acceder a las diferentes opciones para elegir nombres a los ficheros. He de decir que la primera vez que probé la extensión no me funciono correctamente, me sobrescribía los ficheros descargados, tuve que inspeccionar las opciones de configuración y cambiarlas. Nada complicado. Al revisar los ficheros HTML puede verificar que todo había funciona correctamente.

Figura 4: Descarga de ficheros con Down Them All. 178 Mb de datos en 630 ficheros HTML

Acotando el rango de teléfonos de España para el ataque

Con respecto al rango de número de teléfono se nos abren muchas posibilidades, no tenemos por qué centrarnos solo en territorio nacional, también es válido para otros países. En este caso me voy a limitar solo a España. De principio, todos podíamos pensar que los números de teléfono de líneas móviles van desde el 600.000.000 hasta el 699.999.999 pero resulta que no, que se ha abierto un nuevo rango, desde el 71 hasta el 74. Este nuevo rango no lo voy a tener en cuenta para este ejemplo, pero habría que tenerlo muy presente en una prueba real, aunque a día de hoy, al ser tan reciente va a estar menos poblado en números de teléfonos operativos.

Con un par de búsquedas en Google y un poco de precisión es fácil encontrar los registros de numeración definidos por la CNMC (Comision Nacional de los Mercados y la Competencia). Daos una vuelta por los diferentes apartados no tiene desperdicio. A través de esta web podemos descargar un fichero ZIP con archivos de texto que nos dan información muy valiosa. En ellos está contenido el estado de los recursos públicos de numeración telefónica a 31/07/15 con el que podremos realizar búsquedas acotadas en  rangos de los números de teléfono determinados..

Si abrimos el fichero Rangos móviles.txt (os recomiendo miraros antes el fichero Leeme.txt) podemos realizar una búsqueda más concreta dentro de Facebook para localizar las cuentas Facebook de los usuarios españoles con cuenta en la red social. Para ello, vamos a empezar por descartar todos aquellos rangos de números que no están definidos y que por lo tanto no tendrán números operativos. Al descartar los números “Sin definir” acabamos de descartar un total de 8.300.000 números de teléfono, unos 83 rangos del tipo: RRR-YXX-XXX.

Una cosa importante a tener en cuenta es que los rangos de este fichero indican a la compañía a la que fueron asignados inicialmente. Después, a través de portabilidades, estos pueden haber cambiado de compañía en numerosas ocasiones, pero en un alto porcentaje seguirán siendo de esa operadora.

Creación de FacePhone

Para realizar esta extracción de forma masiva he desarrollado en Java NetBeans una pequeña aplicación a la que he llamado FacePhone. En uno de los apartados se permite consultar por un único número y al introducir el teléfono nos dice si se trata de un rango definido -o no- a partir del fichero moviles.txt, para que siempre haga una comprobación actualizada. Además, esta herramienta nos será de mucha utilidad cuando elijamos los rangos que queremos utilizar para realizar ataques de fuerza bruta, para realizar la extracción de los datos de los resultados y para poder exportar la información obtenida.

Figura 5: Comprobación con FacePhone del rango de un número de teléfono
Para utilizar esta herramienta debemos de posicionarnos en la pestaña “Rango Teléfono” y haber descargado el fichero moviles.txt mencionado anteriormente. Tan solo debemos de indicar donde se aloja el fichero moviles.txt y pulsar “Obtener información” para conocer la información al respecto. Creo que toda la herramienta es muy intuitiva.

La herramienta hace el trabajo duro de la recopilación de la información. Como sabéis Java es multiplataforma, por lo que podremos utilizar la herramienta tanto en sistemas Microsoft Windows como en GNU/LiNUX tan solo es necesario tener la máquina virtual de Java instalada.  Una vez que hemos descargado toda la información a base de fuerza bruta de los rangos de teléfono con Down Them All. Tan solo tenemos que configurar la herramienta FacePhone de la siguiente manera. 

Pestaña Configuración:

Figura 6: Pestaña de configuración de FacePhone
- En nombre del fichero: deberéis introducir la parte que se repite de todos los ficheros. Si los ficheros creado por Dowm Them All se llaman: fb_000, fb_001, fb_002,... fb_110, entonces el nombre del fichero será (la parte común): fb_ 
- Número de ceros debe de ser siempre 3: Por lo tanto es importante que al realizar las pruebas descarguéis por lo menos 110 ficheros, así el Down Them All generara ficheros con nombre raiz_000. Es decir, tenéis que poner en descarga de Down Them All. algo así:
https://www.facebook.com/search/results/?q=[666555000:666555110]
Ojo, Down Them All crea el primer fichero sin números. Hay que renombrarlo a mano, es decir, fb a fb_000 
- Mínimo: ponemos un 0. Indicando que el primer fichero a abrir sea el fb_000. 
- Máximo: ponemos el nombre del último fichero que se haya descargado, siguiendo con el ejemplo: fb_109 (de 0 a 109 van 110 números) 
- Ruta: Debemos de seleccionar mediante el botón "..." el directorio donde se han descargado los datos, los ficheros htm. Por último, en la pestaña Extraer Datos:
Pestaña Extraer Datos

El programa nos avisará cuando se hayan extraído todos los datos. Mientras tanto la barra de proceso nos irá indicando el porcentaje completado y los descriptores de la derecha nos irán indicando las estadísticas encontradas.

Figura 7: Una vez configurada la herramienta, FacePhone extrae los datos de los resultados

Una vez que el proceso haya finalizado, como ya se ha dicho, FacePhone nos avisara y podremos pulsar el botón Cargar Datos para poder visualizarlos en la tabla de resultados.

Figura 8: Datos extraídos de los ficheros de resultados de Down Them All

Si previamente hemos establecido una conexión con un MySQL mediante la pestaña de configuración podemos salvar los datos en una Base de Datos mediante el botón Salvar en BD.

Pestaña Información

Aquí se nos mostrará información más detallada sobre los ficheros descargados. Información muy útil para detectar números bloqueados y ficheros sin datos, también nos permite eliminar todos esos ficheros inútiles para quedarnos tan solo con los que contienen información de usuarios.

Figura 9: Pestaña información en FacePhone

Pestaña Importar BD

Desde aquí podemos obtener del servidor MySQL los datos almacenados que hemos extraído en una sesión anterior .

Figura 10: Carga de la base de datos generada con FacePhone

Al final obtendremos un listado con todos los datos que hemos ido reclutando. Ni que decir tiene que una vez que hemos guardado toda la información en la base de datos podríamos generar un script que creara un HTML con el aspecto de una agenda de teléfono donde apareciera el número de teléfono de los usuarios, su nombre y apellidos, la ciudad en la que vive y su correspondiente foto de perfil.

Conclusiones

Visto que salían muchos números de teléfono de muchas personas que probablemente no sabían que al instalar Facebook Messenger habían compartido su número con todo el mundo, decidí comunicárselo a Facebook antes de publicar el artículo. Ellos respondieron que conocían esta característica y que la consideraban correcta por:
- Hay medidas de protección para evitar el abuso
- Consideran la extracción masiva descartada
- El ataque de Fuerza Bruta no es de aplicación práctica real
- Toda la información es de carácter público
- El usuario siempre puede configurar que su teléfono no pueda encontrarse en las búsquedas.
Lo cierto es que, aunque es verdad que hacer un ataque de Fuerza Bruta para sacar una gran cantidad de números de teléfono en corto espacio de tiempo es difícil debido a las protecciones de baneo, captchas y demás que pone Facebook, sí que es posible sacar grandes rangos de datos con algo de tiempo. Utilizando un sistema de máquinas en la nube distribuidas haciendo lo mismo en paralelo o siendo un grupo de trabajo de varias personas, tal vez pueda salir una buena base de datos con utilidad para atacantes.

Además, en caso de querer hacer un ataque al personal una empresa, utilizando todos los números de teléfono de la empresa se pueden hacer batidas para sacar los perfiles de todos los empleados y, aunque hayan configurado la opción de no aparecer en las búsquedas - que no es la opción por defecto - siempre se podría complementar con el ataque publicado ayer por Chema Alonso intentando hacer login con el número de teléfono de un rango. En definitiva, si le diste a Facebook tu número de teléfono, es probable que cualquier te encuentre por él y lo pueda asociar a tu perfil y el resto de tus datos.

Saludos,

Autor: NeTTinG - Enrique Andrade
Estudiante de Ingeniería Informática (Fic - UDC)
Perito Informático Forense Judicial

13 comentarios:

  1. Y para descargar ese programa java y probar Su funciona?

    ResponderEliminar
  2. ¡Buen trabajo! mis aplausos

    ResponderEliminar
  3. recuerdo ya hace un tiempo esto se podia hacer con la herramienta FBHT de chinoogawa lo unica desventaja es q para hacerlo es necesario tener varias cuantas de FB para hacer el barrido en paralelo y tambien existen restricciones de la cantidad de numeros q se pueden iterar lo maximo q podia hacer eran iterar 500 numeros, si incrementabas la cantidad FB te banea durante 24h la cuenta con la q bruteas, tu aproximaacion es distinta, la verdad me gustaria probarla mas a fondo espero puedas compartirla...:)

    ResponderEliminar
  4. Vaya tela... ¡Gracias por la info, crack! ;)

    ResponderEliminar
  5. Escalofriante... sin duda. No hay otra palabra para definirlo.
    Al final va a ser verdad que los únicos no expuestos serán los que hayan rehusado las redes sociales...
    LX.

    ResponderEliminar
  6. No os volvais locos, "creo" (confirm pls!) que esta ultra-patched! Pero el vector era cool.

    ResponderEliminar
  7. Hola:

    Sobre la herramienta, en el blog he dejado una explicación ;)

    Efectivamente, las restricciones son muy parecidas a las comentadas más arriba.

    Esta "fisura" de seguridad todavía es explotable a día de hoy y según los mensajes que he intercambiado con Facebook tienen pinta de seguir siéndolo en una buena temporada... Las restricciones de seguridad siguen siendo las mismas que antes de reportar esta "característica" a Facebook.

    Un saludo.

    ResponderEliminar
  8. Muy buena investigación..me alegro de haber dado de baja mi cuenta de facebook.
    Gracias Chema!

    ResponderEliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  11. recientemente escribí esta entrada en mi blog acerca del uso que facebook está dando a los grafos de whatsapp tras su compra

    https://gritesenungrital.wordpress.com/2015/08/11/por-que-no-deberias-darme-tu-numero-de-telefono/

    ResponderEliminar
  12. Interesante vector, como se dice por ahi arriba. Dos detalles:

    - Simplemente confirmar que funciona, aunque el ratio es algo mas bajo de lo que parece.

    - curl y todas sus librerias! permiten segmentos de descarga:

    curl ftp://ftp.uk.debian.org/debian/pool/main/[a-z]/

    ResponderEliminar
  13. Por cierto, idea original de este vector en: https://salt.agency/blog/facebook-security-loophole/ que a veces nos olvidamos de estas cosillas.....

    ResponderEliminar