sobota, 21 stycznia 2017

Co wiedzą o Tobie developerzy aplikacji mobilnych?

Większość z nas korzysta z aplikacji mobilnych na telefonach lub tabletach. Czy jednak wiemy w jaki sposób aplikacje te zarządzają naszymi danymi? Ostatnio to coraz bardziej popularny temat. Bardzo ciekawa dyskusja na ten temat pojawiła się na portalu reddit. Co i raz portale technologiczne także podejmują temat naszej prywatności. Coraz więcej też osób zaczyna badać jakie dane odczytywane są z naszych urządzeń i jak są przesyłane dalej.
Ja mam swoje zdanie na ten temat. Uważam, że każdy developer lub firma publikująca aplikacje w sklepach Google Play / App store powinna dołączać dokumentację, w której znajdzie się deklaracja w jaki sposób korzystają z przyznanych uprawnień. Innymi słowy powinni jasno wskazać co się dzieje z odczytanymi wiadomościami SMS, danymi lokalizacji itd. Każda wersja aplikacji powinna być lepiej analizowana przed opublikowaniem. Jednorazowe udowodnione odstępstwo od deklaracji powinno zaś skutkować permanentnym banem na publikowanie w przyszłości. Oczywiście w przypadku danych wrażliwych producenci muszą publikować polityki prywatności, jednak ich zapisy są tak enigmatyczne, że tak naprawdę nie wiemy po przeczytaniu takiego dokumentu co dalej z danymi się dzieje.
W tej chwili jedyne co możemy to:

  • dla Androida do wersji 5 włącznie sprawdzić z jakich uprawnień aplikacja korzysta - jeśli któreś z wymaganych do działania uprawnień nam nie odpowiada szukajmy alternatywy. 
  • od wersji 6 systemu Android jest trochę lepiej, bo możemy konkretne uprawnienie blokować. Tu jednak nie jest aż tak dobrze - niektóre aplikacje są napisane tak, że jeśli zgody na konkretne uprawnienie nie wydamy to nie będą działać.

Wiadomo że większość ludzi nawet nie zadaje sobie trudu, żeby przejrzeć listę wymaganych uprawnień. Spójrzmy więc na listę uprawnień zadeklarowanych przez tak często używaną oficjalną aplikację Facebook:
Urządzenie i historia aplikacji
pobieranie uruchomionych aplikacji
Tożsamość
znajdowanie kont na urządzeniu
dodawanie i usuwanie kont
odczytywanie własnej karty kontaktu
Kalendarz
odczyt wydarzeń w kalendarzu wraz z informacjami poufnymi
dodawanie i modyfikowanie wydarzeń w kalendarzu oraz wysyłanie e-maili do gości bez wiedzy właściciela
Kontakty
znajdowanie kont na urządzeniu
odczytywanie kontaktów
modyfikowanie kontaktów
Lokalizacja
przybliżona lokalizacja (na podstawie sieci)
dokładna lokalizacja (na podstawie sygnału GPS i sieci)
SMS
odczytywanie wiadomości tekstowych (SMS-ów i MMS-ów)
Telefon
bezpośrednie wybieranie numerów telefonu
odczytywanie rejestru połączeń
odczytywanie stanu i informacji o telefonie
zapisywanie rejestru połączeń
Zdjęcia, multimedia i pliki
odczytywanie zawartości pamięci USB
modyfikowanie i usuwanie zawartości pamięci USB
Pamięć
odczytywanie zawartości pamięci USB
modyfikowanie i usuwanie zawartości pamięci USB
Aparat
wykonywanie zdjęć i filmów wideo
Mikrofon
nagrywanie dźwięku
Informacje o połączeniu Wi‑Fi
wyświetlanie połączeń Wi-Fi
Identyfikator urządzenia i informacje o połączeniach
odczytywanie stanu i informacji o telefonie
Inne
pobieranie plików bez powiadomienia
dopasowywanie rozmiaru tapety
odbieranie danych z internetu
wyświetlanie połączeń sieciowych
tworzenie kont i ustawianie haseł
odczytywanie statystyk dotyczących baterii
wysyłanie transmisji trwałej
zmienianie połączeń sieciowych
łączenie się i rozłączanie z siecią Wi‑Fi
rozwijanie/zwijanie paska stanu
pełny dostęp do sieci
zmienianie ustawień dźwięku
czytanie ustawień synchronizacji
uruchamianie podczas włączania urządzenia
zmienianie kolejności uruchomionych aplikacji
ustawianie tapety
renderowanie na innych aplikacjach
sterowanie wibracjami
zapobieganie przechodzeniu urządzenia w tryb uśpienia
włączanie i wyłączanie synchronizacji
instalowanie skrótów
odczytywanie konfiguracji usług Google

Powyższa lista jest zatrważająca, istnienia niektórych uprawnień na liście nie da się uzasadnić wymogami funkcjonalności aplikacji. Warto przejrzeć więc Politykę prywatności powyższej aplikacji (innych także przed ich instalacją). Na pewno da nam to do myślenia...
Zastanawiasz się pewnie komu by się chciało pisać kod źródłowy, żeby coś tam czytać z naszych telefonów? Na przykład takie odczytanie naszej skrzynki wiadomości to tylko kilka linijek kodu, przykład poniżej:
public List<SmsData> getAllSms() {
    List<SmsData> smsList = new ArrayList<>();
    Uri uri = Uri.parse("content://sms/");
    Cursor c = getContentResolver().query(uri, null, null, null, null);
    startManagingCursor(c);
    if (c.moveToFirst()) {
        for (int i = 0; i < c.getCount(); i++) {
            SmsData sms = new SmsData();
            sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
            sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
            smsList.add(sms);
            if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) {
                sms.setType(SmsData.SmsType.RECEIVED);
            } else {
                sms.setType(SmsData.SmsType.SENT);
            }
            c.moveToNext();
        }
    }
    c.close();
    return smsList;
}
Od wersji 6 systemu Android developerzy muszą sprawdzić czy uprawnienie zostało przyznane:
final int REQUEST_CODE_ASK_PERMISSIONS = 123;
ActivityCompat.requestPermissions(MainActivity.this, new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS);
Tym samym przy użyciu przez użytkownika aplikacji danej funkcjonalności próbującej odczytać skrzynkę wiadomości zostaniemy zapytani czy zgadzamy się na nadanie aplikacji dostępu.
Z zawartością listy obiektów SmsData można teraz zrobić cokolwiek - np. wysłać na zdalny serwer.
Ja osobiście bezwzględnie zawsze sprawdzam jakich uprawnień wymaga aplikacja zanim ją zainstaluję. Jeśli cokolwiek wzbudza moje podejrzenia, polityka prywatności jest niejasna i nie da się logicznie uzasadnić potrzeby dla jakiegoś uprawnienia dla tej aplikacji, to jej po prostu nie instaluję. Ewentualnie instaluję ale nie daję jej wybranych uprawnień.
Podziel się:

1 komentarz: