DIVA Android
  • Damn Insecure and Vulnerable App (DIVA)
  • Pendahuluan
    • Persiapan
    • Konfigurasi Burp Suite dengan Android
    • Instalasi Aplikasi DIVA
  • Reversing of APK
    • Decompiling dan Reversing APK
  • Challenges
    • Insecure Logging
    • Hardcoding Issues - Part 1
    • Insecure Data Storage - Part 1
    • Insecure Data Storage - Part 2
    • Insecure Data Storage - Part 3
    • Insecure Data Storage - Part 4
    • Input Validation Issues - Part 1
    • Input Validation Issues - Part 2
    • Access Control Issues - Part 1
    • Access Control Issues - Part 2
    • Access Control Issues - Part 3
    • Hardcoding Issues - Part 2
    • Input Validation Issues - Part 3
Powered by GitBook
On this page
  • Pendahuluan
  • Penyelesaian
  • Melihat Source Code
  • Melihat Isi Direktori Shared Preferences
  • Kesimpulan

Was this helpful?

  1. Challenges

Insecure Data Storage - Part 1

Android Shared Preference Unencrypted Local Storage Security Risk

PreviousHardcoding Issues - Part 1NextInsecure Data Storage - Part 2

Last updated 4 years ago

Was this helpful?

Pendahuluan

Shared Preferences adalah sebuah class yang berfungsi sebagai media penyimpanan data primitif pada file internal aplikasi dalam bentuk key-value pada file XML.

Informasi lebih lanjut tentang Shared Preferences bisa Anda bisa .

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.

Penyelesaian

Melihat Source Code

InsecureDataStorage1Activity.class
package jakhar.aseem.diva;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class InsecureDataStorage1Activity extends AppCompatActivity {
  protected void onCreate(Bundle paramBundle) {
    super.onCreate(paramBundle);
    setContentView(2130968611);
  }
  
  public void saveCredentials(View paramView) {
    SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences((Context)this).edit();
    EditText editText1 = (EditText)findViewById(2131493000);
    EditText editText2 = (EditText)findViewById(2131493001);
    editor.putString("user", editText1.getText().toString());
    editor.putString("password", editText2.getText().toString());
    editor.commit();
    Toast.makeText((Context)this, "3rd party credentials saved successfully!", 0).show();
  }
}

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).

Melihat Isi Direktori Shared Preferences

Gunakan adb shell. Setelah itu jalankan perintah cd untuk masuk ke direktori Shared preferences dan perintah cat untuk melihat isi file .xml.

cd /data/data/jakhar.aseem.diva/shared_prefs/
cat <nama-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.

Kesimpulan

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.

reverse engineering
sandbox
di sini
di sini
Android Keystore
di sini
ADB backup
Tampilan Soal Insecure Data Storage - Part 1
AndroidManifest.xml
AndroidManifest.xml