Keamanan

Untuk mencegah berjalannya muatan sewenang-wenang di dalam pVM, Android Virtualization Framework (AVF) menggunakan pendekatan keamanan berlapis di mana setiap lapisan menambahkan penegakan tambahan. Berikut adalah daftar lapisan keamanan AVF:

  • Android memastikan bahwa hanya aplikasi dengan izin pVM yang diizinkan membuat atau memeriksa pVM.

  • Bootloader – Bootloader memastikan bahwa hanya gambar pVM yang ditandatangani oleh Google atau vendor perangkat yang diizinkan untuk melakukan booting dan mematuhi prosedur Boot Terverifikasi Android . Arsitektur ini menyiratkan bahwa aplikasi yang menjalankan pVM tidak dapat menggabungkan kernelnya sendiri.

  • pVM memberikan pertahanan mendalam, seperti SELinux , untuk payload yang dijalankan di pVM. Pertahanan mendalam melarang data pemetaan sebagai data yang dapat dieksekusi ( neverallow execmem ) dan memastikan bahwa W^X berlaku untuk semua jenis file.

Model keamanan

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

  • Kerahasiaan adalah seperangkat aturan yang membatasi akses terhadap informasi.
  • Integritas adalah jaminan bahwa informasi tersebut dapat dipercaya dan akurat.
  • Ketersediaan adalah jaminan akses yang dapat diandalkan terhadap informasi oleh entitas yang berwenang.

Kerahasiaan dan integritas

Kerahasiaan berasal dari properti isolasi memori yang diterapkan oleh hypervisor pKVM. pKVM melacak kepemilikan memori setiap halaman memori fisik dan setiap permintaan dari pemilik agar halaman dibagikan. pKVM memastikan bahwa hanya pVM yang berhak (host dan tamu) yang halaman tertentu dipetakan dalam tabel halaman tahap 2 yang dikontrol oleh hypervisor. Arsitektur ini mempertahankan bahwa isi memori yang dimiliki oleh pVM tetap bersifat pribadi kecuali jika pemiliknya secara eksplisit membaginya dengan pVM lain.

Pembatasan untuk menjaga kerahasiaan juga berlaku untuk setiap entitas dalam sistem yang melakukan akses memori atas nama pVM, yaitu perangkat berkemampuan DMA dan layanan yang berjalan di lapisan yang lebih memiliki hak istimewa . Vendor System-on-Chip (SoC) harus memenuhi serangkaian persyaratan baru sebelum mereka dapat mendukung pKVM. Jika tidak, kerahasiaan tidak dapat diberikan.

Integritas berlaku untuk data dalam memori dan komputasi. pVM tidak bisa:

  • Ubah ingatan satu sama lain tanpa persetujuan.
  • Mempengaruhi status CPU masing-masing.

Persyaratan ini diberlakukan oleh hypervisor. Namun, masalah mengenai integritas data juga muncul dengan penyimpanan data virtual ketika solusi lain harus diterapkan, seperti dm-verity atau AuthFS.

Prinsip-prinsip ini tidak berbeda dengan isolasi proses yang ditawarkan oleh Linux di mana akses ke halaman memori dikontrol dengan tabel halaman tahap 1 dan konteks kernel beralih antar proses. Namun, bagian EL2 dari pKVM, yang menerapkan properti ini, memiliki sekitar setengah permukaan serangan dibandingkan dengan seluruh kernel Linux (kira-kira 10 ribu versus 20 juta baris kode) dan oleh karena itu menawarkan jaminan yang lebih kuat untuk menggunakan kasus yang terlalu sensitif untuk diandalkan. pada isolasi proses.

Mengingat ukurannya, pKVM cocok untuk verifikasi formal. Kami secara aktif mendukung penelitian akademis, yang bertujuan untuk membuktikan secara formal sifat-sifat ini pada biner pKVM yang sebenarnya.

Sisa halaman ini membahas jaminan kerahasiaan dan integritas yang disediakan oleh setiap komponen di sekitar pKVM.

hipervisor

pKVM adalah hypervisor berbasis KVM yang mengisolasi pVM dan Android ke dalam lingkungan eksekusi yang saling tidak dipercaya. Properti ini berlaku jika terjadi kompromi dalam pVM mana pun, termasuk host. Hypervisor alternatif yang mematuhi AVF perlu menyediakan properti serupa.

  • PVM tidak dapat mengakses halaman milik entitas lain, seperti pVM atau hypervisor, kecuali dibagikan secara eksplisit oleh pemilik halaman. Aturan ini mencakup pVM host dan berlaku untuk akses CPU dan DMA.

  • Sebelum halaman yang digunakan oleh pVM dikembalikan ke host, misalnya saat pVM dimusnahkan, halaman tersebut akan dihapus.

  • Memori semua pVM dan firmware pVM dari satu boot perangkat dihapus sebelum bootloader OS berjalan pada boot perangkat berikutnya.

  • Ketika debugger perangkat keras, seperti SJTAG, dipasang, pVM tidak dapat mengakses kunci yang dibuat sebelumnya.

  • Firmware pVM tidak bisa boot jika tidak dapat memverifikasi gambar awal.

  • Firmware pVM tidak bisa boot jika integritas instance.img dikompromikan.

  • Rantai Sertifikat Boot (BCC) dan Pengidentifikasi Perangkat Gabungan (CDI) yang diberikan ke instans pVM hanya dapat diturunkan oleh instans tertentu tersebut.

OS Tamu

Microdroid adalah contoh OS yang berjalan dalam pVM. Microdroid terdiri dari bootloader berbasis U-boot, GKI, dan subset ruang pengguna Android, serta peluncur payload. Properti ini berlaku jika terjadi kompromi dalam pVM mana pun, termasuk host. OS alternatif yang berjalan di pVM harus menyediakan properti serupa.

  • Microdroid tidak bisa boot jika boot.img , super.img , vbmeta.img , atau vbmeta\_system.img tidak dapat diverifikasi.

  • Microdroid tidak bisa boot jika verifikasi APK gagal.

  • Contoh Microdroid yang sama tidak akan bisa boot meskipun APK telah diperbarui.

  • Microdroid tidak akan bisa boot jika salah satu APEX gagal dalam verifikasi.

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

  • Microdroid memberikan pengesahan pada rantai boot.

  • Modifikasi apa pun (yang tidak ditandatangani) pada image disk yang dibagikan dengan pVM tamu menyebabkan kesalahan I/O di sisi pVM.

  • BCC dan CDI yang diberikan ke instance pVM hanya dapat diturunkan oleh instance tersebut.

  • Penulisan ke volume penyimpanan terenkripsi bersifat rahasia, namun tidak ada perlindungan rollback pada tingkat granularitas blok enkripsi. Selain itu, gangguan eksternal sewenang-wenang lainnya pada blok data menyebabkan blok tersebut tampak sebagai sampah bagi Microdroid, dan bukannya terdeteksi secara eksplisit sebagai kesalahan I/O.

Android

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

  • PVM tamu tidak dapat berinteraksi langsung dengan (seperti 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.

  • Pengidentifikasi, yang disebut pengidentifikasi konteks (CID), yang digunakan dalam 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 tuan rumah yang mengalokasikan sumber daya yang cukup kepada tamu sehingga tamu dapat melakukan tugas yang dirancang untuk mereka lakukan.

Tanggung jawab tuan rumah termasuk menjadwalkan CPU virtual pVM. KVM, tidak seperti hypervisor Tipe-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 basis komputasi tepercaya (TCB) dan memungkinkan host membuat keputusan penjadwalan yang lebih tepat untuk mengoptimalkan kinerja. Namun, tuan rumah yang jahat 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 diambil untuk memastikan bahwa penerusan interupsi tamu hanya menghasilkan penolakan layanan (terlalu sedikit, terlalu banyak, atau interupsi salah rute).

Terakhir, proses monitor mesin virtual (VMM) host bertanggung jawab untuk mengalokasikan memori dan menyediakan perangkat virtual, seperti kartu jaringan. VMM yang berbahaya dapat menahan sumber daya dari tamu.

Meskipun pKVM tidak menyediakan ketersediaan untuk tamu, desainnya melindungi ketersediaan host dari tamu jahat karena host selalu dapat mendahului atau menghentikan tamu dan mendapatkan kembali sumber dayanya.

Boot aman

Data terikat dengan instance pVM, dan boot aman memastikan bahwa akses ke data instance dapat dikontrol. Boot pertama dari sebuah instance menyediakannya dengan secara acak menghasilkan garam rahasia untuk pVM dan mengekstraksi detail, seperti kunci publik verifikasi dan hash, dari gambar yang dimuat. Informasi ini digunakan untuk memverifikasi booting berikutnya dari instans pVM dan memastikan rahasia instans hanya dirilis ke image yang lolos 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 entri BCC untuk tahap tersebut. Pasangan kunci ini dapat berubah di antara booting, sehingga rahasia penyegelan juga diperoleh yang stabil untuk instance VM selama reboot dan, dengan demikian, cocok untuk melindungi status persisten. Rahasia penyegelan sangat berharga bagi VM sehingga tidak boleh digunakan secara langsung. Sebaliknya, kunci penyegelan harus berasal dari rahasia penyegelan dan rahasia penyegelan harus dihancurkan sedini mungkin.

Setiap tahap menyerahkan objek CBOR yang dikodekan secara deterministik ke tahap berikutnya. Objek ini berisi rahasia dan BCC, yang berisi akumulasi informasi status, seperti apakah tahap terakhir dimuat dengan aman.

Perangkat tidak terkunci

Saat perangkat dibuka kuncinya dengan fastboot oem unlock , data pengguna akan dihapus. Proses ini melindungi data pengguna dari akses tidak sah. Data yang bersifat pribadi untuk pVM juga tidak valid ketika terjadi pembukaan kunci perangkat.

Setelah dibuka kuncinya, pemilik perangkat bebas melakukan reflash partisi yang biasanya dilindungi oleh boot terverifikasi, termasuk partisi yang berisi implementasi pKVM. Oleh karena itu, pKVM pada perangkat yang tidak terkunci tidak akan dipercaya untuk menegakkan model keamanan.

Pihak jarak jauh dapat mengamati status yang berpotensi tidak aman ini dengan memeriksa status boot perangkat yang terverifikasi dalam sertifikat pengesahan kunci.