Kategorie
Administracja publiczna Android Epidemia iOS

Architektura aplikacji ProteGO Safe – kolejne kontrowersje

Zainteresowanie aplikacjami mobilnymi do wspomagania walki z koronawirusem zgasło wyjątkowo szybko. Od miesiąca o ProteGO Safe nie napisało Ministerstwo Cyfryzacji, temat spadł z nagłówków gazet, przestał pojawiać się w dyskusjach publicystów.

Ekipa tworząca apkę nie odpuszcza jednak i w czwartek 28 maja 2020 upubliczniła kod źródłowy aplikacji androidowej w wersji 4.1.0-rc.1. Literki “rc” to skrót od “release candidate” – tak określa się wersję, która może stać się wersją produkcyjną, jeśli podczas końcowych testów nie zostaną w niej odnalezione błędy blokujące wydanie. 

Zgodnie z zapowiedziami, czwarta wersja ProteGO Safe ma korzystać z protokołu Exposure Notification zaprojektowanego przez firmy Google i Apple. Postanowiłem zrobić zrzuty ekranu nowej wersji, więc pobrałem kod źródłowy, odpaliłem Android Studio i… prawie od razu zauważyłem, że coś jest nie tak.

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 normalnej aplikacji mobilnej można znaleźć zasoby graficzne, szablony ekranów, teksty używane w napisach ekranowych – słowem wszystko to, co użytkownik widzi w trakcie działania apki. W ProteGO Safe nie mogłem znaleźć żadnych elementów interfejsu, żadnych tekstów do wyświetlenia.

Główny ekran aplikacji składał się jedynie z komponentu WebView czyli czegoś w rodzaju przeglądarki WWW osadzonej wewnątrz aplikacji. Użycie technologii webowych w aplikacji mobilnej jest względnie częste, jednak w zasobach programu nie udało mi się odnaleźć żadnego pliku HTML który miałby być tam wyświetlany.

Wszystko wskazywało, że program dla Androida to kadłubek, którego głównym zadaniem będzie załadowanie do WebView aplikacji przeglądarkowej pobranej z internetu i przekazanie tej aplikacji kontroli nad interfejsem Exposure Notification (komponentu do śledzenia kontaktów społecznych). Moje podejrzenia potwierdzili twórcy aplikacji.

Wygląda więc na to, że miesiąc po kontrowersyjnych (i szybko zamiecionych pod dywan) planach użycia ProteGO Safe do rejestracji odwiedzin w sklepach, aplikacja zalicza kolejną wpadkę wizerunkową – architektura “kandydackiej” wersji 4.1 niesie poważne ryzyka i zagrożenia dla prywatności użytkowników. Przyjrzymy im się po kolei, sięgając do postulatów  “7 filarów zaufania” oraz oceny ryzyka użycia aplikacji śledzących – oba teksty dostępne są na stronach Fundacji Panoptykon.

Złe wiadomości

Krótkie przypomnienie: protokół Exposure Notification został zaprojektowany tak, by  informacje pozyskane podczas śledzenia innych urządzeń (cudze tymczasowe identyfikatory odebrane przez Bluetooth Low Energy) nigdy nie opuściły telefonu. Jedyne, do czego użytkownik potrzebuje połączenia z siecią, to codzienne pobranie identyfikatorów nadawanych w minionych dniach przez telefony osób u których potwierdzono infekcję koronawirusem. Te dane przechodzą tylko przez serwery Google i Apple zaś porównanie “listy chorych” identyfikatorów z “listą osobiście spotkanych” identyfikatorów ma miejsce lokalnie wewnątrz urządzenia.

Gdy użytkownik aplikacji zostanie zdiagnozowany pozytywnie, będzie miał możliwość ujawnić i rozesłać swoje identyfikatory tymczasowe z ostatnich dwóch tygodni – jednak najpierw taki komunikat będzie uwierzytelniany kodem PIN przekazanym przez Sanepid. To jedyny moment, w którym aplikacja implementująca Exposure Notification musi się skontaktować z serwerami ministerstwa. 

Tymczasem jednak ProteGO Safe wymusza połączenie z internetem i pobranie z serwera modułu wykonawczego – bez tego użytkownik zobaczy jedynie ekran błędu połączenia.

ProteGO Safe bez dostępu do sieci

Problem pierwszy – niemożliwe jest wykonanie niezależnego przeglądu aplikacji ani audytu bezpieczeństwa. O ile cyfrowo podpisany plik APK z aplikacją mobilną jest niezmienny a jego autentyczność może być zweryfikowana (tutaj opisałem jak to zrobić), o tyle główny moduł wykonawczy pobierany z serwera może być podmieniony w dowolnej chwili. Łamie to filar nr 6, bo nigdy nie będziemy mieli pewności, czy kod otrzymany z serwera jest tym, który mieliśmy okazję wcześniej sprawdzić.

Problem drugi – operator serwera będzie mógł deanonimizować użytkowników. Wystarczy, by przy pierwszym uruchomieniu każdy egzemplarz aplikacji ProteGO Safe otrzymał treści z jakimś spersonalizowanym elementem, np. obrazkiem śledzącym o unikalnym adresie, by od tej chwili dało się odróżniać poszczególne instalacje programu. Narusza to filar nr 7, bo publiczna kontrola i weryfikacja oprogramowania działającego po stronie serwera jest niemożliwa.

Problem trzeci – już na starcie nie ma mowy o anonimowości – każdy użytkownik pragnący włączyć w swoim urządzeniu Exposure Notification zapuka do serwerów Ministerstwa Cyfryzacji i pobierając moduł wykonawczy zostawi w logach serwera informacje o tym, skąd się łączył.

Problem czwarty – gdy użytkownik raz przyzna programowi uprawnienia do sterowania komponentem Exposure Notification, pobrany z sieci moduł wykonawczy będzie mógł okłamywać użytkownika. Przejaskrawiony, fikcyjny przykład zahaczający o politykę: z powodu dużej liczby zakażeń w kopalniach, wszyscy użytkownicy ProteGO Safe łączący się ze Śląska otrzymują “podrasowany” moduł wykonawczy który nigdy nie wyłączy funkcji śledzenia kontaktów, choć po kliknięciu pokaże na ekranie komunikat o deaktywacji tej funkcji.

Problem piąty – w analizie Panoptykonu czytaliśmy: “Wydawca aplikacji będzie mógł w każdej chwili podmienić zaufaną apkę na nową wersję, wyglądającą tak samo, lecz działającą zupełnie inaczej”. Tutaj ten problem staje się jeszcze bardziej palący, bo pobranie z sieci nowego modułu wykonawczego, tym razem ze złośliwymi funkcjami, nie będzie w ogóle możliwe do zauważenia.

Problem szósty – zwiększona powierzchnia ataku. Udany atak na serwer ministerstwa pozwoli rozesłać złośliwy kod do tysięcy użytkowników ProteGO Safe. Aplikacje będzie trzeba również chronić przed atakiem typu Man-in-the-Middle, polegającym na przechwyceniu i modyfikacji danych przesyłanych między telefonem a serwerem ministerstwa.

Garść dobrych wiadomości

Problemy opisane powyżej są poważne, ale nie krytyczne. Mechanizmy bezpieczeństwa wbudowane w mobilne systemy operacyjne pozostają aktywne.

  • Nawet zaatakowana aplikacja ProteGO Safe nie będzie w stanie aktywować śledzenia kontaktów przez Bluetooth bez wiedzy użytkownika, bo przy włączaniu tej funkcji po raz pierwszy biblioteka Exposure Notification wyświetli natywne okienko z pytaniem o zgodę.
  • Nawet zaatakowana aplikacja ProteGO Safe nie będzie w stanie zgłosić użytkownika jako chorego na COVID-19 i rozgłosić kluczy tymczasowych bez jego wiedzy, bo użytkownik będzie rozpoczynał taką operację zatwierdzeniem okienka dialogowego biblioteki Exposure Notification zaś kończył – podając kod PIN przekazany przez Sanepid.
  • Nawet zaatakowana aplikacja ProteGO Safe nie będzie mogła aktywować mikrofonu, aparatu czy usług lokalizacji – będzie ograniczona tylko do funkcji zadeklarowanych w manifeście zaś kod łączący część webową z częścią androidową limituje rodzaj możliwych interakcji.

Co można zrobić lepiej?

Wszystkie zastrzeżenia opisane w niniejszym tekście staną się nieaktualne, gdy moduł wykonawczy zostanie osadzony w zasobach aplikacji, w pliku APK. Zawartość tego modułu będzie wówczas utrwalona podpisem cyfrowym a każdy badacz bezpieczeństwa będzie miał pewność, że ogląda wersję wspólną dla wszystkich użytkowników. Nie oznacza to konieczności przepisania mechanizmów zaszytych w części webowej na kod natywny – należy jedynie osadzić pliki z kodem HTML i Javascript wewnątrz apki.

Opisana decyzja architektoniczna jest naprawdę niecodzienna, szczególnie w świetle faktu, że projekt jest śledzony przez aktywistów i pasjonatów którzy nie boją się nagłaśniać informacji o problemach (na przykład takich). Dziwniejsze są jednak wypowiedzi twórców w dyskusji na GitHubie: [o możliwości wstrzykiwania logiki biznesowej w module pobieranym z serwera] “uważam że dużo aplikacji używa internetu i nie sadze żeby to było bardziej niebezpieczne niż COVID, ani nic co nacodzień mogłoby mi zaszkodzić” oraz “wstrzykiwanie PWA [Progressive Web App] jest dużo łatwiejsze do audytowania niż zaszyty kod w aplikacje który trzeba analizować za pomocą inżynierii wstecznej”. Taka aplikacja jak ProteGO Safe powinna stanowić wzorcowy przykład poszanowania prywatności użytkowników, zaś projekt architektury powinien być poddany ocenie na wczesnym etapie produkcji.

Zobaczymy, co napisali na ten temat zewnętrzni audytorzy i pentesterzy – autorzy ProteGO Safe zapowiadali upublicznienie wyniku testów bezpieczeństwa.

Ile kosztuje produkcja ProteGO Safe?

Ministerstwo Cyfryzacji nie odpowiedziało na to pytanie od 29 kwietnia 2020. Od pięciu tygodni trwa “analiza sprawy”, którą można było załatwić od ręki – skanując i wysyłając e-mailem kilka kartek. Do tego tematu na pewno powrócę.


DODANO 08.06.2020: aplikacja ProteGO Safe, zachowująca się dokładnie tak, jak opisano powyżej, jest już obecna w sklepie Google Play. Jednocześnie minister cyfryzacji Marek Zagórski zapowiedział dziś na telekonferencji z twórcami aplikacji, że moduł wykonawczy – zgodnie z postulatami społeczności – zostanie osadzony wewnątrz aplikacji. Dopiszę tu notkę, gdy tak się stanie.

DODANO 25.06.2020: presja opłaciła się – w sklepach App Store i Google Play dostępna jest już wersja ProteGO Safe 4.2 działająca offline, z zasobami osadzonymi w aplikacji a nie pobieranymi z serwerów. Otrzymałem też kopię umów o wytworzenie aplikacji, napiszę o nich w następnej notce poświęconej aplikacjom do walki z koronawirusem.

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



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.

17 odpowiedzi na “Architektura aplikacji ProteGO Safe – kolejne kontrowersje”

Nie jestem Androidowcem i zaimportowałem ten projekt do Intellij, nie mogłem znaleźć w całym projekcie chociażby Stringa „ustawienia” lub części tego napisu. Teraz jest wszystko jasne dlaczego. Dzięki za analizę.
Co to umowy to wydaje się to okazja do najprostszej transparentności dla MC. Będą przeciągać na po 28 czerwca?!

Tomasz, super, że opisałeś najnowsze kontrowersje z GitHub – nie każdy to śledzi, a tak mamy szansę dotrzeć do większej ilości ludzi.

Mam jedna uwagę do stwierdzenia, że identyfikatory ludzi zakażonych przechodzą przez serwery Google i Apple. W moim rozumieniu specyfikacji G+A właśnie nie. A przynajmniej nie na tym etapie. Tą kwestię G+A pozostawia dla każdego z państw.

Jak się okazuje protokół Exposure Notification będzie czymś czego nie będzie dało się prześledzić, czy diagnosis key nie są agregowane z innymi danymi i na przykład po zaszyfrowaniu wysyłane do chmury. Google i Apple ogłosiło, że nie udostępni kodu źródłowego Exposure Notification.

Odradzam instalowanie tej aplikacji w jakiejkolwiek wersji, niezależnie czy wątek z odpytywaniem serwera zostanie załatany czy nie. Pora puścić rozwiązanie G+A (w przeciwieństwie do DP-3T) do piekła.

Jest o tym tutaj:
https://github.com/ProteGO-Safe/specs/issues/191

Jest więc gorzej niż było, bo można było zastosować protokół dotychczasowy zmodyfikowany o niedogodności lub zastosować DP-3T.

Moje pytanie brzmi: skoro Exposure Notification nie zostanie opublikowany w ramach AOSP – jak mam być pewna, że moje klucze tymczasowe nie są agregowane z innymi danymi z Androida i przesyłane do chmury „obliczeniowej” Google? Skąd mam wiedzieć, czy przez zachorowanie na COVID lub styczność z duża ilością osób chorych na COVID nie dojdzie do zaproponowania mi gorszych warunków w ubezpieczeniach na życie, gdzie dane potencjalnie mogą być sprzedawane? Skąd mam wiedzieć w końcu czy nie dojdzie do zautomatyzowanego przetwarzania moich danych i informacji o zakażeniu przez Google (są mniej związani RODO jako że są z Ameryki)?

@SeraMoon uzywaj jednego nicka – nie rob ludziom wody z mozgu. ps. i wylacz te boty bo w koncu ktos cie zweszy

Ależ używam jednego nicka. Nie mam potrzeby używania wielu. To, że wiele użytkowników ma podobne poglądy, nie znaczy, że jest to jedna osoba, Anonie.

Informatyku Zakładowy, jak stoi kwestia uzyskania odpowiedzi od Ministerstwa Cyfryzacji w tak prostej kwestii, jak podanie 2 liczb określających jak dużo kosztuje wyprodukowanie ProteGO-Safe – czyli ile pieniędzy przeznaczono do tej pory na projekt i ile jest w budżecie? Dziś mamy ostatni dzień, do którego zobowiązali się udzielić odpowiedzi.

Na te dwie liczby czekamy już absurdalnie długo – półtora miesiąca.

Odpowiedzieli?

Dzień dobry

Czy dostał Pan odpowiedż od Ministerstwa i czy możemy poznać szczegóły dotyczące umowy i kosztów dotyczących ProteGO Safe?

Pozdrawiam,
Mariusz

Tak, kopię umowy dostałem 15 czerwca. Będzie tematem jednej z najbliższych notek.

Przecież dobrze to zrobili. To aplikacja rządowa i ona ma być przydatna dla rządu, czyli ma inwigilować obywateli. Świadczą o tym zapisy polityki prywatności, w której zastrzegają, że uzytkownik nie będzie informowany przez aplikację, że zmieniły się warunki. Zaktualizujesz i bez pytania zacznie wyciągać kontakty z telefonu i śledzić inne rzeczy. Idealny moment ku temu to moment, gdy połowa obywateli to zainstaluje.

Podskórnie wyczuwam szantaże i groźby ze strony rządu kierowane do autora tej strony, skoro pomimo upływy 12 dni nie znamy treści tej umowy.

Teorie spiskowe fajne, ale fałszywe. Byłem na urlopie nad morzem. Sama umowa pojawi się w jednej z najbliższych notek – przyjrzę się w niej skuteczności ProteGO Safe.

Dodaj komentarz

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