Android Virtualization Framework (AVF), pVM içinde rastgele yüklerin çalıştırılmasını önlemek için her katmanın ek yaptırımlar eklediği katmanlı bir güvenlik yaklaşımı kullanır. AVF güvenlik katmanlarının listesi aşağıda verilmiştir:
Android, yalnızca pVM izinlerine sahip uygulamaların pVM oluşturmasına veya incelemesine izin verir.
Önyükleme yükleyici: Önyükleme yükleyici, yalnızca Google veya cihaz tedarikçileri tarafından imzalanan pVM görüntülerinin başlatılmasına izin verir ve Android Doğrulanmış Başlatma işlemine uyar. Bu mimari, pVM çalıştıran uygulamaların kendi çekirdeklerini paketleyemeyeceği anlamına gelir.
pVM, pVM'de çalıştırılan yük için SELinux gibi ayrıntılı savunma sağlar. Derin savunma, verilerin yürütülebilir (
neverallow execmem
) olarak eşlenmesine izin vermez ve W^X'in tüm dosya türleri için geçerli olmasını sağlar.
Güvenlik modeli
Gizlilik, bütünlük ve kullanılabilirlik (CIA üçlü) özellikleri, bilgi güvenliği politikalarını yönlendirmek için tasarlanan bir model oluşturur:
- Gizlilik, bilgilere erişimi sınırlayan bir kurallar kümesidir.
- Dürüstlük, bilgilerin güvenilir ve doğru olmasının garantisidir.
- Kullanılabilirlik, yetkili tüzel kişiler tarafından bilgilere güvenilir bir şekilde erişilebileceğinin garantisidir.
Gizlilik ve bütünlük
Gizlilik, pKVM hipervizörü tarafından uygulanan bellek yalıtım özelliklerinden kaynaklanır. pKVM, bağımsız fiziksel bellek sayfalarının bellek sahipliğini ve sayfaların paylaşılmasıyla ilgili sahiplerden gelen tüm istekleri izler. pKVM, yalnızca yetkili pVM'lerin (ana makine ve konuklar) hipervizör tarafından kontrol edilen 2. aşama sayfa tablolarında belirli bir sayfanın eşlendiğinden emin olur. Bu mimari, sahibi başka bir sanal makineyle açıkça paylaşmadığı sürece sanal makinenin sahip olduğu belleğin içeriğinin gizli kalmasını sağlar.
Gizliliği korumaya yönelik kısıtlamalar, sistemde pVM'ler adına bellek erişimleri gerçekleştiren tüm öğeleri (ör. DMA özellikli cihazlar ve daha ayrıcalıklı katmanlarda çalışan hizmetler) de kapsar. Çip Üzerinde Sistem (SoC) tedarikçilerinin pKVM'yi destekleyebilmesi için yeni bir dizi gereksinimi karşılaması gerekir. Aksi takdirde gizlilik sağlanamaz.
Bütünlük, bellekteki veriler ve hesaplama için geçerlidir. pVM'ler şunları yapamaz:
- Birbirlerinin hafızasını izinsiz olarak değiştirme.
- Birbirlerinin CPU durumunu etkiler.
Bu şartlar hipervizör tarafından zorunlu kılınmıştır. Ancak dm-verity veya AuthFS gibi başka çözümlerin uygulanması gerektiğinde, sanal veri depolama alanında da veri bütünlüğüyle ilgili sorunlar ortaya çıkar.
Bu ilkeler, Linux tarafından sunulan işlem yalıtımından farklı değildir. Linux tarafından sunulan işlem yalıtımı, bellek sayfalarına erişimin 1. aşamadaki sayfa tabloları ve çekirdek bağlamıyla işlemler arasında geçişler ile kontrol edilir. Bununla birlikte, pKVM'nin bu özellikleri uygulayan EL2 kısmının, Linux çekirdeğinin tamamına kıyasla (yaklaşık 10 bine karşılık 20 milyon kod satırı) üç kat daha az saldırı yüzeyine sahiptir. Bu nedenle, işlem izolasyonuna güvenmeye fazla hassas olan kullanım alanları için daha güçlü bir güvence sağlar.
Boyutu nedeniyle pKVM, resmi doğrulamaya uygundur. Gerçek pKVM ikilisinde bu özellikleri resmi olarak kanıtlamayı amaçlayan akademik araştırmaları etkin şekilde destekliyoruz.
Bu sayfanın geri kalanında, pKVM'nin her bileşeninin sağladığı gizlilik ve bütünlük garantileri ele alınmaktadır.
Hipervizör
pKVM, pVM'leri ve Android'i birbirinden şüphelenen yürütme ortamlarına ayıran KVM tabanlı bir hipervizördür. Bu özellikler, ana makine de dahil olmak üzere herhangi bir pVM'de güvenlik ihlali olması durumunda tutulur. AVF'ye uygun alternatif hipervizörlerin benzer özellikler sağlaması gerekir.
Bir sanal makine, sayfa sahibi tarafından açıkça paylaşılmadığı sürece sanal makine veya hipervizör gibi başka bir öğeye ait bir sayfaya erişemez. Bu kural, ana makine pVM'sini içerir ve hem CPU hem de DMA erişimleri için geçerlidir.
Bir sanal makine tarafından kullanılan bir sayfa, sanal makine yok edildiğinde olduğu gibi ana makineye döndürülmeden önce silinir.
Bir cihazın başlatılmasından sonraki cihaz başlatma işleminde işletim sistemi önyükleyicisi çalıştırılmadan önce tüm pVM'lerin belleği ve pVM donanım yazılımı silinir.
SJTAG gibi bir donanım hata ayıklayıcı bağlandığında pVM, daha önce oluşturulmuş anahtarlarına erişemez.
İlk resmi doğrulayamazsa pVM donanım yazılımı önyükleme yapmaz.
instance.img
bütünlüğünün güvenliği ihlal edilirse pVM donanım yazılımı başlatılmaz.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.
Misafir işletim sistemi
microdroid, 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 dahil olmak üzere herhangi bir sanal makinede güvenlik ihlali olması durumunda geçerlidir. pVM'de çalışan alternatif işletim sistemleri benzer özellikler sağlamalı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 mikrodroid başlatılmaz.
APK güncellenmiş olsa bile aynı Microdroid örneği başlatılmaz.
APEX'lerden herhangi biri doğrulamada başarısız olursa mikrodroid başlatılmaz.
instance.img
, konuk pVM'nin dışında değiştirilirse Microdroid önyükleme yapmaz (veya temiz bir başlangıç durumuyla önyükleme yapar).Microdroid, önyükleme zinciri için doğrulama sağlar.
Misafir pVM ile paylaşılan disk resimlerinde yapılan herhangi bir (imzasız) değişiklik, pVM tarafında bir G/Ç hatasına neden olur.
Bir pVM örneğine sağlanan DICE sertifika zinciri ve CDI'lar yalnızca söz konusu örnek tarafından türetilebilir.
Şifrelenmiş bir depolama birimine yapılan yazma işlemleri gizlidir ancak şifreleme bloğunun ayrıntı düzeyinde geri alma koruması yoktur. Ayrıca, bir veri bloğunun keyfi olarak harici olarak değiştirilmesi, söz konusu bloğun bir G/Ç hatası olarak açıkça algılanması yerine Microdroid'de "çöp" olarak görünmesine neden olur.
Yapay Zeka
Aşağıdaki özellikler, Android tarafından barındırıcı olarak korunur ancak barındırıcıda güvenlik ihlali olması durumunda geçerli olmaz:
Misafir pVM'leri diğer misafir pVM'leriyle doğrudan etkileşime geçemez (ör.
vsock
bağlantı kurmak için).Yalnızca ana pVM'deki
VirtualizationService
, pVM ile iletişim kanalı oluşturabilir.Yalnızca platform anahtarıyla imzalanan uygulamalar, sanal makine oluşturma, sahip olma veya sanal makinelerle etkileşim kurma izni isteyebilir.
Ana makine ile pVM arasında
vsock
bağlantıları oluştururken kullanılan bağlam tanımlayıcısı (CID) adlı tanımlayıcı, ana makine pVM'si çalışırken yeniden kullanılmaz. Örneğin, çalışan bir sanal makineyi başka bir sanal makineyle değiştiremezsiniz.
Kullanılabilirlik
pVM'ler bağlamında kullanılabilirlik, barındıran tarafından davetlilere yeterli kaynak ayrılmasını ifade eder. Böylece davetliler, tasarlandıkları görevleri gerçekleştirebilir.
Ana makinenin sorumlulukları arasında pVM'nin sanal CPU'larını planlama da yer alır. KVM, geleneksel 1. Tür hipervizörlerden (Xen gibi) farklı olarak, iş yükü planlamasını ana makine çekirdeğine devretme konusunda açık bir tasarım kararı alır. Günümüzün planlayıcılarını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 küçültür ve ana makinenin performansı optimize etmek için daha bilinçli planlama kararları almasını sağlar. Ancak kötü niyetli bir ev sahibi, hiçbir zaman konuk planlamamayı seçebilir.
Benzer şekilde pKVM de hipervizoru karmaşıklığını azaltmak ve planlamadan ana makinenin sorumlu olmasını sağlamak için fiziksel kesinti işlemlerini ana makine çekirdeğine devreder. Misafir kesintilerinin yönlendirilmesinin yalnızca hizmet reddi (çok az, çok fazla veya yanlış yönlendirilen kesintiler) ile sonuçlanmasını önlemek için gereken çaba gösterilir.
Son olarak, ana makinenin sanal makine izleyici (VMM) işlemi, bellek ayırmaktan ve ağ kartı gibi sanal cihazlar sağlamaktan sorumludur. Kötü amaçlı bir VMM, konukdan kaynakları bekletebilir.
pKVM, konuklara müsaitlik durumu sağlamasa da tasarım, barındırıcının müsaitlik durumunu kötü amaçlı konuklardan korur. Çünkü barındırıcı, konukları her zaman önleyebilir veya sonlandırabilir ve kaynaklarını geri alabilir.
Güvenli başlatma
Veriler bir sanal makine örneğine bağlıdır ve güvenli önyükleme, bir örneğin verilerine erişimin kontrol edilebilmesini sağlar. Bir örneğin ilk önyüklemesi, pVM için rastgele bir gizli takviye oluşturarak ve yüklenen görüntülerden doğrulama ortak anahtarları ve karmalar gibi ayrıntıları ayıklayarak hazırlanır. Bu bilgiler, pVM örneğinin sonraki başlatmalarını doğrulamak ve örneğin gizli anahtarlarının yalnızca doğrulamayı geçen görüntülere açıklanmasını sağlamak için kullanılır. Bu işlem, pVM'deki her yükleme aşamasında gerçekleşir: pVM donanım yazılımı, pVM ABL, Microdroid vb.
DICE, her yükleme aşamasında bir onay anahtarı çifti sağlar. Bu anahtarların ortak bölümü, söz konusu aşama için DICE sertifikasında onaylanmıştır. Bu anahtar çifti, önyüklemeler arasında değişebilir. Bu nedenle, yeniden başlatmalarda sanal makine örneği için kararlı olan ve bu nedenle kalıcı durumu korumaya uygun bir mühürleme gizlisi de türetilir. Mühürleme gizli anahtarı, sanal makine için son derece değerli olduğundan doğrudan kullanılmamalıdır. Bunun yerine, mühürleme anahtarları mühürleme gizlisinden türetilmelidir ve mühürleme gizlisi mümkün olduğunca erken imha edilmelidir.
Her aşama, sonraki aşamaya kararlı bir şekilde kodlanmış bir CBOR nesnesi aktarır. Bu nesne, gizli bilgileri ve DICE sertifika zincirini içerir. Bu zincir, son aşamanın güvenli bir şekilde yüklenip yüklenmediği gibi birikmiş durum bilgilerini içerir.
Kilidi açık cihazlar
Bir cihazın kilidi fastboot oem unlock
ile açıldığında kullanıcı verileri silinir.
Bu işlem, kullanıcı verilerini yetkisiz erişime karşı korur. Cihazın kilidi açıldığında, sanal makine için özel olan veriler de geçersiz kılınır.
Cihazın sahibi, kilidi açıldığında pKVM uygulamasını içeren bölümler de dahil olmak üzere genellikle doğrulanmış başlatma ile korunan bölümleri yeniden yükleyebilir. Bu nedenle, kilidi açık bir cihazdaki pKVM'nin güvenlik modelini desteklediğine güvenilmez.
Uzak taraflar, bir anahtar onay sertifikasında cihazın doğrulanmış başlatma durumunu inceleyerek potansiyel olarak güvenli olmayan bu durumu gözlemleyebilir.