Cara membebaskan jam tangan pintar Garmin Anda dari layanan cloud yang tidak berfungsi karena serangan

Penulis artikel ini adalah peretas terkenal Andrew Hwang (bunnie)



Saya sering berkata: jika kita percaya bahwa teknologi itu ajaib, maka kita berisiko menjadi sandera . Saya baru-baru ini mengalami situasi ini, tetapi untungnya saya diselamatkan oleh open source.



Saat tulisan ini dibuat, Garmin menderita serangan ransomware besar - besaran . Ini memengaruhi saya karena saya memiliki jam tangan Garmin Instinct . Saya sangat senang dengan mereka dan dalam banyak hal mereka hanya ajaib, begitu banyak kemungkinan yang dikemas ke dalam gadget sekecil itu.



Selain itu, saya memiliki hobi - cadik dayung [kano cadik - kira-kira. per.]



Saya yakin jam tangan GPS adalah fitur keselamatan yang sangat diperlukan, terutama dalam navigasi, karena sulit untuk menilai kecepatan air saat Anda berada lebih dari beberapa ratus meter dari permukaan tanah. Jika Anda terjebak dalam arus yang buruk, tanpa memahami situasinya, Anda berisiko terlempar ke laut atau lebih buruk lagi.



Mungkin ada arus ekstrim di sekitar Singapura. Saat pasang berubah, Laut Cina Selatan akhirnya menemukan jalannya ke Laut Andaman melalui Selat Singapura, memicu arus berbahaya yang berubah seiring waktu. Jadi setelah setiap pukulan, data GPS saya diunggah ke awan Garmin Connect untuk tinjauan rute guna menandai perubahan berbahaya dalam arus pasang surut.



Meskipun mengunggah data semacam itu ke cloud Garmin menimbulkan risiko privasi yang jelas dan nyata, kita semua memahami kompromi: hanya ada sedikit waktu untuk mengkhawatirkan hal-hal semacam itu, dan layanan bekerja dengan baik di luar kotak.



Sampai kemarin.



Kami baru saja menabrak arus yang sangat tidak biasa, dan rekan mendayung saya ingin melihat kecepatan di beberapa tempat yang sulit. Saya masuk ke aplikasi untuk mendapatkan data dan ... yah, saya menemukan bahwa Garmin sedang diserang.







Data Garmin telah disandera, termasuk data dayung pribadi saya: sebagian kecil dari hidup saya telah menjadi sandera teknologi.



Sekelompok teman menyuruh saya mencoba Strava. Kabar baiknya adalah Garmin memungkinkan Anda mengekstrak file data dari jam tangan Instinct Anda untuk diunggah ke layanan pihak ketiga. Anda hanya perlu menghubungkan jam tangan ke port USB biasa, dan itu akan muncul sebagai perangkat penyimpanan massal.



Kabar buruknya adalah, ketika saya mencoba membuat akun Strava, semua bendera merah padam. Situs web ini penuh dengan templat gelap, dan setelah mengklik tombol Tolak Akses Strava ke Data Kesehatan Saya, serangkaian kotak dialog muncul:







Klik







Tolak ... Klik Tolak Izinkan ...







Klik Oke ...



Tiga klik untuk menolak akses, dan jika Anda dengan santai terus menekan tombol bawah, maka Anda akan membuat pilihan lain - secara tidak sengaja. Setelah itu, saya disambut dengan daftar orang-orang yang harus diikuti ( apakah mereka belajar banyak tentang saya dari alamat email yang sama? ) Dan kemudian kotak dialog rumit di mana jika Anda menjawab salah, Anda akan diminta untuk memasukkan informasi kartu kredit Anda sebagai bagian dari "gratis versi percobaan ".



Karena Garmin telah menghasilkan lebih dari $ 200 dengan menjual perangkat, mengumpulkan data pribadi saya hanyalah makanan penutup; tapi untuk Strava, data saya adalah yang utama. Secara pribadi, cukup jelas bagi saya bahwa Strava menjelaskan kepada investornya bahwa mereka akan mendapat untung besar dengan memonetisasi data pribadi saya, termasuk informasi kesehatan saya.



Ini benar-benar tidak bisa saya terima. Alih-alih membebaskan data dari jaminan, beralih dari Garmin ke Strava seperti pergi dari wajan ke dalam api.



Saya berencana untuk naik perahu lagi lusa dan akan sangat bagus untuk mendapatkan beberapa analisis kecepatan. Tetapi saya sangat marah dengan Strava sehingga saya tidak lagi mencari opsi lain, tetapi memutuskan untuk mengembangkan alternatif saya sendiri dengan perlindungan data pribadi yang andal.



Saya dengan senang hati menemukan utilitas open source yang disebutgpsbabel ( terima kasih kepada para pengembang! Saya mengganggu! ), yang mengubah data dari format Garmin semi - (?) berpemilik ke format .GPX yang kompatibel. Dari sana, saya dapat mengekstrak potongan parsing XML dan menggabungkannya dengan OpenStreetMaps melalui Folium API untuk membuat peta khusus dengan data saya.



Meskipun saya "tersesat" saat mencoba menggunakan Google Maps API, yang menempatkan tanda air "khusus pengembangan" yang mengerikan di semua ubin peta, hanya butuh satu malam. Bukan membuang-buang waktu saya, semua hal dipertimbangkan, tetapi sebagian besar masalah menemukan potongan open source yang tepat dan merekatkannya bersama-sama dengan Python (omong-omong, Python adalah lem yang bagus, tapi hal struktural yang mengerikan. Jangan buat proyek besar darinya). Kualitas kodenya cukup buruk, tetapi Python mengizinkannya, dan itu melakukan tugasnya. Dengan mengingat peringatan ini, Anda dapat menggunakannya sebagai titik awal untuk mencari sesuatu yang lebih baik.



Sekarang saya memiliki kendali penuh atas data saya dan dapat memvisualisasikannya secara bermakna. Misalnya,menampilkan kecepatan sebagai peta panas sepanjang lintasan dengan lingkaran yang proporsional dengan kecepatan saat ini, dan teks yang, saat mengarahkan kursor, menunjukkan kecepatan dan detak jantung tertentu saat ini : Ini adalah data yang secara khusus saya perlukan dalam format yang diperlukan, tidak lebih dan tidak kurang ... Selain itu, masalahnya adalah file html tunggal yang dapat ditautkan secara langsung . Tanpa analitik, tanpa cookie. Hanya data yang saya putuskan untuk dibagikan dengan Anda. Berikut adalah potongan kode yang saya gunakan untuk memplot data peta:















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)


Seperti yang saya katakan, kodenya bukan dengan kualitas terbaik, tetapi berfungsi dan cepat untuk ditulis.



Lebih baik lagi, saya tidak mengunggah data lagi ke cloud - ada kesenangan tak berwujud tertentu dalam menghapus saluran pengawasan lain dari hidup saya tanpa kehilangan kualitas atau kenyamanan apa pun.



Ini juga merupakan metahistory yang menarik tentang seberapa baik ekosistem open source saat ini. Saat awan Garmin turun, saya dapat mengganti fitur paling penting hanya dalam satu hari, dengan menyusun berbagai kerangka kerja sumber terbuka.



Inti dari open source bukanlah untuk menyusun materi secara ritual. Intinya adalah menyadari bahwa teknologi bukanlah sihir: bahwa ada alternatif yang dapat dipilih oleh siapa saja untuk membebaskan diri dari potensi situasi penyanderaan. Jika kita mau, open source memungkinkan untuk membuat dan menjalankan alat dan layanan kita sendiri.



Lihat juga:






All Articles