Kategorie
Android Epidemia iOS Zrób to sam

Co tak naprawdę aplikacja ProteGO Safe nadaje przez Bluetooth?

Ministerstwo Cyfryzacji pisze, że w aplikacji ProteGO Safe “informacje o napotkanych urządzeniach nie zawierają żadnych danych o ich właścicielach”. Ja twierdzę, że czasem zawierają. Komu wierzyć? Nikomu! Z niniejszego artykułu dowiesz się, jak samemu sprawdzić, co ta aplikacja rzeczywiście umieszcza w komunikatach nadawanych przez Bluetooth.

Na warsztat bierzemy ProteGO Safe w wersji 3.0.3, zawierającej bibliotekę programistyczną OpenTrace. W dokładnie taki sam sposób będzie można powtórzyć badania, gdy OpenTrace zostanie zastąpiona przez Exposure Notification produkcji Apple i Google (więcej o różnicach przeczytasz tutaj). Do odczytu treści komunikatów użyjemy systemów Android i Windows 10 oraz kilku darmowych aplikacji.

Inne teksty związane z epidemią koronawirusa

[13.03.2020] o projekcie „Stop the pandemic” i tym, że jego autorzy prosili o znacznie więcej danych niż powinni
[20.03.2020] w którym zaglądam do środka aplikacji „Kwarantanna Domowa” i opisuję, co znalazłem w środku
[29.03.2020] w którym opisuję dlaczego smartfony nie bardzo nadają się do śledzenia interakcji między ludźmi
[03.04.2020] w którym piszę o zapowiadanej przez Ministerstwo Cyfryzacji apce „ProteGO” i o tym, że nie zadziała ona zgodnie z oczekiwaniami
[21.04.2020] w którym piszę o protokole Contact Tracing autorstwa Apple+Google i projekcie OpenTrace
[26.04.2020] w którym opowiadam, jak można sprawdzić, co robi aplikacja mobilna i dlaczego otwarte źródła to nie wszystko
[29.04.2020] w którym mając umowę szacuję koszty napisania od zera aplikacji Kwarantanna Domowa
[09.05.2020] w którym pokazuję, jak sprawdzić zawartość komunikatów wysyłanych w eter przez ProteGO Safe
[04.06.2020] w którym opisuję kontrowersyjną architekturę aplikacji ProteGO Safe 4.1.0-rc.1
[16.07.2020] w którym pokazuję, że aplikacja ProteGO nie działa
[31.08.2020] w którym podaję statystyki ProteGO Safe u progu nowego roku szkolnego
[27.10.2020] w którym podaję statystyki STOP COVID (dawniej ProteGo Safe) przed Wszystkich Świętych
[05.11.2020] w którym opisuję, co będzie, jeśli apka STOP COVID (dawniej ProteGo Safe) stanie się obowiązkowa

W pierwszym kroku instalujemy na telefonie komórkowym z systemem Android aplikację ProteGO Safe, rozpoczynamy proces rozgłaszania komunikatów przez system Bluetooth i upewniamy się, że w rolecie systemowej widnieje komunikat pochodzący z aplikacji (literówkę ignorujemy).

Testy przy użyciu drugiego telefonu

Bierzemy drugi telefon z Androidem i instalujemy na nim instalujemy darmową aplikację BLE Scanner.

Po uruchomieniu widzimy listę urządzeń wykrywanych przez Bluetooth. Jeśli jest tylko jedno (nasz pierwszy telefon), to sytuacja jest prosta, ale zazwyczaj odbierzemy też sygnały z krokomierza, słuchawek albo i telewizora sąsiada. Kładziemy więc dwa telefony obok siebie i klikamy ikonkę radaru w pasku tytułowym. Otwiera się okienko pokazującego odbierane sygnały w trzech umownych strefach – “tuż obok”, “blisko” i “daleko” (tylko tyle można wywnioskować z siły tłumienia sygnału).

Telefon z ProteGO Safe powinien być przedstawiony gdzieś na dole, zapamiętujemy kolor i liczbę w kółku, potem wracamy do listy urządzeń. Tam klikamy pozycję o takim samym kolorze (liczba powinna być zbliżona do zapamiętanej). Klikamy przycisk „Connect”.

Powinniśmy zobaczyć listę serwisów Bluetooth, wśród których dostrzeżemy napis „6E9E7830-F4C7-4717-B0D8-525D30181121”. Jeśli go tam nie ma, wracamy do listy urządzeń i szukamy dalej.

Jeśli podany serwis został znaleziony, rozwijamy listę tzw. charakterystyk. Powinniśmy zobaczyć samotną pozycję „8FBFDF09-5EB4-4F68-AC16-6CD2275D07CA”. Zarówno oznaczenie serwisu jak i nazwa charakterystyki pochodzą z projektu ProteGO Safe, więc nie ma mowy o pomyłce. Skąd to wiadomo? Odpowiedź w dalszej części tekstu.

Póki co klikamy kółko z literą “R” i cieszymy się podglądem wiadomości.

Na obrazku widać komunikat rozgłaszany przez ProteGO Safe poprzez Bluetooth Low Energy. Wartość na żółto to reprezentacja tekstowa, kolorem zielonym oznaczyłem tę samą zawartość przedstawioną w systemie szesnastkowym.

Gdy przyjrzymy się zawartości datagramu, dostrzeżemy tam losowy identyfikator zaczynający się od “aqLm...”, lecz za nim dołączony jest ciąg znaków “Nexus 5X” który wydaje się o tyle mniej losowy, że aplikację ProteGO Safe zainstalowałem na urządzeniu Nexus 5X. Porównajmy sobie teraz tę obserwację z publikacją Ministerstwa Cyfryzacji: “informacje o napotkanych urządzeniach nie zawierają żadnych danych o ich właścicielach, są anonimowe i zakodowane”. No tak nie do końca, bo ja na przykład mam telefon OnePlus 3 i całkiem możliwe, że jestem jedynym użytkownikiem tego modelu we Wrocławiu (gdy piszę te słowa, na OLX można znaleźć siedem takich urządzeń w całej Polsce, najbliższy w Zgorzelcu). Informacja o tym modelu jest prawie na pewno unikalna w obrębie całego osiedla a może i dzielnicy.

Testy przy użyciu Windows 10

W komputerze z Windows 10 będziemy potrzebować nadajnika Bluetooth obsługującego standard 4.1, w którym wprowadzono sposób komunikacji określany jako Low Energy (Bluetooth LE, BLE). Znajdziemy go w prawie każdym laptopie, w kartach wifi z górnej półki, z rzadka w płytach głównych (raczej tych lepszych) no i w postaci śmiesznie tanich dongli na USB.

Z tymi donglami problem jest taki, że 107% udziału w rynku ma Aliexpress zaś tamtejsi dostawcy nie przykładają przesadnie wielkiej wagi do zgodności towaru z opisem. W zasadzie nie przykładają niczego do niczego, często wtykają w kopertę co się trafi. Możemy trafić w moduł zgodny z 4.0 i wtedy klops. Z drugiej zaś strony na poniższej fotce widać opakowanie z napisem “4.0”, wewnątrz którego mamy eleganckie 4.1.

Najbezpieczniejszą strategią wydaje się więc kupowanie modeli obsługujących standard 5.0 – dzięki zgodności z wcześniejszymi wersjami standardu na pewno nie zabraknie w nich obsługi BLE.

Uwaga!

Mam dla Ciebie propozycję. Jeśli nie masz jeszcze konta na Aliexpress a chcesz coś stamtąd zamówić, skorzystaj z poniższego linku afiliacyjnego. Ty nie poniesiesz żadnych dodatkowych kosztów a ja (jeśli wszystko pójdzie dobrze) dostanę niewielką prowizję od Twoich zakupów. W zamian obiecuję ujawnić informacje o finansowej stronie bloga – z uwzględnieniem takich właśnie przychodów.

Oto link polecający: https://a.aliexpress.com/_dSHaTmL

Jeśli chcesz mnie sprawdzić, to spytaj mailem albo w komentarzach, ile mam już udanych polecanek, potem załóż konto, złóż zamówienie i spytaj ponownie. Będzie wiadomo, czy kręcę (serio – podzielę się tą informacją w jednym z nadchodzących tekstów).

Aby upewnić się, że nasz Windows 10 ma wszystko, co potrzeba, włączamy menedżera urządzeń i rozwijamy kategorię “Bluetooth”. Jeśli jest tam wpis “Moduł wyliczający Bluetooth LE” to jest dobrze i możemy iść dalej.

W kolejnym kroku instalujemy program Bluetooth LE Lab dostępny w Microsoft Store. Po zainstalowaniu wyświetli on zapewne komunikat, że nie ma żadnych sparowanych urządzeń BLE. Wówczas należy przejść do ustawień Bluetooth i sparować komputer z telefonem na którym uruchamiamy – jest to wymóg oprogramowania pod Windows, bo sam odbiór rozgłaszanych komunikatów nie wymaga ustanawiania trwałego połączenia.

Na urządzeniu mobilnym aktywujemy Bluetooth, na komputerze klikamy UstawieniaUrządzeniaDodaj urządzenie BluetoothBluetooth (myszy, klawiatury…) i wybieramy nasz telefon. Może się zdarzyć, że operację trzeba będzie przeprowadzić dwukrotnie, bo nie zawsze wszystkie profile (tryby działania) przyłączane są naraz.

Gdy wszystko pójdzie dobrze, Bluetooth LE Lab pokaże nasze urządzenie

Klikamy ikonkę urządzenia, widzimy listę serwisów i charakterystyk

Ponownie widzimy serwis „6E9E7830-F4C7-4717-B0D8-525D30181121” i charakterystykę „8FBFDF09-5EB4-4F68-AC16-6CD2275D07CA„. Po kliknięciu tej ostatniej pozycji widzimy szczegóły komunikatu:

Również w tym przypadku widzimy taką samą zawartość komunikatu, jaką widzieliśmy wcześniej w programie BLE Scanner na Androidzie.

Na co tak naprawdę patrzymy? Z czego składa się wiadomość ProteGO Safe?

Gdy piszę te słowa, aplikacja ProteGO Safe w wersji 3.0.3 z 30 kwietnia 2020 jest oparta o bibliotekę programistyczną OpenTrace i to właśnie ta biblioteka określa postać rozgłaszanych wiadomości.

Wiadomości są sformatowane w formacie JSON, dość czytelnym dla człowieka. Przykładowa wiadomość wygląda tak:

Plain Text

można też przedstawić ją tak:

Plain Text

Elementy, które w niej wyróżniamy to:

  • pole “id” (wartość “hhgJ48……W7Qw==”) zawierające tymczasowy identyfikator urządzenia, zmieniany co 15 minut
  • pole “mp” (wartość „Nexus 5X„) zawierające markę i model urządzenia nadającego komunikat; zawartość pola jest niezmienna; dane te zostaną zapamiętane przez inne urządzenia z ProteGO Safe, które napotka użytkownik
  • pole “o” (wartość „PL_PGS„) zawierające unikalny identyfikator aplikacji ProteGO Safe
  • pole “v” (wartość “2”) określające numer wersji użytego protokołu BlueTrace

To właśnie w polu “mp” widzimy treść, która przeczy twierdzeniu Ministerstwa Cyfryzacji – jego zawartość nigdy się nie zmienia a w określonych sytuacjach może jednoznacznie identyfikować posiadacza telefonu. Tacy użytkownicy, którzy zainstalują w telefonie alternatywne oprogramowanie i sami zdefiniują unikalną nazwę modelu telefonu, będą cały czas nadawać identyfikator ze stałym, niezmiennym symbolem charakterystycznym tylko dla nich.

Typowy użytkownik popularnego modelu nie doświadczy tego problemu, ale niezmienny identyfikator w dalszym ciągu pomoże słuchaczom w powiązaniu ze sobą kolejnych identyfikatorów tymczasowych.

Skąd wiadomo, że patrzymy na komunikat nadawany przez ProteGO Safe?

Tu ledwo muśniemy wielki obszar wiedzy o inżynierii wstecznej Androida. Na potrzeby tego tekstu – wariant minimum:

  • instalujemy ProteGO Safe
  • instalujemy aplikację APK Extractor
  • za pomocą APK Extractor kopiujemy plik z aplikacją ProteGO do katalogu ExtractedApks dostępnego z peceta przez kabel, przenosimy ten plik do komputera
  • ze strony https://ibotpeaches.github.io/Apktool/ pobieramy program APKTool służący do rozpruwania plików z programami dla Androida
  • uruchamiamy komendę apktool d pobranyplik.apk, by rozpruć aplikację ProteGO Safe
  • gdy apktool skończy pracę, przechodzimy do katalogu wynikowego i oglądamy plik smali\io\bluetrace\opentrace\BuildConfig.smali, wygląda on tak:

Widzimy wartość tekstową BLE_SSID zdefiniowaną jako 6E9E7830-F4C7-4717-B0D8-525D30181121, jest to nazwa serwisu Bluetooth, którą widzieliśmy wcześniej. Trochę niżej w tym pliku mamy jeszcze wartość V2_CHARACTERISTIC_ID o treści 8FBFDF09-5EB4-4F68-AC16-6CD2275D07CA. Analiza zdekompilowanego kodu pozwala stwierdzić, że te wartości są używane przy nadawaniu komunikatów przez Bluetooth – tym samym potwierdzamy, że w naszych obserwacjach przyglądaliśmy się komunikatom nadawanym przez ProteGO Safe.

A co będzie po przejściu na protokół Exposure Notification autorstwa Apple/Google?

Gdy ProteGO Safe zostanie przestawione na protokół Exposure Notification, nadal będziemy mogli podsłuchiwać zawartość komunikatów, jednak nie będą już one sformatowane w sposób czytelny dla człowieka. Zainteresowani mogą zajrzeć do dokumentacji i odnaleźć w niej znaczenie poszczególnych bajtów ładunku.

O co chodziło z tym „Missing TempID”?

Pamiętacie literówkę w powiadomieniu systemowym o skanowaniu otoczenia, “abyś byl bezpieczny”? To drobiazg, ale była i znacznie grubsza usterka – apka ProteGO Safe w wersji 3.0.1 miała popsuty mechanizm użycia unikalnego identyfikatora urządzenia. Każdy, kto ją zainstalował, nadawał w eter komunikat zaczynający się od

{"id":"Missing TempID","mp"…

Niby pomyłki się zdarzają, ale błąd takiej kategorii oznacza, że coś było (jest?) bardzo nie halo w całym procesie rozwoju, testowania i publikacji apki. Zwracam uwagę, że to już nie jest amatorski projekt prowadzony przez hobbystów, realizują go specjaliści opłacani przez Ministerstwo Cyfryzacji. Publiczność prosi o więcej jakości.

Po co to wszystko?

Gdy następnym razem Minister Cyfryzacji powie coś o nowych cechach ProteGO Safe, nie musisz mu wierzyć na słowo. Możesz po prostu samodzielnie zweryfikować przekazane informacje.

Albo… nadal czytać Informatyka Zakładowego! Powiadomienia o nowych tekstach przez RSS, Facebooka, Twittera i Linkedina.

Poniżej widzisz formularz zapisu na newsletter. Na pewno nie zaleję ci skrzynki nawałem poczty, ostatnio wysyłałem coś subskrybentom w grudniu 2019, ale ten tekst o wyniku finansowym to trafi najpierw do newslettera. Wybór należy do ciebie.



O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.

4 odpowiedzi na “Co tak naprawdę aplikacja ProteGO Safe nadaje przez Bluetooth?”

Bardzo przydatne i szczegółowe.

Sam używam BLE NRF Connect od kilku lat, choćby by uświadomić ludziom wizualnie, że ich telewizory, Apple, Eddystony, Win dziesiątki, czy inne bransoletki sieją identyfikatory i więcej w świat, co jest agregowane przez AI, głównie zakupowe serwisy predykcyjne, ale też przez kilka miłych trzyliterowych służb.

Gdy się nudzę, aktualizuję im zdalnie firmware przez NRF Toolbox: taki np. Zeroner Health nie wymaga potwierdzania ani nie wyświetla ostrzeżeń (!).

Może o tym napiszesz?

Ukłony z Wrocławia

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *