Privacidad y apps de gestión de COVID en Android
Por: Andrés Felipe Castellanos y Stéphane Labarthe
Estos últimos meses K+Lab, el Laboratorio de seguridad digital y privacidad de la Fundación Karisma, analizó varias aplicaciones implementadas por el gobierno nacional y por gobiernos locales para gestionar la epidemia de COVID-19: CoronApp – Colombia, CaliValle Corona, Medellín me Cuida y Gabo (Bogotá cuidadora). Analizamos varios aspectos relacionados con la seguridad digital y la privacidad de estas herramientas: la información entregada al usuario, los datos entregados por los usuarios en los formularios y colectados pasivamente por la aplicación (GPS, Bluetooth, WIFI, etc.), los permisos, los datos transmitidos por estas aplicaciones y su seguridad.
Uno de los principales problemas de analizar estas aplicaciones es que se hacen sobre versiones determinadas, que están cambiando constantemente, y eso no permite ver su complejidad CoronApp – Colombia, por ejemplo, ya tiene más de 20 versiones nuevas desde que hicimos nuestro informe [1].
Quisimos por lo tanto dar una mirada retrospectiva con el objetivo de analizar cómo habían evolucionado estas aplicaciones en el tiempo. Obviamente es imposible para nosotros hacer un análisis exhaustivo para cada versión, por lo que decidimos centrarnos en un aspecto importante para la privacidad: los permisos de estas aplicaciones. Esto incluye las autorizaciones que damos para que nuestros celulares compartan datos e información con quien controla esa aplicación (como localización, contactos, cámara, etcétera). Una vez se da la autorización, esto sucede en forma “invisible” para la persona que usa la aplicación. Además puede revelar funcionalidades como el rastreo digital de contactos en CoronApp. Esta funcionalidad usa los permisos de acceso al Bluetooth del dispositivo para detectar e interactuar con otros dispositivos cercanos.
Para lograr este análisis, desarrollamos un script (un pequeño programa) que analiza el instalador para Android (un archivo APK) para extraer los permisos de cada versión de cada aplicación. Los archivos APK de las diferentes aplicaciones y sus versiones se pueden encontrar en algunos sitios [2].
Dentro de todos los archivos que componen la aplicación, existe uno que describe los permisos que la aplicación necesita del usuario para poder funcionar [3]. Es este archivo el que analizamos para extraer la lista de permisos. También se agregó la posibilidad de comparar distintas versiones de la misma aplicación. Así es posible ver de una forma más clara si fueron agregados o removidos permisos entre diferentes versiones de la misma aplicación. Una descripción más técnica de cómo utilizar el script para comparar diferentes versiones de una aplicación android está disponible en GitHub.
El script – desarrollado por Andrés Felipe – está disponible en Github.
Los resultados completos del análisis con el Script, están disponibles aquí.
Del análisis se pueden destacar dos puntos comunes que nos resultan de particular interés:
- Estas apps tienen permisos muy intrusivos para la privacidad, cómo la localización aproximada y fina (GPS). Por lo tanto la aplicación tiene la posibilidad de localizarnos en tiempo real.
- Excepto CoronApp – Colombia – caso que miraremos a profundidad más adelante – no han disminuido los permisos excesivos ni siquiera como resultado de las críticas que hicimos a través de nuestros informes.
En estos dos aspectos el caso de CaliValle Corona es sobresaliente. La aplicación tiene 34 permisos, sí, 34… Y nunca se retiró un permiso desde la primera versión (al contrario, aumentaron de 31 a 34). Estos permisos incluyen: acceso a la localización aproximada y fina, acceso al bluetooth, acceso al almacenamiento externo del dispositivo, acceso a la cámara e incluso acceso al “reconocimiento de actividad” (si estoy caminando, estoy en un carro, etc.). Para la aplicación GABO de la Alcaldía de Bogotá, los 14 permisos se volvieron 12 de los cuales los siguientes se han mantenido: localización, acceso a la cámara y a la memoria externa del dispositivo. En cuanto al acceso a la cámara la Alcaldía de Bogotá nos respondió por escrito que sólo se usa para el componente “SuperCADE Virtual” y añadió lo siguiente:
La aplicación solicitará permiso para acceder a la cámara y/o al almacenamiento del equipo, cuando dicha actividad se requiera para realizar un trámite o acceder a un servicio dentro de las funcionalidades de SuperCADE Virtual, estos permisos estarán desactivados por defecto y únicamente se activarán cuando el usuario desee adjuntar imágenes o archivos desde el equipo o directamente de la cámara, las demás funcionalidades de GABOapp no requieren de estos permisos para funcionar.
Los permisos de CoronApp – Colombia: un gráfico para explicar
El gráfico siguiente muestra la evolución del número de permisos de CoronApp – Colombia en función del tiempo o más precisamente a lo largo de sus diferentes versiones.
Es importante recordar que la aplicación CoronApp – Colombia fue construida por el gobierno nacional partiendo de una aplicación de código abierto denominada “Guardianes de la Salud”. En su versión inicial la aplicación ya pedía ciertos permisos que impactan la privacidad cómo la posibilidad de acceder a los contactos del teléfono (“READ_CONTACTS”) o el acceso a la localización aproximada y fina, vía GPS (“ACCESS_COARSE_LOCATION” y “ACCESS_FINE_LOCATION”).
La primera fase de crecimiento de la curva corresponde a un aumento de 9 hasta 14 permisos (para su versión 1.2.9). Para esa versión se añaden permisos técnicos y también funcionalidades sorprendentes cómo la posibilidad de configurar una alarma (SET_ALARM) o de iniciar una llamada (“CALL_PHONE”). La siguiente fase, hasta alcanzar el pico de 19 permisos corresponde a la llegada de tres permisos vinculados con el Bluetooth (“BLUETOOTH”, “BLUETOOTH_ADMIN” y “BLUETOOTH_PRIVILEGED”). Estos permiten a la aplicación detectar los dispositivos cercanos usando el Bluetooth. Como explicamos en nuestro informe esto se deriva de la inclusión de la biblioteca “HypeLabs” que ofrece un sistema patentado de “contact tracing” o rastreo de contagio por proximidad. Cuando se incluyó esta librería y en consecuencia los permisos en la aplicación, no había información pública respecto a esta funcionalidad de parte del Gobierno. El análisis de permisos, junto con un análisis del código (por ingeniería inversa) y una noticia promocionada por la empresa HypeLabs nos permitieron descubrir la implementación de esta funcionalidad en CoronApp – Colombia.
Fue durante este pico de 19 permisos – que va hasta la versión 1.2.32 – que hicimos y entregamos nuestro informe de análisis al Gobierno Nacional y publicamos los análisis técnicos.
Las siguientes fases son dos descensos en la curva. En la primera, se retiran tres permisos incluyendo el muy intrusivo acceso a los contactos del teléfono. En la siguiente se eliminan todos los permisos vinculados con el Bluetooth y se retira la biblioteca HypeLabs del código de la aplicación y esta queda solicitando tan solo 8 permisos. En la siguiente fase, dos permisos Bluetooth (“BLUETOOTH” y “BLUETOOTH_ADMIN”) vuelven a aparecer. En la versión 1.2.42 se vuelve a introducir la funcionalidad de rastreo de contacto esta vez implementando el protocolo BlueTrace (Opentrace), que se mantiene hasta la fecha de este nuevo análisis.
En las últimas versiones (hasta la 1.2.52) se mantienen 11 permisos que son los siguientes:
- accesos a ubicación aproximada (ACCESS_COARSE_LOCATION) ;
- acceso a ubicación fina (ACCESS_FINE_LOCATION) ;
- acceso al estado y las conecciones de red (ACCESS_NETWORK_STATE) ;
- vincular con dispositivos bluetooth (BLUETOOTH) ;
- acceso a los ajustes de bluetooth (BLUETOOTH_ADMIN) ;
- hacer llamadas telefónicas (CALL_PHONE) ;
- ejecutar un servicio de primer plano (FOREGROUND_SERVICE) ;
- tener acceso completo a la red Internet (INTERNET) ;
- impedir que el teléfono entre en modo de suspensión (WAKE_LOCK) ;
- verificar de donde se hizo la instalación, necesario para su integración con Google Play (BIND_GET_INSTALL_REFERRER_SERVICE) ;
- recibir mensajes de notificación (RECEIVE).
A diferencia de las otras aplicaciones, en el caso de CoronApp – Colombia nuestros análisis anteriores permitieron incidir para eliminar permisos que aparentemente se mantenían en la aplicación por error y sin necesidad (cómo el acceso a los contactos o el SET_ALARM). Sin embargo, la más fuerte de nuestras críticas no ha sido atendida. Sigue siendo preocupante la adopción de un protocolo de rastreo de contacto “centralizado”, que combina la información del Bluetooth con la localización de los dispositivos vía GPS. Esto va en contra de numerosas recomendaciones internacionales y está prohibido por las condiciones de uso de Apple y Google para los que quieran usar su API de notificación de exposición [4].
Nuestra suposición es que no se implementaron los cambios para mejorar la privacidad de la aplicación sino que solo se cambió el tipo de sistema de rastreo de contacto de HypeLabs por OpenTrace.
CONCLUSIÓN
Una mirada amplia al tema de seguridad digital debe abarcar también los temas de privacidad. No basta con mejorar la seguridad para tener mejores aplicaciones, más respetuosas de los derechos de las personas usuarias, es necesario que también se contemple el tema de la privacidad.
Desde el trabajo de incidencia que hace Karisma – que también se aplica a otros análisis diferentes del contexto del COVID – es relevante observar que cuando nuestros análisis detectan una vulnerabilidad en la seguridad de un sitio web o de una aplicación, en general se corrige. Sin embargo, cuando los hallazgos están vinculados con la privacidad – cómo los permisos de las aplicaciones o el rastreo – no se suelen tomar en cuenta las recomendaciones, tampoco se nos explica por qué se considera que no es una afectación grave a la privacidad.
Es preocupante que no se siga el principio de “Privacidad por diseño”, a la hora de pensar los desarrollos. Cuando preguntamos al respecto, las respuestas que dan son vagas, del tipo: “vamos a evaluar el impacto de….” pero al fin y al cabo muy pocas veces se mejoran estos aspectos.
A pesar de esto queremos recalcar que para nosotros es un logro importante que luego de presentar nuestros informes sea frecuente que se consiga tener más transparencia de parte del Gobierno sobre lo que hacen estas aplicaciones.
Aún queda mucho por mejorar.
NOTAS Y REFERENCIAS:
[1] Nuestro informe analiza versiones entre hasta la 1.2.32. Al día de la redacción de este artículo la CoronApp ya va en su versión 1.2.52
[2] Ejemplo para CoronaApp: https://apkcombo.com/es-co/coronapp-colombia/co.gov.ins.guardianes/old-versions/
[3] Es el archivo “AndroidManifest.xml”el manifiesto de la aplicación. Ver aquí para más detalles: https://developer.android.com/guide/topics/manifest/manifest-intro
[4] Extracto de estas condiciones: “Your App may not request the location, Bluetooth_Admin, SpecialAccess, Privileged, or Signature permissions, or collect any device information to identify or track the precise location of end users.”, https://blog.google/documents/72/Exposure_Notifications_Service_Additional_Terms.pdf