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üsü), bilgi güvenliği politikalarına rehberlik etmek için tasarlanmış 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ı sağlar.
- 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. Sistem-on-Chip (SoC) tedarikçileri, pKVM'yi destekleyebilmek için yeni bir dizi koşulu karşılamalıdır. 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, bellek sayfalarına erişimin 1. aşama sayfa tablolarıyla kontrol edildiği ve çekirdeğin işlemler arasında bağlam değiştirdiği Linux tarafından sunulan işlem izolasyonundan farklı değildir. Ancak bu özellikleri zorunlu kılan pKVM'nin EL2 bölümü, Linux çekirdeğinin tamamına kıyasla üç kat daha az saldırı yüzeyine sahiptir (yaklaşık 10 bin kod satırı ve 20 milyon kod satırı). Bu nedenle, işlem izolasyonuna güvenmek için çok hassas olan kullanım alanlarına daha güçlü güvence sunar.
Boyutu nedeniyle pKVM, resmi doğrulamaya uygundur. Gerçek pKVM ikilisinde bu özellikleri resmi olarak kanıtlamayı amaçlayan akademik araştırmaları etkin bir ş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 birbirine güvenmeyen yürütme ortamlarına ayıran KVM tabanlı bir hipervizördür. Bu özellikler, ana makine dahil olmak üzere herhangi bir sanal makinede güvenlik ihlali olması durumunda geçerlidir. 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üğü ihlal edilirse pVM donanım yazılımı başlatılmaz.Bir pVM örneğine sağlanan DICE sertifika zinciri ve birleşik cihaz tanımlayıcıları (CDI'ler) yalnızca söz konusu örnek tarafından türetilebilir.
Misafir işletim sistemi
Microdroid, pVM'de ç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 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 önyükleme yapmaz.
APK güncellenmiş olsa bile aynı Microdroid örneği başlatılmaz.
APEX'lerden herhangi biri doğrulama işlemini geçemezse Microdroid başlatılmaz.
instance.img
, konuk pVM'nin dışında değiştirilirse Microdroid önyükleme yapmaz (veya temiz bir başlangıç durumunda önyükleme yapar).Microdroid, önyükleme zinciri için doğrulama sağlar.
Misafir pVM ile paylaşılan disk görüntülerinde yapılan herhangi bir (imzasız) değişiklik, pVM tarafında bir G/Ç hatasına neden olur.
Bir sanal makine örneğine sağlanan DICE sertifika zinciri ve CD'leri 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üzde kullanılan 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ı vermesini 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önlendirilmiş 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, konuktan kaynakları alıkoyabilir.
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, sanal makine örnekleriyle ilişkilendirilir 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 bir gizli tuz oluşturarak ve yüklenen görüntülerden doğrulama ortak anahtarları ve karma oluşturma işlemleri gibi ayrıntıları ayıklayarak örneği temel hazır hale getirir. 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örsellere yayınlanması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ı için bir doğrulama 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şlatmalarda sanal makine örneği için kararlı olan ve bu nedenle kalıcı durumu korumak için uygun olan bir mühürleme gizlisi de türetilir. Mühürleme gizli anahtarı, sanal makine için çok 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.
Kilidi açılan cihazın sahibi, pKVM uygulamasını içeren bölümler de dahil olmak üzere genellikle doğrulanmış önyükleme 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, anahtar doğrulama sertifikasında cihazın doğrulanmış başlatma durumunu inceleyerek bu potansiyel olarak güvenli olmayan durumu gözlemleyebilir.