Kategoria OWASP: MASVS-CODE: Code Quality
Omówienie
Kopie zapasowe aplikacji mają na celu zachowanie danych użytkowników, aby można je było później przywrócić na nowym urządzeniu lub w przypadku ich utraty. Dotychczasowe zalecenia dotyczące bezpieczeństwa związane z kopiami zapasowymi aplikacji różnią się w zależności od wersji Androida i producenta urządzeń. Wszystkie te rekomendacje mają na celu zapewnienie, że nie dojdzie do wycieku danych poufnych.
Standardowy system kopii zapasowych Androida zapewnia najbezpieczniejsze, najsolidniejsze i najprostsze rozwiązanie dla aplikacji, które chcą tworzyć kopie zapasowe danych w chmurze lub przenosić dane na nowe urządzenie za pomocą automatycznego tworzenia kopii zapasowej (które jest włączone domyślnie, nie wymaga implementacji i można je rozszerzyć) oraz kopii zapasowej kluczy i wartości. Zalecamy korzystanie z tego rozwiązania, ponieważ przechowuje ono utworzone dane kopii zapasowej w katalogach, do których nie mają dostępu inne aplikacje innych firm, a także ułatwia szyfrowanie danych w spoczynku, szyfrowanie w transmisji oraz konfiguracje umożliwiające wykluczenie danych wrażliwych z kopii zapasowych.
Jeśli aplikacja wdraża rozwiązanie do tworzenia kopii zapasowych, które nie jest oparte na standardowym systemie kopii zapasowych Androida, może to zwiększyć prawdopodobieństwo popełnienia błędu, co może spowodować wyciek danych poufnych. Przykłady niestandardowych rozwiązań kopii zapasowych, które narażają dane użytkowników na wycieki, to aplikacje oferujące funkcję „eksportowania” lub „tworzenia kopii zapasowej”, które tworzą kopię danych aplikacji w katalogach do odczytu przez inne aplikacje. W związku z tym są one podatne na wycieki (bezpośrednie lub przez inne luki w zabezpieczeniach).
Wpływ
Stosowanie się do zaleceń dotyczących zabezpieczeń podczas konfigurowania kopii zapasowych aplikacji zapobiega potencjalnym wyciekom danych wrażliwych, które mogą się w nich znajdować. W zależności od rodzaju danych i zamierzeń atakującego wyciek danych poufnych może prowadzić do ujawnienia informacji, podszywania się pod użytkownika i strat finansowych.
Środki zaradcze
Używanie standardowego systemu kopii zapasowej Androida
Standardowy system kopii zapasowych Androida zawsze szyfruje dane kopii zapasowej w ruchu i w spoczynku. Szyfrowanie jest stosowane niezależnie od wersji Androida i niezależnie od tego, czy urządzenie ma ekran blokady. Począwszy od Androida 9, jeśli na urządzeniu jest ustawiony ekran blokady, dane kopii zapasowej są nie tylko zaszyfrowane, ale także zaszyfrowane za pomocą klucza, który jest nieznany Google (sekret ekranu blokady chroni klucz szyfrowania, co umożliwia szyfrowanie end-to-end).
Ogólnie pamiętaj, aby przestrzegać zasad przechowywania danych i wytycznych dotyczących bezpieczeństwa.
Jeśli kopia zapasowa zawiera szczególnie wrażliwe dane, zalecamy wykluczenie tych danych lub, jeśli nie możesz ich wykluczyć, włączenie pełnego szyfrowania zgodnie z opisem w następnej sekcji.
Wykluczenie danych z kopii zapasowej
Korzystając z pliku reguł (zwykle o nazwie backup_rules.xml
), możesz określić, które dane mają być wykluczone z kopii zapasowej. Plik ten musi znajdować się w folderze aplikacji res/xml
.
Konfiguracja reguł kopii zapasowej różni się w zależności od używanej wersji Androida:
- W przypadku wersji Androida 12 (poziom API 31) lub nowszych dodaj atrybut
android:dataExtractionRules
do elementu<application>
w elementachAndroidManifest.xml
: - xml
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
Następnie skonfiguruj plik backup_rules.xml
zgodnie z wymaganiami aplikacji dotyczącymi trwałości danych i bezpieczeństwa, korzystając z zaktualizowanego formatu konfiguracji.
Format wymagany do konfiguracji pliku backup_rules.xml
umożliwia deweloperom definiowanie niestandardowych reguł tworzenia kopii zapasowych zarówno w chmurze, jak i w przypadku transferów z urządzenia na urządzenie. Jeśli atrybut <device-transfer>
nie jest ustawiony, wszystkie dane aplikacji zostaną przeniesione podczas migracji D2D. Należy pamiętać, że nawet jeśli aplikacja docelowa jest kierowana na Androida 12 lub nowszego, na urządzeniach z Androidem 11 (poziom API 30) lub starszego należy zawsze podać osobny plik z dodatkowym zestawem reguł kopii zapasowej.
- W przypadku Androida w wersji 11 lub starszej dodaj atrybut
android:fullBackupContent
do elementu<application>
w elemencieAndroidManifest.xml
: - xml
xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>
Następnie skonfiguruj plik backup_rules.xml
zgodnie z wymaganiami aplikacji dotyczącymi trwałości danych i bezpieczeństwa, używając składni opisanej w artykule Tworzenie kopii zapasowej danych użytkownika.
Wymaganie pełnego szyfrowania
Jeśli nie możesz wykluczyć danych wrażliwych z kopii zapasowej, zalecamy wymaganie szyfrowania end-to-end, co oznacza zezwolenie na tworzenie kopii zapasowych tylko na Androidzie 9 lub nowszym i tylko wtedy, gdy ustawiony jest ekran blokady. Aby to zrobić, użyj flagi requireFlags="clientSideEncryption"
, którą należy zmienić na disableIfNoEncryptionCapabilities
i ustawić na true
, zaczynając od Androida 12.
Jeśli nie możesz korzystać ze standardowego systemu kopii zapasowej Androida
Jeśli nie możesz korzystać ze standardowego systemu kopii zapasowej Androida, bezpieczne przechowywanie danych kopii zapasowej oraz określanie, które dane mają być wykluczone z kopii zapasowej, jest bardziej skomplikowane. Trzeba to określić na poziomie kodu, a to przez to jest narażone na błędy, co wiąże się z ryzykiem wycieku danych. W takiej sytuacji zalecamy też regularne testowanie implementacji, aby mieć pewność, że nie nastąpiła zmiana w oczekiwanym działaniu kopii zapasowej.
Materiały
- Opis atrybutu allowBackup
- Szyfrowanie oparte na plikach
- Zmiany w zachowaniu funkcji przesyłania D2D
- Tworzenie kopii zapasowej danych użytkowników za pomocą automatycznej kopii zapasowej
- Tworzenie kopii zapasowych par klucz-wartość w Android Backup Service
- Zarządzanie kopiami zapasowymi na Androidzie 12 lub nowszym
- Zarządzanie kopią zapasową w Androidzie 11 i starszym
- Informacje umożliwiające identyfikację w umowach i zasadach Google
- Testowanie tworzenia i przywracania kopii zapasowych
- Kryptografia
- system Android Keystore,
- ADB
- Opcje programisty