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 instrument atau CPU‑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:

  1. Audit Runtime Permissions menggunakan adb shell dumpsys package permissions sebelum & sesudah benchmark → **diff** mengungkap granted yang tak terpakai.
  2. Hook API dengan Xposed atau Frida untuk menolak grantRuntimePermission bila sumber bukan system app.
  3. Gunakan android:requestLegacyExternalStorage="false" di AndroidManifest sehingga **scoped storage** memaksa revocation otomatis.
  4. Scheduled Revocation: jalankan pm revoke dalam cron atau WorkManager setiap 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

  1. Apa benchmark bisa memicu izin dangerous? Ya, beberapa tool benchmark memanggil API yang membutuhkan izin seperti CAMERA atau READ_PHONE_STATE.
  2. Bagaimana cara mengecek apakah ada izin yang tersisa? Pakai adb shell dumpsys package permissions | grep granted sebelum & sesudah benchmark, lalu bandingkan.
  3. 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.

About the Author

Dzul Qurnain

Suka nonton Anime, ngoding dan bagi-bagi tips kalau tahu.. Oh iya, suka baca ( tapi yang menarik menurutku aja)... Praktisi WordPress, web development, SEO, dan server administration yang membagikan tutorial teknis dan catatan implementasi nyata.

View All Articles