Insecure Data Storage - Part 1
Android Shared Preference Unencrypted Local Storage Security Risk
Last updated
Was this helpful?
Android Shared Preference Unencrypted Local Storage Security Risk
Last updated
Was this helpful?
Shared Preferences adalah sebuah class yang berfungsi sebagai media penyimpanan data primitif pada file internal aplikasi dalam bentuk key-value pada file XML.
Terkadang developer menggunakan Shared preferences ini untuk menyimpan credentials seperti username, password, token, dll. Walaupun Shared preferences dideklarasi pada Private Mode yang artinya hanya bisa diakses oleh aplikasi tersebut, tetapi jika device tersebut telah di-root, maka tetap saja file tersebut bisa diakses oleh aplikasi lainnya.
Perhatikan pada fungsi saveCredentials()
, bahwa fitur ini menyimpan data menggunakan Shared preferences.
File Shared preferences terletak di direktori shared_prefs yang ada di dalam App Sandbox (/data/data/AppPackageName/shared_prefs
).
Gunakan adb shell
. Setelah itu jalankan perintah cd
untuk masuk ke direktori Shared preferences dan perintah cat
untuk melihat isi file .xml
.
Credentials yang disimpan oleh aplikasi bisa terlihat dengan jelas secara plain text seperti contoh di atas.
Hal ini membuktikan bahwa aplikasi tersebut menyimpan credentials dengan cara yang tidak aman. Karena credentials tersebut bisa diakses oleh aplikasi lain, bahkan credentials-nya bisa dilihat secara plain text tanpa adanya hash/encryption terlebih dahulu.
Yang paling mudah adalah menggunakan rooted device. Dengan hak istimewanya (super user), semua aplikasi bisa membaca file dari sanbox aplikasi lainnya walaupun pada kondisi Private Mode.
Menyadari fakta-fakta di atas, terdapat beberapa rekomendasi yang bisa developer lakukan, diantaranya:
Tidak menyimpan informasi sensitif apa pun secara lokal.
Lakukan salting + hasing terlebih dahulu pada data sensitif sebelum disimpan.
Bagian aplikasi yang akan kita bahas kali ini memiliki fitur untuk menyimpan credentials milik user. Dengan melakukan lalu menganalisis source code, kita akan mencari tahu bagaimana credentials tersebut disimpan.
Meskipun Shared preference dilindungi oleh , namun ada beberapa catch yang bisa membatalkan mekanisme perlindungan tersebut.
Jika device tidak di-rooting dan apikasi diinstall dengan yang mengandung debuggable='true'
, file yang diproteksi oleh sandbox dapat dengan mudah diakses dari luar.
Kerentanan debuggable='true'
bisa Anda baca .
Atau jika berisi allowBackup='true'
, dengan menggunakan file dari sandbox bisa dengan mudah didapatkan.
Kerentanan allowBackup='true'
bisa Anda baca .
Menggunakan bisa menjadi pilihan untuk menyimpan kunci enkripsi dengan aman bahkan pada rooted device.