Keamanan Android SharedPreference

118

Saya ingin tahu tentang keamanan preferensi bersama.

Apakah mungkin untuk mendapatkan akses ke sharedpreferences, meskipun mereka dibuat di MODE_PRIV (0)?
Apakah mungkin untuk membuat daftar semua sharedpreferences yang tersedia dan kemudian mengambil semua pengaturan dari aplikasi lain?
Apakah sharedpreferences merupakan tempat yang baik untuk meletakkan data sensitif, seperti sandi atau token autentikasi?

Terima kasih

Marek Sebera
sumber
Layak untuk dilihat, dengan jawaban yang bagus. Preferensi bersama menunjukkan banyak hal tentang gaya pemrograman pengembang.
Vishwa Ratna

Jawaban:

232

Preferensi Bersama disimpan sebagai file dalam sistem file pada perangkat. Mereka, secara default, disimpan dalam direktori data aplikasi dengan izin sistem file yang disetel yang hanya mengizinkan UID yang dijalankan aplikasi tertentu untuk mengaksesnya. Jadi, mereka bersifat pribadi karena izin file Linux membatasi aksesnya, sama seperti pada sistem Linux / Unix apa pun.

Siapapun yang memiliki akses level root ke perangkat akan dapat melihatnya, karena root memiliki akses ke semua yang ada di sistem file. Selain itu, aplikasi apa pun yang berjalan dengan UID yang sama dengan aplikasi yang membuat akan dapat mengaksesnya (ini biasanya tidak dilakukan dan Anda perlu mengambil tindakan khusus untuk membuat dua aplikasi berjalan dengan UID yang sama, jadi ini mungkin bukan masalah besar. perhatian). Terakhir, jika seseorang dapat memasang sistem file perangkat Anda tanpa menggunakan OS Android yang diinstal, mereka juga dapat melewati izin yang membatasi akses.

Jika Anda khawatir tentang akses tersebut ke preferensi Anda (atau data apa pun yang ditulis oleh aplikasi Anda), maka Anda akan ingin mengenkripsinya. Jika Anda begitu mengkhawatirkan mereka, Anda perlu mencari tahu dengan tepat berapa banyak perlindungan yang diperlukan untuk tingkat risiko yang Anda lihat. Ada diskusi yang sangat ekstensif tentang hal ini di Keamanan Aplikasi untuk Platform Android , yang baru saja diterbitkan pada bulan Desember 2011 (penafian: Saya penulis buku ini).

Thamaraiselvam
sumber
2
Apakah ada dokumentasi resmi yang membahas hal ini? Apakah Anda punya referensi?
clu
26

SharedPreferences tidak lain adalah file XML di ponsel / data / data / folder Anda, Jadi aplikasi atau pengguna apa pun dengan hak superuser di perangkat yang di-rooting dapat mengakses SharedPreferences Anda, bahkan jika dibuat dengan MODE_PRIV

Masih ada cara untuk melindunginya dari semua orang ... Silakan lihat tautan ini. Di sini Anda dapat menyimpan data di pref dengan enkripsi, kelasnya cukup jelas dan sangat mudah digunakan.

https://github.com/sveinungkb/encrypted-userprefs

Seperti yang dikatakan oleh orang lain siapa pun dapat mengaksesnya tetapi dalam hal ini tidak ada yang dapat membaca data di dalamnya karena dienkripsi. Jadi secure.For yang Utmost keamanan saran saya akan untuk menghasilkan kunci yang digunakan untuk enkripsi pada saat dijalankan daripada keras coding itu. Ada banyak cara untuk melakukan itu :)

Jazz Haque
sumber
8
lalu bagaimana Anda menyimpan kunci yang dihasilkan?
Olayinka
3
@Olayinka Akan lebih aman untuk mengenkripsinya dengan kunci lain dan menyimpannya di file SharedPref. Tapi kemudian, apa yang harus dilakukan dengan kunci lainnya? Serius, skenario terbaik akan mengirimkan kunci terenkripsi dan perangkat UID ke server menggunakan SSL untuk disimpan di sana dan diambil sesuai kebutuhan. Itu akan membutuhkan konektivitas, tetapi akan memungkinkan Anda memasukkan perangkat ke daftar hitam dan tiba-tiba semua data dibuang ke sampah. Tanpa koneksi internet yang konstan, setiap percobaan untuk mengenkripsi data tidak 100% aman.
Paulo Avelar
Saya menggunakan solusi di atas ... berhasil 9 dari 10 kali..tetapi saya mendapatkan kesalahan: 1e06b065: Fungsi sandi: EVP_DecryptFinal_ex: BAD_DECRYPT "pada waktu .. Adakah yang punya ide?
Raj Trivedi
3
@PauloAvelar Gunakan Android KeyStore untuk penyimpanan jangka panjang dan pengambilan kunci kriptografi. Kunci tidak disimpan dalam aplikasi, jadi mereka tidak dapat dikompromikan. Perpustakaan yang disediakan tidak menggunakannya. Ini menyimpan rahasia dalam kode sehingga tidak aman.
apex39
13

Biasanya, tidak, mereka tidak dapat diakses oleh aplikasi lain, namun, Anda harus mencatat bahwa SharedPreferences disimpan sebagai file XML di /data/data/direktori, yang pada dasarnya berarti bahwa aplikasi apa pun dengan hak superuser pada perangkat yang di- root dapat mengakses Anda SharedPreference, bahkan jika mereka dibuat denganMODE_PRIV

aviraldg.dll
sumber
3

Apakah mungkin untuk mendapatkan akses ke sharedpreferences, meskipun mereka dibuat di MODE_PRIV (0)?

Berdasarkan kode Tidak. Tetapi Anda dapat mengambil file aplikasi jika Anda memiliki hak istimewa pengguna super.

Apakah mungkin untuk membuat daftar semua sharedpreferences yang tersedia dan kemudian mengambil semua pengaturan dari aplikasi lain?

Jika Anda adalah pengguna super (perangkat yang di-rooting) maka Anda dapat menarik semua file pribadi dari aplikasi.

Apakah sharedpreferences merupakan tempat yang baik untuk meletakkan data sensitif, seperti sandi atau token autentikasi?

Tidak. Ini dapat dengan mudah diretas. Jika Anda ingin meletakkan data sensitif apa pun di file prefrence bersama, Anda dapat mengenkripsi data dan menyimpannya. Anda dapat menyimpan kunci enkripsi Anda di NDK / server.

Rajiv Ranjan
sumber
Bagaimana itu bisa dengan mudah diretas?
John Sardinha
Ya, bentuk pertanyaan @ @
Cuong Vo