OWASP kategorisi: MASVS-CODE: Kod Kalitesi
Genel Bakış
Uygulama yedeklemeleri, kullanıcı verilerinin daha sonra yeni bir cihaza geri yüklenebilmesi veya veri kaybı durumunda korunması için tasarlanmıştır. Uygulama yedekleri ile ilgili mevcut güvenlik önerileri, Android sürümleri ve cihaz üreticileri arasında farklılık gösteren ayrıntılara sahiptir. Ortak tema, bu önerilerin hassas verilerin sızdırılmamasını sağlamayı amaçlamasıdır.
Standart Android Yedekleme sistemi, uygulamaların verilerini buluta yedeklemesi veya yeni bir cihaza veri aktarması için Otomatik Yedekleme (varsayılan olarak etkindir, uygulama işlemi gerekmez ve genişletilebilir) ve anahtar/değer çifti yedekleme aracılığıyla en güvenli, sağlam ve en kolay çözümü sunar. Elde edilen yedek verileri diğer üçüncü taraf uygulamaları tarafından erişilemeyen dizinlerde depoladığı ve ayrıca dinlenme halindeki şifrelemeyi, aktarımdaki şifrelemeyi ve hassas verilerin yedeklemelerden hariç tutulmasına olanak tanıyan yapılandırmaları kolaylaştırdığı için bu çözümü kullanmanızı öneririz.
Bir uygulama bunun yerine Standart Android Yedekleme sistemine bağlı olmayan bir yedekleme çözümü uygularsa bu durum, hassas verilerin sızdırılmasına yol açan hata olasılığını artırabilir. Kullanıcı verilerini sızıntılara maruz bırakan standart olmayan yedekleme çözümlerine örnek olarak, diğer uygulamalar tarafından okunabilen dizinlerde uygulama verilerinin bir kopyasını oluşturan ve bu nedenle sızıntıya (doğrudan veya diğer güvenlik açıkları aracılığıyla) eğilimli olan "dışa aktarma" veya "yedekleme" özelliği sunan uygulamalar verilebilir.
Etki
Uygulama yedeklerini ayarlarken güvenlik önerilerine uymak, yedeklerin içerebileceği hassas verilerin sızmasını önler. Gerçek verilere ve saldırganın amaçlarına bağlı olarak hassas veri sızıntısı, bilginin açıklanmasına, kullanıcı kimliğine bürünmeye ve mali kayba neden olabilir.
Çözümler
Standart Android Yedekleme sistemini kullanma
Standart Android Yedekleme sistemi, aktarım sırasında ve işlem yapılmazken yedekleme verilerini her zaman şifreler. Bu şifreleme, kullanılan Android sürümünden ve cihazınızda kilit ekranı olup olmadığından bağımsız olarak uygulanır. Android 9'dan itibaren, cihazda bir kilit ekranı ayarlanmışsa yedekleme verileri yalnızca şifrelenmekle kalmaz, aynı zamanda Google'ın bilmediği bir anahtarla da şifrelenir (kilit ekranı gizli anahtarı, şifreleme anahtarını korur ve böylece uçtan uca şifreleme etkinleştirilir).
Genel olarak veri depolama ve güvenlik yönergelerine uymayı unutmayın.
Yedeklemenizde özellikle hassas veriler varsa bu verileri hariç tutmanızı veya hariç tutamıyorsanız aşağıdaki bölümde açıklandığı gibi uçtan uca şifreleme uygulamanızı öneririz.
Veriler yedekten hariç tutuluyor
Genellikle backup_rules.xml
olarak adlandırılan ve res/xml
uygulama klasörüne yerleştirilen bir kurallar dosyası kullanarak yedekten hangi verilerin hariç tutulacağını belirtebilirsiniz.
Yedekleme kurallarının yapılandırması, kullanılan Android sürümüne bağlı olarak bazı farklılıklar gösterir:
- Android 12 (API düzeyi 31) ve sonraki sürümler için
AndroidManifest.xml
içindeki<application>
öğesine birandroid:dataExtractionRules
özelliği ekleyin: - xml
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
Ardından, backup_rules.xml
dosyasını güncellenen yapılandırma biçimine uygun olarak uygulamanın veri kalıcılık ve güvenlik koşullarına göre yapılandırın.
backup_rules.xml
dosya yapılandırması için gereken biçim, geliştiricilerin hem Cloud hem de Cihazdan Cihaza (D2D) aktarımlar için özel yedekleme kuralları tanımlamasına olanak tanır. <device-transfer>
özelliği ayarlanmamışsa D2D taşıma işlemi sırasında tüm uygulama verileri aktarılır. Hedef uygulama Android 12 veya sonraki sürümleri hedeflese bile Android 11 (API düzeyi 30) veya önceki sürümleri çalıştıran cihazlar için her zaman ek bir yedekleme kuralları grubu içeren ayrı bir dosya belirtilmesi gerektiğini vurgulamak önemlidir.
- Android 11 ve önceki sürümler için,
AndroidManifest.xml
içindeki<application>
öğesine birandroid:fullBackupContent
özelliği ekleyin: - xml
xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>
Ardından, backup_rules.xml
dosyasını kullanıcı verilerini yedekleme makalesinde belirtilen söz dizimini kullanarak uygulamanın veri kalıcılık ve güvenlik koşullarına göre yapılandırın.
Uçtan uca şifreleme zorunluluğu
Hassas verileri yedeğinizden hariç tutamıyorsanız uçtan uca şifreleme özelliğini zorunlu kılmanızı öneririz. Bu durumda, yalnızca Android 9 veya sonraki sürümlerde ve yalnızca kilit ekranı ayarlandığında yedeklemeye izin verilir. Bunu, requireFlags="clientSideEncryption"
işaretini kullanarak yapabilirsiniz. Bu işaretin Android 12'den itibaren disableIfNoEncryptionCapabilities
olarak yeniden adlandırılması ve true
olarak ayarlanması gerekir.
Standart Android Yedekleme sistemini kullanamıyorsanız
Standart Android Yedekleme sistemini kullanamıyorsanız yedek verilerinizi güvenli bir şekilde saklamak ve hangi verilerin yedeklemenizden hariç tutulacağını belirtmek daha karmaşık bir işlemdir. Bu, kod düzeyinde belirtilmesi gereken bir özelliktir ve bu nedenle hatalara açıktır ve veri sızıntısı riski taşır. Bu senaryoda, beklenen yedekleme davranışında herhangi bir değişiklik olmadığından emin olmak için uygulamanızı düzenli olarak test etmeniz de önerilir.
Kaynaklar
- allowBackup özelliğinin açıklaması
- Dosya Tabanlı Şifreleme
- D2D aktarım davranışında yapılan değişiklikler
- Otomatik Yedekleme ile kullanıcı verilerini yedekleme
- Android Backup Service ile anahtar/değer çiftlerini yedekleme
- Android 12 veya sonraki sürümlerde yedeklemeyi kontrol etme
- Android 11 ve önceki sürümlerde yedeklemeyi kontrol etme
- Google'ın sözleşme ve politikalarındaki kimliği tanımlayabilecek bilgileri (PII) anlama
- Yedekleme ve geri yüklemeyi test etme
- Kriptografi
- Android anahtar deposu sistemi
- ADB
- Geliştirici seçenekleri