domingo, mayo 20, 2012

Suplantación de identidad en Facebook

Hace medio año aproximadamente, se encontró una vulnerabilidad en la gran red social por la que se puede suplantar la identidad de un usuario del sistema fácilmente. Es decir, hacerse pasar como si fueras otra persona haciendo un spoofing. El motivo por el cual escribo este articulo es porque me di cuenta que a día de hoy la gran mayoría de usuarios no está enterada de esto.

Según Inteco (Instituto Nacional de Tecnologías de la Comunicación), este defecto "se deriva del propio protocolo de correo electrónico de Internet, que es el que utilizan Facebook y otros proveedores de servicio similares, y que no permite por defecto asegurar al receptor quien es el auténtico emisor del correo".

Este problema existe en todos los servicios de correo electrónico como en Hotmail, Gmail, Yahoo!, para lo que se han implementado soluciones como DKIM, SPF, o la firma digital PGP o S/MIME. Quizás en Facebook es más gravé aún porque el mensaje llegaría como una notificación más con el nombre e imagen de "x" persona, lo cual si no sabe del tema, generaría grandes consecuencias.

El sistema de suplantación es muy fácil de realizar, lo único que se necesita es:
Dirección de correo electrónico de la persona que se va a suplantar.
Dirección de correo electrónico de Facebook de la persona a quién se engaña.
Un sistema para enviar correos SMTP.
Suplantación de identidad en Facebook paso a paso

Generalmente para obtener el e-mail de una persona en Facebook es suficiente con ir a su perfil, luego a información y buscar donde dice Información de Contacto. Ahí estará su dirección de correo, siempre y cuando no la haya ocultado. Si es el caso, el email se puede obtener a través de la simple deducción, usando servicios que el mismo Facebook nos brinda.

Figura 1: Usuario de Facebook

Para obtener el email de Facebook de una persona, basta con saber su nombre de usuario. Facebook asigna como dirección de correo con el mismo nombre de usuario, por lo que si el nombre de usuario es "username" su dirección de correo de facebook sera username@facebook.com. Eso siempre y cuando el usuario tenga habilitado el correo de Facebook.

Figura 2: Identificación de contacto en Facebook

Para saber si tiene habilitado el correo de Facebook o no, podemos googlear y buscar algún sitio que chequee si una dirección de correo es válida o no. Un sitio efectivo es Verify Email.

Una vez que se obtienen los datos, se debe hacer uso de algún sistema pare enviar correos spoofeados. Esto puede hacerse con una simple conexión telnet al servicio SMTP de algún servidor MX de Facebook, con un sistema de enviar a un amigo inseguro o con un formulario PHP creado para tal uso.

Figura 3: Servidor MX de Facebook.com

En este caso se ha hecho un formulario con la estética de Facebook, para que sea más bonito. En el campo del receptor va el e-mail de Facebook y en el campo del emisor va la dirección de correo de la persona que va a ser suplantada, en este caso el propio Mark Zuckerberg. Finalmente se envían los datos.

Figura 4: Formulario para enviar correos SMTP vía PHP

Este correo electrónico se envía al correo asociado a Facebook y aparece dentro de la conversación que el usuario que lo recibe mantenía con el contacto que supuestamente se lo envía. Luego de unos segundos, me llega un mensaje privado a mi cuenta... Y si, del CEO de Facebook:  Mark Zuckerberg me necesita en su equipo de seguridad informática...

Figura 5: Correo recibido de Mark Zuckerberg.. spoofeado

Pero por el momento no le voy a dar bolilla porque Bil Gates me contactó primero para Microsoft hace ya bastante tiempo, asi que sigo con lo mio :).

Figura 6: Alerta de seguridad en el mensaje recibido

Si tienen buena vista, habrán visto en la imagen anterior, a la derecha del mensaje un pequeño triángulo de color amarillo - signo de alerta -. Si ponemos el puntero del ratón encima del símbolo, saldrá un cartel con lo siguiente:

Figura 7: Identidad no verificada

Como verán, Facebook alerta que no puede confirmar si el mensaje fue enviado por esa persona. Ustedes pensaran que entonces no es grave ya que nos avisara.. pero lamentablemente, sólo da la alerta cuando la dirección de e-mail de la persona que nos envía el mensaje proviene de algún servicio de e-mail con tecnologías SPF, Sender ID o DKIM y no se ha podido verificar la dirección IP del servidor emisor.

Sin embargo, lo peor de todo es que la alerta solo aparece en las conexiones vía aplicación web, y no en las aplicaciones Facebook para iOS o Android, algo que deberían arreglar, además del almacenamiento inseguro de la sesión que permite hacer hijacking en Facebook.

Las consecuencias que trae este bug pueden ser graves si se hacen contra usuarios que no esté prevenidos de este problema del correo electrónico usado en Facebook, y por supuesto ya ha habido mucho malware y spam que ha hecho uso de esta característica en la red social, adjuntado binarios o distribuyendo enlaces a sitios maliciosos. Todo depende de la imaginación que le aplique cada uno.

La suplantación en el chat

Otra de las cosas que sucede es que que si la persona a la que se le envía el mensaje está chateando con la persona a la que se suplanta, el mensaje le llegará al chat sin ninguna advertencia, ya que el chat realmente está creado sobre el sistema de mensajes de Facebook. Una curiosidad perfecta para los ataques dirigidos.

Lo recomendable para evitar que los malos utilicen tu identidad sería ocultar tu dirección de correo del perfil de Facebook y no pasársela a extraños, aunque se rumorea que, en un movimiento de marketing, Facebook podrá la dirección @facebook obligatoria a todos los usuarios. Así que, lo mejor es tener precaución y vigilar esa pequeña alerta en la recepción del correo, utilizar cuentas lo más seguras posibles para registrarse en Facebook y verificar la información recibida antes de tomarla en serio.

Ariel Ignacio
ariel.ignacio.la.cono at facebook.com (ya saben cómo suplantarme)

28 comentarios:

Aitor dijo...

Nos podrias decir el contenido del archivo PHP? Lo quiero probar a hacer pero via telnet lo veo mas dificultoso.

Daniel dijo...

que mala onda chema, yo ya lo habia descubirto y me sirvio para hacerme de varias contraseñas con ingieneria social!, siempre me pregunte si me pudieron haber dado algo de dinero por ese descuido

Newlog dijo...

Muy curiosa la entrada.

Aun así, lo he intentado y al conectar la primera vez a los servidores SMTP de facebook, me ha dejado conectar. A la siguiente, ya tenía mi ip en una lista de spam.

Me parece que en el primer intento no he seguido al 100% el RFC para enviar correos.

Error al conectar:
554 5.7.1 POL-P1 http://www.spamhaus.org/query/bl?ip

Buena entrada!

wh00ps dijo...

Excelente entrada!

wh00ps dijo...
Este comentario ha sido eliminado por el autor.
Mark dijo...

Muy buena entrada, estaré mas prevenido!

Anónimo dijo...

Hola, yo he estado probando de varios modos, con un programita en C++ que encontré por ahí, y con otro en python, pero también me devuelve de vez en cuando mail failed; (554, '5.7.1 POL-P1 http://www.spamhaus.org/query/bl?xx.xxx.xxx.xx

Si pruebo directamente mediante telnet a veces me deja conectarme y consigo hacer el proceso, pero no me envia el mensaje, aquí dejo lo que hago:

telnet smtpin.mx.facebook.com 25
Trying 69.171.244.15...
Connected to smtpin.mx.facebook.com.
Escape character is '^]'.
220 smtpin.mx.facebook.com ESMTP
HELO xxxxx@xxxxx.com
250 smtpin.mx.facebook.com says HELO to xx.xx.x.xxx:xxxx
MAIL FROM: xxxxx@xxxxx.com
250 MAIL FROM accepted
VRFY xxxxx@xxxxx.com
252 VRFY restricted
RCPT TO: xxxxxx@facebook.com
250 RCPT TO accepted
DATA
354 continue. finished with "\r\n.\r\n"
Subject: testmail
Hello, how r u \r\n.\r\n
.
550 5.6.0 Invalid header found (see RFC2822 section 3.6)
.\r\n
500 5.5.2 unrecognized command
QUIT
221 smtpin.mx.facebook.com closing connection
Connection closed by foreign host.

Alguna sugerencia?, me gustaría probarlo por simple curiosidad, estoy intentando mandarmelo a mi mismo como se hace en el post, pero no hay manera

Un saludo y buena entrada :-)

Alejandro Alcalde dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

He conseguido algo más, sigo sin lograr enviar el mensaje, ahora me dice esto:

450 4.3.2 INT-T14 http://postmaster.facebook.com/response_codes?ip=xx.xxx.xxx.xx#int Server busy, try again later
Connection closed by foreign host.

Anónimo dijo...

http://el-internauta-de-leon.blogspot.com.es/2011/11/descubierta-grave-vulnerabilidad-en.html

Diego dijo...

Hey Anónimo, tu problema es que no estás poniendo en DATA los campos "From" y "Date", que son necesarios según el estándar.

Unknown dijo...

Anónimo, lo que te faltó después del DATA es SUBJECT.

De esta forma:

DATA
354 continue. finished with "\r\n.\r\n"
SUBJECT: Hola

asdfasdfasd
.

Anónimo dijo...

Serías tan amable de publicar la cuenta de Mark Zuckerberg que utilizaste?

Ariel Ignacio dijo...

Contactenme por MP en facebook para la cuenta de Mark o de otra "x" persona.

Anónimo dijo...

Ariel no es posible contactarte por Facebook sin agregarte como amigo. Lo he intentado y no me quedó más remedio que ese.

Saludos.

Ariel Ignacio dijo...

Pasame tu Profile ID o Username y trato yo de contactarte.

Anónimo dijo...

Facebook ID: quetevalgamx

Eurocopa 2012 dijo...

más de lo mismo! alrededor de la debilidad de autenticación SMTP.. no es cosa de Facebook si no del mail!

Iane dijo...

Cuando pongo el
MAIL FROM:

Me devuelve:
250 SPF validation failure

Y después al terminar de escribir el mensaje con el DATA añade:
550 5.6.0 Invalid header found (see FRC2822 section 3.6)

¿Eso es que han añadido autentificación SPF y ya no hay forma de "engañarle"?

Iane dijo...

En mi comentario anterior se ha borrado (no me he dado cuenta de los símbolos y el html), pero obviamente en el "MAIL FROM:" pongo una dirección válida (y comprobada, que es la mía) de facebook.

Kevin Ojeda dijo...

Muy buena Entrada :)

Kevin Ojeda dijo...

Muy buena Entrada.

Anónimo dijo...

Al dia de hoy es fecha que no e podido siquiera conectar al servidor..

Ariel Ignacio dijo...

Intenta con varios de los servidores, si seguis sin poder contactame por facebook y te envio el link al formulario PHP.

maximo abregu dijo...

http://www.abcwebcam.net/keyword-webcam-axis.html&start=80

Anónimo dijo...

http://www.abcwebcam.net/keyword-webcam-axis.html&start=80

algo curioso ver camaras de otros citios miralo y ya me diras lo que sea un saludo bye
maxmaximo007@gmail.com

Eric Ferrando dijo...

Alguien me podría pasar el formulario para probar? :)

Anónimo dijo...

Sigue funcionando al dia de hoy? No lo han arreglado?

Eleven Paths Blog

Seguridad Apple

Entradas populares