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
  • Penjelasan
  • Melihat Source Code
  • Akses File pada SD Card
  • Kesimpulan

Was this helpful?

  1. Challenges

Insecure Data Storage - Part 4

Insecure SD Card Storage Security Risk

PreviousInsecure Data Storage - Part 3NextInput Validation Issues - Part 1

Last updated 4 years ago

Was this helpful?

Pendahuluan

Kurangnya penyimpanan internal dan kemudahan penggunaan dalam portabilitas, perangkat Android menyediakan opsi untuk menyimpan sesuatu di dalam memori SD card.

Seiring dengan fleksibilitas ini muncul lah risiko keamanan. Pada Android versi 6 ke bawah, tidak ada pada penyimpanan internal (diluar aplikasi sanbox) maupun eksternal seperti SD card.

Walapun user menggunakan Android versi 6 ke atas, tetap saja berbahaya jika yang disimpan adalah file yang tidak aman. Ditambah, SD card ini bisa digunakan oleh perangkat lain sehingga lebih rentan.

Dalam kasus ini, rooting pada perangkat tidak diperlukan. Tetapi kita harus memberikan permission pada aplikasi diva untuk menyimpan file (storage).

Penjelasan

Melihat Source Code

InsecureDataStorage4Activity.class
package jakhar.aseem.diva;

import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.File;
import java.io.FileWriter;

public class InsecureDataStorage4Activity extends AppCompatActivity {
  protected void onCreate(Bundle paramBundle) {
    super.onCreate(paramBundle);
    setContentView(2130968614);
  }
  
  public void saveCredentials(View paramView) {
    EditText editText1 = (EditText)findViewById(2131493010);
    EditText editText2 = (EditText)findViewById(2131493011);
    File file = Environment.getExternalStorageDirectory();
    try {
      File file1 = new File();
      StringBuilder stringBuilder2 = new StringBuilder();
      this();
      this(stringBuilder2.append(file.getAbsolutePath()).append("/.uinfo.txt").toString());
      file1.setReadable(true);
      file1.setWritable(true);
      FileWriter fileWriter = new FileWriter();
      this(file1);
      StringBuilder stringBuilder1 = new StringBuilder();
      this();
      fileWriter.write(stringBuilder1.append(editText1.getText().toString()).append(":").append(editText2.getText().toString()).append("\n").toString());
      fileWriter.close();
      Toast.makeText((Context)this, "3rd party credentials saved successfully!", 0).show();
    } catch (Exception exception) {
      Toast.makeText((Context)this, "File error occurred", 0).show();
      Log.d("Diva", "File error: " + exception.getMessage());
    } 
  }
}

Setelah menganalisa source code di atas, terlihat bahwa credentials yang diinputkan user disimpan pada file .uinfo.txt di dalam memori SD card.

File atau direktori dengan awalan titik (.) pada linux merupakan hidden file.

Akses File pada SD Card

Lokasi/path direktori dari SD Card pada setiap perangkat bisa berbeda-beda. Kita bisa mencoba beberapa lokasi berikut:

  • /sdcard/

  • /mnt/sdcard/

  • /storage/emulated/0/

  • /mnt/shell/emulated/0/

Masuk ke direktori SD Card, lalu gunakan perintah ls -a untuk melihat hidden file dan perintah cat untuk melihat isi dari file.

cd /sdcard/ # berpindah direktori ke /sdcard/
ls -la # melihat semua list termasuk hidden file
cat .uinfo.txt # melihat isi file

Credentials yang disimpan oleh aplikasi bisa terlihat dengan jelas seperti contoh di atas. Ini membuktikan bahwa aplikasi ini tidak menyimpan credentials dengan aman.

Kesimpulan

Meskipun pada Android versi 6 ke atas terdapat perlindungan/permintaan izin untuk menyimpan file ke dalam penyimpanan internal maupun eksternal, tetapi mungkin saja user tidak mengetahui bahwa yang disimpan oleh aplikasi adalah informasi sensitif yang disimpan dengan cara yang tidak aman.

Menyadari fakta tersebut, terdapat beberapa rekomendasi yang bisa developer lakukan, diantaranya:

  • Tidak menyimpan informasi sensitif apa pun baik pada memori internal maupun eksternal (SD Card) yang bisa diakses oleh orang lain atau aplikasi lain.

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

Menggunakan bisa menjadi pilihan untuk menyimpan kunci enkripsi dengan aman bahkan pada rooted device.

reverse engineering
Android Keystore
perlindungan/meminta izin untuk menyimpan file
Tampilan Soal Insecure Data Storage - Part 4