Cómo liberar su reloj inteligente Garmin de los servicios en la nube que no funcionan debido a un ataque

El autor de este artículo es el famoso hacker Andrew Hwang (bunnie).



A menudo digo: si creemos que la tecnología es mágica, corremos el riesgo de convertirnos en sus rehenes . Recientemente me encontré en esta situación, pero afortunadamente me salvó el código abierto.



En el momento de escribir este artículo, Garmin está sufriendo un ataque masivo de ransomware . Me afectó porque tengo un reloj Garmin Instinct . Estoy muy contento con ellos y en muchos sentidos son simplemente mágicos, muchas posibilidades están empaquetadas en un dispositivo tan pequeño.



Además, tengo un pasatiempo: remar en un estabilizador [canoa estabilizador - aprox. por.]



Creo que un reloj GPS es una característica de seguridad indispensable, especialmente en la navegación, porque es difícil juzgar la velocidad del agua cuando estás a más de unos cientos de metros del suelo. Si queda atrapado en una mala corriente, sin comprender la situación, corre el riesgo de ser arrojado al mar o algo peor.



Puede haber corrientes extremas alrededor de Singapur. A medida que cambian las mareas, el Mar de China Meridional finalmente encuentra su camino hacia el Mar de Andaman a través del Estrecho de Singapur, provocando corrientes traicioneras que cambian con el tiempo. Entonces, después de cada carrera, mis datos de GPS se cargan en la nube Garmin Connect para revisar la ruta y señalar cambios peligrosos en las corrientes de marea.



Si bien cargar esos datos en la nube de Garmin representa un riesgo de privacidad claro y real, todos comprendemos la compensación: hay poco tiempo para preocuparse por esas cosas y el servicio funcionó bien desde el primer momento.



Hasta ayer.



Estábamos golpeando algunas corrientes particularmente inusuales, y mi compañero de remo quería ver las velocidades en algunos lugares difíciles. Entré en la aplicación para obtener los datos y ... bueno, descubrí que Garmin estaba siendo atacado.







Los datos de Garmin han sido tomados como rehenes, incluidos mis datos personales de remo: una pequeña parte de mi vida se ha convertido en rehén de la tecnología.



Un grupo de amigos me dijo que probara Strava. La buena noticia es que Garmin le permite extraer archivos de datos de su reloj Instinct para cargarlos en servicios de terceros. Solo necesita conectar el reloj a un puerto USB normal y aparecerá como un dispositivo de almacenamiento masivo.



La mala noticia es que, cuando intenté crear una cuenta de Strava, todas las banderas rojas se apagaron. El sitio web está lleno de plantillas oscuras, y después de hacer clic en el botón Denegar acceso de Strava a mis datos de salud, apareció una serie completa de cuadros de diálogo:







Haga clic en







Denegar ... Haga clic en Denegar Permitir ...







Haga clic en Aceptar ...



Tres clics para niegue el acceso, y si continúa presionando tranquilamente el botón inferior, tomará otra decisión, por accidente. Después de eso, fui recibido con una inquietante lista de personas a las que seguir ( ¿aprendieron tanto sobre mí con una dirección de correo electrónico? ), Y luego un cuadro de diálogo complicado en el que, si responde incorrectamente, se le pedirá que ingrese la información de su tarjeta de crédito como parte de la versión de prueba ".



Como Garmin ya ha ganado más de $ 200 vendiendo el dispositivo, recopilar mis datos personales es solo un postre; pero para Strava, mis datos son el plato principal. Personalmente, para mí está bastante claro que Strava les está dejando en claro a sus inversores que obtendrán una gran ganancia monetizando mis datos personales, incluida mi información médica.



Esto es absolutamente inaceptable para mí. En lugar de liberar datos de la garantía, pasar de Garmin a Strava es como pasar de una sartén al fuego.



Planeo volver a salir en el barco pasado mañana y sería genial obtener algunos análisis de velocidad. Pero estaba tan enojado con Strava que ya no busqué otra opción, sino que decidí desarrollar mi propia alternativa con protección confiable de datos personales.



Felizmente descubrí una utilidad de código abierto llamadagpsbabelgracias a los desarrolladores! ¡Soy molesto! ), que convierte los datos del formato semi - (?) propietario de Garmin a un formato .GPX compatible. A partir de ahí, pude extraer los fragmentos de análisis XML y combinarlos con OpenStreetMaps a través de la API de Folium para crear mapas personalizados con mis datos.



Aunque me "perdí" tratando de usar la API de Google Maps, que coloca horribles marcas de agua "solo para desarrollo" en todos los mosaicos de mapas, solo tomó una noche. No es la mejor pérdida de mi tiempo, considerando todas las cosas, pero fue principalmente una cuestión de encontrar las piezas de código abierto correctas y pegarlas juntas en Python (por cierto, Python es un gran pegamento, pero un material estructural terrible. No hagas grandes proyectos). La calidad del código es bastante mala, pero Python lo permite y hace su trabajo. Con estas advertencias en mente, puede usarlo como punto de partida para buscar algo mejor.



Ahora tengo el control total sobre mis datos y puedo visualizarlos de manera significativa. Por ejemplo,mostrar la velocidad como un mapa de calor a lo largo del curso con círculos proporcionales a la velocidad en el momento, y texto que, al pasar el cursor, muestra la velocidad y frecuencia cardíaca específicas en el momento: Estos son los datos que necesito específicamente en el formato requerido, ni más ni menos ... Además, el problema es un solo archivo html al que se puede vincular directamente . Sin análisis, sin cookies. Solo los datos que decidí compartir contigo. Aquí está el fragmento de código que estoy usando para trazar los datos del mapa:















def plot_osm_map(track, output='speed-map.html', hr=None):
    for i in range(len(track['speed'])):
        track['speed'][i] = speed_conversion(track['speed'][i])
    speeds = track['speed']
    minima = min(speeds)
    maxima = max(speeds)

    norm = matplotlib.colors.Normalize(vmin=minima, vmax=maxima, clip=True)
    mapper = cm.ScalarMappable(norm=norm, cmap=cm.plasma)
    m = folium.Map(location=[track['lat'][0], track['lon'][0]], zoom_start=15)
    for index in range(len(track['lat'])):
        if track['speed'][index] == 0:
            track['speed'][index] = 0.01
        else:
            track['speed'][index] = track['speed'][index]
        if hr:
            try:
                tooltip=str(track['speed'][index]) + ' ' + str(hr['hr'][index]) +'bpm'
            except:
                tooltip=str(track['speed'][index])
        else:
            tooltip=str(track['speed'][index])
        folium.CircleMarker(
            location=(track['lat'][index], track['lon'][index]),
            radius=track['speed'][index]**2 / 8,
            tooltip=tooltip,
            fill_color=matplotlib.colors.to_hex(mapper.to_rgba(track['speed'][index])),
            fill=True,
            fill_opacity=0.2,
            weight=0,
        ).add_to(m)

    m.save(output)


Como dije, el código no es de la mejor calidad, pero funciona y fue rápido de escribir.



Mejor aún, ya no subo ningún dato a la nube; hay un cierto placer intangible en eliminar otro canal de vigilancia en mi vida sin perder nada en calidad o conveniencia.



También es una metahistoria interesante sobre qué tan bien le está yendo al ecosistema de código abierto en la actualidad. Cuando se cayó la nube de Garmin, pude reemplazar las funciones más importantes en solo un día, reuniendo varios marcos de código abierto.



El objetivo del código abierto no es compilar material de forma ritual. La cuestión es darse cuenta de que la tecnología no es mágica: que existe una alternativa que cualquiera puede elegir para liberarse de una posible situación de rehenes. Si lo queremos, el código abierto permite crear y ejecutar nuestras propias herramientas y servicios.



Ver también:






All Articles