Benchmark pada Android dapat membuka celah izin OS, memberi **akses meningkat** pada aplikasi berbahaya. Memahami mekanisme ini serta menerapkan pengecekan runtime dapat menutup celah privilege‑escalation.
Kenapa Benchmark Bikin Izin Bocor?
Kamu mungkin pernah jalankan benchmark untuk mengukur performa CPU atau GPU. Saat proses tersebut, Android memberi aplikasi **izin sementara** untuk mengakses sensor kritis. Jika tidak dipantau, izin ini *tinggal* aktif setelah benchmark selesai → **privilege escalation**.
Bagaimana Android Mengelola Izin Sementara?
- **Temporary Grants** – Sistem memberi izin “dangerous” selama proses
adb shell am instrumentatauCPU‑Profiler. - **Sticky Flag** – Beberapa API tidak otomatis mengembalikan status “denied” ketika proses berhenti, jadi izin menjadi *sticky*.
Strategi Menutup Celah Privilege‑Escalation
Berikut langkah‑langkah praktis yang jarang dibahas di forum:
- Audit Runtime Permissions menggunakan
adb shell dumpsys package permissionssebelum & sesudah benchmark → **diff** mengungkap granted yang tak terpakai. - Hook API dengan Xposed atau Frida untuk menolak
grantRuntimePermissionbila sumber bukan system app. - Gunakan
android:requestLegacyExternalStorage="false"diAndroidManifestsehingga **scoped storage** memaksa revocation otomatis. - Scheduled Revocation: jalankan
pm revokedalamcronatauWorkManagersetiap menit selama benchmark.
Trik Lanjutan: Permission Guard Service
Buat service ringan yang memantau AppOpsManager realtime. Setiap deteksi OPSTR_FINE_LOCATION atau OPSTR_READ_PHONE_STATE yang tidak diperlukan akan setMode ke MODE_IGNORED. Ini memberi kontrol *micro‑granular* di atas runtime permission standar.
Implementasi Contoh Kode (Kotlin)
class PermissionGuardService : Service() {
private val manager = getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
private val handler = Handler(Looper.getMainLooper())
private val check = Runnable {
val ops = arrayOf(AppOpsManager.OPSTR_FINE_LOCATION, AppOpsManager.OPSTR_READ_PHONE_STATE)
ops.forEach { op ->
if (manager.checkOpNoThrow(op, Process.myUid(), packageName) == AppOpsManager.MODE_ALLOWED) {
manager.setMode(op, Process.myUid(), packageName, AppOpsManager.MODE_IGNORED)
}
}
handler.postDelayed(check, 5000) // cek tiap 5 detik
}
override fun onCreate() { super.onCreate(); handler.post(check) }
override fun onBind(intent: Intent?) = null
}
FAQ
- Apa benchmark bisa memicu izin dangerous? Ya, beberapa tool benchmark memanggil API yang membutuhkan izin seperti
CAMERAatauREAD_PHONE_STATE. - Bagaimana cara mengecek apakah ada izin yang tersisa? Pakai
adb shell dumpsys package permissions | grep grantedsebelum & sesudah benchmark, lalu bandingkan. - Apakah service di atas mempengaruhi performa? Beban minimal (timer tiap 5 detik) sehingga dampak pada benchmark <1 %.
Kesimpulan & CTA
Benchmark bukan musuh, tapi bila izin dibiarkan terbuka, keamanan aplikasi terancam. Implementasikan audit izin, hook API, dan service guard untuk menutup celah privilege‑escalation.
Related: Panduan Praktik Terbaik Izin Android
External references: Android Permissions Overview, Android Security Docs.
