Güvenlik

Android Sanallaştırma Çerçevesi (AVF), pVM içinde rastgele yük çalıştırılmasını önlemek için her katmanın ek yaptırımlar uyguladığı katmanlı bir güvenlik yaklaşımı kullanır. Aşağıda, AVF güvenlik katmanlarının bir listesi bulunmaktadır:

  • Android, yalnızca pVM izinlerine sahip uygulamaların pVM'leri oluşturmasına veya incelemesine izin verilmesini sağlar.

  • Bootloader: Bootloader, 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 prosedürüne uyar. Bu mimari, pVM çalıştıran uygulamaların kendi çekirdeklerini paketleyemeyeceği anlamına gelir.

  • pVM, pVM'de çalıştırılan yükler için SELinux'ta olduğu gibi derinlemesine savunma sağlar. Derinlemesine savunma, eşleme verilerinin yürütülebilir (neverallow execmem) olarak yapılmasına izin vermez ve W^X özelliğinin 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ırlandıran bir kurallar dizisidir.
  • Dürüstlük, bilgilerin güvenilir ve doğru olmasını sağlar.
  • Kullanılabilirlik, yetkili tüzel kişilerin bilgiye güvenilir şekilde erişmesini garanti eder.

Gizlilik ve bütünlük

Gizlilik, pKVM hipervizörü tarafından zorunlu kılınan bellek izolasyonu özelliklerinden kaynaklanır. pKVM, tek tek fiziksel bellek sayfalarının bellek sahipliğini ve sayfa sahiplerinin paylaşılacak sayfa isteklerini takip eder. pKVM, hipervizör tarafından kontrol edilen 2. aşama sayfa tablolarında yalnızca yetki verilen pVM'lerin (ana makine ve misafirler) eşlenmesini sağlar. Bu mimari, pVM'ye ait bellek içeriğinin, sahibi açıkça başka bir pVM ile paylaşmadığı sürece 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 varlıklar, yani 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 gereksinimi karşılaması gerekir. Aksi takdirde gizlilik sağlanamaz.

Bütünlük, bellek ve hesaplamadaki veriler için geçerlidir. pVM'ler şunları yapamaz:

  • İzin almadan birbirlerinin hafızasında değişiklik yapmak.
  • Birbirlerinin CPU durumunu etkiler.

Bu şartlar hipervizör tarafından uygulanır. Bununla birlikte, dm-verity veya AuthFS gibi diğer çözümlerin uygulanması gerektiğinde, veri bütünlüğüyle ilgili sorunlar sanal veri depolamada 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.

pKVM, büyüklüğü göz önünde bulundurulduğunda resmi doğrulamaya elverişlidir. Bu özellikleri gerçek pKVM ikili dosyası üzerinde resmi olarak kanıtlamayı amaçlayan akademik araştırmaları etkin bir şekilde destekliyoruz.

Bu sayfanın geri kalanında, pKVM 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ı güvenilmeyen 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 uyan alternatif hipervizörlerin benzer özellikleri sağlaması gerekir.

  • pVM, sayfa sahibi tarafından açıkça paylaşılmadıkça pVM veya hipervizör gibi başka bir varlığa ait sayfaya erişemez. Bu kural, ana makine pVM'sini içerir ve hem CPU hem de DMA erişimleri için geçerlidir.

  • pVM tarafından kullanılan bir sayfa ana makineye döndürülmeden önce (örneğin, pVM kaldırılmadan önce) silinir.

  • Bir cihaz başlatma işlemindeki tüm pVM'lerin ve pVM donanım yazılımının belleği, bir sonraki cihaz başlatma işleminde işletim sistemi bootloader'ı çalışmadan silinir.

  • SJTAG gibi bir donanım hata ayıklayıcısı eklendiğinde pVM önceden basılmış anahtarlara erişemez.

  • pVM donanım yazılımı, ilk görüntüyü doğrulayamazsa başlatılmaz.

  • 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.

Konuk işletim sistemi

microdroid, pVM içinde çalışan bir işletim sistemi örneğidir. Microdroid; U önyükleme tabanlı bir bootloader, GKI, Android kullanıcı alanı 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 sağlamalıdır.

  • boot.img, super.img, vbmeta.img veya vbmeta\_system.img doğrulanamazsa mikrodroid başlatılmaz.

  • APK doğrulaması başarısız olursa mikrodroid başlatılmaz.

  • Aynı Microdroid örneği, APK güncellenmiş olsa bile 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 mikrodroid başlatılmaz (veya temiz bir başlangıç durumuyla başlatılmaz).

  • Microdroid, başlatma zincirine onay sağlar.

  • Konuk pVM ile paylaşılan disk görüntülerinde yapılan (imzasız) herhangi bir 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 yazma işlemleri gizlidir ancak bir şifreleme bloğunun ayrıntı düzeyinde geri alma koruması yoktur. Ayrıca, veri blokunda rastgele yapılan harici müdahaleler, engellemenin açıkça bir G/Ç hatası olarak algılanmak yerine Microdroid'e çöp olarak görünmesine neden olur.

Android

Bunlar, Android tarafından ana makine olarak yönetilen ancak ana makinenin güvenlik ihlali olması durumunda geçerliliğini yitiren özelliklerdir:

  • Konuk pVM'si, diğer konuk pVM'lerle doğrudan etkileşim kuramaz (ör. vsock bağlantısı oluşturmak için).

  • Yalnızca ana pVM'deki VirtualizationService, pVM'ye iletişim kanalı oluşturabilir.

  • Yalnızca platform anahtarıyla imzalanan uygulamalar pVM'leri oluşturma, sahiplenme veya bunlarla etkileşime geçme izni isteyebilir.

  • Ana makine ile pVM arasındaki vsock bağlantılarının kurulumunda kullanılan, 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'yle değiştiremezsiniz.

Kullanılabilirlik

PVM'ler bağlamında kullanılabilirlik, konukların gerçekleştirmek istedikleri görevleri gerçekleştirebilmeleri için barındırıcının konuklara yeterli kaynak ayırmasını ifade eder.

Ana makinenin sorumlulukları arasında pVM'nin sanal CPU'larının planlanması yer alır. Geleneksel Tip-1 hipervizörlerin (Xen gibi) aksine KVM, iş yükü planlamasının ana makine çekirdeğine aktarılması konusunda açık tasarım kararını verir. 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ü amaçlı kişiler hiçbir zaman konuk planlamamayı tercih edebilir.

Benzer şekilde pKVM, hipervizörün karmaşıklığını azaltmak ve planlamadan ana makineyi sorumlu tutmak için ana makine çekirdeğine fiziksel kesinti işleme yetkisi verir. Konuk kesmelerin yönlendirilmesinin yalnızca hizmet reddi (çok az, çok fazla veya yanlış yönlendirilmiş kesintiler) ile sonuçlanmasını sağlamak için gerekli çaba gösterilir.

Son olarak, ana makinenin sanal makine monitörü (VMM) işlemi, bellek tahsis etmekten ve ağ kartı gibi sanal cihazları sağlamaktan sorumludur. Kötü amaçlı bir VMM, konukdan kaynakları bekletebilir.

pKVM konuklara uygunluk bilgisi sunmasa da tasarım, barındırıcının müsaitlik durumunu kötü amaçlı konuklara karşı korur. Çünkü düzenleyen kullanıcı her zaman bir konuğu önceden ayırabilir veya fesheterek kaynaklarını geri alabilir.

Güvenli başlatma

Veriler pVM örneklerine bağlanır ve güvenli başlatma, ö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ırlar. 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 içindeki 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, başlatma işlemleri arasında değişebildiğinden 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 sırrı da 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 anahtarının mühürleme gizli anahtarından türetilmesi ve sızdırma gizli anahtarının mümkün olduğunca erken yok edilmesi gerekir.

Her aşama, belirleyici olarak kodlanmış bir CBOR nesnesini bir sonraki aşamaya aktarır. Bu nesne, gizli anahtarları ve son aşamanın güvenli bir şekilde yüklenip yüklenmediği gibi toplanmış durum bilgilerini içeren DICE sertifika zincirini 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 kilidi açıldığında, pVM'ye özel 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çılmış bir cihazdaki pKVM'ye, güvenlik modelini korumada güvenilmez.

Uzak taraflar, bir anahtar onay sertifikasında cihazın doğrulanmış başlatma durumunu inceleyerek güvenli olmayabilecek bu durumu gözlemleyebilir.