Hace unos dias Yago me comentaba que le interesaba el tema de la telefonía VoIP. Le compartí algunas cosas sobre el tema que le gustaron y a raíz de esa conversación sale este post.
Un poco de historia: el "phreaking"
Realmente el "phreaking" (término que viene de "phone freak", monstruo de la telefonía) tuvo su momento glorioso en el pasado, y quien sea mas bien "30 añero" recordará haber leído en los ezines de los años 90 aquellas historias del mítico Joe Engressia, que podía marcar números de teléfono sin tocar el teclado, silbando; o de John Draper, conocido como "Capitán Crunch" porque utilizaba la misma técnica que Engressia, pero ayudado por un silbato sacado de una caja de cereales.
Hubo mucho más: se desarrollaron dispositivos muy variados, llamados todos ellos "boxes", y a los cuales se les asignaba un color en función de lo que hacian, hasta el punto en que fué posible manipular de mil y una formas las lineas telefónicas de la por aquel entonces hegemónica AT&T.
Por ejemplo la bluebox, (la primera box que se conoció, basada en el silbato usado por Draper), permitía marcar los tonos internos de señalización de llamadas, de otro modo inaccesibles para los usuarios de un teclado telefónico normal. La black box impedía que se detectase el hecho de que se había descolgado el teléfono, burlando así los sistemas de facturación de la compañía, y la Yellow Box realizaba lo que hoy conoceríamos como un DoS contra otra línea telefónica, dejándola inoperativa.
Los tiempos de la telefonía analógica y sus "glitches" ya han pasado, pero con el nacimiento de la tecnología VoIP, que empieza a desdibujar la línea entre internet y telefonía, puede decirse que la cultura phreaker sigue hoy dia teniendo mucho que decir. De hecho ahora las posibilidades son mucho mas abstractas, pero mayores.
La autenticación, control y validación de usuarios con teléfonos es poco efectiva
Hoy dia muchos servicios validan sus cuentas y la identidad de sus usuarios a través de sms a sus móviles o de llamadas a fijos. De este modo buscan evitar la suplantación de identidad, el fraude o el abuso en general.
Voy a explicar cómo se puede utilizar la telefonía VoIP en combinación con otros servicios online para ultrapasar esos métodos, creando cuentas anónimas que podemos usar como "decoy" sin tener que poner nuestro teléfono real, y sin perder la posibilidad de recibir llamadas o sms a estos números, para así poderlos usar como "verificadores" de nuestra identidad (¡ja!)
Por si alguien no lo ha notado, esto reabre la posibilidad (que algunos creen perdida) de crearcuentas como churros en servicios como Whatsapp y Line. Pero si se abre la mente, las posibilidades son algo más amplias.
Antes de pasar a la receta, debemos conocer los ingredientes.
Cuenta SIP
SIP es la tecnología de VoIP más utilizada en todo el mundo, y es el estandar de facto con el cual son compatibles la mayoría de softwares y dispositivos. Una cuenta sip es el conjunto de credenciales que tiene un usuario dentro de la red. Con ellas, puede utilizar cualquier software de conexión VoIP (o routers y teléfonos físicos compatibles VoIP) para conectarse a la red y "registrar" su número. Por registrar se entiende al hecho de iniciar sesión en la cuenta VoIP y decir "aquí estoy yo, y quiero recibir las llamadas entrantes de esta cuenta".
Es interesante notar que varios clientes y dispositivos pueden usar la misma cuenta VoIP a la vez para realizar llamadas simultáneamente, pero solo uno puede "registrar" la linea para recibir las llamadas de otras personas. El comportamiento es similar al mapeo de puertos de un router.
Si el proveedor de la cuenta VoIP no tiene constancia de ningun cliente sip "registrado" en la cuenta en ese momento, puede enviar al llamante a un buzón de voz, simplemente informarle y colgar, o darle tonos falsos de llamada hasta que se aburra, con el fin enmascarar esta situación.
Cliente SIP
Se entiende por cliente sip cualquier dispositivo físico o sofware capaz de gestionar una cuenta sip: iniciar sesion, hacer y recibir llamadas, etc. El protocolo sip contempla todo lo que se espera de una llamada telefónica tradicional. De hecho, si usamos un teléfono android como cliente sip para recibir y enviar nuestras llamadas, la diferencia entre las llamadas tradicionales y las llamadas VoIP es totalmente imperceptible y, manejado de forma transparente por el terminal y el sistema operativo, podremos poner la llamada en espera, enviar tonos, colgar, hacer conferencias, y todo lo que siempre hemos hecho en telefonía tradicional.
Número DID
Algunos proveedores SIP ofrecen como servicio adicional números DID (Direct Inward Dialing, llamada entrante directa). En terminología VoIP, esto quiere decir que el número no es para usarlo dentro de la red VoIP, sino que en realidad es una pasarela, una número físico real capaz de recibir llamadas de la red telefónica conmutada (la red de telefonia de toda la vida), ya que está físicamente conectado a ella. El proveedor de una linea DID se compromete a desviar las llamadas entrantes desde ese número hacia una cuenta SIP, uniendo el mundo digital y el mundo físico de una forma totalmete automática, sin que el llamante pueda advertirlo.
Google Voice
Aunque no es estrictamente una cuenta del estándar abierto SIP, google tiene su propio servicio de VoIP y es muy interesante. Te ofrece la posibilidad de tener un número DID gratis que realiza incluso más funciones que un teléfono físico real. Es una mezcla interesante entre un teléfono, y un pequeño PBX (coloquialmente llamados "centralitas" en España). No solo se puede desviar la llamada al cliente por software que ofrece la compañia y que se integra en gmail, sino que puedes desviarlo a otros números físicos de la red telefónica conmutada. Incluso puede desviar la llamada a varios teléfonos a la vez, y el primero que descuelga, se la queda.
Si nadie contesta, puede tomar un mensaje de voz que te hace llegar por correo electrónico junto a un reproductor de audio incrustado, o mediante un aviso al movil si tienes la aplicación google voice instalada.
A pesar de que el número es de una linea terrestre, si te envian uns sms al número DID google es capaz de recepcionarlo correctamente y presentarlo en la bandeja de entrada de google voice (esto es muy interesante... ¿lo veis venir?)
Pero... las funciones de google voice realicionadas con DID sólo funcionan en estados unidos y para la gente y las redes de allí. No porque Google no quiera, sino porque depende de redes de telefonía con las que debe realizar acuerdos que de momento no ha formalizado. Debido a estas limitaciones infraestructurales, google voice no puede desviar las llamadas a otros números que estén fuera de la red estadounidense, motivo por el cual te exigen que certifiques que eres el titular de un número de teléfono de alli. De hecho, google voice esconde todas estas opciones cuando detecta que conectas desde fuera de Estados Unidos, para evitar ofrecerte servicios que luego no puede darte realmente.
Callcentrinc
Callcentric es un popular proveedor SIP de USA, que se caracteriza porque además de ofrecerte tu "free sip account" como hacen muchos otros, ofrecen un "free phone number", que no es otra cosa que un número DID gratis para vincularlo a tu cuenta sip.
Es decir, tú les das un email, y ellos te dan un número de teléfono válido en USA...
¿Empezáis a ver cómo se podrian combinar estos ingredientes de forma creativa para realizar un pequeño hack sobre los sistemas de cuentas de aplicaciones como Whatsapp o Line?
Ahora que ya conocemos un poco mejor estos ingredientes, pasamos a...
La receta
Supongamos que quiero tener una cuenta de whatsapp válida para mi emulador android instalado en el PC. De este modo podré estar más cómodo chateando por el PC cuando lo tenga disponible. Pero no puedo registrar mi número de movil en dos terminales, asi que necesito un número nuevo.
En este caso, yo recomendaria el uso de un numero alternativo virtual de FonYou, tan utilizado y socorrido entre pequeños profesionales para separar vida personal y profesional cómodamente, pero quizás quiera crear no solo una segunda cuenta, sino más. Quizás soy un developer que necesita probar su nueva aplicación hecha sobre whatsapi utilizando 20 cuentas válidas de whatsapp, o simplemente soy un triste spammer que quiere usar las API's de whatsapp disponibles para enviar mensajes masivos anunciando mi sitio web o el de terceros que me pagan por ello.
¿Puedo usar un numero inventado?
No, porque cuando whatsapp envie un código de validación a ese número por SMS o llamada, yo tendré que introducir dicho código en el software para demostrar que soy el titular. Así pues, el número tiene que ser realmente mio, en el sentido de que yo tengo que tener el control sobre él para recibir ese SMS. Hasta aqui el sistema funciona según lo que se espera de él.
¿Qué servicio hemos dicho que tenia la capacidad de recibir SMS?
Google voice. Con el simple hecho de registrar una cuenta de google, tenemos acceso a un número de teléfono capaz de recibir SMS. Por lo tanto, ya sabemos lo que queremos: queremos crear una cuenta en google voice.
Ahora que ya sé lo que necesito, ¿qué obstáculos debo sortear para obtenerlo?
Como he dicho antes, google voice exige que conectes desde USA y que ya tengas un numero de teléfono "real" de USA. Por "real" quiero decir que está en la red telefónica conmutada tradicional, y que está geográficamente ubicado en USA.
Sabemos que la limtación geográfica a la hora de conectar a la web y fingir estar en USA se resuelve conectando a través de cualquiera de los proxys estadounidenses que aparecen constantemente en listas como esta, así que fingir la ubicación no será un problema.
Enfoquémonos por tanto en el problema menos conocido: tenemos que hacernos con un numero "real" de Estados Unidos para hacerle creer a Google Voice que estamos físicamente allí y nos deje activar sus servicios.
¿Quién hemos dicho que ofrecía un número "real" de USA con simplemente registrarse?
Callcentric. Si nos registramos en su web, obtenemos inmediatamente una cuenta SIP con su usuario y su contraseña.
El usuario es un numero con el formato 1777xxxxxxx, pero que nadie se confunda; aunque a ojos de un despistado parece un numero válido de USA con el prefjo internacional +1 delante, no lo es. Es solo un número VoIP. De hecho el area code 777 es muy WTF! porque no existe semejante cosa en la numeración conmutada estadounidense. El estado de Nevada lo quiso reclamar para asignarlo a los teléfonos de Las Vegas, por aquello del 777 en las tragaperras (LOL), pero se lo denegaron.
Una vez nos hayamos registrado en callcentric no habremos acabado con ellos, porque aún tenemos que solicitar el "free phone number", que es para lo que hemos venido aqui. Por tanto, nos aseguramos de tener nuestra recien creada sesión iniciada en la web y nos dirigimos a la sección "All Services" para buscar el servicio "Free Phone Number" y pulsar el botón Get a Number.
En la columna de la izquierda, ponemos esto (de hecho no hay mucho que cambiar)
En state, de momento solo ofrecen NY, cosa que nos da igual. El area code y el rate center los podeis elegir al azar. Tras pulsar "Lookup", el sistema nos dará un puñado de sugerencias tal que así:
Pulsamos "Order Now" para cualquiera de las opciones sugeridas. Respondemos NO a la pregunta "are you using the service within the US?" (es importante responder que NO). Seguimos el proceso, que es tratado por callcentric casi como si fuera un proceso de compra, pero tranquilos que no pedirán tarjeta 8-)
Seguid el asistente hasta pulsar el botón "checkout". Y con esto ya tendremos un número real de la red telefónica conmutada de USA. Nos llegará un email a modo de factura donde se indicará nuestro nuevo número de teléfono (en esta imagen, 1929223xxxx):
y de todos modos tambien será claramente visible en las preferences y en el dashboard de callcentric consultando el "caller ID to send" (en esta imagen, 1646xxxxxxx):
Veréis los números escritos de varias formas, con paréntesis, con guiones... explicaros el NANP aquí queda fuera del objetivo de estas líneas, pero debéis saberlo para no dudar durante el proceso: para el caso que nos ocupa, "19296969101" es lo mismo que "+1 (929) 6969-101"
Vale, pero ahora ¿cómo lo uso?
Fácil. Ya hemos dicho que un número DID es una extensión en el mundo real de una cuenta SIP en el mundo digital. Si alguien llama al numero DID, estará llamando a la cuenta SIP. Entonces lo único que tenemos que hacer es preparar nuestro PC/tablet/smartphone para convertirse en un cliente SIP capaz de recibir las llamadas entrantes de la cuenta SIP. Del resto, se encarga nuestro proveedor SIP.
Para hacer esto desde el PC, yo os voy a recomendar Linphone porque su hogar y ambiente naturales son el opensource y GNU/Linux, aunque es multiplataforma y tambien está disponible en Windows. Tambien podéis informaros sobre ekiga, aunque este me ha respondido un poco peor frente a problemas de conexión a la hora de registrar las cuentas SIP desde algunos sitios donde el mapeo de puertos no es una posibilidad.
En los terminales Android tambien teneis SIPDroid o el mismo cliente integrado en el sistema operativo (versiones más recientes de Android), que gestiona las llamadas SIP de forma transparente una vez configurado.
La confguración de los clientes SIP se sale del alcance de este artículo, pero supongamos que vuestra cuenta SIP en callcentric es 17772231234 (siempre empiezan por 1777). En tal caso, la configuración de la cuenta en Linphone sería tal que así:
Al pulsar aceptar os pedirá el password de la cuenta y lo guardará para futuro uso. Con eso ya teneis un software capaz de recibir llamadas desde la línea de USA, directamente hasta vuestro PC, que además tiene una forma de utilizarse muy parecida a la del popular skype. Dejamos el cliente SIP registrado en el PC y esperando a recibir llamadas. Ahora que ya tenemos todo alineado, solo queda rematarlo...
Conectamos a voice.google.com utilizando un proxy estadounidense (debe aceptar SSL!) que habremos configurado antes en el navegador, asegurándonos de que cualquier posible sesión nuestra de google está cerrada. Podems usar otro navegador sin proxy en paralelo para conectar al resto de sitios web mencionados aquí, puesto que no filtran por región. Así navegaremos a mayor velocidad.
Registramos una nueva cuenta de google usando el botón "sign up" y rellenamos los datos como si estuviéramos en USA. Durante el registro, google nos pide un email alternativo válido y un número de teléfono. Aquí podemos dejar sin poner aún el teléfono (nos lo pedirá luego). Suponiendo que queremos mantener nuestra privacidad y anonimato al máximo, podemos usar un email temporal de servicios como nowmymail.com como dummy para verificar el registro en google.
Seguid el proceso de registro hasta que os pida un número de teléfono:
Aquí podemos hacer una pausa (sin cerrar esta ventana) para irnos a visitar el enlace de confirmación que nos había enviado google al email que le indicamos.
Luego volvemos a la ventana "Verify your account" y escribimos nuestro numero DID, sin el 1 inicial, y asegurando que sale la bandera de USA en el selector de al lado. Tambien tendremos que cambiar el método de envio de códigos, de TEXT MESSAGE a VOICE CALL, ya que los números DID de callcentric pueden recibir llamadas pero no SMS.
Con esto, si todo va bien, estaremos a punto de recibir nuestra primera llamada VoIP desde nuestro número DID estadounidense. Al pulsar CONTINUE la pantalla del navegador cambiará a la imagen que vemos a abajo, y deberia comenzar a sonar nuestro softphone. Descolgamos y escuchamos con atención la grabación, porque nos va a decir dos veces y en un inglés pausado y claro el código de validación que tenemos que introducir en "Enter verification code":
La llamada finalizará sola cuando la locución acabe. Ponemos el verification code y pulsamos "Continue".
Llegados a este punto, ya hemos validado la cuenta de google con las dos credenciales que nos piden, un email y un teléfono, ambos pseudofalsos y creados para la ocasión para proteger nuestra identidad.
A partir de ahora comienza el proceso de configuración de google voice propiamente dicho.
Estaremos en una pantalla tal que así:
Lo que nos está pidiendo es un primer número al que desviar las llamadas recibidas en el número de google voice. Como hemos dicho antes, este número debe ser forzosamente de USA. De nuevo, pondremos nuestro número DID sin el 1 inicial y pulsaremos "continue". Eso hará que google genere un código de validación. Esta vez el código de validación es de solo dos digitos y viajará en el sentido inverso al anterior (de la web al teléfono), así que nos preparamos para atender a una llamada en nuestro softphone, en la que además tendremos que utilizar el teclado virtual durante la llamada para enviar los tonos pertinentes. Cuando estemos listos, pulsaremos el botón "Call me now".
Oiremos una breve locución que nos pide el código. Cuando se calle, lo pulsamos en el teclado de nuestro cliente SIP. Si estais usando Linphone, el aspecto del teclado será este:
En cuanto hayamos realizado el marcado del código de validación, usando pulsaciones bien prolongadas y firmes, oiremos de nuevo la locución confirmando que el número ha sido validado, al tiempo que veremos que la pantalla de nuestro navegador cambia automáticamente de nuevo:
Pulsamos "I want a new number" y aparece un cuadro donde podemos elegir números disponibles por código postal (filtro de la izquierda) y/o por conjuntos de números o letras que nos gusten (filtro de la derecha):
Partiendo de la premisa de que no sabemos códigos postales de USA ni tenemos interés en ninguno en particular, podemos jugar un poco con el filtro de palabras y números para ver qué sale...
Y cuando os canséis, elegid uno de entre las opciones y pulsad "Continue". Por ejemplo, yo al final elegí el (802) SBD-0250, o lo que es lo mismo, (802) 723-0250:
Ahora ya puedo registrar este número en Whatsapp y recoger el SMS tranquilamente en la bandeja de entrada de google voice, todo ello protegiendo mi identidad real y anonimato en todo momento:
Y ahora que ya tengo mi número DID en USA, puedo usarlo para crear y validar más cuentas de google. No todas las veces que quiera, puesto que google no permite usar mas de 3 o 4 veces el mismo teléfono para validar diferentes cuentas, pero por lo menos un par de veces mas lo puedo hacer. Y cuando google deje de aceptar este numero DID siempre puedo volver a crear otra cuenta de callcentric y empezar desde cero.
Conclusión
Lo que hemos practicado en este post es un principio de interacción entre productos y servicios, que al combinarse permiten crear una "distorsión" de sus modelos de seguridad. Dado que el uno no contaba con la presencia del otro, y uno proporciona de forma menos controlada credenciales que son válidas para el otro, se ablandan unos vectores de entrada que parecian mas duros observando estos productos y servicios por separado.
Este tipo de problemas son complejos y su incidencia es difícil de evitar dados los modelos de seguridad y control de acceso digitales que se utilizan hoy día en la mayoría de sitios.
Lo mas curioso es que nadie ha cometido un error, no hay flaw alguno, no hay un vector real, por lo menos no un vector "de asalto". Callcentric tiene su estrategia y sus políticas, y no son incorrectas para su negocio. Google tampoco. Simplemente se ha realizado una combinación creativa de elementos obteniendo como resultado un pequeño hack.
Por norma general todas las empresas que ofrecen servicios online piensan, aunque sea un poco, en la seguridad de sus usuarios y en la autenticidad de sus identidades, pero no todos lo hacen de la misma manera. Cada servicio confía en un tipo de credencial mas que en otro, e incluso el modelo de negocio que practican y su estrategia de marketing tienen influencia en este tipo de medidas de seguridad. Si tenemos en cuenta que algunas de estas empresas proporcionan credenciales que sirven a su vez de credenciales válidas para otras empresas, se crean situaciones como esta, en la que google confía plenamente en los números de teléfono para controlar la identidad de los usuarios, pero compañías como callcentric, con un planteamiento diferente dado que su nicho está tremendamente competido y todos los proveedores SIP regalan números con su ancho de banda sobrante, ellos no son menos y regalan números válidos de USA a cambio de un simple email con la intención de captar clientes en otros servicios VoIP de pago, creando esta paradoja en la que el nivel de seguridad de google cae literalmente al mismo nivel de callcentric, que es bajo por diseño y por necesidades de su guión.
Aunque en este caso es mas deliberado, tambien sucede lo mismo con nowmymail y otros proyectos similares que están rompiendo el paradigma del control de identidad asociado al email. Dado que muchos servicios online consideran al email como el mejor (o el único) medio para validar y autenticar la identidad de los usuarios, el hecho de que aparezcan empresas que ofrecen emails temporales válidos que duran 5 minutos para facilitarte el registro en un servicio y luego autodestruirse, convierten el control de registro por email en algo inutil mucho menos útil para estos servicios, rompiendo la extensa infraestructura de suposiciones en las que se han basado muchos de ellos y reabriendo el debate sobre la privacidad y el control de acceso de los usuarios online.
Google ya habla de aportar soluciones por hardware a modo de llaves que garanticen totalmente la identidad y privacidad del usuario, aunque esto tambien plantearía otros problemas. Pero google acostumbra a traer buenas ideas y puede que resuelvan estos problemas con su habitual ingenio.
La cuestión es que ahora no tenemos mas límite que nuestra paciencia para crear tantas cuentas válidas en Whatsapp/Line y derivados como queramos. Y como he dicho al principio, esto es solo la punta del iceberg. Siendo capaces de recoger llamadas, enviar tonos DMTF durante la llamada, y recoger SMS, podríamos burlar mecanismos de comprobación de identidad y de posición geográfica de varios servicios online, todo mientras mantenemos un total anonimato.
Y hablando de anonimato, esto siempre lleva una doble moral consigo: el anonimato como individuos nos proteje y nos hace sentir mas seguros, pero el anonimato de todos los demás como masa a la hora de usar productos servicios y herramientas de todo tipo nos parece un peligro y problema potencial...
Fuente: Securitybydefault
No hay comentarios:
Publicar un comentario