Android Virtualization Framework (AVF), bir pVM'de rastgele yüklerin çalıştırılmasını önlemek için katmanlı bir güvenlik yaklaşımı kullanır. Bu yaklaşımda her katman ek zorunluluklar getirir. AVF güvenlik katmanlarının listesini aşağıda bulabilirsiniz:
Android, yalnızca pVM izinlerine sahip uygulamaların pVM oluşturmasına veya incelemesine izin verilmesini sağlar.
Önyükleyici: Önyükleyici, yalnızca Google veya cihaz satıcıları tarafından imzalanan pVM görüntülerinin başlatılmasına izin verilmesini sağlar ve Android Verified Boot prosedürüne uyar. Bu mimari, pVM'leri çalıştıran uygulamaların kendi çekirdeklerini paketleyemeyeceği anlamına gelir.
pVM, pVM'de çalıştırılan yükler için SELinux gibi katmanlı savunma sağlar. Derinlemesine savunma, verilerin yürütülebilir (
neverallow execmem
) olarak eşlenmesine izin vermez ve tüm dosya türleri için W^X'in geçerli olmasını sağlar.
Güvenlik modeli
Gizlilik, bütünlük ve kullanılabilirlik (CIA üçlüsü), bilgi güvenliği politikalarına rehberlik etmek için tasarlanmış bir model oluşturur:
- Gizlilik, bilgilere erişimi sınırlayan bir dizi kuraldır.
- Bütünlük, bilgilerin güvenilir ve doğru olmasını sağlar.
- Kullanılabilirlik, yetkili tüzel kişiler tarafından bilgilere güvenilir erişimin garanti edilmesidir.
Gizlilik ve bütünlük
Gizlilik, pKVM hiper yöneticisi tarafından uygulanan bellek izolasyonu özelliklerinden kaynaklanır. pKVM, tek tek fiziksel bellek sayfalarının bellek sahipliğini ve sahiplerin sayfaların paylaşılmasına yönelik tüm isteklerini izler. pKVM, yalnızca yetkili pVM'lerin (ana makine ve konuklar) hiper yönetici tarafından kontrol edilen 2. aşama sayfa tablolarında verilen sayfanın eşlenmesini sağlar. Bu mimari, bir pVM'ye ait belleğin içeriğinin, sahibi başka bir pVM ile açıkça paylaşmadığı sürece gizli kalmasını sağlar.
Gizliliğin korunmasıyla ilgili kısıtlamalar, sistemdeki pVM'ler adına bellek erişimi gerçekleştiren tüm öğeler (ör. DMA özellikli cihazlar ve daha ayrıcalıklı katmanlarda çalışan hizmetler) için de geçerlidir. Çip üzerinde sistem (SoC) tedarikçilerinin pKVM'yi destekleyebilmesi için yeni bir dizi şartı karşılaması gerekir. Aksi takdirde gizlilik sağlanamaz.
Bütünlük, bellekteki veriler ve hesaplama için geçerlidir. pVM'ler şunları yapamaz:
- İzin almadan birbirlerinin hafızasını değiştirme
- Birbirlerinin CPU durumunu etkiler.
Bu şartlar, hiper yönetici tarafından uygulanır. Ancak dm-verity veya AuthFS gibi başka çözümlerin uygulanması gerektiğinde sanal veri depolama alanında veri bütünlüğüyle ilgili sorunlar da ortaya çıkar.
Bu ilkeler, Linux'un sunduğu işlem izolasyonundan farklı değildir. Linux'ta bellek sayfalarına erişim 1. aşama sayfa tabloları ve çekirdek ile kontrol edilir. Çekirdek, işlemler arasında bağlam geçişi yapar. Ancak pKVM'nin bu özellikleri zorunlu kılan EL2 bölümü, Linux çekirdeğinin tamamına kıyasla üç kat daha az saldırı yüzeyine sahiptir (yaklaşık 10 bin satır koda karşılık 20 milyon satır kod) ve bu nedenle, süreç izolasyonuna güvenmek için çok hassas olan kullanım alanlarına daha güçlü bir güvence sunar.
pKVM, boyutu nedeniyle resmi doğrulamaya uygundur. Bu özellikleri gerçek pKVM ikilisi üzerinde resmî olarak kanıtlamayı amaçlayan akademik araştırmaları aktif olarak destekliyoruz.
Bu sayfanın geri kalanında, bir pKVM'nin etrafındaki her bileşenin sağladığı gizlilik ve bütünlük garantileri ele alınmaktadır.
Hipervizör
pKVM, pVM'leri ve Android'i karşılıklı olarak güvenilmeyen yürütme ortamlarında izole eden KVM tabanlı bir hipervizördür. Bu özellikler, ana makine de dahil olmak üzere herhangi bir pVM'de güvenlik ihlali olması durumunda geçerlidir. AVF'ye uygun alternatif hipervizörler benzer özellikler sağlamalıdır.
Bir pVM, sayfa sahibi tarafından açıkça paylaşılmadığı sürece başka bir tüzel kişiliğe (ör. pVM veya hipervizör) ait bir sayfaya erişemez. Bu kural, ana pVM'yi içerir ve hem CPU hem de DMA erişimleri için geçerlidir.
Bir pVM tarafından kullanılan sayfa, ana makineye geri döndürülmeden önce (ör. pVM yok edildiğinde) silinir.
Bir cihaz başlatma işlemindeki tüm pVM'lerin belleği ve pVM donanım yazılımı, sonraki cihaz başlatma işleminde işletim sistemi bootloader'ı çalıştırılmadan önce silinir.
SJTAG gibi bir donanım hata ayıklayıcısı bağlandığında, pVM önceden oluşturulmuş anahtarlarına erişemez.
pVM donanım yazılımı, ilk görüntüyü doğrulayamazsa başlatılmaz.
instance.img
bütünlüğü tehlikeye girerse pVM donanım yazılımı başlatılmaz.Bir pVM örneğine sağlanan DICE sertifika zinciri ve Bileşik Cihaz Tanımlayıcıları (CDI'ler) yalnızca söz konusu örnek tarafından türetilebilir.
Konuk işletim sistemi
Microdroid, bir pVM içinde çalışan bir işletim sistemi örneğidir. Microdroid, U-boot tabanlı bir önyükleyici, GKI, Android kullanıcı alanının bir alt kümesi ve bir yük başlatıcıdan oluşur. Bu özellikler, ana makine de dahil olmak üzere herhangi bir pVM'de güvenlik ihlali olması durumunda geçerlidir. pVM'de çalışan alternatif işletim sistemleri benzer özellikler sunmalıdır.
boot.img
,super.img
,vbmeta.img
veyavbmeta\_system.img
doğrulanamazsa Microdroid başlatılmaz.APK doğrulaması başarısız olursa Microdroid başlatılmaz.
APK güncellenmiş olsa bile aynı Microdroid örneği başlatılmaz.
APEX'lerden herhangi birinin doğrulaması başarısız olursa Microdroid başlatılmaz.
instance.img
, konuk pVM'nin dışında değiştirilirse Microdroid başlatılmaz (veya temiz bir başlangıç durumuyla başlatılır).Microdroid, önyükleme zincirinin onayını sağlar.
Konuk pVM ile paylaşılan disk görüntülerinde yapılan herhangi bir (imzalanmamış) değişiklik, pVM tarafında bir G/Ç hatasına neden olur.
Bir pVM örneğine sağlanan DICE sertifika zinciri ve CDI'ler yalnızca söz konusu örnek tarafından türetilebilir.
Şifrelenmiş bir depolama birimine yazma işlemleri gizlidir ancak şifreleme bloğu ayrıntı düzeyinde geri alma koruması yoktur. Ayrıca, bir veri bloğunun diğer rastgele harici kurcalanması, bu bloğun açıkça bir G/Ç hatası olarak algılanmak yerine Microdroid'de çöp olarak görünmesine neden olur.
Android
Bunlar, Android tarafından barındırılan ancak ana makine güvenliğinin ihlal edilmesi durumunda geçerli olmayan özelliklerdir:
Bir konuk pVM, diğer konuk pVM'lerle doğrudan etkileşimde bulunamaz (ör.
vsock
bağlantı kurmak).Ana makine pVM'sindeki yalnızca
VirtualizationService
, bir pVM ile iletişim kanalı oluşturabilir.Yalnızca platform anahtarıyla imzalanan uygulamalar, pVM'ler oluşturmak, pVM'lere sahip olmak veya pVM'lerle etkileşim kurmak için izin isteyebilir.
Ana makine ile pVM arasındaki
vsock
bağlantılarını ayarlarken kullanılan ve bağlam tanımlayıcısı (CID) olarak adlandırılan tanımlayıcı, ana makine pVM'si çalışırken yeniden kullanılmaz. Örneğin, çalışan bir pVM'yi başka bir pVM ile değiştiremezsiniz.
Kullanılabilirlik
pVM'ler bağlamında kullanılabilirlik, barındıranın davetlilere yeterli kaynak ayırması anlamına gelir. Böylece davetliler, yapmaları için tasarlanan görevleri gerçekleştirebilir.
Ana makinenin sorumlulukları arasında pVM'nin sanal CPU'larını planlamak da yer alır. KVM, geleneksel 1. tür hipervizörlerin (ör. Xen) aksine, iş yükü planlamasını ana makine çekirdeğine devretme konusunda açık bir tasarım kararı verir. Günümüzdeki planlayıcıların boyutu ve karmaşıklığı göz önüne alındığında, bu tasarım kararı güvenilir bilgi işlem tabanının (TCB) boyutunu önemli ölçüde azaltır ve ana makinenin performansı optimize etmek için daha bilinçli planlama kararları almasını sağlar. Ancak kötü amaçlı bir ana makine, konukları hiçbir zaman planlamamayı seçebilir.
Benzer şekilde, pKVM de hipervizörün karmaşıklığını azaltmak ve ana makineyi planlamadan sorumlu tutmak için fiziksel kesme işleme işini ana makine çekirdeğine devreder. Konuk kesintilerinin yönlendirilmesinin yalnızca hizmet reddine (çok az, çok fazla veya yanlış yönlendirilmiş kesintiler) neden olmasını sağlamak için çaba gösterilir.
Son olarak, ana makinenin sanal makine izleyici (VMM) işlemi, belleği ayırmaktan ve ağ kartı gibi sanal cihazlar sağlamaktan sorumludur. Kötü amaçlı bir VMM, konuktan kaynakları esirgeyebilir.
pKVM, konuklara kullanılabilirlik sağlamasa da tasarım, konukları her zaman öncelikli olarak kullanabilen veya sonlandırabilen ve kaynaklarını geri alabilen barındırıcının kullanılabilirliğini kötü amaçlı konuklardan korur.
Güvenli başlatma
Veriler, pVM örneklerine bağlıdır ve güvenli önyükleme, bir örneğin verilerine erişimin kontrol edilebilmesini sağlar. Bir örneğin ilk başlatılması, pVM için rastgele gizli bir tuz oluşturarak ve yüklenen görüntülerden doğrulama ortak anahtarları ve karma değerleri gibi ayrıntıları çıkararak örneği sağlar. Bu bilgiler, pVM örneğinin sonraki başlatmalarını doğrulamak ve örneğin gizli anahtarlarının yalnızca doğrulama işlemini geçen görüntülere yayınlanmasını sağlamak için kullanılır. Bu işlem, pVM'deki her yükleme aşamasında (pVM donanım yazılımı, pVM ABL, Microdroid vb.) gerçekleşir.
DICE, her yükleme aşamasına bir onay anahtarı çifti sağlar. Bu anahtar çiftinin ortak kısmı, ilgili aşamanın DICE sertifikasında onaylanır. Bu anahtar çifti, önyüklemeler arasında değişebilir. Bu nedenle, yeniden başlatmalar arasında sanal makine örneği için sabit olan bir mühürleme gizli anahtarı da türetilir. Bu anahtar, kalıcı durumu korumak için uygundur. Sızdırmazlık gizli anahtarı, sanal makine için çok değerlidir. Bu nedenle doğrudan kullanılmamalıdır. Bunun yerine, sızdırmazlık anahtarları sızdırmazlık sırrından türetilmeli ve sızdırmazlık sırrı mümkün olduğunca erken yok edilmelidir.
Her aşama, sonraki aşamaya deterministik olarak kodlanmış bir CBOR nesnesi iletir. Bu nesne, son aşamanın güvenli bir şekilde yüklenip yüklenmediği gibi birikmiş durum bilgilerini içeren DICE sertifika zincirini ve sırları içerir.
Kilidi açılmış cihazlar
Bir cihaz fastboot oem unlock
ile kilidi açıldığında kullanıcı verileri temizlenir.
Bu işlem, kullanıcı verilerini yetkisiz erişime karşı korur. Bir pVM'ye özel olan veriler de cihazın kilidi açıldığında geçersiz kılınır.
Kilidi açıldıktan sonra cihazın sahibi, pvmfw ve pKVM uygulamasını içeren bölümler de dahil olmak üzere genellikle Doğrulanmış Önyükleme ile korunan bölümleri yeniden flash'leyebilir. Bu nedenle, kilidi açılmış bir cihazın pVM'nin güvenlik modelini desteklediğine güvenilmez.
Uzak taraflar, anahtar doğrulama sertifikasında cihazın doğrulanmış başlatma durumunu inceleyerek bu potansiyel olarak güvenli olmayan durumu gözlemleyebilir.