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)

30 comentarios:

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

    ResponderEliminar
  2. 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

    ResponderEliminar
  3. 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!

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

    ResponderEliminar
  5. Muy buena entrada, estaré mas prevenido!

    ResponderEliminar
  6. 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 :-)

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

    ResponderEliminar
  8. 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.

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

    ResponderEliminar
  10. 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.

    ResponderEliminar
  11. 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
    .

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

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

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

    Saludos.

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

    ResponderEliminar
  16. Facebook ID: quetevalgamx

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

    ResponderEliminar
  18. 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"?

    ResponderEliminar
  19. 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.

    ResponderEliminar
  20. Muy buena Entrada :)

    ResponderEliminar
  21. Muy buena Entrada.

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

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

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

    ResponderEliminar
  25. 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

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

    ResponderEliminar
  27. Sigue funcionando al dia de hoy? No lo han arreglado?

    ResponderEliminar
  28. ¿Alguien puede confirmar si hoy día pasa? me ha pasado que alguien dice haber recibido chats y mensajes en sus correo desde mi cuenta facebook y me han enseñado las conversaciones y están manipuladas, yo sólo conservo una parte y no son iguales, lo curioso es que la persona que me dijo esto me quito de amigos y ahora mi facebook ya no me da problemas de conexiones de chat ni cosas raras...va muy suelta, y que esa persona se quejo en cvarias ocasiones que su face estaba siendo manipulado por una tercera persona muy amiga de el y que el tenia en contactos el caso es que la perjudicada soy yo que no escribi ciertas cosas

    ResponderEliminar
  29. Me puedes ayudar yo sigo a Darren Criss y ahora me escribe por faceFace messagwm y hangout trate de verifucar su cuenta en face y me sale que es el

    ResponderEliminar