Radar COVID. reversing

Javier Tobal
3 min readAug 17, 2020

Llevamos unos días hablando sobre la privacidad y seguridad de la app del Gobierno de España para el rastreo de contactos relacionados con el COVID, el modelo DP-3T, etc. (https://www.lasexta.com/noticias/nacional/radar-covid-examen-segura-app-rastreo-gobierno_202008125f33bb4bffbf6a00012b7af7.html).

Así que además de opinar, decidí este fin de semana analizar el funcionamiento de la APP por dentro, aplicando alguna técnica básica de reversing a la versión Android de la APP.

[Nota bene: entiendo que, en este caso, la ingeniería inversa es una técnica legítima: no he modificado la APP, la he descargado del market oficial, no voy a descubrir ningún secreto de los desarrolladores y, en definitiva, soy un usuario legítimo de la APP que, simplemente, quiere analizar su funcionamiento]

Herramientas

He usado sólo estas dos herramientas:

  1. APKExtractor v4.2.9 de Meher Prasad (https://play.google.com/store/apps/details?id=com.ext.ui&hl=es)
  2. jadx v1.1.0 de skylot (https://github.com/skylot/jadx)

jadx permite decompilar directamente desde el APK y, en mi opinión, mejora la clásica combinación dex2jar + jd-gui.

Análisis 1. AndroidManifest.xml

AndroidManifest.xml

Aquí vemos que la APP requiere, como mínimo, la versión del SDK de Android 23, esto es, Android 6.0 lanzado en 2015. Según mis datos, esto supone que se soporta el 85% de los dispositivos Android que hay en España.

Los permisos que necesita la APP para funcionar son muy básicos, como ya se ha comentado, muchos menos de los requeridos por cualquier aplicación que manejamos a diario.

El siguiente ejemplo es de Maldita.es (https://maldita.es/malditatecnologia/2020/08/10/permisos-app-radar-covid-privacidad-tiktok/):

Fuente: maldita.es

En concreto, se piden los siguientes permisos:

  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.BLUETOOTH
  • android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
  • android.permission.RECEIVE_BOOT_COMPLETED
  • android.permission.WAKE_LOCK
  • android.permission.FOREGROUND_SERVICE
  • com.google.android.c2dm.permission.RECEIVE
  • com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE

Estos permisos son, básicamente, autoexplicativos. El último es necesario para su integración con Google Play (el market oficial) y el penúltimo con la recepción de notificaciones PUSH.

En relación al funcionamiento del API de exposición, el desarrollo conjunto de Google y Apple para permitir el desarrollo de aplicaciones como el “Radar COVID” que estamos analizando, la APP sólo declara lo siguiente:

<receiver android:name=”org.dpppt.android.sdk.internal.nearby.ExposureNotificationBroadcastReceiver” android:permission=”com.google.android.gms.nearby.exposurenotification.EXPOSURE_CALLBACK” android:exported=”true”>

Este permiso permite que el API avise a la APP de que se ha detectado una exposición (a una persona diagnosticada positivamente) entre los contactos registrados.

La referencia de este API está aqui: https://developers.google.com/android/exposure-notifications/verification-system

Análisis 2. RadarCovidApplication (es.gob.radarcovid)

RadarCovidApplication

Poco que añadir a este código: se registran los listeners para los eventos con sus filtros y se descarga información del servidor (radarcovid.covid19.gob.es). Aquí vemos que se registra una acción “ACTION_UPDATE” del SDK de D3P-T (la librería org.dpppt.sdk).

Es cierto que la aplicación registra la acción “android.location.MODE_CHANGED”, pero se trata simplemente de avisar al usuario cuando desactiva la localización porque, como ya se ha explicado, el API de Androi de Bluetooth requiere que la localización esté activa para funcionar correctamente (la explicación completa en Xataka: https://www.xatakandroid.com/sistema-operativo/que-radar-covid-no-funciona-desactivamos-ubicacion-asi-funciona-permiso-bluetooth-android).

Comentario

Repasando el código fuente (decompilado) de la aplicación Radar COVID no se detecta ningún uso “inapropiado”: no se obtiene la localización del usuario en ningún momento, no se accede a ningún fichero del dispositivo, no se accede a ningún servicio de telefonía (para, por ejemplo, obtener el MSISDN o enviar un SMS), …

En definitiva, aunque no disponemos del código fuente documentado para hacer una revisión más profunda, esta APP no parece ningún “caballo de Troya”.

--

--