Malware na Androidzie? Kto by się przejmował?

Oto kilka wskazówek, które pozwolą każdemu programiście na uczynienie jego aplikacji dużo bezpieczniejszej bez wkładania ogromnej pracy. To powinien być standard każdej aplikacji opublikowanej w Sklepie Play. Jeżeli jeszcze tego nie masz – czas działać!

android malware

Artur Latoszewski. Android Developer z zamiłowaniem do biznesu i zarządzania. Chce tworzyć wspaniałe produkty w szeroko pojętym obszarze mobile. Telefony komórkowe to obecnie zdalne piloty naszego życia, róbmy je dobrze! Zawsze na pierwszym miejscu stawia użytkownika – zarówno ostatecznego użytkownika aplikacji, jak i tego, który w przyszłości będzie przeglądał kod. Fanatyk czystej architektury, wyznawca SOLID, fanboy Kotlin’a.


1. Używaj HTTPS

Obecnie protokół https jest standardem i kluczową częścią każdej komunikacji w Internecie. Jego użycie nie wpływa na wydajność, za to ma wielki wpływ na bezpieczeństwo, poprzez szyfrowanie komunikacji.

2. Używaj Certificate Pinning

Certificate Pinning pozwala na powiedzenie Twojej aplikacji, aby ufała domenie, tylko jeżeli przedstawia się ona certyfikatem zaszytym wewnątrz Twojej aplikacji. Kolejny krok, który nie wymaga dużo pracy, za to utrudnia podszycie się pod Twój backend i chroni Cię przed atakami MITM.

3. Nie przechowuj haseł i pin’ów

Nigdy nie powinieneś przechowywać tych danych wrażliwych użytkownika na swoim urządzeniu. Hasło i PIN powinny być weryfikowane po stronie serwera, a Ty powinieneś przechowywać tylko ewentualnie token sesji. Jeżeli potrzebujesz lokalnego logowania (np. PINu, aby uruchomić aplikację) przechowuj hash. Możesz coś jeszcze nawet do niego dokleić.

Odczytanie zahashowanych danych będzie trudniejsze niż gdyby to było przechowywane wprost i dodaje kolejne utrudnienie dla osoby, która chciałaby złamać zabezpieczenia Twojej aplikacji. 

Używaj właściwych algorytmów (PBKDF2, bcrypt, scrypt) i zawsze dodawaj sól. Nigdy nie ufaj swoim użytkownikom, że wiedzą jak zadbać o swoje bezpieczeństwo. Może złamanie zabezpieczeń do Twojej aplikacji to nie problem, ale być może oni używają tego samego hasła i PINu w innych miejscach?

4. Szyfruj dane użytkownika

Obecnie aplikacje zbierają bardzo dużo osobistych danych użytkownika. W Europie mamy RODO, które dodatkowo przypomina nam, że powinniśmy strzec wrażliwych danych. Jednak nawet bez tego rozporządzenia dane naszych użytkowników powinny być strzeżone. Token sesji też jest w pewien sposób wrażliwą daną. Posiadanie zaszyfrowanego urządzenia ciągle nie jest standardem w świecie Androida. Urządzenie może być skradzione, a czasem użytkownicy zapominają wyczyścić swoje dane, gdy sprzedają urządzenie.

Urządzenie może też zostać przejęte przez hakera. Wystarczy zainstalować aplikację z niepewnego źródła, która będzie zawierać złośliwy kod. W takim przypadku nawet uzyskanie uprawnień administratora (tzw. root) nie jest czymś niemożliwym dla hakera. Warto pamiętać, że nawet w oficjalnym Sklepie Play Google’a można było znaleźć aplikacje malware (złośliwe). Nie bądź tym, który pozwala kraść dane swoich klientów i pamiętaj, że szyfrowanie danych jest ważne! 

Do szyfrowania bazy danych możesz użyć SQLCipher, a do SharedPreferences możesz użyć androidx.security:security-crypto. Jest też nowa zabawka od Google – DataStore, która domyślnie wspiera szyfrowanie.

5. Uważaj na mechanizm Android Backup

Mechanizm Android Backup jest włączony domyślnie dla Androidowych aplikacji, ale nie jestem pewny czy to dobre rozwiązanie. Backupy są przechowywane na Google Drive skąd mogą być łatwo pobrane. Kolejny raz nie ufaj swoim użytkownikom, że znają się na swoim bezpieczeństwie. Pomyśl za nich i być może nie wysyłaj ich danych do chmury, której nie możesz kontrolować. Dodatkowo jeżeli zaszyfrujesz te dane przy pomocy Android Keystore to nie będziesz mógł ich odszyfrować po odzyskaniu takiego backupu. 

To nie zadziała ponieważ klucz szyfrujący w Keystore jest dostępny tylko dla urządzenia, na którym został stworzony. Nie mamy mechanizmu, który pozwalałby synchronizować klucze jak ma iOS ze swoim Keychainem. Lepszym sposobem na backup danych jest przechowywanie ich na swoim backendzie.

6. Obfuskuj kod

To powinno być oczywiste, ale ciągle jest pełno aplikacji w Sklepie Play, które nie są zaciemnione. Obfuskacja czyni Twój kod dużo trudniejszym to odczytania. Proguard/R8 jest włączony domyślnie dla produkcyjnych buildów nie bez powodu! Bez tego twój kod można czytać jak otwartą księgę. Atakujący może łatwo przeanalizować Twoją aplikację, a nawet API Twojego backendu.

Umożliwi mu to sklonowanie Twojej aplikacji lub wypuszczenie jej zhackowanej wersji na przykład zawierające złośliwy kod. Wtedy Twoja aplikacja stanie się malwarem i użytkownicy będą mieli pretensje do Ciebie o utratę swoich danych.

7. Nie pokazuj błędów z backendu użytkownikom

One nie powiedzą nic użytkownikom, a mogą pomóc hakerom przeanalizować Twój backend.

8. Używaj tylko niezbędnych permissions

Wiem, że to kuszące mieć dostęp do aparatu, kontaktów i lokalizacji użytkownika. Jeżeli będziesz prosić o zbyt dużo to użytkownicy będą bardziej nieufni wobec Ciebie. Istnieje również niebezpieczeństwo, że jeżeli masz do czegoś dostęp to to coś może wyciec. Im mniej masz, tym mniej może zostać przejęte przez hakera. Zawsze zastanów się dwa razy czy na pewno potrzebujesz danego permission.

Chcesz wiedzieć więcej?

Przeczytaj oficjalne wskazówki bezpieczeństwa od Google.

Jeżeli chcesz zgłębić temat bezpieczeństwa naprawdę głęboko odsyłam Cię do OWASP Mobile.


Zdjęcie główne artykułu pochodzi z unsplash.com.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Danych nigdy nie jest za dużo. O tym, jak algorytm rozpoznaje EKG