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

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

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

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

सुरक्षा

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

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

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

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

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

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

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

भंडारण क्रम अनुमति नियंत्रण Mediastore के माध्यम से जोरदार टाइप संग्रह के लिए पहुँच। जैसे PDF दुर्बलता से टाइप किया फ़ाइलें और तक पहुँचने के लिए MediaStore.Downloads वर्ग, ऐप्लिकेशन जैसे उद्देश्यों का उपयोग करना चाहिए ACTION_OPEN_DOCUMENT आशय।

एंड्रॉयड 10 व्यवहार को सक्षम करने के लिए, का उपयोग requestLegacyExternalStorage मेनिफ़ेस्ट विशेषता है, और पालन ऐप अनुमतियां सर्वोत्तम प्रथाओं

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