- La app BM2, que permite revisar el estado de la batería del vehículo, recopilaba no solo coordenadas GPS sino también información de redes Wi-Fi cercanas y de torres celulares, y la enviaba a servidores remotos
- Los datos se dirigían al servidor
bm2.quicklynks.comde Leagend, desarrolladora del producto y la app, y a servidores de AMap, desarrolladora de un SDK de servicios de ubicación; se confirmó que estaban alojados respectivamente en Alibaba Cloud Hong Kong y Beijing - Según Google Play, era una app con 100K+ descargas, pero en un principio las etiquetas de privacidad de la tienda indicaban cosas como “no se comparten datos”, “no se recopilan datos” y “cifrado en tránsito”, lo que no coincidía con el comportamiento real
- En Android, el escaneo Bluetooth requiere permiso de ubicación, así que en la práctica el usuario tenía que conceder ese permiso para usar el dispositivo; en iOS, la función de monitoreo de batería seguía funcionando incluso si se rechazaba el permiso de ubicación
- Después de la actualización del 25 de julio de 2023, el SDK de AMap fue eliminado de las versiones en ambas tiendas, pero los datos de ubicación GPS siguieron enviándose a un servidor de Alibaba Cloud en Hong Kong, y la app de iPhone también enviaba la dirección del usuario
Los datos de ubicación que enviaba la app del monitor de batería
- El producto analizado es un monitor Bluetooth de batería que se conecta a los terminales de la batería del auto, se empareja con el smartphone y muestra voltaje/porcentaje, además de ejecutar una prueba de arranque
- Se compró y analizó un producto de la marca PowerTech en la tienda australiana de electrónica Jaycar Electronics, y parece ser una versión remarcada del Bluetooth 4.0 Battery Monitor de Leagend
- Productos de la misma familia también se identifican con nombres como la marca Century de Repco,
ZX-1689yLi Battery Monitor - La app de Android BM2 registra 100K+ descargas y 1.55K reseñas en Google Play
- La app BM2 para iPhone también enviaba datos de ubicación a servidores remotos, según el análisis del tráfico de red
Destinos de envío y alcance de la recopilación
- La app recopilaba no solo el voltaje de la batería, sino también coordenadas GPS, datos de torres celulares cercanas e información de puntos de acceso Wi-Fi cercanos
- En ese momento, se identificaron dos grupos de destinos para el envío de datos de ubicación
- Servidor de Leagend / app BM2:
bm2.quicklynks.com,47.244.125.231, Alibaba Cloud Hong Kong - Servidor del SDK de AMap:
dualstack-cgicol.amap.com,106.11.130.194, Alibaba Cloud Beijing
- Servidor de Leagend / app BM2:
- AMap es un proveedor chino de mapas digitales adquirido por Alibaba, y su SDK recogía no solo GPS sino también otros datos relacionados con ubicación que el teléfono puede recopilar
- Tras la actualización del 25 de julio de 2023, el SDK de AMap fue eliminado de las apps en ambas tiendas
- Se detuvo la recopilación de GPS, Wi-Fi y datos de torres celulares que se enviaban a servidores de AMap en China continental
- Los datos de ubicación GPS siguieron enviándose a un servidor de Alibaba Cloud en Hong Kong
- La app de iPhone también obtenía y enviaba la dirección del usuario
Etiquetas de privacidad en la tienda y comportamiento real
- Al 27 de junio de 2023, el desarrollador de la app BM2 actualizó las etiquetas de privacidad en Google Play y Apple App Store para indicar que recopilaba datos de ubicación precisa
- Antes de eso, lo que mostraba Google Play no coincidía con el comportamiento real de la app
- “No se comparten datos con terceros”: junto con las estadísticas de la batería se enviaban latitud y longitud a servidores de
quicklynks.com; el análisis de fallos se enviaba aumeng.com; y Wi-Fi, torres celulares y coordenadas GPS se enviaban a AMap - “No se recopilan datos”: sí se recopilaban datos de ubicación y datos relacionados con la batería
- “Cifrado en tránsito”: los datos enviados al servidor en la nube de BM2 se transmitían por HTTP sin cifrar
- “No se comparten datos con terceros”: junto con las estadísticas de la batería se enviaban latitud y longitud a servidores de
- El texto detallado de la política de privacidad incluía “Hong Kong” y “location information”
El problema estructural creado por los permisos de Android
- La app de Android exigía permiso de ubicación para funcionar, y sin ese permiso no era posible usar el dispositivo de hardware
- Desde Android 6.0, para acceder a identificadores de hardware de dispositivos externos cercanos mediante escaneo Bluetooth y Wi-Fi se requiere
ACCESS_FINE_LOCATIONoACCESS_COARSE_LOCATION - Lo que realmente necesita la app BM2 es el escaneo BLE, pero el permiso amplio de ubicación también permite acceder a datos de GPS, torres celulares y Wi-Fi, dejando espacio para abuso
- En Android 12 o superior, el escaneo BLE puede hacerse solo con el permiso BLUETOOTH_SCAN
- Según la documentación de Google, a
ACCESS_FINE_LOCATIONse le puede asignarandroid:usesPermissionFlags="neverForLocation", pero solo cuando los resultados del escaneo Bluetooth no se usan para inferir la ubicación física
Lo que se confirmó en el tráfico de red
- Se inspeccionó el tráfico de la app móvil usando el modo WireGuard de Mitmproxy
- Como BM2 no usa HTTPS, fue posible confirmar en Android y iOS el envío de latitud y longitud sin instalar certificados
- Después de que la app se conectaba al monitor de batería, enviaba una solicitud
POSTahttp://bm2.quicklynks.com:8080/api/bm2/userDevice/upload? - La solicitud incluía campos de latitud y longitud, además de muestras de voltaje de la batería, la dirección MAC del hardware,
nicknameyserialNo - En ese momento, las consultas de DNS e IP mostraban que
bm2.quicklynks.comresolvía a47.244.125.231, y la información de IP apuntaba a un AS de Alibaba en Sham Shui Po, Hong Kong
Las señales de ubicación que manejaba el SDK de AMap
- El SDK de AMap recopilaba datos de GPS, Wi-Fi y torres celulares
- Los datos celulares incluían Cell Global Identity
MCC: Mobile Country CodeMNC: Mobile Network CodeMCC + MNC: PLMN, identificador del operador móvilLAC: grupo de torres celulares dentro de un áreaCI: identificador del transmisor/receptor de la torre celular dentro de un área- En 4G se usa
TAC
- Los datos de Wi-Fi incluían la dirección MAC
BSSIDy el nombre del punto de accesoSSID - Los datos de AMap se procesaban en forma de blob binario serializado cifrado antes de escribirse en disco o enviarse por internet
- Los datos de ubicación se cifraban con una clave AES temporal, y esa clave AES se volvía a cifrar con una clave pública RSA
- Este método no depende de certificate pinning
- Sin modificar la app o sin la clave privada RSA correspondiente, es difícil ver el contenido mediante inspección de red tipo man-in-the-middle
Hardware y entorno de prueba
- El interior del hardware es simple y gira en torno a un regulador de voltaje y al MCU Bluetooth Low Energy Texas Instruments CC2541
- La CPU del CC2541 está basada en Intel 8051 de 8 bits; las generaciones posteriores de la serie CC usan arquitectura ARM Cortex
- Los SoC de la serie CC admiten una interfaz dedicada de depuración on-chip, y no se observan JTAG ni SWD
- El dispositivo admite actualizaciones OTA, y en la parte 3 se documenta un endpoint REST que devuelve el firmware por HTTP
- No se observó un shunt de detección de corriente ni otro circuito de medición de corriente, por lo que la configuración del hardware es muy simple
- Las pruebas se realizaron con una batería pequeña de plomo-ácido de 12V, el monitor BM2 y un dispositivo Android rooteado
- Como los datos de ubicación de AMap solo se escriben de memoria a base de datos cuando se detecta movimiento físico, se realizó instrumentación en tiempo de ejecución con Frida y Objection
Procedimiento de análisis dinámico y estático
- Las coordenadas GPS pueden alterarse a valores arbitrarios enganchando con Frida
android.location.Location.getLatitudeygetLongitude - Con el plugin Wallbreaker de Objection se confirmaron en el heap de la app instancias de datos de GPS, torres celulares del operador y Wi-Fi
- El APK se extrajo del dispositivo obteniendo su ruta con
adb shell pm path, y luego se descompiló con JADX - En
AndroidManifest.xml, además deFINE_LOCATION, también aparecían permisos comoCAMERA,IMAGE_CAPTURE,ACTION_VIDEO_CAPTURE,MODIFY_AUDIO_SETTINGSyRECORD_AUDIO, aunque se necesita más investigación para saber si esas funciones se usan realmente - El punto de entrada de la app es
com.stub.StubApp, y se utilizó el empaquetador comercialqihoo.util - Con frida-dexdump se volcó desde la memoria en ejecución el bytecode original ejecutable de Dalvik, y luego se convirtió a código Java legible con
dex2jary JADX - La app principal de BM2 no tenía ofuscación adicional, pero el SDK de servicios de ubicación
amapsí estaba ofuscado, y con la función de deobfuscation de JADX se recuperaron parcialmente algunos nombres de clases
1 comentarios
Opiniones de Hacker News
Es el resultado de hacer ingeniería inversa a un monitor BLE de batería de auto. Esta app tiene más de 100 mil descargas solo en Google Play.
Resultó que enviaba continuamente datos de GPS, IDs de celdas de antenas de telefonía móvil y datos de beacons Wi‑Fi a servidores en Hong Kong y China continental. En las páginas de la app en Google y Apple dice que no recopila datos personales ni los envía a terceros.
Espero que esto sirva como algunos consejos para quienes quieran analizar apps de dispositivos conectados.
https://www.amazon.de/dp/B0BLG9Z462
Si haces clic en la tercera imagen aparece una tabla comparativa, y es interesante que lo presenten como una función especial exclusiva del BM6, cuando en realidad es solo una función de la app.
El código QR del dispositivo [0] apunta a esta app: https://play.google.com/store/apps/details?id=com.dc.bm6
Por eso también revisé otras URL como https://link.quicklynks.com/bm3.html y https://link.quicklynks.com/bm4.html; esta última redirige a https://www.leagend.com/, que opera este canal de YouTube: https://www.youtube.com/channel/UCqkvyOFP5cXQ02f3h1Ns42Q
[0] http://link.quicklynks.com/bm6.html
Tampoco sé si vale la pena seguir gastando la batería del teléfono para ver en la pantalla del celular algo que el tablero ya te informa. Si es una batería fija, ¿no bastaría con usar un simple dial analógico de voltímetro?
Hoy en día es demasiado difícil encontrar dispositivos independientes que funcionen sin app. Por ejemplo, me costó encontrar una lámpara LED que permitiera elegir el color con botones en el propio aparato y sin app; encontré una, pero aun así no era posible hacer el ciclo de colores sin app.
Si la gente no prefiriera estas tonterías, sería más fácil volver a encontrar electrónicos normales.
No entiendo por qué en Android el usuario no puede impedir que una app 1) se ejecute al iniciar 2) se ejecute en segundo plano. Como mínimo debería ser un permiso aprobado por el usuario.
Eso podría bloquear una buena parte de las apps que chupan datos de esta forma; considero que Google también es cómplice.
https://grapheneos.org/
Sé que las apps pueden solicitar que se active la ubicación, pero me sorprendió que una app pudiera activarla unilateralmente, y no encontré forma de bloquearlo.
Por motivos como estos siento que es difícil confiar en cualquier teléfono.
Casos como este son la razón por la que no debemos dejar de luchar por la privacidad digital y por leyes que la protejan.
No es una cuestión de “no tengo nada que ocultar”, sino de impedir que terceros vigilen y vendan datos personales sin conocimiento ni consentimiento explícitos.
Ahora mismo estamos en medio de una guerra total por los datos, y hay que resistir con fuerza.
Me irrita que este tipo de cosas se haya vuelto prácticamente la norma cuando para los actores maliciosos casi no hay costo alguno.
Al leer esto me sentí aliviado de estar usando GrapheneOS. Llevo varios meses usándolo a diario, y todas las apps, al instalarse, reciben o se les niega explícitamente el permiso de red.
Nunca les doy permiso de red a este tipo de apps locales, ni tampoco a las apps de teclado, que siempre me han dado mala espina.
No es solo ridículo: es abiertamente hostil contra la privacidad y seguridad del usuario.
Los sistemas operativos deberían convertir el acceso a Internet en un permiso que el usuario pueda conceder o revocar. Creo que Android tenía algo así antes, e iOS no tenía nada salvo para los datos móviles.
Si compré un dispositivo que dice usar Bluetooth, pero en realidad necesita acceso a Internet, lo voy a devolver.
Si no aceptabas, no podías obtener la app. Algunos permisos todavía funcionan así, y muchos pasaron al modelo de conceder/revocar.
El acceso a Internet sigue siendo un permiso, pero Google Play ya no lo pregunta, así que cualquier app puede tenerlo. Eso sí, si no lo solicita en el manifest, no funciona.
https://netguard.me/
Para principiantes, se podrían mostrar los dominios y marcarlos en verde si Apple los puso en una lista de permitidos de alguna manera. Si no están ni en una lista de permitidos ni en una de bloqueados, podrían mostrarse en amarillo o, si los colores confunden, simplemente mostrar el nombre.
Las apps que hagan solicitudes a dominios en la lista de bloqueados deberían quedar bloqueadas en la App Store hasta una revisión adicional.
Para usuarios avanzados, estaría bueno poder tocar y ver detalles como el payload y los headers. Esta función hace mucha falta y no parece tan difícil de agregar.
[1]: https://developer.apple.com/documentation/bundleresources/en...
Creo que los proveedores de tiendas de apps deberían eliminar por completo frases como “no se recopilan datos personales ni se transmiten a terceros”.
En su lugar, deberían advertir: “esta app tiene permisos relacionados con la red, así que puede enviar los datos que quiera a donde quiera”, o “el creador de la app afirma que no entrega datos a terceros, pero nosotros no tenemos forma alguna de verificarlo”.
En la práctica, Apple o Google no pueden saber qué es un tercero. Los servidores en China y Hong Kong podrían ser de primera parte; quién sabe. Nadie lo sabe salvo el creador de la app.
Puede que al Partido Comunista Chino no le interesen demasiado los datos de una persona en particular, pero le interesan muchísimo los datos agregados. Además, se vuelven muy útiles cuando se combinan con objetivos específicos, como los datos de millones de empleados del gobierno de EE. UU. recopilados durante años [0][1].
El “gran experimento” de que el comercio abierto y el intercambio llevarían a China hacia la democracia y la libertad fracasó por completo. Al final, solo fortaleció una dictadura despiadada con ambiciones de expansión global. No hay que hacer negocios con China.
[0] https://en.wikipedia.org/wiki/Office_of_Personnel_Management...
[1] https://www.nbcnews.com/tech/security/china-spent-years-coll...
Hay que darse cuenta de que un dispositivo de monitoreo también va consumiendo lentamente aquello que está monitoreando. Al final terminás en una situación en la que tenés que monitorear activamente el monitor.
Este dispositivo BLE consume la batería del auto de forma lenta, pero segura. Algún día enviará una alerta y habrá que cargar la batería, pero pronto incluso dejará de enviar alertas.
Además, también va a chuparse los datos del celular y enviarlos a China, y consumirá la batería del teléfono. Cuesta imaginar un peor regalo para las fiestas; es una rara triple amenaza para el consumidor.
Hablando en serio, la autodescarga es aproximadamente un orden de magnitud mayor que la de este monitor.
Android necesita una función para dar datos GPS falsos en dispositivos reales. Sería útil para apps que piden GPS sin ningún motivo.
Si una app de linterna necesita GPS para encenderse, no hay problema. Mi ubicación actual es el monte Kilimanjaro.
Los desarrolladores incluso intentan explicarle al usuario con un popup algo como “tocá Permitir para que Bluetooth funcione”.
A estas alturas, es razonable asumir que estos dispositivos están recopilando grandes cantidades de datos y enviándolos a la sede central. Tampoco me sorprendería que los routers TP-Link estuvieran enviando todo a China.
Aunque esto no se limita a China; también es posible que el iPhone que uso ahora esté enviando todas mis pulsaciones de teclas y datos de ubicación a EE. UU.
Si sospechás que un router TP-Link está enviando todo a un servidor remoto, basta con monitorear el tráfico.
Cuando mis amigos se burlan de mi obsesión con la privacidad y la recolección de datos, les muestro justamente casos como este.
No hay motivos para creer que lo hagan con fines maliciosos, pero en la práctica no hay forma de saberlo. Tal vez sea simple ignorancia o incompetencia.
La cantidad de datos de ubicación que recopilan los fabricantes de dispositivos es considerable. Si los están monetizando, me pregunto si eso podría considerarse malicioso incluso sin haberlo revelado al usuario final.
El AMap SDK que usa la app recopila muchos más datos de ubicación. En este caso parece probable que el objetivo sea mejorar la precisión de los servicios de ubicación y del software de mapas, y no lo veo como algo malicioso en sí mismo.
Pero si ese comportamiento no se les informó a los usuarios y desarrolladores, la cosa cambia. El sitio está en chino [1], y ni siquiera sé si habrá alguien que lea los términos detallados para comprobarlo.
[1] https://lbs.amap.com/api/lightweight-android-sdk/download
Me recuerda a cuando antes pensaba que los botones “Like” de Facebook en todos los sitios web eran inofensivos, hasta que me enteré de lo amplio que era el seguimiento sin consentimiento.
La forma típica de China es recopilar datos deliberadamente de maneras que parecen inofensivas por fuera, o dejar abiertas de par en par fallas de seguridad que podrían explotarse más adelante. Si los descubren, dicen: “lo sentimos, lo arreglaremos de inmediato”.
Lo peor es que estas conductas no tienen consecuencias. Google, la UE o la FTC deberían imponer una multa.