Como liberar seu smartwatch Garmin de serviços em nuvem que não estão funcionando devido a um ataque

O autor deste artigo é o famoso hacker Andrew Hwang (bunnie)



. Costumo dizer: se acreditarmos que a tecnologia é mágica, corremos o risco de nos tornarmos seus reféns . Recentemente entrei nessa situação, mas felizmente fui salvo pelo código aberto.



No momento em que este livro foi escrito, a Garmin estava sofrendo um ataque massivo de ransomware . Isso me afetou porque eu tenho um relógio Garmin Instinct . Estou muito feliz com eles e em muitos aspectos eles são simplesmente mágicos, tantas possibilidades estão reunidas em um dispositivo tão pequeno.



Além disso, tenho um hobby - remo canoa [canoa com canoa - aprox. por.]



Acredito que um relógio GPS seja um dispositivo de segurança indispensável, principalmente na navegação, pois é difícil avaliar a velocidade da água quando se está a mais de algumas centenas de metros do solo. Se você for pego por uma corrente ruim, sem entender a situação, você corre o risco de ser jogado no mar ou ainda pior.



Pode haver correntes extremas em torno de Cingapura. Conforme as marés mudam, o Mar da China Meridional eventualmente encontra seu caminho para o Mar de Andaman através do Estreito de Cingapura, desencadeando correntes traiçoeiras que mudam com o tempo. Portanto, após cada braçada, meus dados GPS são carregados para a nuvem Garmin Connect para revisão de rota para sinalizar mudanças perigosas nas correntes de maré.



Embora o upload desses dados para a nuvem da Garmin represente um risco claro e real para a privacidade, todos nós entendemos a desvantagem: há pouco tempo para se preocupar com essas coisas, e o serviço funcionou bem desde o início.



Até ontem.



Estávamos atingindo algumas correntes particularmente incomuns, e meu parceiro de remo queria ver as velocidades em alguns lugares difíceis. Entrei no aplicativo para obter os dados e ... bem, descobri que a Garmin estava sob ataque.







Os dados da Garmin foram feitos reféns, incluindo os meus dados pessoais de remo: uma pequena parte da minha vida tornou-se refém da tecnologia.



Um grupo de amigos me disse para experimentar Strava. A boa notícia é que o Garmin permite que você extraia arquivos de dados do seu relógio Instinct para carregá-los em serviços de terceiros. Você só precisa conectar o relógio a uma porta USB normal e ele aparecerá como um dispositivo de armazenamento em massa.



A má notícia é que, quando tentei criar uma conta Strava, todas as bandeiras vermelhas dispararam. O site está cheio de modelos escuros e depois de clicar no botão Negar acesso do Strava aos meus dados de saúde, uma série de caixas de diálogo apareceu:







Clique em







Negar ... Clique em Negar Permitir ...







Clique em OK ...



Três cliques para negue o acesso e, se continuar relaxadamente a pressionar o botão inferior, fará outra escolha - por acidente. Depois disso, fui saudado com uma lista assustadora de pessoas a serem seguidas ( eles aprenderam tanto sobre mim pelo mesmo endereço de e-mail? ) E então uma caixa de diálogo complicada onde se você responder incorretamente, será solicitado que você insira as informações do seu cartão de crédito como parte do " versão de teste ".



Como a Garmin já ganhou mais de US $ 200 vendendo o dispositivo, coletar meus dados pessoais é apenas uma sobremesa; mas para Strava, meus dados são o curso principal. Pessoalmente, está muito claro para mim que a Strava está deixando claro para seus investidores que eles terão um grande lucro monetizando meus dados pessoais, incluindo minhas informações de saúde.



Isso é absolutamente inaceitável para mim. Em vez de liberar dados colaterais, ir de Garmin para Strava é como ir de uma frigideira para o fogo.



Pretendo sair no barco novamente depois de amanhã e seria ótimo obter algumas análises de velocidade. Mas eu estava com tanta raiva do Strava que não procurei mais outra opção, mas decidi desenvolver minha própria alternativa com proteção confiável de dados pessoais.



Felizmente descobri um utilitário de código aberto chamadogpsbabel ( graças aos desenvolvedores! Eu sou chato! ), que converte dados do formato semi - (?) proprietário da Garmin em um formato .GPX compatível. A partir daí, consegui extrair os pedaços de análise XML e combiná-los com o OpenStreetMaps por meio da API Folium para criar mapas personalizados com meus dados.



Mesmo que eu "tenha me perdido" tentando usar a API do Google Maps, que coloca marcas d'água horríveis "somente para desenvolvimento" em todos os blocos do mapa, demorou apenas uma noite. Não foi a melhor perda de tempo, considerando todas as coisas, mas foi principalmente uma questão de encontrar as peças de código aberto certas e colá-las juntas em Python (a propósito, Python é uma ótima cola, mas um material estrutural terrível. Não faça grandes projetos com isso). A qualidade do código é péssima, mas o Python permite e faz seu trabalho. Com essas advertências em mente, você pode usá-lo como um ponto de partida para procurar algo melhor.



Agora tenho controle total sobre meus dados e posso visualizá-los de maneira significativa. Por exemplo,exibir a velocidade como um mapa de calor ao longo do percurso com círculos proporcionais à velocidade no momento e texto que, ao passar o cursor, mostra a velocidade específica e a frequência cardíaca no momento: Estes são exatamente os dados de que preciso no formato exigido, nem mais nem menos ... Além disso, o problema é um único arquivo html que pode ser vinculado diretamente . Sem análises, sem cookies. Apenas os dados que decidi compartilhar com vocês. Aqui está o trecho de código que estou usando para plotar os dados do 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 eu disse, o código não é da melhor qualidade, mas funciona e é rápido de escrever.



Melhor ainda, não envio mais nenhum dado para a nuvem - há um certo prazer intangível em remover outro canal de vigilância da minha vida sem perder nada em qualidade ou conveniência.



É também uma meta-história interessante sobre como o ecossistema de código aberto está indo hoje. Quando a nuvem Garmin caiu, consegui substituir os recursos mais importantes em apenas um dia, reunindo vários frameworks de código aberto.



O objetivo do código aberto não é compilar material ritualmente. A questão é perceber que a tecnologia não é mágica: que existe uma alternativa que qualquer um pode escolher para se livrar de uma situação de refém em potencial. Se quisermos, o código aberto torna possível criar e executar nossas próprias ferramentas e serviços.



Veja também:






All Articles