आवेदन सैंडबॉक्स

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

ऐप संसाधनों की पहचान करने और उन्हें अलग करने के लिए एंड्रॉइड प्लेटफॉर्म लिनक्स उपयोगकर्ता-आधारित सुरक्षा का लाभ उठाता है। यह ऐप्स को एक-दूसरे से अलग करता है और ऐप्स और सिस्टम को दुर्भावनापूर्ण ऐप्स से बचाता है। ऐसा करने के लिए, एंड्रॉइड प्रत्येक एंड्रॉइड एप्लिकेशन को एक अद्वितीय उपयोगकर्ता आईडी (यूआईडी) प्रदान करता है और इसे अपनी प्रक्रिया में चलाता है।

Android कर्नेल-स्तरीय एप्लिकेशन सैंडबॉक्स सेट करने के लिए UID का उपयोग करता है। कर्नेल मानक लिनक्स सुविधाओं जैसे उपयोगकर्ता और समूह आईडी के माध्यम से प्रक्रिया स्तर पर ऐप्स और सिस्टम के बीच सुरक्षा को लागू करता है जो ऐप्स को असाइन किए जाते हैं। डिफ़ॉल्ट रूप से, ऐप्स एक-दूसरे के साथ इंटरैक्ट नहीं कर सकते हैं और ओएस तक सीमित पहुंच रखते हैं। यदि ऐप ए कुछ दुर्भावनापूर्ण करने की कोशिश करता है, जैसे एप्लिकेशन बी के डेटा को पढ़ना या बिना अनुमति के फोन डायल करना, तो इसे ऐसा करने से रोका जाता है क्योंकि इसमें उपयुक्त डिफ़ॉल्ट उपयोगकर्ता विशेषाधिकार नहीं होते हैं। सैंडबॉक्स सरल, श्रव्य है, और दशकों पुरानी यूनिक्स-शैली के उपयोगकर्ता प्रक्रियाओं और फ़ाइल अनुमतियों के पृथक्करण पर आधारित है।

क्योंकि अनुप्रयोग सैंडबॉक्स कर्नेल में है, यह सुरक्षा मॉडल मूल कोड और OS अनुप्रयोगों दोनों तक विस्तृत है। कर्नेल के ऊपर के सभी सॉफ़्टवेयर, जैसे OS लाइब्रेरी, एप्लिकेशन फ्रेमवर्क, एप्लिकेशन रनटाइम और सभी एप्लिकेशन, एप्लिकेशन सैंडबॉक्स के भीतर चलते हैं। कुछ प्लेटफार्मों पर, डेवलपर्स एक विशिष्ट विकास ढांचे, एपीआई के सेट या भाषा के लिए विवश हैं। Android पर, सुरक्षा को लागू करने के लिए आवश्यक एप्लिकेशन को कैसे लिखा जा सकता है, इस पर कोई प्रतिबंध नहीं है; इस संबंध में, मूल कोड व्याख्या किए गए कोड के रूप में सैंडबॉक्स किया गया है।

सुरक्षा

आम तौर पर, एक उचित रूप से कॉन्फ़िगर किए गए डिवाइस में एप्लिकेशन सैंडबॉक्स से बाहर निकलने के लिए, किसी को लिनक्स कर्नेल की सुरक्षा से समझौता करना चाहिए। हालांकि, अन्य सुरक्षा सुविधाओं के समान, एप्लिकेशन सैंडबॉक्स को लागू करने वाली व्यक्तिगत सुरक्षा असुरक्षित नहीं हैं, इसलिए एकल कमजोरियों को ओएस या अन्य ऐप्स से समझौता करने से रोकने के लिए रक्षा-गहराई महत्वपूर्ण है।

एंड्रॉइड एप्लिकेशन सैंडबॉक्स को लागू करने के लिए कई सुरक्षा पर निर्भर करता है। इन प्रवर्तनों को समय के साथ पेश किया गया है और मूल यूआईडी-आधारित विवेकाधीन अभिगम नियंत्रण (डीएसी) सैंडबॉक्स को काफी मजबूत किया है। पिछले Android रिलीज़ में निम्नलिखित सुरक्षा शामिल थीं:

  • एंड्रॉइड 5.0 में, SELinux ने सिस्टम और ऐप्स के बीच अनिवार्य एक्सेस कंट्रोल (MAC) अलगाव प्रदान किया। हालाँकि, सभी तृतीय-पक्ष ऐप एक ही SELinux संदर्भ में चलते थे, इसलिए इंटर-ऐप अलगाव प्राथमिक रूप से UID DAC द्वारा लागू किया गया था।
  • एंड्रॉइड 6.0 में, SELinux सैंडबॉक्स को प्रति-भौतिक-उपयोगकर्ता सीमा में ऐप्स को अलग करने के लिए बढ़ाया गया था। इसके अलावा, एंड्रॉइड एप्लिकेशन डेटा के लिए सुरक्षित डिफॉल्ट भी सेट करता है: targetSdkVersion >= 24 वाले ऐप्स के लिए, ऐप के होम डीआईआर पर डिफ़ॉल्ट डीएसी अनुमतियां 751 से 700 में बदल गई हैं। यह निजी ऐप डेटा के लिए सुरक्षित डिफ़ॉल्ट प्रदान करता है (हालांकि ऐप्स इन डिफ़ॉल्ट को ओवरराइड कर सकते हैं) .
  • एंड्रॉइड 8.0 में, सभी ऐप्स को एक seccomp-bpf फ़िल्टर के साथ चलाने के लिए सेट किया गया था, जो उन syscalls को सीमित करता था जिन्हें ऐप्स को उपयोग करने की अनुमति थी, इस प्रकार ऐप/कर्नेल सीमा को मजबूत करता था।
  • Android 9 में targetSdkVersion >= 28 वाले सभी गैर-विशेषाधिकार प्राप्त ऐप्स को अलग-अलग SELinux सैंडबॉक्स में चलना चाहिए, जो प्रति-ऐप आधार पर MAC प्रदान करता है। यह सुरक्षा ऐप पृथक्करण में सुधार करती है, सुरक्षित डिफ़ॉल्ट को ओवरराइड करने से रोकती है, और (सबसे महत्वपूर्ण रूप से) ऐप्स को उनके डेटा की दुनिया को सुलभ बनाने से रोकती है।
  • एंड्रॉइड 10 ऐप्स में फाइल सिस्टम का एक सीमित कच्चा दृश्य होता है, जिसमें /sdcard/DCIM जैसे पथों तक कोई सीधी पहुंच नहीं होती है। हालांकि, ऐप्स अपने पैकेज-विशिष्ट पथों तक पूर्ण कच्ची पहुंच बनाए रखते हैं, जैसा कि Context.getExternalFilesDir() जैसे किसी भी लागू विधियों द्वारा लौटाया जाता है।

फ़ाइलें साझा करने के लिए दिशानिर्देश

ऐप डेटा को विश्व पहुंच योग्य के रूप में सेट करना एक खराब सुरक्षा अभ्यास है। पहुँच सभी को प्रदान की जाती है और केवल इच्छित प्राप्तकर्ता (प्राप्तकर्ताओं) तक पहुँच को सीमित करना संभव नहीं है। इस अभ्यास ने सूचना प्रकटीकरण लीक और भ्रमित उप कमजोरियों को जन्म दिया है, और मैलवेयर के लिए एक पसंदीदा लक्ष्य है जो संवेदनशील डेटा (जैसे ईमेल क्लाइंट) वाले ऐप्स को लक्षित करता है। Android 9 और उच्चतर में, इस तरह से फ़ाइलें साझा करना targetSdkVersion>=28 वाले ऐप्स के लिए स्पष्ट रूप से अस्वीकृत है।

एप्लिकेशन डेटा को विश्व-सुलभ बनाने के बजाय, फ़ाइलें साझा करते समय निम्नलिखित दिशानिर्देशों का उपयोग करें:

  • यदि आपके ऐप को किसी अन्य ऐप के साथ फ़ाइलें साझा करने की आवश्यकता है, तो सामग्री प्रदाता का उपयोग करें। सामग्री प्रदाता उचित ग्रैन्युलैरिटी के साथ और विश्व-सुलभ UNIX अनुमतियों के कई डाउनसाइड्स के बिना डेटा साझा करते हैं (विवरण के लिए, सामग्री प्रदाता मूल बातें देखें)।
  • यदि आपके ऐप में ऐसी फाइलें हैं जो वास्तव में दुनिया के लिए सुलभ होनी चाहिए (जैसे कि फोटो), तो वे मीडिया-विशिष्ट (केवल फोटो, वीडियो और ऑडियो फाइलें) होनी चाहिए और मीडियास्टोर क्लास का उपयोग करके संग्रहीत की जानी चाहिए। (मीडिया आइटम जोड़ने के तरीके के बारे में अधिक विवरण के लिए, साझा संग्रहण से मीडिया फ़ाइलों तक पहुंच देखें।)

स्टोरेज रनटाइम अनुमति MediaStore के माध्यम से दृढ़ता से टाइप किए गए संग्रह तक पहुंच को नियंत्रित करती है। PDF और MediaStore.Downloads क्लास जैसी कमजोर टाइप की गई फ़ाइलों तक पहुँचने के लिए, ऐप्स को ACTION_OPEN_DOCUMENT इंटेंट जैसे इंटेंट का उपयोग करना चाहिए।

Android 10 व्यवहार को सक्षम करने के लिए, requestLegacyExternalStorage मेनिफेस्ट विशेषता का उपयोग करें, और ऐप अनुमतियों के सर्वोत्तम अभ्यासों का पालन करें।

  • मेनिफेस्ट फ़्लैग डिफ़ॉल्ट मान Android 9 (और इससे कम) को लक्षित करने वाले ऐप्स के लिए true है।
  • Android 10 को लक्षित करने वाले ऐप्स के लिए डिफ़ॉल्ट मान गलत है। Android 10 को लक्षित करने वाले ऐप्स में फ़िल्टर किए गए संग्रहण दृश्य से अस्थायी रूप से ऑप्ट आउट करने के लिए, मेनिफ़ेस्ट फ़्लैग का मान true पर सेट करें।
  • प्रतिबंधित अनुमतियों का उपयोग करते हुए, इंस्टॉलर श्वेतसूची वाले ऐप्स को गैर-सैंडबॉक्स वाले संग्रहण के लिए अनुमति देता है। गैर-श्वेतसूचीबद्ध ऐप्स सैंडबॉक्स वाले होते हैं।