2013-02-06

Apps, identidad y tu celular

 O como conocer mejor a tus vecinos.

 
El viernes pasado, parte de la información en los servidores de Twitter fue hackeada. Por ello Twitter forzó el cambio de contraseña a 250,000 usuarios, entre ellos yo.
Pero me sorprendí cuando no me pidió cambiar la contraseña de la aplicación de celular. Varios tuiteros se encargaron de demostrar mi burricie, por lo cual me puse a estudiar un poquito de los mecanismos de autorización de Twitter.

Cuando estoy usando la PC normalmente uso twitter desde el navegador. Para que Twitter esté seguro de quien soy, cada vez que cierro una sesión (al cerrar del navegador o cerrar mi sesión de Twitter), se actualiza un archivo que contiene la galleta ("cookie") con la información que valida mi identidad, la vigencia de la sesión y el sitio (twitter.com) para la cual es válida la galleta. La siguiente vez que visito el sitio, Twitter se da cuenta de que la galleta ya no es válida y sigue una lógica estilo "Para twittear, primero demuéstrame que eres Gerardo poniendo tu usuario y su password". A este proceso se le llama "autorización".

Todos lo hemos hecho, cientos de veces. Miles de veces. En el correo, en sitios como twitter cuando entramos desde computadoras diferentes, y en docenas más, incluyendo bancos.
Cuando tu contraseña se compromete (esto es cuando "te hackean la cuenta" aunque en la jerga informática es "crackean la cuenta") normalmente hay un par de mecanismos típicos en los servicios como hotmail o yahoo; uno de ellos es el correo alterno al cual se te envía una verificación, otro muy común el de las preguntas personales como "¿Cual era el apellido de soltera de mi madre? ¿Cual era el nombre de mi escuela primaria?¿El nombre de mi mejor amigo de la infancia?" y preguntas similares.

Sin embargo, una vez que tienen la configuración de tu cuenta al poseer tu usuario y contraseña, todo eso puede ser cambiado si el cracker así lo desea. Cambiarán si lo desean las "preguntas secretas", tu dirección de correo alternativa a cualquiera que ellos crean, el correo a su propia cuenta, etcétera. 

El caso de los bancos y otros servicios es ligeramente diferente: al proceso de autorización se agrega un proceso de validación, por ejemplo con el "token" que genera ciertos números que son válidos durante cierto tiempo, o durante algún tiempo una tarjeta con renglones y columnas cada una con un valor, y que es diferente a cualquier otra tarjeta de cualquier otro cliente. Al proceso de "Demuéstrame que eres Gerardo con su usuario y password" se agrega un "Y demuéstramelo de nuevo enseñándome algo que solamente él tiene, como su token o tarjeta".

Hasta aquí muy bien. El resto es tarea de quien proporciona el servicio (por ejemplo mantener encriptados los usuarios y contraseñas en la base de datos, que ésta sea inaccesible, que las preguntas de verificación o el procesamiento del token se haga en otra computadora... todo el arte de la seguridad que requiere mucha especialización y mucho trabajo cerrando posibles agujeros a los crackers.

En cuanto a tu PC y su seguridad tú eres el responsable: seguramente tienes una sesión con contraseña para que nadie venga a usarla si tu permiso (o de la empresa), que tienes protector de pantalla con password que se activa al poco tiempo para evitar que alguien use tu meseenger, correo, Skype y demás ¿Cierto? ¿Noooo? Bueno, te estás arriesgando incluso a una broma inocente, como que tu vecino del escritorio de al lado te inscriba en 10 listas de pornografía, insulte a tu suegra en tu nombre en Facebook y pretenda ligarse a la hija de tu vecino, sí, ése que es luchador profesional y pesa como 140 kilos, con frases estilo "mamita, que sabrosa estás". Si te lo hacen, es probable que no te quites el spam por el resto de la eternindad y que conozcas a tu vecino de forma cercana y quizá íntima.Para cuando pongas protector de pantalla y contraseña, será tarde.

Si eres el único usuario del equipo no hay tanto riesgo. Si hay otros usuarios potenciales y no confías 100% en ellos, estás en riesgo.

Además usas un antivirus actualizado ¿Verdad? Y un navegador más seguro que por sí solo deshabilita los plugins inseguros (Como Firefox o Chrome), o de plano un sistema operativo más seguro como Linux o Mac OSX ¿Verdad? ¿No?

Bueno. Cuidado.


Pero no era mi intención readvertir a nadie sobre los conocidísimos problemas de seguridad de Windows, su navegador y una buena cantidad de aplicaciones. Sino de un esquema de seguridad un poco diferente que se llama oAuth y que sirve para múltiples aplicaciones en múltiples dispositivos de forma más cómoda y en general más o meno segura. Básicamente se trata de las "apps" en android (y que alguien de iCosas hable de ellas, no las uso).

El sistema de oAuth permite que una o más "apps" (programas, aplicaciones) usen una sola vez tu usuario y contraseña para validar acciones posteriores de la app.

Aplicaciones típicas como "Twitpic" (donde almacenas fotografías para mostrarlas en twitter), el millón y medio de aplicaciones de Facebook y muchas otras que te piden esos usuarios y contraseñas. El sistema de oAuth (como dice Wikipedia en español): "permite a un usuario del sitio A compartir su información en el sitio A (proveedor de servicio) con el sitio B (llamado consumidor) sin compartir toda su identidad".

El proceso platicado de una manera simple es el siguiente usando Facebook como sistema A (proveedor del servicio) y la mágica aplicacion para Android llamada "PatitoCliente":

PatitoCliente: "Hola Facebook ¿Me recuerdas? Soy PatitoCliente."
Facebook: "Demuéstramelo"
PatitoCliente: "Mira, aquí está el token que me diste cuando me fabricaron ¿Ves?" (Y le entrega un token que es un texto único que identifica a PatitoCliente.)
Facebook:  "Ok ¿Que se te ofrece?"
PatitoCliente: "Ahhhmmm. Quiero registrar a Gerardo como usuario de mi servicio, usando el usuario y password que le habías dado"
Facebook: "Bien, mándalo a mi página de ingreso, o mándame sus datos"

PatitoCliente manda a Gerardo a la página de ingreso de Facebook. Y como conoce bien a PatitoCliente y lo que  le pide, le dice a Gerardo: "PatitoCliente pide permiso para: publicar en tu nombre, ver todos tus amigos, subir fotos y mandar mensajes privados... ¿Deseas darle permisos a PatitoCliente para hacer todo eso?"
Gerardo confiadamente da click en "Sí", pone su usuario y contraseña y PatitoCliente recibe los permisos.

A partir de ese momento, las actividades que Gerardo haga con PatitoCliente pueden verse reflejadas automáticamente tanto en los servicios de PatitoCliente como en los servicios de Facebook. Ya no tiene que entrar a FB para decir las maravillas que PatitoCliente hace: Patito lo hará por él.

Cada vez que PatitoCliente se conecta a FB NO lo hace con la identidad de Gerardo, sino con:
a) Una identidad propia de PatitoCliente que se registró con FB para poder funcionar y
b) Una identidad parcial de Gerardo que fue validada una sola vez cuando Gerardo se registró en PatitoCliente usando su usuario y password de Facebook, 
Al usar Gerardo nuevamente su app PatitoCliente el diálogo sería algo así como:

PatitoCliente: "Hola Facebook ¿Me recuerdas? Soy PatitoCliente."
Facebook: "Demuéstramelo"
PatitoCliente: "Mira, aquí está el token que me diste cuando me fabricaron ¿Ves?" (Y le entrega un token que es un texto único que identifica a PatitoCliente.)
Facebook:  "¿Que se te ofrece?"
PatitoCliente: "Ahhhmmm. ¿Te acuerdas que me conecté usando usuario y contraseña de Gerardo?"
Facebook: "Sí, claro, por acá tengo registrado el permiso que te dio"
PatitoCliente: "Muy bien. Quiero mandar un mensaje en su nombre"
Facebook: "Deja ver... sí, yo te di permiso de mandar mensajes a mi sistema y él te dió permiso de mandar mensajes en su nombre."
PatitoCliente: "Va... el mensaje es el siguiente..."

A estas alturas, los lectores (que son preceptivos) ya habrán pegado un brinco viendo cual es la falla del sistema ¿Cierto?¿No? Un poquito más adelante, entonces...

Pero... ¿Que pasa si Gerardo pierde su celular donde había instalado PatitoCliente?
Sale corriendo a Facebook, cambia su contraseña y queda tranquilo porque no lo van a hackear ni nadie va a chulear malamente a la vecina hija del luchador... pero no conoce el mecanismo de PatitoCliente, que usa oAuth para conectarse a FB y que el que use la app tiene todos los permisos que Gerardo le haya otorgado. 

Así que el nuevo "dueño" del celular de Gerardo resulta ser un usuario malicioso (¿Más malicioso que robarle el teléfono a Gerardo?¡Ja!) usa PatitoCliente para conectarse a Facebook (porque a FB no pudo, porque Gerardo cambió su contraseña) y   puede generar el mismo diálogo (pongo sólo el final, para evitar repetir demasiado).

...
Facebook: "Sí, claro, por acá tengo registrado el permiso que te dio"
PatitoCliente: "Muy bien. Quiero mandar un mensaje en su nombre"
Facebook: "Deja ver... sí, yo te di permiso de mandar mensajes a mi sistema y él te dió permiso de mandar mensajes en su nombre."
PatitoCliente: "Va... el mensaje es el siguiente: Querida vecina, hija de El Luchador, siempre he querido decirte lo siguiente:..."
PatitoCliente: "Ah, Facebook, además quiero mandarle a VecinaLuchadora esta foto: sexyfoto.jpg".
Facebook: "Bien. Sí, tienes permiso de mandar fotos...viene"
 (Se deja al lector la interpretación del resto)

Si no han visto el error, es el siguiente: Una vez que se le dieron permisos a la aplicación, no necesariamente se valida al usuario con contraseña: oAuth valida la aplicación y los permisos que ésta tiene, no al dueño. De manera que la App que vive en el celular del Sr. RataDeDosPatas (y que antes era de Gerardo) tiene toooodos los permisos que Gerardo haya dado a tooooodas las aplicaciones instaladas: mandar mensajes a twitter, a facebook, pubilcar que corrió (con tu celular recién robado) tres kilómetros. Tantas cosas como permisos le hayas dado a la app. Lindo ¿No?

Así que no solo debes cambiar tu contraseña de todos los servicios que usabas: tienes que entrar a cada proveedor de servicio y dentro del servicio quitar todos los permisos a todas las aplicaciones consumidoras para evitar un mal uso de los permisos previamente otorgados.  Dado un tiempo prudencial (en lo que regresan tu teléfono a configuración de fábrica para revenderlo) podrás en tu nuevo dispositivo volver a conectarte con tu nueva contraseña. Mientras podrás explicarle al vecino de al lado que "te robaron el teléfono, lo hackearon y no fuiste tu el que piropeó tan vulgarmente a su buenura de hija". Aunque te mueras de ganas. Y con suerte hasta te cree si le citas esta página.

La lista de principales proveedores de oAuth es ésta: http://en.wikipedia.org/wiki/OAuth#List_of_OAuth_service_providers

Revisa todos los proveedores y dentro de los proveedores revisa que aplicaciones tienes que consuman sus servicios. Anótalas, dalas de baja y ya volverás luego a darlas de alta. En Twitter tienes que ir a https://twitter.com/settings/applications y en Facebook en https://www.facebook.com/settings?tab=application
Alí tienes que revocar el acceso de tus aplicaciones del móvil y conforme reinstales se te volverá a pedir tu nuevo usuario y contraseña. O te a riesgas a una visita del vecino...