किसी pVM में आर्बिट्रेरी पेलोड चलाने से रोकने के लिए, Android वर्चुअलाइज़ेशन फ़्रेमवर्क (एवीएफ़) कई लेयर वाली सुरक्षा के तरीके का इस्तेमाल करता है. इसमें हर लेयर, नीति उल्लंघन ठीक करने के तरीके (एनफ़ोर्समेंट) को अतिरिक्त तरीके से लागू करता है. एवीएफ़ सुरक्षा लेयर की सूची नीचे दी गई है:
Android यह पक्का करता है कि सिर्फ़ उन ऐप्लिकेशन को पीवीएम बनाने या उनकी जांच करने की अनुमति हो जिनके पास पीवीएम की अनुमतियां हैं.
बूटलोडर – बूटलोडर यह पक्का करता है कि सिर्फ़ Google या डिवाइस वेंडर के हस्ताक्षर वाली pVM इमेज को ही बूट करने की अनुमति हो और वह Android वेरिफ़ाइड बूट की प्रक्रिया का पालन करती हो. इस आर्किटेक्चर का मतलब है कि पीवीएम चलाने वाले ऐप्लिकेशन अपने खुद के कर्नेल को बंडल नहीं कर सकते.
pVM, pVM में चलने वाले पेलोड के लिए, बेहतर सुरक्षा उपलब्ध कराता है. उदाहरण के लिए, SELinux में. मज़बूत सुरक्षा की सुविधा, मैपिंग डेटा को लागू (
neverallow execmem
) के तौर पर अनुमति नहीं देती. साथ ही, यह पक्का करती है कि W^X सभी फ़ाइल टाइप के लिए होल्ड हो.
सुरक्षा मॉडल
गोपनीयता, अखंडता, और उपलब्धता (सीआईए ट्रायड), जानकारी की सुरक्षा नीतियों को ध्यान में रखकर डिज़ाइन किया गया मॉडल है:
- गोपनीयता नियमों का एक ऐसा सेट है जो जानकारी के ऐक्सेस को सीमित करता है.
- पूरी सुरक्षा का मतलब है कि जानकारी भरोसेमंद और सटीक है.
- उपलब्धता एक ऐसी गारंटी है जिससे आधिकारिक इकाइयों को जानकारी का भरोसेमंद ऐक्सेस मिलता है.
गोपनीयता और अखंडता
गोपनीयता अलग-अलग मेमोरी आइसोलेशन प्रॉपर्टी से पैदा होती है, जिसे pKVM Hypervisor ने लागू किया है. pKVM, फ़िज़िकल मेमोरी वाले अलग-अलग पेजों के मेमोरी के मालिकाना हक को ट्रैक करता है. साथ ही, यह भी उन पेजों को शेयर करने के लिए मालिकों के अनुरोध को ट्रैक करता है. pKVM यह पक्का करता है कि सिर्फ़ एनटाइटलमेंट वाले pVM (होस्ट और मेहमान) के पास उनकी स्टेज 2 पेज टेबल में मैप किया गया पेज हो, जिसे हायपरवाइज़र से कंट्रोल किया जाता है. इस आर्किटेक्चर का कहना है कि किसी पीवीएम के मालिकाना हक वाली मेमोरी के कॉन्टेंट को तब तक निजी रखा जाता है, जब तक मालिक उसे किसी अन्य पीवीएम के साथ शेयर नहीं करता.
गोपनीयता बनाए रखने से जुड़ी पाबंदियां, सिस्टम में मौजूद ऐसी किसी भी इकाई पर भी लागू होती हैं जो पीवीएम के लिए मेमोरी ऐक्सेस करती है. जैसे, डीएमए की सुविधा वाले डिवाइस और ज़्यादा खास अधिकारों वाली लेयर में चल रही सेवाएं. सिस्टम-ऑन-चिप (SoC) वाले वेंडर को नई शर्तों को पूरा करना होगा, ताकि वे pKVM के साथ काम कर सकें. अगर ऐसा नहीं है, तो गोपनीयता उपलब्ध नहीं कराई जा सकती.
इंटिग्रिटी, मेमोरी और कंप्यूटेशन से जुड़े डेटा पर लागू होती है. पीवीएम ये काम नहीं कर सकते:
- बिना सहमति के एक-दूसरे की 'यादें' में बदलाव किया जा सकता है.
- एक-दूसरे के सीपीयू की स्थिति को प्रभावित करें.
ये ज़रूरी शर्तें हाइपरवाइज़र ने लागू की हैं. हालांकि, dm-verity या AuthFS जैसे अन्य समाधान लागू करने की ज़रूरत होने पर, वर्चुअल डेटा स्टोरेज में डेटा के रखरखाव से जुड़ी समस्याएं भी आती हैं.
ये सिद्धांत, Linux की ओर से उपलब्ध कराए गए प्रोसेस आइसोलेशन से अलग नहीं हैं. यहां मेमोरी पेजों के ऐक्सेस को पहले चरण की पेज टेबल और प्रोसेस के बीच कर्नेल कॉन्टेक्स्ट-स्विच से कंट्रोल किया जाता है. हालांकि, इन प्रॉपर्टी को लागू करने वाले pKVM के EL2 वाले हिस्से में, पूरे Linux कर्नेल (करीब 10 हज़ार बनाम 2 करोड़ लाइन वाले कोड) की तुलना में, हमले की तीव्रता के तीन ऑर्डर होते हैं. इस वजह से, ऐसे केस इस्तेमाल करने का ज़्यादा भरोसा मिलता है जो प्रोसेस आइसोलेशन पर भरोसा करने के लिए बहुत संवेदनशील होते हैं.
आकार को देखते हुए, pKVM औपचारिक तौर पर पुष्टि करने में मदद करता है. हम सक्रिय तौर पर शिक्षा से जुड़ी रिसर्च में मदद कर रहे हैं. इसका मकसद, इन प्रॉपर्टी को असली पीकेवीएम बाइनरी पर औपचारिक रूप से साबित करना है.
इस पेज का बाकी हिस्सा, गोपनीयता और सुरक्षा की गारंटी देने वालों को बताता है. यह गारंटी, pKVM से जुड़े हर कॉम्पोनेंट के लिए होती है.
हाइपरवाइज़र
pKVM, KVM पर आधारित हायपरवाइज़र है. यह pVM और Android को, एक-दूसरे से भरोसेमंद एक्ज़ीक्यूशन एनवायरमेंट में अलग करता है. अगर किसी पीवीएम में समझौता हो जाता है, तो ये प्रॉपर्टी होल्ड हो जाती हैं. इसमें होस्ट भी शामिल है. एवीएफ़ का पालन करने वाले वैकल्पिक हाइपरवाइज़र को एक जैसी प्रॉपर्टी देनी होंगी.
pVM, pVM या हायपरवाइज़र जैसी किसी दूसरी इकाई के पेज को ऐक्सेस नहीं कर सकता. ऐसा तब तक नहीं हो सकता, जब तक पेज के मालिक ने इसे साफ़ तौर पर शेयर न किया हो. इस नियम में होस्ट पीवीएम शामिल है. साथ ही, यह सीपीयू और डीएमए, दोनों के ऐक्सेस पर लागू होता है.
पीवीएम के ज़रिए इस्तेमाल किए गए पेज को होस्ट पर वापस भेजने से पहले, जैसे कि पीवीएम के खत्म होने से पहले, इसे वाइप कर दिया जाता है.
ओएस के बूटलोडर के अगले डिवाइस के बूट होने से पहले, एक डिवाइस के बूट से सभी पीवीएम और पीवीएम फ़र्मवेयर की मेमोरी वाइप कर दी जाती है.
जब SJTAG जैसा हार्डवेयर डीबगर अटैच होता है, तो pVM, पहले से मिंट की गई कुंजियों को ऐक्सेस नहीं कर पाता.
अगर पीवीएम फ़र्मवेयर शुरुआती इमेज की पुष्टि नहीं कर पाता है, तो यह चालू नहीं होता.
instance.img
की इंटिग्रिटी से छेड़छाड़ होने पर, पीवीएम फ़र्मवेयर चालू नहीं होता.किसी pVM इंस्टेंस को दिए गए DICE सर्टिफ़िकेट चेन और कंपाउंड डिवाइस आइडेंटिफ़ायर (सीडीआई) को सिर्फ़ उसी इंस्टेंस से लिया जा सकता है.
मेहमान ओएस
माइक्रोड्रॉइड, pVM में चलने वाले ओएस का उदाहरण है. माइक्रोड्रॉइड में यू-बूट-आधारित बूटलोडर, जीकेआई, Android यूज़रस्पेस का एक सबसेट, और एक पेलोड लॉन्चर शामिल होता है. किसी भी पीवीएम में छेड़छाड़ होने पर, ये प्रॉपर्टी लागू हो जाती हैं. इसमें होस्ट भी शामिल है. पीवीएम में चल रहे वैकल्पिक ओएस में भी मिलती-जुलती प्रॉपर्टी होनी चाहिए.
अगर
boot.img
,super.img
,vbmeta.img
याvbmeta\_system.img
की पुष्टि नहीं की जा सकती, तो माइक्रोड्रॉइड चालू नहीं होगा.APK की पुष्टि नहीं हो पाने पर माइक्रोड्रॉइड चालू नहीं होगा.
APK अपडेट होने के बाद भी, वही माइक्रोड्रॉइड इंस्टेंस बूट नहीं होगा.
अगर कोई भी APEXs पुष्टि नहीं कर पाता है, तो माइक्रोड्रॉइड बूट नहीं होगा.
अगर
instance.img
में मेहमान पीवीएम के बाहर बदलाव किया गया है, तो माइक्रोड्रॉइड चालू नहीं होगा या पहले से चालू स्थिति में चालू नहीं होगा.माइक्रोड्रॉइड बूट चेन को प्रमाणित करने की सुविधा देता है.
मेहमान के लिए पीवीएम के साथ शेयर की गई डिस्क इमेज में कोई भी (बिना साइन इन किया गया) बदलाव करने से pVM साइड पर I/O गड़बड़ी हो सकती है.
किसी pVM इंस्टेंस को दिए गए DICE सर्टिफ़िकेट चेन और सीडीआई को सिर्फ़ उसी इंस्टेंस से लिया जा सकता है.
एन्क्रिप्ट किए गए स्टोरेज में लिखी गई जानकारी गोपनीय होती है. हालांकि, एन्क्रिप्शन ब्लॉक की बारीकियों में रोल बैक करने की कोई सुरक्षा नहीं होती. इसके अलावा, डेटा ब्लॉक की अन्य मनमानी बाहरी छेड़छाड़ की वजह से, उसे सीधे I/O गड़बड़ी के तौर पर पहचाने जाने के बजाय, माइक्रोड्रॉइड में ट्रैश के रूप में दिखाने की अनुमति होती है.
Android
इन प्रॉपर्टी का रखरखाव Android, होस्ट के तौर पर करता है, लेकिन होस्ट से छेड़छाड़ होने पर ये प्रॉपर्टी सही नहीं होती हैं:
मेहमान पीवीएम, दूसरे गेस्ट पीवीएम के साथ सीधे तौर पर इंटरैक्ट नहीं कर सकता. जैसे,
vsock
कनेक्शन बनाना.होस्ट पीवीएम में मौजूद
VirtualizationService
ही पीवीएम से कम्यूनिकेशन चैनल बना सकता है.पीवीएम बनाने, उसका मालिकाना हक पाने या उससे इंटरैक्ट करने के लिए, सिर्फ़ वे ऐप्लिकेशन अनुमति मांग सकते हैं जिन पर प्लैटफ़ॉर्म कुंजी से साइन किया गया हो.
कॉन्टेक्स्ट आइडेंटिफ़ायर (सीआईडी) नाम के आइडेंटिफ़ायर का इस्तेमाल, होस्ट और पीवीएम के बीच
vsock
कनेक्शन सेट अप करने के लिए किया जाता है. होस्ट पीवीएम के चलते समय, इस आइडेंटिफ़ायर का फिर से इस्तेमाल नहीं किया जाता. उदाहरण के लिए, चल रही किसी पीवीएम को दूसरे पीवीएम से नहीं बदला जा सकता.
उपलब्धता
पीवीएम के हिसाब से, उपलब्धता का मतलब है कि होस्ट, मेहमानों को ज़रूरत के मुताबिक रिसॉर्स देता है, ताकि मेहमान अपने डिज़ाइन किए गए काम कर सकें.
pVM के वर्चुअल सीपीयू (CPU) को शेड्यूल करना, होस्ट की ज़िम्मेदारी है. पारंपरिक टाइप-1 हायपरवाइज़र (जैसे, Xen) के उलट, KVM, वर्कलोड शेड्यूल को होस्ट कर्नेल को सौंपने का फ़ैसला साफ़ तौर पर देता है. मौजूदा शेड्यूलर की संख्या और जटिलता को देखते हुए, डिज़ाइन से जुड़ा यह फ़ैसला, भरोसेमंद कंप्यूटिंग बेस (टीसीबी) के साइज़ को काफ़ी कम कर देता है. साथ ही, इसकी मदद से होस्ट, परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, शेड्यूल करने से जुड़े बेहतर फ़ैसले ले पाता है. हालांकि, नुकसान पहुंचाने वाला होस्ट, मेहमान को शेड्यूल न करने का विकल्प चुन सकता है.
इसी तरह, pKVM, हाइपरवाइज़र की जटिलता को कम करने और शेड्यूल करने की ज़िम्मेदारी होस्ट को छोड़ देने के लिए, होस्ट कर्नेल को फ़िज़िकल रुकावट हैंडलिंग का ऐक्सेस देता है. यह पक्का करने की कोशिश की जाती है कि मेहमान को फ़ॉरवर्ड करने की सुविधा, सिर्फ़ सेवा में रुकावट (बहुत कम, बहुत ज़्यादा या गलत रास्ते वाली रुकावट) की वजह से रुकावट डाले.
आखिर में, होस्ट की वर्चुअल मशीन मॉनिटर (वीएमएम) प्रोसेस, मेमोरी असाइन करने और नेटवर्क कार्ड जैसे वर्चुअल डिवाइस उपलब्ध कराने के लिए ज़िम्मेदार है. नुकसान पहुंचाने वाला वीएमएम, मेहमान के संसाधनों को रोक सकता है.
हालांकि, pKVM मेहमानों को उपलब्ध नहीं कराता, लेकिन इसका डिज़ाइन, नुकसान पहुंचाने वाले मेहमानों से होस्ट की उपलब्धता को सुरक्षित रखता है. ऐसा इसलिए, क्योंकि होस्ट कभी भी मेहमान को हटा सकता है या उसका ऐक्सेस हटा सकता है.
सिक्योर बूट प्रोटोकॉल
डेटा को पीवीएम के इंस्टेंस से जोड़ा जाता है. सिक्योर बूट प्रोटोकॉल से यह पक्का होता है कि किसी इंस्टेंस के डेटा के ऐक्सेस को कंट्रोल किया जा सकता है. इंस्टेंस का पहला बूट, पीवीएम के लिए बिना किसी तय क्रम के एक सीक्रेट सॉल्ट जनरेट करता है और लोड की गई इमेज से पुष्टि करने के लिए सार्वजनिक पासकोड और हैश जैसी जानकारी लेता है. इस जानकारी का इस्तेमाल pVM इंस्टेंस के आने वाले बूट की पुष्टि करने के लिए किया जाता है. साथ ही, यह भी पक्का किया जाता है कि इंस्टेंस की सीक्रेट जानकारी सिर्फ़ उन इमेज को रिलीज़ की जाए जो पुष्टि में पास हों. यह प्रोसेस, पीवीएम में लोड होने के हर स्टेज के लिए होती है: पीवीएम फ़र्मवेयर, पीवीएम एबीएल, माइक्रोड्रॉइड वगैरह.
DICE, कॉन्टेंट लोड होने के हर चरण में पुष्टि करने वाली कुंजी का एक जोड़ा उपलब्ध कराता है. इसका सार्वजनिक हिस्सा, उस चरण के लिए DICE सर्टिफ़िकेट में सर्टिफ़ाइड होता है. कुंजी का यह जोड़ा बूट के बीच बदल सकता है, इसलिए सीलिंग सीक्रेट भी पाया जाता है, जो सभी रीबूट पर वीएम इंस्टेंस के लिए स्थिर होता है. इसलिए, यह लगातार स्थिति बनाए रखने के लिए सही है. वीएम के लिए सीलिंग सीक्रेट काफ़ी अहम है. इसलिए, इसका इस्तेमाल सीधे तौर पर नहीं किया जाना चाहिए. इसके बजाय, सीलिंग सीक्रेट को सीलिंग सीक्रेट से लिया जाना चाहिए और जितनी जल्दी हो सके, सीलिंग सीक्रेट को खत्म करना चाहिए.
हर चरण में, तय किए गए कोड में बदले गए CBOR ऑब्जेक्ट को अगले चरण में भेजा जाता है. इस ऑब्जेक्ट में सीक्रेट और DICE सर्टिफ़िकेट चेन होती है. इसमें इकट्ठा की गई स्थिति की जानकारी होती है. जैसे, आखिरी स्टेज सुरक्षित तरीके से लोड हुआ या नहीं.
अनलॉक किए गए डिवाइस
जब किसी डिवाइस को fastboot oem unlock
से अनलॉक किया जाता है, तो उपयोगकर्ता का डेटा वाइप कर दिया जाता है.
यह प्रोसेस, उपयोगकर्ता के डेटा को बिना अनुमति के ऐक्सेस किए जाने से बचाती है. किसी डिवाइस के अनलॉक होने पर,
पीवीएम के लिए निजी डेटा भी अमान्य हो जाता है.
अनलॉक होने के बाद, डिवाइस का मालिक उन हिस्सों को फिर से फ़्लैश कर सकता है जिन्हें आम तौर पर, पुष्टि किए गए बूट की मदद से सुरक्षित किया जाता है. इनमें वे हिस्से भी शामिल हैं जिनमें pKVM को लागू किया गया होता है. इसलिए, अनलॉक किए गए डिवाइस पर pKVM, सुरक्षा मॉडल को बनाए रखने के लिए भरोसेमंद नहीं होगा.
दूर मौजूद पार्टियां, पुष्टि करने के मुख्य सर्टिफ़िकेट में डिवाइस के पुष्टि किए गए बूट की स्थिति की जांच करके, इस संभावित रूप से असुरक्षित स्थिति के बारे में जान सकती हैं.