Back to IF4053 Keamanan Perangkat Lunak

Application Sandbox, UID, dan IPC

Questions/Cues

  • Bagaimana model izin berbasis pengguna Linux menjadi fondasi sandbox Android?
  • Mengapa setiap aplikasi diberi UID unik dan dijalankan di proses terpisah?
  • Apa makna prinsip “place access controls close to the resource”?
  • Bagaimana fitur Shared UID dapat merusak Application Sandbox?
  • Mengapa media codec dipisahkan ke proses ber-privilege rendah?

Reference Points

  • IF4053 Keamanan Perangkat Lunak (W10 Mobile Security — bagian “Application Sandbox & Privilege Separation”)

Keamanan di Level Linux Kernel

Fondasi sandbox Android terletak pada mekanisme keamanan Linux kernel. Linux menerapkan model izin berbasis pengguna (user-based permissions model) dan isolasi proses (process isolation): setiap aplikasi memperoleh sandbox-nya sendiri berdasarkan pemisahan proses. Tujuannya adalah melindungi sumber daya satu pengguna dari pengguna lain—setiap aplikasi berjalan dalam proses Linux-nya sendiri untuk mengamankan komunikasi antar-proses (IPC).

Secara konkret, mekanisme ini mencegah pengguna A membaca file milik pengguna B, memastikan pengguna A tidak dapat mengakses CPU dan memori milik pengguna B, serta mencegah pengguna A mengakses perangkat milik pengguna B (misalnya telephony, GPS, Bluetooth). Karena Android memetakan setiap aplikasi ke “pengguna” Linux yang berbeda, isolasi antar-aplikasi langsung diwarisi dari isolasi antar-pengguna yang sudah matang di Linux. Selain itu, Android OS menambahkan isolasi dan proteksi memori proses, enkripsi filesystem, akses per-aplikasi ke perangkat keras, serta pembatasan per-aplikasi atas memori/CPU dan sumber daya lain seperti koneksi jaringan, kamera, lokasi (GPS), Bluetooth, dan SMS/MMS.

Application Sandbox: UID Unik per Aplikasi

Application Sandbox bekerja dengan menetapkan User ID (UID) unik untuk setiap aplikasi Android dan menjalankannya sebagai pengguna tersebut dalam proses terpisah. Ketika sebuah Activity baru diluncurkan, proses barunya tidak berjalan sebagai launcher, melainkan dengan identitasnya sendiri sesuai permission yang dispesifikasikan pengembang. Setiap program dapat meminta Activity Manager meluncurkan hampir aplikasi apa pun, dan aplikasi tersebut akan berjalan dengan UID-nya sendiri—bukan UID pemanggil.

Implikasinya: aplikasi A tidak diizinkan melakukan hal jahat seperti membaca data aplikasi B atau menelepon tanpa permission. Seluruh pustaka, runtime aplikasi, dan semua aplikasi berjalan di dalam Application Sandbox pada level kernel. Lebih rinci, setiap aplikasi berjalan dalam UID dan VM-nya sendiri, menerapkan model pemisahan privilege default (default privilege separation) yang memberi fitur keamanan secara instant. Sandbox ini menangani resource sharing (CPU, memori) dan proteksi data melalui FS permissions, serta menyediakan authenticated IPC lewat Unix domain sockets.

Prinsip desain kunci di sini adalah “place access controls close to the resource, not in the VM”—tempatkan kontrol akses dekat dengan sumber daya, bukan di VM. Alasannya: perimeter yang lebih kecil lebih mudah dilindungi (smaller perimeter ⇒ easier to protect). Aplikasi Linux default memiliki terlalu banyak kuasa, sehingga Android mengunci akses pengguna untuk aplikasi “default”. Namun ada keseimbangan: aplikasi yang dikunci sepenuhnya akan membatasi inovasi, dan mengandalkan pengguna membuat keputusan keamanan yang benar itu rumit (tricky).

flowchart TB
    subgraph Kernel["Linux Kernel — Application Sandbox"]
        A["App A<br/>UID 10001<br/>Proses + VM sendiri"]
        B["App B<br/>UID 10002<br/>Proses + VM sendiri"]
    end
    A -- "Authenticated IPC<br/>(Intent / Unix domain socket)" --> B
    A -. "akses langsung DITOLAK" .-> B

Shared UID Regression

Fitur Shared UID memungkinkan dua aplikasi yang ditandatangani dengan kunci yang sama untuk berbagi UID, memberikan interaktivitas lebih karena keduanya dapat saling mengakses data dan berjalan dalam proses yang sama. Namun fitur ini membuka celah serius. Mengikuti prinsip “malware does not hurt computers, malware authors do”, masalahnya muncul ketika kepercayaan disalahgunakan.

Panasonic melaporkan bahwa shared UID ternyata broken (rusak). Skenario ancamannya: jika pengguna memasang malware, penyerang dapat berbagi UID dengan aplikasi yang sudah terinstal—misalnya browser. Begitu malware berbagi UID dengan browser, ia mewarisi seluruh akses dan data browser tersebut, sehingga merusak Application Sandbox secara efektif. Inilah mengapa shared UID kini sangat tidak dianjurkan dan ditinggalkan pada Android modern: berbagi identitas berarti berbagi seluruh batas keamanan, meniadakan isolasi yang menjadi inti model keamanan Android.

Privilege Separation Lebih Lanjut

Android memperdalam pemisahan privilege untuk komponen yang secara inheren berisiko. Media codec sangat kompleks ⇒ sangat tidak aman (very insecure). Diakui bahwa tidak mungkin menemukan semua isu pada pustaka media, sehingga strategi yang diambil adalah mengisolasi, bukan menyempurnakan. Pustaka media OpenCore “dibuang” (banished) ke proses dengan privilege lebih rendah, yaitu mediaserver.

Strategi ini langsung membuahkan hasil (immediately paid off). Ketika Charlie Miller melaporkan kerentanan pada parsing MP3 (terdokumentasi sebagai oCERT-2009-002), dampaknya terbatas karena kode parsing yang rentan berjalan di mediaserver yang ber-privilege rendah—bukan di proses ber-privilege tinggi. Dengan kata lain, kerentanan tetap ada, tetapi blast radius-nya diperkecil drastis: penyerang yang mengeksploitasi codec hanya memperoleh hak proses mediaserver yang terbatas, bukan kendali penuh atas perangkat. Ini adalah penerapan nyata prinsip least privilege pada komponen yang diketahui rawan.

Summary

Keamanan Android berakar pada model izin berbasis pengguna dan isolasi proses Linux yang mencegah satu pengguna membaca file, memori, atau perangkat pengguna lain. Application Sandbox menetapkan UID unik per aplikasi, menjalankannya di proses dan VM terpisah dengan pemisahan privilege default serta authenticated IPC via Unix domain socket, mengikuti prinsip “place access controls close to the resource” (perimeter kecil lebih mudah dilindungi). Fitur Shared UID merusak isolasi ini: aplikasi yang ditandatangani sama dapat berbagi UID, dan malware yang berbagi UID dengan browser efektif membobol sandbox. Untuk komponen rawan seperti media codec, Android menerapkan privilege separation lebih lanjut—memindahkan OpenCore ke mediaserver ber-privilege rendah, sehingga kerentanan parsing MP3 (Charlie Miller, oCERT-2009-002) memiliki dampak terbatas.