Dalam dua artikel pertama, kita membahas serangan terkait dengan Kegiatan komponen, kebocoran konten provider dan cara-cara untuk mengamankan mereka. Pada artikel ini, kita akan membahas serangan terhadap penerima broadcast.
Apa itu Penerima Broadcast?
Sebuah penerima Broadcast merupakan komponen penting dari sistem Android. Penerima broadcast terdaftar spesific untuk acara tertentu. Ketika peristiwa itu terjadi, penerima akan dipanggil dan melakukan tugas-tugas, seperti menampilkan pesan ke pengguna. Apa yang dapat kita lakukan dengan penerima broadcast terserah kreativitas pengembang, karena banyak hal dapat dilakukan dengan mereka.
Risiko Keamanan
Untuk memahami risiko keamanan yang terkait dengan penerima broadcast, kita harus tahu bagaimana peristiwa tersebut dibroadcasted. Ada dua jenis peristiwa.
1. Sistem Events
Sebuah aplikasi dapat didaftarkan untuk menerima broadcast occurred oleh aktivitas sistem seperti BOOT COMPLETE, SMS RECEIVED, BATTERY LOW, etc. Ketika aplikasi terdaftar untuk acara SMS RECEIVED, receiver yang akan dipanggil setiap kali SMS baru diterima.
2. Kustom Broadcasts
Terlepas dari peristiwa yang dihasilkan sistem, aplikasi juga dapat menghasilkan maksud kustom broadcast yang kami dapat mendaftarkan penerima.
Sekarang, mari kita bertanya pada diri sendiri dengan beberapa pertanyaan.
- Ketika aplikasi kita mengirim broadcasts intent, apakah diterima hanya oleh aplikasi yang dimaksud, atau bisa semua aplikasi menerimanya?
- Ketika kita mendaftar penerima, kita menerima broadcasts hanya dari sumber yang sah, atau dapat dari setiap aplikasi berbahaya lainnya yang mem-broadcasts?
Jika pengembang tidak menegakkan kontrol atas siapa yang dapat broadcasts dan yang tidak bisa broadcasts, jelas jawabannya adalah YA. Jika penerima menerima broadcasts dari sumber terpercaya, mungkin menempatkan aplikasi kita pada risiko serius.
Untuk menunjukkan bagaimana seseorang dapat memanfaatkan skenario seperti ini, saya telah mengembangkan sebuah aplikasi sederhana.
InfoSec Institute File Download
After completing this form you will have access to all practice exercises and lab files.
Prasyarat untuk mengikuti langkah-langkah :
- Komputer dengan Android SDK Dipasang
- Dua Emulator (Dalam kasus saya, emulator-5554 adalah di mana aplikasi rentan terinstal, emulator-5556 adalah untuk menerima SMS dari aplikasi rentan).
Uji fungsi Aplikasi ini
Setelah men-download aplikasi tes dan menginstalnya dalam sebuah emulator untuk menguji dan exploit it.
Hal ini dapat diinstal dengan adb menggunakan perintah berikut:
adb install <name of the apk>.apk
Ketika kami meluncurkan aplikasi, tampak seperti yang ditunjukkan pada gambar di bawah. Kita perlu mendaftarkan nomor ponsel tertentu menggunakan aktivitas pendaftaran seperti yang ditunjukkan pada gambar. Sekali, setelah menekan tombol kirim, kustom broadcasts akan dikirim dan kami akan menerima SMS konfirmasi ke nomor yang terdaftar (emulator-5556 dalam kasus saya).
App berjalan pada Emulator-5554
Tujuannya adalah untuk mengirim broadcasts intent palsu dan melihat apakah aplikasi tersebut menerima mereka. Jika ya, kami akan memanfaatkan aplikasi untuk mengirim SMS ke beberapa nomor ponsel acak menggunakan broadcasts palsu.
Topik Terlibat
- Memahami fungsi aplikasi
- Menyerang penerima broadcasts yang rentan
- Mengamankan aplikasi
Memahami Fungsi Aplikasi
Sebuah penerima broadcasts "MyBroadCastReceiver" terdaftar dalam file AndroidManifest.xml.
Penerima broadcasts umumnya terdaftar dalam format berikut. Kode tampaknya tidak aman karena penerima diekspor.
Aplikasi ini mengirimkan niat menggunakan potongan kode berikut, di mana " input " adalah nomor ponsel kita yang menerima sebagai input pengguna.
Berikut potongan kode mengambil nomor ponsel dari broadcasts dan mengirimkan SMS konfirmasi ke nomor yang terdaftar.
Pada bagian berikutnya, kita akan mencoba untuk mengeksploitasi fungsi di atas dengan mengirimkan broadcasts dari sumber terpercaya.
Menyerang Penerima Broadcast yang Rentan
Mari kita sekarang mencoba untuk mengirim beberapa broadcasts palsu ke penerima di atas. Hal ini dapat dilakukan dalam berbagai cara.
- Menggunakan am alat yang tersedia di adb
- Menggunakan aplikasi berbahaya untuk query
- Menggunakan Mercury Framework
Menggunakan adb
Dapatkan shell adb pada perangkat dan ketik perintah berikut untuk mengirim broadcast palsu.
am broadcast -a MyBroadcast -n com.isi.vul_broadcastreceiver/.MyBroadCastReceiver
Perintah di atas mengirimkan broadcast , tetapi tidak memiliki nomor ponsel yang disertakan. Kita bisa melewati nomor ponsel sebagai string menggunakan -es pilihan yang tersedia dengan am tool. Sekarang, perintah di atas menjadi:
am broadcast -a MyBroadcast -n com.isi.vul_broadcastreceiver/.MyBroadCastReceiver –es number 5556.
Hal yang sama ditunjukkan pada gambar di bawah.
Sekarang, broadcast event dikirim di background, dan karena aplikasi tidak memvalidasi sumber input, SMS akan dikirimkan ke emulator-5556 tanpa campur tangan pengguna.
Menggunakan aplikasi berbahaya untuk query
Kita juga bisa menulis sebuah aplikasi berbahaya untuk mengirim broadcast dan memanfaatkan fungsionalitas dari aplikasi yang rentan. Bagian yang terbaik adalah, aplikasi berbahaya tidak perlu izin SEND_SMS karena menggunakan izin yang didaftarkan oleh aplikasi yang rentan.
Menggunakan Mercury Framework
Seluruh proses dapat dilakukan dengan menggunakan Mercury framework bahkan lebih efisien dan sederhana caranya.
Mengamankan Aplikasi
1. Menetapkan android: atribut value diekspor ke false
Dalam file AndroidManifest.xml dari aplikasi kita, kita harus menambahkan atribut berikut ke penerima yang harus diamankan.
2. Membatasi akses dengan izin kustom
Kami juga dapat memberlakukan pembatasan izin berbasis dengan mendefinisikan hak akses kustom untuk setiap penerima. Hal ini berguna jika pengembang ingin membatasi akses ke komponen app nya kepada aplikasi-orang yang memiliki izin.
Ini adalah alasan mengapa kita perlu menentukan " android.permission.RECEIVE_SMS "izin pada file AndroidManifest.xml jika aplikasi apapun want to listen untuk Menerima SMS event menggunakan tindakan" android.provider.Telephony.SMS_RECEIVED "
Akhir Kata
Di Android, penerima broadcast menyediakan fungsionalitas yang besar untuk mengembangkan aplikasi kreatif. Tapi ketika kontrol keamanan yang tepat tidak ditegakkan, yang dapat menyebabkan serangan serius. Jadi, itu selalu merupakan ide yang baik untuk menguji semua komponen aplikasi selama pentest.