सुरक्षा

एक pVM के अंदर मनमाने पेलोड को चलाने से रोकने के लिए, Android वर्चुअलाइजेशन फ्रेमवर्क (AVF) एक स्तरित सुरक्षा दृष्टिकोण का उपयोग करता है जहाँ प्रत्येक परत अतिरिक्त प्रवर्तन जोड़ता है। AVF सुरक्षा परतों की सूची निम्नलिखित है:

  • Android - Android सुनिश्चित करता है कि केवल pVM अनुमति वाले ऐप्स को ही pVM बनाने या निरीक्षण करने की अनुमति है।

  • बूटलोडर - बूटलोडर सुनिश्चित करता है कि केवल Google या डिवाइस विक्रेताओं द्वारा हस्ताक्षरित pVM छवियों को बूट करने की अनुमति है और Android सत्यापित बूट प्रक्रिया का सम्मान करता है। इस आर्किटेक्चर का तात्पर्य है कि पीवीएम चलाने वाले ऐप्स अपने स्वयं के कर्नेल को बंडल नहीं कर सकते हैं।

  • pVM - pVM, pVM में चलने वाले पेलोड के लिए, SELinux जैसे रक्षा-गहराई प्रदान करता है। डिफेंस-इन-डेप्थ मैपिंग डेटा को निष्पादन योग्य के रूप में अस्वीकार करता है ( neverallow execmem निष्पादन की अनुमति नहीं देता है) और यह सुनिश्चित करता है कि W^X सभी फ़ाइल प्रकारों के लिए है।

सुरक्षा मॉडल

गोपनीयता, अखंडता और उपलब्धता, जिसे सीआईए ट्रायड के रूप में भी जाना जाता है, सूचना सुरक्षा नीतियों को निर्देशित करने के लिए डिज़ाइन किया गया एक मॉडल है:

  • गोपनीयता नियमों का एक समूह है जो सूचना तक पहुंच को सीमित करता है।
  • सत्यनिष्ठा यह आश्वासन है कि जानकारी विश्वसनीय और सटीक है।
  • उपलब्धता अधिकृत संस्थाओं द्वारा सूचना तक विश्वसनीय पहुंच की गारंटी है।

ध्यान दें कि pKVM को मेहमानों की गोपनीयता और अखंडता बनाए रखने के लिए डिज़ाइन किया गया था, लेकिन उपलब्धता के लिए नहीं । ये सिद्धांत हाइपरवाइजर से लेकर यूजर स्पेस कंपोनेंट्स तक आर्किटेक्चर के सभी पहलुओं में फैले डिजाइन निर्णयों को प्रभावित करते हैं।

गोपनीयता और अखंडता

गोपनीयता pKVM हाइपरवाइजर द्वारा लागू मेमोरी आइसोलेशन गुणों से उपजी है। pKVM व्यक्तिगत भौतिक स्मृति पृष्ठों के स्मृति स्वामित्व और साझा किए जाने वाले पृष्ठों के मालिकों के किसी भी अनुरोध को ट्रैक करता है। pKVM सुनिश्चित करता है कि केवल हकदार pVM (होस्ट और गेस्ट) के पास दिए गए पेज को उनके स्टेज 2 पेज टेबल में मैप किया गया है जो हाइपरवाइजर द्वारा नियंत्रित होते हैं। यह आर्किटेक्चर बनाए रखता है कि एक pVM के स्वामित्व वाली मेमोरी की सामग्री तब तक निजी रहती है जब तक कि स्वामी इसे किसी अन्य pVM के साथ स्पष्ट रूप से साझा नहीं करता है।

गोपनीयता बनाए रखने के लिए प्रतिबंध सिस्टम में किसी भी संस्था पर भी लागू होते हैं जो पीवीएम की ओर से मेमोरी एक्सेस करते हैं, अर्थात् डीएमए-सक्षम डिवाइस और अधिक विशेषाधिकार प्राप्त परतों में चलने वाली सेवाएं । एसओसी विक्रेताओं को पीकेवीएम का समर्थन करने से पहले आवश्यकताओं के एक नए सेट को पूरा करना होगा, अन्यथा गोपनीयता प्रदान नहीं की जा सकती।

स्मृति और गणना में डेटा दोनों पर अखंडता लागू होती है:

  • पीवीएम सहमति के बिना एक दूसरे की मेमोरी को संशोधित नहीं कर सकते हैं।
  • pVMs एक दूसरे की CPU स्थिति को प्रभावित नहीं कर सकते हैं।

इन आवश्यकताओं को हाइपरवाइजर द्वारा लागू किया जाता है। लेकिन डेटा अखंडता से संबंधित समस्याएं वर्चुअल डेटा स्टोरेज के साथ भी उत्पन्न होती हैं जहां अन्य समाधान लागू किए जाने चाहिए, जैसे डीएम-वेरिटी या ऑथएफएस।

ये सिद्धांत लिनक्स द्वारा पेश किए गए प्रक्रिया अलगाव से अलग नहीं हैं, जहां स्मृति पृष्ठों तक पहुंच चरण 1 पृष्ठ तालिकाओं और प्रक्रियाओं के बीच कर्नेल संदर्भ-स्विच के साथ नियंत्रित होती है। हालाँकि, pKVM का EL2 भाग, जो इन गुणों को लागू करता है, पूरे लिनक्स कर्नेल (लगभग 10 हजार बनाम 20 मिलियन कोड की लाइन) की तुलना में लगभग आधा हमला सतह है और इसलिए उन मामलों का उपयोग करने के लिए मजबूत आश्वासन प्रदान करता है जो भरोसा करने के लिए बहुत संवेदनशील हैं प्रक्रिया अलगाव पर।

इसके आकार को देखते हुए, एक pKVM औपचारिक सत्यापन के लिए खुद को उधार देता है। हम अकादमिक अनुसंधान का सक्रिय रूप से समर्थन कर रहे हैं, जिसका उद्देश्य वास्तविक pKVM बाइनरी पर इन गुणों को औपचारिक रूप से सिद्ध करना है।

इस दस्तावेज़ के शेष भाग में गोपनीयता और अखंडता की गारंटी शामिल है जो एक pKVM के आसपास का प्रत्येक घटक प्रदान करता है।

सूत्र

पीकेवीएम एक केवीएम-आधारित हाइपरवाइजर है जो पीवीएम और एंड्रॉइड को परस्पर अविश्वसनीय निष्पादन वातावरण में अलग करता है। मेजबान सहित किसी भी पीवीएम के भीतर समझौता होने की स्थिति में ये गुण धारण करते हैं। AVF का अनुपालन करने वाले वैकल्पिक हाइपरवाइज़र को समान गुण प्रदान करने की आवश्यकता होती है।

  • एक pVM किसी अन्य निकाय से संबंधित पृष्ठ तक नहीं पहुंच सकता, जैसे कि pVM या हाइपरवाइजर, जब तक कि पृष्ठ स्वामी द्वारा स्पष्ट रूप से साझा नहीं किया जाता है। इस नियम में होस्ट pVM शामिल है और यह CPU और DMA दोनों एक्सेस पर लागू होता है।
  • किसी pVM द्वारा उपयोग किए गए पृष्ठ को होस्ट को वापस करने से पहले, जैसे कि जब pVM नष्ट हो जाता है, तो उसे मिटा दिया जाता है।
  • ओएस बूटलोडर के बाद के डिवाइस बूट में चलने से पहले एक डिवाइस बूट से सभी पीवीएम और पीवीएम फर्मवेयर की मेमोरी मिटा दी जाती है।
  • जब एक हार्डवेयर डिबगर, जैसे कि SJTAG, संलग्न होता है, तो एक pVM अपनी पहले से गढ़ी गई कुंजियों तक नहीं पहुंच सकता है।
  • यदि यह प्रारंभिक छवि को सत्यापित नहीं कर सकता है तो pVM फर्मवेयर बूट नहीं होता है।
  • pVM फर्मवेयर बूट नहीं होता है अगर instance.img की अखंडता से समझौता किया जाता है।
  • पीवीएम इंस्टेंस को प्रदान किए गए बूट सर्टिफिकेट चेन (बीसीसी) और कंपाउंड डिवाइस आइडेंटिफायर (सीडीआई) केवल उस विशेष इंस्टेंस से प्राप्त किए जा सकते हैं।

अतिथि ओएस

माइक्रोड्रॉइड एक पीवीएम के भीतर चलने वाले ओएस का एक उदाहरण है। माइक्रोड्रॉइड में यू-बूट-आधारित बूटलोडर, जीकेआई, और एंड्रॉइड यूज़रस्पेस का एक सबसेट और एक पेलोड लॉन्चर शामिल है। मेजबान सहित किसी भी पीवीएम के भीतर समझौता होने की स्थिति में ये गुण धारण करते हैं। एक pVM में चल रहे वैकल्पिक OS को समान गुण प्रदान करने चाहिए।

  • यदि boot.img , super.img , vbmeta.img , या vbmeta\_system.img सत्यापित नहीं किया जा सकता तो माइक्रोड्रॉइड बूट नहीं होगा।
  • एपीके सत्यापन विफल होने पर माइक्रोड्रॉइड बूट नहीं होगा।
  • एपीके अपडेट होने पर भी वही माइक्रोड्रॉइड इंस्टेंस बूट नहीं होगा।
  • यदि कोई एपेक्स सत्यापन में विफल रहता है तो माइक्रोड्रॉइड बूट नहीं होगा।
  • यदि instance.img .img को अतिथि pVM के बाहर संशोधित किया जाता है, तो Microdroid बूट नहीं होगा (या एक स्वच्छ प्रारंभिक अवस्था के साथ बूट)।
  • माइक्रोड्रॉइड बूट श्रृंखला को सत्यापन प्रदान करता है।
  • अतिथि pVM के साथ साझा की गई डिस्क छवियों में कोई भी (अहस्ताक्षरित) संशोधन pVM की ओर I/O त्रुटि का कारण बनता है।
  • पीवीएम इंस्टेंस को प्रदान किए गए बीसीसी और सीडीआई केवल उस विशेष इंस्टेंस से प्राप्त किए जा सकते हैं।

एंड्रॉयड

ये एंड्रॉइड द्वारा होस्ट के रूप में बनाए गए गुण हैं, लेकिन होस्ट समझौता होने की स्थिति में सही नहीं हैं:

  • एक अतिथि pVM अन्य अतिथि pVM के साथ सीधे इंटरैक्ट नहीं कर सकता (उदाहरण के लिए, एक vsock कनेक्शन बना सकता है)।
  • होस्ट पीवीएम में केवल VirtualizationService सर्विस पीवीएम को संचार चैनल बना सकती है (नोट: यह स्थापित चैनल को दूसरों को पास कर सकता है)।
  • केवल प्लेटफ़ॉर्म कुंजी के साथ हस्ताक्षरित ऐप्स ही पीवीएम बनाने, स्वामित्व या इंटरैक्ट करने की अनुमति का अनुरोध कर सकते हैं।
  • पहचानकर्ता, जिसे संदर्भ पहचानकर्ता (CID) कहा जाता है, होस्ट और pVM के बीच vsock कनेक्शन स्थापित करने में उपयोग किया जाता है, जब होस्ट pVM चल रहा होता है, तो उसका पुन: उपयोग नहीं किया जाता है। उदाहरण के लिए, चल रहे pVM को दूसरे से बदलना संभव नहीं है।

उपलब्धता

pVMs के संदर्भ में, उपलब्धता मेजबान को मेहमानों को पर्याप्त संसाधन आवंटित करने के लिए संदर्भित करती है ताकि मेहमान उन कार्यों को कर सकें जिन्हें करने के लिए उन्हें डिज़ाइन किया गया था।

होस्ट की जिम्मेदारियों में pVM के वर्चुअल CPU को शेड्यूल करना शामिल है। KVM, पारंपरिक टाइप-1 हाइपरविजर के विपरीत, जैसे कि Xen, होस्ट कर्नेल को वर्कलोड शेड्यूलिंग सौंपने के लिए स्पष्ट डिज़ाइन निर्णय लेता है। आज के शेड्यूलर्स के आकार और जटिलता को देखते हुए, यह डिज़ाइन निर्णय विश्वसनीय कंप्यूटिंग बेस (TCB) के आकार को काफी कम कर देता है और प्रदर्शन को अनुकूलित करने के लिए होस्ट को अधिक सूचित शेड्यूलिंग निर्णय लेने में सक्षम बनाता है। हालांकि, एक दुर्भावनापूर्ण होस्ट कभी भी अतिथि को शेड्यूल नहीं करना चुन सकता है।

इसी तरह, pKVM हाइपरवाइजर की जटिलता को कम करने और शेड्यूलिंग के प्रभारी मेजबान को छोड़ने के लिए मेजबान कर्नेल को भौतिक रुकावट प्रबंधन भी सौंपता है। यह सुनिश्चित करने का प्रयास किया जाता है कि अतिथि के अग्रेषण के परिणाम केवल सेवा से इनकार (बहुत कम, बहुत अधिक, या गलत तरीके से बाधित) में होते हैं।

अंत में, होस्ट की वर्चुअल मशीन मॉनिटर (VMM) प्रक्रिया मेमोरी आवंटित करने और नेटवर्क कार्ड जैसे वर्चुअल डिवाइस प्रदान करने के लिए जिम्मेदार है। एक दुर्भावनापूर्ण VMM अतिथि से संसाधनों को रोक सकता है।

हालांकि pKVM मेहमानों को उपलब्धता प्रदान नहीं करता है, डिज़ाइन मेजबान की उपलब्धता को दुर्भावनापूर्ण मेहमानों से सुरक्षित रखता है क्योंकि होस्ट हमेशा किसी अतिथि को प्रीपेप्ट या समाप्त कर सकता है और अपने संसाधनों को पुनः प्राप्त कर सकता है।

शुरुवात सुरक्षित करो

डेटा एक pVM के इंस्टेंस से जुड़ा होता है, और सुरक्षित बूट सुनिश्चित करता है कि इंस्टेंस के डेटा तक पहुंच को नियंत्रित किया जा सकता है। इंस्टेंस का पहला बूट पीवीएम के लिए बेतरतीब ढंग से एक गुप्त नमक उत्पन्न करके और लोड की गई छवियों से सत्यापन सार्वजनिक कुंजी और हैश जैसे विवरण निकालने का प्रावधान करता है। इस जानकारी का उपयोग पीवीएम इंस्टेंस के बाद के बूटों को सत्यापित करने के लिए किया जाता है और यह सुनिश्चित करता है कि इंस्टेंस के रहस्य केवल उन छवियों को जारी किए जाते हैं जो सत्यापन पास करते हैं। यह प्रक्रिया पीवीएम के भीतर हर लोडिंग चरण के लिए होती है: पीवीएम फर्मवेयर, पीवीएम एबीएल, माइक्रोड्रॉइड, और इसी तरह।

DICE प्रत्येक लोडिंग चरण को एक सत्यापन कुंजी जोड़ी प्रदान करता है, जिसका सार्वजनिक भाग उस चरण के लिए BCC प्रविष्टि में प्रमाणित होता है। यह कुंजी जोड़ी बूटों के बीच बदल सकती है, इसलिए एक सीलिंग रहस्य भी व्युत्पन्न होता है जो वीएम इंस्टेंस के लिए रीबूट में स्थिर होता है और, जैसे, लगातार स्थिति की रक्षा के लिए उपयुक्त होता है। सीलिंग रहस्य VM के लिए अत्यधिक मूल्यवान है इसलिए इसे सीधे उपयोग नहीं किया जाना चाहिए। इसके बजाय, सीलिंग कीज़ को सीलिंग सीक्रेट से प्राप्त किया जाना चाहिए और सीलिंग सीक्रेट को जल्द से जल्द नष्ट कर दिया जाना चाहिए।

प्रत्येक चरण अगले चरण में एक निश्चित रूप से एन्कोडेड सीबीओआर ऑब्जेक्ट सौंपता है। इस ऑब्जेक्ट में रहस्य और BCC शामिल है, जिसमें संचित स्थिति की जानकारी होती है, जैसे कि अंतिम चरण सुरक्षित रूप से लोड हुआ है या नहीं।

अनलॉक किए गए डिवाइस

जब किसी डिवाइस को fastboot oem unlock के साथ अनलॉक किया जाता है, तो उपयोगकर्ता डेटा मिटा दिया जाता है। यह प्रक्रिया उपयोगकर्ता डेटा को अनधिकृत पहुंच से बचाती है। जब कोई डिवाइस अनलॉक होता है तो डेटा जो pVM के लिए निजी होता है वह भी अमान्य हो जाता है।

एक बार अनलॉक होने के बाद, डिवाइस का मालिक विभाजन को फिर से फ्लैश करने के लिए स्वतंत्र होता है जो आमतौर पर सत्यापित बूट द्वारा संरक्षित होते हैं, जिसमें pKVM कार्यान्वयन वाले विभाजन शामिल होते हैं। इसलिए, अनलॉक किए गए डिवाइस पर pKVM पर सुरक्षा मॉडल को बनाए रखने के लिए भरोसा नहीं किया जाएगा।

दूरस्थ पक्ष इस संभावित असुरक्षित स्थिति का निरीक्षण कुंजी सत्यापन प्रमाणपत्र में डिवाइस की सत्यापित बूट स्थिति का निरीक्षण करके कर सकते हैं।