Yedeklemeler için güvenlik önerileri

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 bir android: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 bir android: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