Łamanie zabezpieczeń lokalnego przechowywania danych aplikacji Androida (Shared Preferences, SQLite)
🔓 Łamanie zabezpieczeń lokalnego przechowywania danych aplikacji Androida (Shared Preferences, SQLite)
W świecie hacking, jednym z podstawowych celów podczas analizy bezpieczeństwa aplikacji mobilnych jest sprawdzenie, jak aplikacja przechowuje dane lokalnie. W Androidzie najczęściej wykorzystywane są do tego mechanizmy takie jak Shared Preferences oraz SQLite. Jeśli są one nieprawidłowo zabezpieczone, mogą prowadzić do poważnych wycieków informacji.
📱 Jak aplikacje Androida przechowują dane lokalnie?
Android umożliwia aplikacjom zapisywanie danych w różnych formatach lokalnych:
- Shared Preferences — pliki XML do przechowywania prostych par klucz-wartość,
- SQLite — lokalna baza danych do bardziej złożonych danych,
- Pliki wewnętrzne — zapis bezpośredni do pamięci prywatnej aplikacji,
- External Storage — zapis na publicznie dostępnej pamięci urządzenia.
W kontekście hacking, właśnie Shared Preferences i SQLite są najbardziej interesujące, ponieważ często zawierają cenne dane użytkownika lub konfiguracje aplikacji.

🛠️ Shared Preferences – podatności i metody ataku
📄 Czym są Shared Preferences?
Shared Preferences to metoda zapisu prostych danych (np. ustawień użytkownika) w formie plików XML w pamięci wewnętrznej aplikacji.
Typowy zapis danych w Shared Preferences:
SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("api_token", "12345abcdef");
editor.apply();
Plik XML z tymi danymi będzie znajdował się w:
/data/data/nazwa.pakietu/shared_prefs/MyPrefs.xml
❌ Typowe błędy bezpieczeństwa
- Zapisywanie danych wrażliwych w formie niezaszyfrowanej (np. tokenów, haseł),
- Brak ograniczeń dostępu (słabe uprawnienia pliku).
🛡️ Jak hakować Shared Preferences?
Kroki, jakie podejmuje specjalista ds. hacking podczas analizy:
- Uzyskanie dostępu do plików aplikacji (root lub backup ADB).
- Odszukanie plików XML w katalogu
shared_prefs
. - Odczyt danych bezpośrednio z plików tekstowych.
✅ Jeśli dane nie są szyfrowane — odczyt jest trywialny.
🗄️ SQLite – podatności i metody ataku
📚 Czym jest SQLite?
SQLite to pełnoprawna lokalna baza danych wykorzystywana w Androidzie do przechowywania większych ilości danych strukturalnych.
Przykład utworzenia bazy:
SQLiteDatabase db = this.openOrCreateDatabase("Users", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT, password TEXT)");
Plik bazy danych znajduje się najczęściej w:
/data/data/nazwa.pakietu/databases/Users.db
❌ Typowe błędy bezpieczeństwa
- Przechowywanie haseł w formie czystego tekstu,
- Brak szyfrowania danych wrażliwych,
- Brak ochrony dostępu do bazy danych.
🛡️ Jak hakować SQLite?
Proces analizy bazy SQLite obejmuje:
- Uzyskanie dostępu do plików
.db
. - Otworzenie pliku w narzędziu takim jak DB Browser for SQLite.
- Przeglądanie zawartości tabel (np. tabela użytkowników, tokenów, sesji).
📌 Jeśli dane są przechowywane jako plaintext, można je bardzo łatwo odczytać i wykorzystać.
🔥 Narzędzia pomocne w łamaniu lokalnego przechowywania danych
Narzędzie | Zastosowanie |
---|---|
ADB (Android Debug Bridge) | Pobieranie plików aplikacji i przeglądanie systemu plików urządzenia |
Rooted Android Device | Pełny dostęp do katalogów aplikacji |
DB Browser for SQLite | Analiza baz danych SQLite |
Android Backup Extractor (ABE) | Odtwarzanie plików aplikacji z kopii zapasowych |
Frida | Dynamiczna analiza aplikacji i przechwytywanie danych runtime |
🧠 Praktyczne przykłady ataków
Przykład 1: Wyciek tokenu API z Shared Preferences
Wyczytanie pliku shared_prefs
ujawnia klucz API zapisany w formie tekstowej:
<map>
<string name="api_token">eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...</string>
</map>
Atakujący może użyć tokenu do podszywania się pod użytkownika.
Przykład 2: Odczyt danych logowania z SQLite
Tabela użytkowników w SQLite:
id | username | password |
---|---|---|
1 | admin | admin123 |
Brak szyfrowania haseł umożliwia bezpośrednie przejęcie kont.
🚨 Jak chronić lokalne dane aplikacji Android?
Aby zabezpieczyć lokalne przechowywanie danych:
- Szyfruj dane przechowywane w Shared Preferences i bazach SQLite,
- Stosuj mechanizmy Android Keystore do bezpiecznego zarządzania kluczami,
- Weryfikuj uprawnienia plików (
MODE_PRIVATE
), - Rozważ użycie zaszyfrowanych bibliotek, np. SQLCipher dla SQLite,
- Unikaj przechowywania danych wrażliwych lokalnie, jeśli to możliwe.
📋 Podsumowanie
W ramach hacking, łamanie zabezpieczeń lokalnego przechowywania danych w Androidzie jest niezwykle skuteczną techniką wykrywania błędów bezpieczeństwa. Niezaszyfrowane dane w Shared Preferences lub SQLite mogą prowadzić do poważnych naruszeń prywatności użytkowników.
Właściwe zabezpieczenie danych lokalnych to kluczowy element tworzenia bezpiecznych aplikacji mobilnych, dlatego tak ważne jest, aby programiści świadomie podchodzili do kwestii ochrony informacji.