Keamanan

Untuk mencegah payload arbitrer berjalan di dalam pVM, Android Virtualization Framework (AVF) menggunakan pendekatan keamanan berlapis yang setiap lapisannya 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 Booting Terverifikasi Android. Arsitektur ini menyiratkan aplikasi yang menjalankan pVM tidak dapat memaketkan kernelnya sendiri.

  • pVM menyediakan defense in depth, seperti dengan SELinux, untuk payload yang dijalankan di pVM. Defense-in-depth tidak mengizinkan data pemetaan sebagai dapat dieksekusi (neverallow execmem) dan memastikan W^X menampung untuk semua jenis file.

Model keamanan

Kerahasiaan, integritas, dan ketersediaan (CIA triad), membentuk model yang dirancang untuk memandu kebijakan keamanan informasi:

  • Kerahasiaan adalah seperangkat 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 diberlakukan oleh hypervisor pKVM. pKVM melacak kepemilikan memori setiap halaman memori fisik dan setiap permintaan dari pemilik agar halaman dibagikan. pKVM memastikan bahwa hanya pVM berhak (host dan tamu) yang dipetakan di tabel halaman tahap 2 mereka yang dikontrol oleh hypervisor. Arsitektur ini mempertahankan bahwa konten memori yang dimiliki oleh pVM tetap bersifat pribadi, kecuali jika pemilik membagikannya secara eksplisit dengan pVM lain.

Pembatasan untuk menjaga kerahasiaan juga mencakup setiap entity dalam sistem yang melakukan akses memori atas nama pVM, yaitu perangkat mampu DMA dan layanan yang berjalan di lapisan dengan hak istimewa yang 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:

  • Memodifikasi kenangan masing-masing tanpa izin.
  • Memengaruhi status CPU satu sama lain.

Persyaratan ini diberlakukan oleh hypervisor. Namun, masalah terkait integritas data juga timbul terkait penyimpanan data virtual jika solusi lain harus diterapkan, seperti dm-verity atau AuthFS.

Prinsip ini tidak berbeda dengan isolasi proses yang ditawarkan oleh Linux, yang mengakses halaman memori dikontrol dengan tabel halaman tahap 1 dan peralihan konteks kernel antarproses. Namun, bagian EL2 dari pKVM, yang menerapkan properti ini, memiliki tiga urutan permukaan serangan yang jauh lebih sedikit dibandingkan dengan seluruh kernel Linux (sekitar 10 ribu berbanding 20 juta baris kode) sehingga menawarkan jaminan yang lebih kuat untuk kasus penggunaan yang terlalu sensitif untuk mengandalkan isolasi proses.

Mengingat 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 disediakan oleh setiap komponen di sekitar pKVM.

Hypervisor

pKVM adalah hypervisor berbasis KVM yang mengisolasi pVM dan Android ke dalam lingkungan eksekusi yang sama-sama tidak tepercaya. Properti ini disimpan 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 pada booting perangkat berikutnya.

  • Saat debugger hardware, seperti SJTAG, dipasang, pVM tidak dapat mengakses kunci yang dibuat sebelumnya.

  • Firmware pVM tidak bisa melakukan booting jika tidak dapat memverifikasi image awal.

  • Firmware pVM tidak dapat melakukan booting jika integritas instance.img disusupi.

  • Rantai sertifikat DICE dan ID Perangkat Gabungan (CDI) yang disediakan untuk instance pVM hanya dapat diperoleh oleh 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 penyusupan dalam pVM apa pun, termasuk host. OS alternatif yang berjalan di dalam pVM harus memberikan properti yang serupa.

  • Microdroid tidak akan dapat melakukan booting jika boot.img, super.img, vbmeta.img, atau vbmeta\_system.img tidak dapat diverifikasi.

  • Microdroid tidak akan bisa melakukan booting jika verifikasi APK gagal.

  • Instance Microdroid yang sama tidak akan bisa melakukan booting meskipun APK sudah diupdate.

  • Microdroid tidak akan dapat {i>booting<i} jika salah satu APEX gagal verifikasi.

  • Microdroid tidak akan melakukan booting (atau melakukan booting dengan status awal yang bersih) jika instance.img diubah di luar pVM tamu.

  • Microdroid menyediakan pengesahan ke rantai booting.

  • Setiap modifikasi (tidak bertanda tangan) pada disk image yang dibagikan dengan pVM tamu akan menyebabkan error I/O pada sisi pVM.

  • Rantai sertifikat DICE dan CDI yang diberikan 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, modifikasi eksternal arbitrer lainnya pada blok data menyebabkan pemblokiran tersebut muncul sebagai sampah bagi Microdroid, bukan terdeteksi secara eksplisit sebagai error I/O.

Android

Berikut adalah properti yang dikelola oleh Android sebagai host, tetapi tidak berlaku jika terjadi penyusupan host:

  • PVM tamu tidak dapat berinteraksi langsung dengan (misalnya 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 berjalan dengan pVM lain.

Ketersediaan

Dalam konteks pVM, availability mengacu pada host yang mengalokasikan resource yang memadai untuk tamu sehingga tamu dapat melakukan tugas-tugas yang dirancang untuk dilakukan.

Tanggung jawab host meliputi penjadwalan CPU virtual pVM. KVM, tidak seperti hypervisor Type-1 konvensional (seperti Xen), membuat keputusan desain eksplisit untuk mendelegasikan penjadwalan workload ke kernel host. Mengingat ukuran dan kompleksitas penjadwal saat ini, keputusan desain ini secara signifikan mengurangi ukuran basis komputasi tepercaya (TCB) dan memungkinkan host membuat keputusan penjadwalan yang lebih tepat untuk mengoptimalkan performa. Namun, {i>host<i} 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 untuk penjadwalan. Upaya dilakukan untuk memastikan bahwa penerusan interupsi tamu hanya mengakibatkan denial of service (terlalu sedikit, terlalu banyak, atau interupsi yang salah rute).

Terakhir, proses monitor virtual machine (VMM) host bertanggung jawab mengalokasikan memori dan menyediakan perangkat virtual, seperti kartu jaringan. VMM yang 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 verifikasi dan hash, dari gambar yang dimuat. Informasi ini digunakan untuk memverifikasi booting berikutnya dari instance pVM dan memastikan secret instance hanya dirilis untuk image yang lulus verifikasi. Proses ini terjadi untuk setiap tahap pemuatan dalam pVM: firmware pVM, ABL pVM, Microdroid, dan sebagainya.

DICE menyediakan pasangan kunci pengesahan untuk setiap tahap pemuatan, yang bagian publiknya disertifikasi dalam sertifikat DICE untuk tahap tersebut. Pasangan kunci ini dapat berubah antar-booting, sehingga rahasia penyegelan juga diperoleh yang stabil untuk instance VM saat mulai ulang sehingga cocok untuk melindungi status persisten. Rahasia penyegelan sangat berharga bagi VM, sehingga tidak boleh digunakan secara langsung. Sebagai gantinya, kunci penyegelan harus berasal dari rahasia penyegelan dan rahasia penyegelan harus dihancurkan sedini mungkin.

Setiap tahap menyerahkan objek CBOR yang dienkode secara deterministik ke tahap berikutnya. Objek ini berisi rahasia dan rantai sertifikat DICE, yang berisi informasi status terakumulasi, seperti apakah tahap terakhir dimuat dengan aman.

Perangkat yang tidak terkunci

Jika 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 dibatalkan saat buka kunci perangkat terjadi.

Setelah tidak terkunci, pemilik perangkat bebas untuk 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.