Untuk mencegah payload arbitrer berjalan di dalam pVM, Android Virtualization Framework (AVF) menggunakan pendekatan keamanan berlapis dengan setiap lapisan menambahkan penerapan tambahan. Berikut adalah daftar lapisan keamanan AVF:
Android memastikan bahwa hanya aplikasi dengan izin pVM yang diizinkan untuk membuat atau memeriksa pVM.
Bootloader – Bootloader memastikan bahwa hanya image pVM yang ditandatangani oleh Google atau vendor perangkat yang diizinkan untuk melakukan booting dan mematuhi prosedur Android Verified Boot. Arsitektur ini menyiratkan bahwa aplikasi yang menjalankan pVM tidak dapat memaketkan kernel sendiri.
pVM memberikan pertahanan menyeluruh, seperti dengan SELinux, untuk payload yang dijalankan di pVM. Defense-in-depth tidak mengizinkan data pemetaan sebagai dapat dieksekusi (
neverallow execmem
) dan memastikan bahwa W^X berlaku untuk semua jenis file.
Model keamanan
Kerahasiaan, integritas, dan ketersediaan (CIA triad), membentuk model yang dirancang untuk memandu kebijakan keamanan informasi:
- Kerahasiaan adalah serangkaian aturan yang membatasi akses ke informasi.
- Integritas adalah jaminan bahwa informasi tersebut dapat dipercaya dan akurat.
- Ketersediaan adalah jaminan akses yang andal ke informasi oleh entitas resmi.
Kerahasiaan dan integritas
Kerahasiaan berasal dari properti isolasi memori yang diterapkan oleh hypervisor pKVM. pKVM melacak kepemilikan memori setiap halaman memori fisik dan permintaan apa pun dari pemilik agar halaman dibagikan. pKVM memastikan bahwa hanya pVM yang memenuhi syarat (host dan tamu) yang memiliki halaman tertentu yang dipetakan di tabel halaman tahap 2 yang dikontrol oleh hypervisor. Arsitektur ini mempertahankan bahwa konten memori yang dimiliki oleh pVM tetap pribadi kecuali jika pemiliknya secara eksplisit membagikannya dengan pVM lain.
Pembatasan untuk menjaga kerahasiaan juga berlaku untuk entitas apa pun dalam sistem yang melakukan akses memori atas nama pVM, yaitu perangkat yang kompatibel dengan DMA dan layanan yang berjalan di lapisan dengan hak istimewa lebih tinggi. Vendor System-on-Chip (SoC) harus memenuhi serangkaian persyaratan baru sebelum dapat mendukung pKVM. Jika tidak, kerahasiaan tidak dapat diberikan.
Integritas berlaku untuk data dalam memori dan komputasi. pVM tidak dapat:
- Mengubah memori satu sama lain tanpa izin.
- Memengaruhi status CPU satu sama lain.
Persyaratan ini diberlakukan oleh hypervisor. Namun, masalah terkait integritas data juga timbul terkait penyimpanan data virtual saat solusi lain harus diterapkan, seperti dm-verity atau AuthFS.
Prinsip ini tidak berbeda dengan isolasi proses yang ditawarkan oleh Linux, yaitu akses ke halaman memori dikontrol dengan tabel halaman tahap 1 dan kernel beralih konteks di antara proses. Namun, bagian EL2 dari pKVM, yang menerapkan properti ini, memiliki tiga urutan magnitudo lebih sedikit permukaan serangan dibandingkan dengan seluruh kernel Linux (sekitar 10 ribu versus 20 juta baris kode) sehingga menawarkan jaminan yang lebih kuat untuk menggunakan kasus yang terlalu sensitif untuk mengandalkan isolasi proses.
Dengan ukurannya, pKVM cocok untuk verifikasi formal. Kami secara aktif mendukung penelitian akademis, yang bertujuan untuk membuktikan secara resmi properti ini pada biner pKVM yang sebenarnya.
Bagian selanjutnya dari halaman ini membahas jaminan kerahasiaan dan integritas yang diberikan oleh setiap komponen di sekitar pKVM.
Hypervisor
pKVM adalah hypervisor berbasis KVM yang mengisolasi pVM dan Android ke dalam lingkungan eksekusi yang saling tidak tepercaya. Properti ini berlaku jika terjadi kompromi dalam pVM apa pun, termasuk host. Hypervisor alternatif yang mematuhi AVF harus menyediakan properti yang serupa.
pVM tidak dapat mengakses halaman milik entitas lain, seperti pVM atau hypervisor, kecuali jika dibagikan secara eksplisit oleh pemilik halaman. Aturan ini mencakup pVM host dan berlaku untuk akses CPU dan DMA.
Sebelum halaman yang digunakan oleh pVM ditampilkan ke host, seperti saat pVM dihancurkan, halaman tersebut akan dihapus total.
Memori semua pVM dan firmware pVM dari satu booting perangkat akan dihapus sebelum bootloader OS berjalan di booting perangkat berikutnya.
Saat debugger hardware, seperti SJTAG, dilampirkan, pVM tidak dapat mengakses kunci yang sebelumnya dibuat.
Firmware pVM tidak akan melakukan booting jika tidak dapat memverifikasi image awal.
Firmware pVM tidak akan melakukan booting jika integritas
instance.img
telah disusupi.Rantai sertifikat DICE dan ID Perangkat Gabungan (CDI) yang diberikan ke instance pVM hanya dapat berasal dari instance tertentu tersebut.
OS Tamu
Microdroid adalah contoh OS yang berjalan dalam pVM. Microdroid terdiri dari bootloader berbasis U, GKI, dan subset ruang pengguna Android, serta peluncur payload. Properti ini berlaku jika terjadi kompromi dalam pVM apa pun, termasuk host. OS alternatif yang berjalan di dalam pVM harus memberikan properti yang serupa.
Microdroid tidak akan melakukan booting jika
boot.img
,super.img
,vbmeta.img
, atauvbmeta\_system.img
tidak dapat diverifikasi.Microdroid tidak akan melakukan booting jika verifikasi APK gagal.
Instance Microdroid yang sama tidak akan melakukan booting meskipun APK telah diupdate.
Microdroid tidak akan melakukan booting jika salah satu APEX gagal dalam verifikasi.
Microdroid tidak akan melakukan booting (atau melakukan booting dengan status awal yang bersih) jika
instance.img
dimodifikasi di luar pVM tamu.Microdroid memberikan pengesahan ke rantai booting.
Setiap modifikasi (tanpa tanda tangan) pada image disk yang dibagikan dengan pVM tamu akan menyebabkan error I/O di sisi pVM.
Rantai sertifikat DICE dan CDI yang disediakan ke instance pVM hanya dapat diperoleh oleh instance tertentu tersebut.
Operasi tulis ke volume penyimpanan terenkripsi bersifat rahasia, tetapi tidak ada perlindungan rollback pada perincian blok enkripsi. Selain itu, gangguan eksternal arbitrer lainnya pada blok data menyebabkan blok tersebut muncul sebagai sampah ke Microdroid, bukan terdeteksi secara eksplisit sebagai error I/O.
Android
Berikut adalah properti yang dikelola oleh Android sebagai host, tetapi tidak berlaku jika host disusupi:
pVM tamu tidak dapat berinteraksi langsung dengan (seperti untuk membuat koneksi
vsock
) pVM tamu lainnya.Hanya
VirtualizationService
di pVM host yang dapat membuat saluran komunikasi ke pVM.Hanya aplikasi yang ditandatangani dengan kunci platform yang dapat meminta izin untuk membuat, memiliki, atau berinteraksi dengan pVM.
ID, yang disebut ID konteks (CID), yang digunakan untuk menyiapkan koneksi
vsock
antara host dan pVM tidak digunakan kembali saat pVM host berjalan. Misalnya, Anda tidak dapat mengganti pVM yang sedang berjalan dengan pVM lain.
Ketersediaan
Dalam konteks pVM, ketersediaan mengacu pada host yang mengalokasikan resource yang memadai kepada tamu sehingga tamu dapat melakukan tugas yang dirancang untuk dilakukan.
Tanggung jawab host mencakup penjadwalan CPU virtual pVM. KVM, tidak seperti hypervisor Type-1 konvensional (seperti Xen), membuat keputusan desain eksplisit untuk mendelegasikan penjadwalan beban kerja ke kernel host. Mengingat ukuran dan kompleksitas penjadwal saat ini, keputusan desain ini secara signifikan mengurangi ukuran trusted computing base (TCB) dan memungkinkan host membuat keputusan penjadwalan yang lebih tepat untuk mengoptimalkan performa. Namun, host berbahaya dapat memilih untuk tidak pernah menjadwalkan tamu.
Demikian pula, pKVM juga mendelegasikan penanganan interupsi fisik ke kernel host untuk mengurangi kompleksitas hypervisor dan membiarkan host bertanggung jawab atas penjadwalan. Upaya dilakukan untuk memastikan bahwa penerusan gangguan tamu hanya menghasilkan denial of service (terlalu sedikit, terlalu banyak, atau gangguan yang salah dirutekan).
Terakhir, proses virtual machine monitor (VMM) host bertanggung jawab untuk mengalokasikan memori dan menyediakan perangkat virtual, seperti kartu jaringan. VMM berbahaya dapat menahan resource dari tamu.
Meskipun pKVM tidak menyediakan ketersediaan bagi tamu, desain ini melindungi ketersediaan host dari tamu berbahaya karena host selalu dapat mendahului atau menghentikan tamu dan mengklaim kembali resource-nya.
Booting aman
Data terikat dengan instance pVM, dan booting aman memastikan bahwa akses ke data instance dapat dikontrol. Booting pertama instance menyediakannya dengan membuat salt rahasia secara acak untuk pVM dan mengekstrak detail, seperti kunci publik dan hash verifikasi, dari image yang dimuat. Informasi ini digunakan untuk memverifikasi booting berikutnya dari instance pVM dan memastikan rahasia instance hanya dirilis ke image yang lulus verifikasi. Proses ini terjadi untuk setiap tahap pemuatan dalam pVM: firmware pVM, pVM ABL, Microdroid, dan sebagainya.
DICE menyediakan setiap tahap pemuatan dengan pasangan kunci pengesahan, yang bagian publiknya disertifikasi dalam sertifikat DICE untuk tahap tersebut. Pasangan kunci ini dapat berubah di antara booting, sehingga rahasia penyegelan juga diperoleh yang stabil untuk instance VM di seluruh mulai ulang dan, dengan demikian, cocok untuk melindungi status persisten. Rahasia penyegelan sangat berharga bagi VM sehingga tidak boleh digunakan secara langsung. Sebagai gantinya, kunci penyegelan harus diperoleh dari rahasia penyegelan dan rahasia penyegelan harus dihancurkan sedini mungkin.
Setiap tahap meneruskan objek CBOR yang dienkode secara deterministik ke tahap berikutnya. Objek ini berisi secret dan rantai sertifikat DICE, yang berisi informasi status yang terakumulasi, seperti apakah tahap terakhir dimuat dengan aman.
Perangkat yang tidak terkunci
Saat perangkat dibuka kuncinya dengan fastboot oem unlock
, data pengguna akan dihapus total.
Proses ini melindungi data pengguna dari akses yang tidak sah. Data yang bersifat pribadi
untuk pVM juga akan dibatalkan validasinya saat terjadi pembukaan kunci perangkat.
Setelah dibuka kuncinya, pemilik perangkat bebas mem-flash ulang partisi yang biasanya dilindungi oleh booting terverifikasi, termasuk partisi yang berisi implementasi pKVM. Oleh karena itu, pKVM di perangkat yang tidak terkunci tidak akan dipercaya untuk menjunjung tinggi model keamanan.
Pihak jarak jauh dapat mengamati status yang berpotensi tidak aman ini dengan memeriksa status booting terverifikasi perangkat dalam sertifikat pengesahan kunci.