Nueva Forma de Marcar: Análisis a la aplicación publicada por el gobierno

Información Importante Sobre el Contenido

Estas accediendo al contenido antiguo del blog. Este artículo "Nueva Forma de Marcar: Análisis a la aplicación publicada por el gobierno" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.

mobapp_android

En Chile se está cambiando la forma de marcar a los celulares y para esto, la Subsecretaría de Telecomunicaciones tuvo la iniciativa de lanzar una aplicación para los dispositivos móviles que facilitara la actualización de la agenda.  Esta aplicación fue encargada a la empresa de desarrollo Cursor S.A.

Los primeros comentarios de quienes empezaron a instalar la aplicación, hacian referencia a la cantidad de permisos que requería para ser instalada y utilizada.

permisos_app

Entonces nos preguntamos: Una aplicación tan simple como actualizar tus contactos para que requiere tantos privilegios? Rapidamente uno podría pensar lo siguiente…

  • Identity: ???
  • Contacts: Ok, obviamente necesita acceder a mis contactos para poder modificarlos.
  • Location: ???
  • Photos/Media/Files: La aplicación tiene la opción de respaldar los contactos. Me imagino que este privilegio es requerido por esa funcionalidad.
  • Wi-Fi connection information: Para enviar los contactos respaldados ???

Entonces empezaron las sospechas …

Por otro lado, la aplicación tiene un disclaimer donde se especifican las condiciones de uso y adicionalmente informa al usuario que la aplicación captura datos. El problema es que estos textos son como la típica letra chica de los contratos que buscan cagarte, con el fin de usar la aplicación para no tener problemas y con la confianza de que es una aplicación de gobierno, simplemente los usuarios aceptan los TOS e instalan.

mobapp_tos

En las últimas líneas de este disclaimer se indica que Subtel no recopila información de la libreta de contactos del usuario, por otro lado indican que Subtel retendrá para sí y estará facultado para utilizar libremente la información estadística del uso de la aplicación, indicando que la información recolectada para efectos de estadísticas corresponde a cantidad de veces que se abre la aplicación, cantidad de contactos actualizados y zonas geográficas donde se realizó la operación.

La tarea para la casa es verificar que información envía la app, como la envia y donde la almacena. En mi caso, las pruebas fueron realizadas sobre el paquete para Android, pero tengo entendido que la forma en que hicieron esta aplicación permite ser “empaquetada” tambien para iOS, por lo que el core de la app es la misma para ambos casos.

Lo primero que me llamó la atención fue que la aplicación tenga un tamaño de 7,2Mb. Me hizo pensar que es una aplicación con muchos componentes por defecto, que probablemente tenga archivos de “prueba” dentro y que no haya sido optimizada. Lo primero que hice fue descargar el paquete (APK) y desempaquetarlo.

unzip_mobapp

Lo interesante es el directorio assets/ y el archivo classes.dex. Empezando por el directorio, encontré archivos de “respaldo” y archivos de pruebas, lo cual hacen que la aplicación sea de mayor tamaño. Analizando el archivo classes.dex tambien aparecieron componentes extras que no deberian estar en la aplicación como el lancher de la camra, entre otros. Viendolo del punto de vista de las “buenas practicas de desarrollo”, lanzar una aplicación o un sistema que incluye archivos de prueba o archivos “old” no es lo recomendado.

Si vamos un poco más allá, analizando el archivo assets/www/app/app.resource.js aparece una variable que define una URL correspondiente a un dominio o servidor que no es de la Subtel.

resource_js

Claramente corresponde a la dirección donde se envía y almacecna la información estadística. Y ojo con el detalle: sin HTTPS.

Si revisamos el archivo assets/www/app/paso2/paso2-ctrl.js podemos ver en detalle que información envia a este servidor

enviaEstadisticas

 

Lo que aparece en ese archivo indica que se está enviando a un servidor de terceros la siguiente información:

  • Cantidad de contactos de la agenda
  • Cantidad de teléfonos de la agenda
  • Cantidad de contactos “convertidos”
  • Cantidad de números “convertidos”
  • Tiempo que se demoró en convertir
  • Información de ubicación GPS
  • UUID del dispositivo

Para comprobar que realmente la aplicación envia esta información, la instalé en un ambiente controlado y analicé el tráfico que genera, pudiendo confirmarlo.

Desde mi punto de vista, todo lo que he expuesto aqui tiene varios problemas:

  • El disclaimer o terminos y condiciones no habla sobre la empresa Cursor
  • Los datos, si bien no son “datos personales” como tal, si atentan contra la privacidad del usuario, por ejemplo la ubicacion gps.
  • Siendo una aplicacion hecha con recursos publicos, no te da la opcion de usarla sin que tus datos sean enviados a una empresa privada.
  • Se desconoce las politicas de seguridad y privacidad de aquella empresa que almacena y procesa la información-
  • La información es enviada en texto plano, es decir sin ningun mecanismo de cifrado.

Las reacciones de los usuarios demuestra un gran interes por el tema de la privacidad, sin embargo, las reacciones del gobierno y de la empresa encargada del desarrollo dejan mucho que desear. Por un lado, aparecio en subsecretario Pedro Huichalaf explicando lo siguiente

twitter_01

 

Por otro lado, algunas reacciones de los usuarios

twitter_02

twitter_03

twitter_04 twitter_05 twitter_06

 

En conclusión, siendo ciudadano no tengo el derecho de usar esta aplicación hecha con recursos publicos sin ser obligado a entregarle información a una empresa privada. Tal como dice el subsecretario, si dudo, mejor no la uso.

@spectresearch tambien estuvo investigando sobre el tema, este es su artículo: El tema de la aplicación “Nueva Forma de Marcar”.

Referencias al tema:

https://www.emol.com/noticias/Tecnologia/2016/01/26/785375/Aclaran-el-polemico-manejo-de-datos-de-la-aplicacion-de-la-Subtel-por-cambio-de-numeracion.html

https://www.cooperativa.cl/noticias/site/artic/20160126/pags/20160126195646.html (con spam al ingresar)

https://www.biobiochile.cl/2016/01/26/subtel-sale-al-paso-de-denuncias-respecto-a-supuesto-traspaso-de-informacion-en-app.shtml (con spam al ingresar)

 

Actualización

Anoche, Alejandro Vera publicó sus comentarios respecto a las denuncias realizadas de esta aplicación, entregando más detalles respecto al uso del UUID y comentando las declaraciones del gobierno respecto a este tema.

Alejandro comenta en este post lo siguiente (copy&paste):

Complicado lo de la aplicación móvil de la subtel (https://www.nuevaformademarcar.cl/). Las denuncias de Zerial y otros, que mencionan el uso indebido de datos son serias. Yo mismo he descargado la aplicación y examinado el código fuente, corroborando la denuncia. En la primera imagen se puede ver que la dirección a la que se envían datos estadísticos es a un dominio de la empresa desarrolladora, no de la subtel! y utilizando protocolo no seguro frown emoticon ; y en la segunda imagen se puede ver que envía el número de contactos, posición con latitud y longitud, cantidad de números convertidos y el tiempo de ejecución. Es decir, la empresa desarrolladora puede saber la posición exacta de tu dispositivo y permite hacerle un seguimiento. Fuerte.
Pero quizás lo más grave es lo que acabo de leer en emol: https://www.emol.com/…/Aclaran-el-polemico-manejo-de-datos-d…
Grave porque acá se da como explicación que el identificador no es el del dispositivo, sino de la instalación, lo que es simplemente una mentira. En la documentación oficial del framework de desarrollo (https://ngcordova.com/docs/plugins/device/) dice sobre el método getUUID() : “Get the device’s Universally Unique Identifier (UUID). The details of how a UUID is generated are determined by the device manufacturer and are specific to the device’s platform or model.”, más aún, viendo el código fuente del framework se puede ver que usa la variable ANDROID_ID (https://developer.android.com/…/provid…/Settings.Secure.html…) la que se define como “A 64-bit number (as a hex string) that is randomly generated when the user first sets up the device and should remain constant for the lifetime of the user’s device. The value may change if a factory reset is performed on the device.”, es decir sólo *podría* cambiar en caso que se haga un reseteo completo del móvil.
Esto es grave, y lo es por varias razones. Primero porque es una violación a la privacidad (no, Pedro Huichalaf, no necesita ser un dato de la anatomía humana para ser personal). Segundo porque en el caso de que subtel no haya estado consciente de esto (sino estamos hablando de un acto de corrupción), es una ilegalidad y falta de ética gravísima por parte de la empresa y una tremenda negligencia de parte de la subtel. Es esencial que el estado tenga mayor celo con la privacidad, muchas veces somos los desarrolladores los que incluso utilizando recursos propios nos esforzamos en proteger a los usuarios/ciudadanos y su privacidad, sin que el cliente/estado exija, fiscalice o siquiera valore este esfuerzo. Es imperativo que la subtel retire cuanto antes esta aplicación, se corrijan las falencias y se multe a la empresa desarrolladora. Cualquier otra solución no haría más que confirmar el desinterés de las autoridades por informar y proteger adecuadamente a las personas como fin.

Un excelente aporte a esta discusión.

ACTUALIZADO (3/febrero/2016)

Acaban de actualizar la aplicación, ingenuamente pensé que podian haber resuelto estos problemas, pero me encontré con una sorpresa que me hizo reir.

Hubo una modificación en el archivo paso2/paso2-ctrl.js, justo en la línea donde se envía el UUID

Antes:

$scope.estadisticas.deviceUUID = $cordovaDevice.getUUID();

Despues:

$scope.estadisticas.deviceUUID = sha256(‘Pr736Cur’+$cordovaDevice.getUUID());

En simples palabras, codificaron en SHA-256 el UUID y adicionalmente le agregaron un SALT, el cual se encuentra escrito en duro en el código. Cuando vi esto, pensé que podían haber implementado HTTPS y así no sería tan grave, sin embargo la URL donde envía la información sigue siendo HTTP, es decir, la información se envía en texto plano.

Saquen sus propias conclusiones…

 

Información Importante Sobre el Contenido

Estas accediendo al contenido antiguo del blog. Este artículo "Nueva Forma de Marcar: Análisis a la aplicación publicada por el gobierno" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.

22 comentarios

  1. De partida una aplicación del gobierno debería ser de por si una de código abierto.
    Por otra parte buena investigación debería hacerse viral, ahí esta la importancia de revisar los permisos de las aplicaciones.

    Por el momento habrá que ver hacia donde envía los datos para agregar los dominios al archivo hosts

  2. Dicho sea de paso, además de todo el conflicto con la privacidad, esto implica que una empresa de desarrollo que se manda condoros como mandar datos (privados de terceros) en texto plano, se llevó al bolsillo plata proveniente de recursos públicos. Menudo proceso de selección de servicios especializados.
    Buena investigación, Zerial.

  3. Y existe alguna garantia que en el corto plazo, la administraciòn o explotaciòn de este servicio no la externalicen o concesionen y las consecuencias que ello acarrearia

  4. Soy Ingeniero Informático, con mas de 23 años de experiencia en TI y creo que hay una exageración tremenda en las acusaciones realizadas.
    Si estoy de acuerdo en todo lo indicado a las buenas practicas (no incluir archivos .old o que sean no requeridos para la app) . Quién acusa demuestra un buen dominio técnico (programación) pero claramente no en dirección de proyectos, a decir, tanto empresas particulares como estamentos de gobierno “encargan” estas aplicaciones, la administración y el análisis de sus datos debido a que realizar esto no es parte de ” su negocio”. Para mi tiene toda la lógica del mundo solicitar acceso a tus fotos con el objetivo de poder relacionar el contacto con la imagen que eventualmente pueda estar ligada a este ya que no se indica con claridad si el contacto es leido, eliminado y vuelto a crear, lo cual implicaría realizar este enlace contacto-imagen.
    Por otro lado, si la subtel desea indicar la cantidad de móviles que descargaron la app por región o comuna e indicar cuantos usuarios únicos realizaron efectivamente la actualización usando la app, pues entonces es obvio que requiere geolocalizar el móvil y conocer de UUID de la máquina.
    Bien por el programador que tuvo la curiosidad e investigó, pero debe abstraerse para poder ver el “big picture” y no sólo realizar acusaciones que, a mi parecer, tuvieron un análisis incompleto.

  5. No soy mortadelo

    enero 28, 2016 a las 8:34 am

    me parecen exageradas las acusaciones, y las asocio a un análisis poco informado y riguroso por parte del autor del post. en general pienso parecido a francisco, la diferencia es que no creo que el autor sea un buen desarrollador android, porque si entendiera más allá de abrir un apk, se hubiese dado cuenta por qué las cosas son como las encontró y no hubiese armado el tremendo show, o por último, hubiese cuestionado al dev de cursor por usar el sdk, library o framework xyz y no una pila de supuestos y acusaciones pa la tele.

  6. Gente que instala basura en el celularshhhh everywhere…

    Si bien pasa esto con apps, investiga que hacen con los datos DTM que setean muchas páginas en las cookies de sesión mediante Adobe Analytics u otra plataforma….Claro…obviamente sin permiso de nadie

  7. @Francisco: Tendras 23 años de experiencia.. pero se nota que en esos años no has aprendido mucho. Si eres ingeniero o no, creo que da igual o no?

    @No Soy Mortadelo:
    Creo que simplemente no has entendido ni la mitad de lo que se ha publicado no solo en mi blog, sino en analisis paralelos tambien

  8. @zerial: un buen análisis de una aplicación para android debiese venir de alguien con conocimientos de desarrollo actualizados y no superficiales para dicha plataforma, y en tu post queda claro que no es el caso por lo que este análisis es tan válido como el review que un desarrollador cobol pueda hacer de una aplicación .Net, o sea, pastelero a tus pasteles.

  9. Francisco, las instituciones del estado cuentan en su plana con un Oficial de Seguridad de la Información, este es el responsable porque toda App, desarrollo (interno, externo), pasó a producción cuente y esté bajo norma, análisis de vulnerabilidades, capacity Planning, etc. Acá claramente existió una falta de control, el trabajo de los EH y específicamente de Zerial deja en claro que no hay ninguna medida de protección a los datos personales como lo indica las LEY !!! Y no es necesario saber de dirección de proyectos para hacer esto, solamente 2 dedos de frente !!!

  10. @No Soy Mortadelo: ¿Podrías indicar cuáles de las afirmaciones realizadas por @Zerial son falsas o incorrectas?

  11. Has visto la app de Metro? También pide permisos que no deberían.
    En la última update me pedían acceso a la cámara, así que la borré.
    Ahora sospecho de toda app que tenga relación con el gobierno.
    Saludos

  12. No veo problema aquí!… Si la aplicación pide los permisos y nosotros se los damos, por algo los pide… Es responsabilidad nuestra preocuparnos de que aplicación instalamos y qué datos estamos dispuesto a entregar con el fin de utilizarla.

    Saludos,

  13. Que lata leer poste de gente con 23… ojo 23 años en el mundo de las TI u otros que pone un sobre nombre ridículo para hablar más ridiculeces y que no entiende el fin de esto, hoy se celebra el día del resguardo de los datos personales y una Institución de gobierno avala una app que pasa a llevar todos estos derecho y mas aún justifica esto en un tema estadístico es una vergüenza y una clara señal que como país nos falta mucho todavía… Se han puesto a pensar como se origino esta APP??? Quien la solicito y quien la pago… bueno busquen y se sorprenderán que la que pago la APP no es SUBTEL .
    A partir de este punto se pueden entender el origen de los datos y el xq se pide esa información.

    Para mi parecer queda claro que esto es un abuso y una mas del gobierno!

  14. El gobierno acaba de lanzar otra app, alerta auto.

    https://alertaauto.interior.gob.cl/

  15. Con respecto de la última actualización, ¿qué crees tú que se puede hacer con ese hash, ya que estás llamando a “sacar nuestras propias conclusiones”?

  16. hola zerial creo que el último cambio soluciona el problema ya que al utilizar un digest de una función criptografica segura como sha256 va a ser casi imposible invertirla o recrear el dato de entrada, esto incluso teniendo el salt utilizado, ya que se tendría que tener un diccionario de 16 ^32 posibles uuid (teniendo en consideración que estos son de 128 bits o 16 bytes) para obtener el dato con un ataque arcoiris.

    con lo anterior creo que utilizar https no es un problema

  17. Leonardo y JP:

    El punto que marca Zerial es el envío de un identificador del teléfono, más encima por conexión insegura, porque sí. Es como gritar el RUT en pleno paseo Ahumada. ¿Necesita la app identificar _mi_ teléfono? ¿Puede funcionar sin éste? (pista: sí)

    Sobre lo de “probar” todas las combinaciones, es cosa de ver el problema al revés: teniendo el UUID, generas el hash con el salt que te regalan amablemente en el código fuente.

  18. PotterSys me podrías explicar si efectivamente pudieras capturar el tráfico (ya que va sin https) cómo obtendrías el UUID del teléfono por favor, esta parte no me queda clara. ya que lo que vas a capturar es el hash del UUID y no el UUID

  19. si te das cuenta lo que vas a capturar es como la foto de mi gravatar es decir 2abaa7602255dd1213caa258cbd36f8c que es el md5 de mi correo personal

  20. Puedes subir el .apk?

  21. 23 años de experiencia en TI esta claro que no en seguridad, tan solo con un año en seguridad podrias ver los problemas

  22. Si no he entendido mal, todo esto tiene que ver por el tema estadístico…Pues menudo lío se ha formado, creo que esos accesos que piden son excesivos, como el que se comenta de acceso a la cámara. En fin…

Los comentarios están cerrados.